private CertainSportAbilityTestStandardResult GetCertainSportAbilityTestStandardResult(CertainSportAbilityTestOriginalResult originalResult, CertainSportAbilityTestEvaluationCriteriaSportBundle sportBundle) { CertainSportAbilityTestStandardResult standardResult = new CertainSportAbilityTestStandardResult(); int age = GetCertainSportAbilityTestAge(originalResult.Birthdate, originalResult.TestDate); Core.Domain.Models.Shared.Gender gender = ConvertToDomain(originalResult.Gender); var sport = sportBundle.Sport; List <CertainSportAbilityTestStandardSubScore> standardSubScoreList = new List <CertainSportAbilityTestStandardSubScore>(); foreach (var originalSubScore in originalResult.SubScores) { //确定子项目 var subSport = sportBundle.SubSports.Single(item => item.Sport == sport && item.Code == originalSubScore.SubType); //确定评分标准集,符合年龄、性别条件 var subSportParametersSet = sportBundle.SubSportParametersSets.Single(item => item.SubSport == subSport && item.AgeMin <= age && item.AgeMax >= age && (item.Gender == null || item.Gender == gender)); CertainSportAbilityTestStandardSubScore standardSubScore = GetCertainSportAbilityTestStandardSubScore(originalSubScore.Value, subSportParametersSet); standardSubScoreList.Add(standardSubScore); } standardResult.SubScores = standardSubScoreList.ToArray(); int overallScore = standardSubScoreList.Sum(item => item.Value); var sportParameter = sport.Parameters.Where(item => overallScore >= item.Score && (item.Gender == null || item.Gender == gender) && (item.AgeMin == null || item.AgeMin <= age) && (item.AgeMax == null || item.AgeMax <= age)).OrderByDescending(item => item.Score).FirstOrDefault(); standardResult.OverallScore = overallScore.ToString(); if (sportParameter != null) { standardResult.Level = sportParameter.Level; } standardResult.RefId = originalResult.RefId; return(standardResult); }
private CertainSportAbilityTestStandardSubScore GetCertainSportAbilityTestStandardSubScore(string originalSubScoreValueString, CertainSportAbilityTestEvaluationCriteriaSubSportParametersSet subSportParametersSet) { var dataType = subSportParametersSet.SubSport.DataType; var comparePattern = subSportParametersSet.SubSport.ComparePattern; CertainSportAbilityTestEvaluationCriteriaSubSportParameter matchedSubSportParameter = null; switch (dataType) { case CertainSportAbilityTestDataType.Characters: { string originalSubScoreValue = originalSubScoreValueString; if (comparePattern == CertainSportAbilityTestComparePattern.Equal) { matchedSubSportParameter = subSportParametersSet.Parameters.SingleOrDefault(item => item.OriginalValue == originalSubScoreValue); } else { throw new ArgumentException("Bad ComparePattern"); } }; break; case CertainSportAbilityTestDataType.TimeSpan: { TimeSpan originalSubScoreValue = ToCertainSportAbilityTestTimeSpan(originalSubScoreValueString); if (comparePattern == CertainSportAbilityTestComparePattern.GreaterThanOrEqual) { matchedSubSportParameter = subSportParametersSet.Parameters.Where(item => originalSubScoreValue >= ToCertainSportAbilityTestTimeSpan(item.OriginalValue)).OrderByDescending(item => ToCertainSportAbilityTestTimeSpan(item.OriginalValue)).FirstOrDefault(); } else if (comparePattern == CertainSportAbilityTestComparePattern.LessThanOrEqual) { matchedSubSportParameter = subSportParametersSet.Parameters.Where(item => originalSubScoreValue <= ToCertainSportAbilityTestTimeSpan(item.OriginalValue)).OrderBy(item => ToCertainSportAbilityTestTimeSpan(item.OriginalValue)).FirstOrDefault(); } else { throw new ArgumentException("Bad ComparePattern"); } }; break; case CertainSportAbilityTestDataType.Integer: { int originalSubScoreValue = ToCertainSportAbilityTestInteger(originalSubScoreValueString); if (comparePattern == CertainSportAbilityTestComparePattern.GreaterThanOrEqual) { matchedSubSportParameter = subSportParametersSet.Parameters.Where(item => originalSubScoreValue >= ToCertainSportAbilityTestInteger(item.OriginalValue)).OrderByDescending(item => ToCertainSportAbilityTestInteger(item.OriginalValue)).FirstOrDefault(); } else if (comparePattern == CertainSportAbilityTestComparePattern.LessThanOrEqual) { matchedSubSportParameter = subSportParametersSet.Parameters.Where(item => originalSubScoreValue <= ToCertainSportAbilityTestInteger(item.OriginalValue)).OrderBy(item => ToCertainSportAbilityTestInteger(item.OriginalValue)).FirstOrDefault(); } else { throw new ArgumentException("Bad ComparePattern"); } }; break; case CertainSportAbilityTestDataType.Numeric: { decimal originalSubScoreValue = ToCertainSportAbilityTestNumeric(originalSubScoreValueString); if (comparePattern == CertainSportAbilityTestComparePattern.GreaterThanOrEqual) { matchedSubSportParameter = subSportParametersSet.Parameters.Where(item => originalSubScoreValue >= ToCertainSportAbilityTestNumeric(item.OriginalValue)).OrderByDescending(item => ToCertainSportAbilityTestNumeric(item.OriginalValue)).FirstOrDefault(); } else if (comparePattern == CertainSportAbilityTestComparePattern.LessThanOrEqual) { matchedSubSportParameter = subSportParametersSet.Parameters.Where(item => originalSubScoreValue <= ToCertainSportAbilityTestNumeric(item.OriginalValue)).OrderBy(item => ToCertainSportAbilityTestNumeric(item.OriginalValue)).FirstOrDefault(); } else { throw new ArgumentException("Bad ComparePattern"); } }; break; } CertainSportAbilityTestStandardSubScore standardSubScore = new CertainSportAbilityTestStandardSubScore(); standardSubScore.SubType = subSportParametersSet.SubSport.Code; if (matchedSubSportParameter == null) { //不在评分范围,得零分。 standardSubScore.Value = 0; } else { standardSubScore.Value = matchedSubSportParameter.ScoreValue; standardSubScore.Level = matchedSubSportParameter.ScoreLevel; } return(standardSubScore); }