/// <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)); }
/// <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); }
/// <summary> /// 刷新采用的评分表2的项。调用此方法重新计算使用的评分表2的项。 /// </summary> private void RefreshInsomniaConversion12() { if (null == _InsomniaConversion12s) { _InsomniaConversion12s = new List <InsomniaConversion12>(); } else { _InsomniaConversion12s.Clear(); } HashSet <string> hs = new HashSet <string>(InsomniaConversion11s.Select(c => c.CnSymptomNumber).Distinct()); _InsomniaConversion12s.AddRange(InsomniaConversion12.DefaultCollection.Where(c => hs.IsSupersetOf(c.Numbers))); }