コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }