public List <HPODataModel> GetExamHPOResultBatch(string patientVisitId) { var result = new List <HPODataModel>(); if (!string.IsNullOrWhiteSpace(patientVisitId)) { //获取所有检验HPO规则 var examBase = _localMemoryCache.GetExamBaseDataList(); //获取所有检验数据 var examList = new List <ExamBaseDataModel>(); string sql = GetSqlText("home-get-exam-data-sql.txt"); sql = string.Format(sql, patientVisitId); using (var reader = dbgp.Ado.GetDataReader(sql)) { while (reader.Read()) { var data = new ExamBaseDataModel(); data.ExamCode = reader["exam_code"] == DBNull.Value ? "" : reader["exam_code"].ToString(); data.ExamName = reader["exam_name"] == DBNull.Value ? "" : reader["exam_name"].ToString(); data.SampleCode = reader["sample_code"] == DBNull.Value ? "" : reader["sample_code"].ToString(); data.SampleName = reader["sample_name"] == DBNull.Value ? "" : reader["sample_name"].ToString(); data.Range = reader["range"] == DBNull.Value ? "" : reader["range"].ToString(); data.ExamValue = reader["value"] == DBNull.Value ? 0 : Convert.ToDecimal(reader["value"]); data.ExamTimeStr = reader["examTimeStr"] == DBNull.Value ? "" : reader["examTimeStr"].ToString(); examList.Add(data); } } //遍历每条规则,查看检验数据里面是否有符合规则的数据 foreach (var r in examBase) { var subList = examList.Where(x => x.ExamCode == r.ExamCode && x.SampleCode.ToUpper() == r.SampleCode.ToUpper()).ToList(); if (subList.Count == 0) { continue; } var list = new List <ExamBaseDataModel>(); //区间命中 if (r.Maxinum > 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue > r.Minimum && x.ExamValue < r.Maxinum).ToList(); } //低于最小值命中 else if (r.Maxinum == 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue < r.Minimum).ToList(); } //大于最大值命中 else if (r.Maxinum > 0 && r.Minimum == 0) { list = subList.Where(x => x.ExamValue > r.Maxinum).ToList(); } if (list != null && list.Any()) { if (list.Count >= r.MatchTime) { if (!result.Any(x => x.HPOId == r.HPOId)) { var hpoItem = new HPODataModel(); hpoItem.HPOId = r.HPOId; result.Add(hpoItem); } } } } } else { } return(result); }
public List <HPODataModel> GetPatientExamDataResult(string patientVisitIds) { var result = new List <HPODataModel>(); if (_hostingEnvironment.IsProduction() && !string.IsNullOrWhiteSpace(patientVisitIds)) { //获取所有检验HPO规则 var examBase = _localMemoryCache.GetExamBaseDataList(); //获取所有检验数据 var examList = new List <ExamBaseDataModel>(); string sql = GetSqlText("home-get-exam-data-sql.txt"); sql = string.Format(sql, patientVisitIds); using (var reader = dbgp.Ado.GetDataReader(sql)) { while (reader.Read()) { var data = new ExamBaseDataModel(); data.ExamCode = reader["exam_code"] == DBNull.Value ? "" : reader["exam_code"].ToString(); data.ExamName = reader["exam_name"] == DBNull.Value ? "" : reader["exam_name"].ToString(); data.SampleCode = reader["sample_code"] == DBNull.Value ? "" : reader["sample_code"].ToString(); data.SampleName = reader["sample_name"] == DBNull.Value ? "" : reader["sample_name"].ToString(); data.Range = reader["range"] == DBNull.Value ? "" : reader["range"].ToString(); data.ExamValue = reader["value"] == DBNull.Value ? 0 : Convert.ToDecimal(reader["value"]); data.ExamTimeStr = reader["examTimeStr"] == DBNull.Value ? "" : reader["examTimeStr"].ToString(); examList.Add(data); } } //遍历每条规则,查看检验数据里面是否有符合规则的数据 foreach (var r in examBase) { var subList = examList.Where(x => x.ExamCode == r.ExamCode && x.SampleCode.ToUpper() == r.SampleCode.ToUpper()).ToList(); if (subList.Count == 0) { continue; } var list = new List <ExamBaseDataModel>(); //区间命中 if (r.Maxinum > 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue > r.Minimum && x.ExamValue < r.Maxinum).ToList(); } //低于最小值命中 else if (r.Maxinum == 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue < r.Minimum).ToList(); } //大于最大值命中 else if (r.Maxinum > 0 && r.Minimum == 0) { list = subList.Where(x => x.ExamValue > r.Maxinum).ToList(); } if (list != null && list.Any()) { if (list.Count >= r.MatchTime) { var data = result.FirstOrDefault(x => x.HPOId == r.HPOId); if (data != null) { data.ExamData.AddRange(list); } else { var hpoItem = new HPODataModel(); hpoItem.HPOId = r.HPOId; hpoItem.Name = r.HPOName; hpoItem.CHPOName = r.HPOName; hpoItem.NameEnglish = r.HPOEnglish; hpoItem.TermSource = "检验规则"; hpoItem.HasExam = true; hpoItem.ExamData = new List <ExamBaseDataModel>(); hpoItem.ExamData.AddRange(list); result.Add(hpoItem); } } } } } else { var hpoItem = new HPODataModel { Name = "高蛋白血症", NameEnglish = "Hyperproteinemia", HPOId = "HP:0002152", CHPOName = "高蛋白血症", TermSource = "检验规则" }; var item = new ExamBaseDataModel(); item.HPOId = "HP:0002152"; item.HPOName = "高蛋白血症"; item.HPOEnglish = "Hyperproteinemia"; item.ExamCode = "2925"; item.ExamName = "总蛋白"; item.SampleCode = "LIS126"; item.SampleName = "血清"; item.Range = "60.0-83.0 g/L"; item.ExamValue = 121; item.ExamTimeStr = "2019-12-12"; var item1 = new ExamBaseDataModel(); item1.HPOId = "HP:0002152"; item1.HPOName = "高蛋白血症"; item1.HPOEnglish = "Hyperproteinemia"; item1.ExamCode = "2925"; item1.ExamName = "总蛋白"; item1.SampleCode = "LIS126"; item1.SampleName = "血清"; item1.Range = "60.0-83.0 g/L"; item1.ExamValue = 99; item1.ExamTimeStr = "2020-01-12"; hpoItem.HasExam = true; hpoItem.ExamData = new List <ExamBaseDataModel>(); hpoItem.ExamData.Add(item); hpoItem.ExamData.Add(item1); result.Add(hpoItem); } return(result); }