Exemplo n.º 1
0
        /// <summary>
        /// 获取诊断的详细信息。
        /// </summary>
        /// <returns></returns>
        public string GetDescription()
        {
            StringBuilder sb = new StringBuilder();
            string        result;

            sb.AppendLine($"诊断: ({string.Join(";", InsomniaConversion11s.Select(c => c.ToString()))}) ");
            sb.AppendLine($"脏腑评分:{string.Join(";", MaxVicerals.Select(c => c.ToString()))};症候评分:{string.Join(";", MaxPhenomenons.Select(c => c.ToString()))}");
            sb.AppendLine($"评分表2:{string.Join(";", InsomniaConversion12s.Select(c => c.ToString()))}");
            sb.AppendLine($"药物加味:{string.Join(";", InsomniaCnDrugConversion2s.Select(c => c.ToString()))}");
            sb.AppendLine($"无效项:{string.Join(";", Invalid11s.Select(c => c.ToString()))}");
            result = sb.ToString();
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 刷新药物输出表的项。
        /// </summary>
        private void RefreshInsomniaCnDrugConversions()
        {
            if (null == _InsomniaCnDrugConversions)
            {
                _InsomniaCnDrugConversions = new List <InsomniaCnDrugConversion>();
            }
            else
            {
                _InsomniaCnDrugConversions.Clear();
            }
            HashSet <string> hsViscerals   = new HashSet <string>(InsomniaConversion11s.SelectMany(c => c.CnVisceralProperties).Select(c => c.Item1)); //如果 collection 包含重复的元素,该集将包含一个唯一的每个元素。
            HashSet <string> hsPhenomenons = new HashSet <string>(InsomniaConversion11s.SelectMany(c => c.CnPhenomenonProperties).Select(c => c.Item1));
            //脏腑评分
            var VisceralScroes = InsomniaConversion11s.SelectMany(c => c.CnVisceralProperties).Concat(InsomniaConversion12s.SelectMany(c => c.CnScoreProperties)).Where(c => hsViscerals.Contains(c.Item1));
            var visceralAry    = VisceralScroes.GroupBy(c => c.Item1).Select(c => Tuple.Create(c.Key, c.Sum(c1 => c1.Item2))).OrderByDescending(c => c.Item2).ToArray();
            var maxVisceral    = visceralAry.FirstOrDefault()?.Item2 ?? 0;

            MaxVicerals = visceralAry.Where(c => c.Item2 >= maxVisceral).ToList();
            //症候评分
            var PhenomenonScores = InsomniaConversion11s.SelectMany(c => c.CnPhenomenonProperties).Concat(InsomniaConversion12s.SelectMany(c => c.CnScoreProperties)).Where(c => hsPhenomenons.Contains(c.Item1));
            var phenomennoAry    = PhenomenonScores.GroupBy(c => c.Item1).Select(c => Tuple.Create(c.Key, c.Sum(c1 => c1.Item2))).OrderByDescending(c => c.Item2).ToArray();
            var maxPhenomenon    = phenomennoAry.FirstOrDefault()?.Item2 ?? 0;

            MaxPhenomenons = phenomennoAry.Where(c => c.Item2 >= maxPhenomenon).ToList();
            //数字逻辑上可能出现例如:心,肝并列第一;且火亢,阴虚并列第一。此时药物输出算作4个么?心-火亢,心-阴虚,肝-火亢,肝-阴虚,结算笛卡尔积
            var coll = from tmp in MaxVicerals
                       from tmp1 in MaxPhenomenons
                       select Tuple.Create(tmp.Item1, tmp1.Item1);  //无论如何先获取笛卡尔积

            _InsomniaCnDrugConversions.AddRange(InsomniaCnDrugConversion.DefaultCollection.Join(coll, c => Tuple.Create(c.CnMedicineVisceral, c.CnMedicinePhenomenon), c => c, (drug, c) => drug));
        }