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