コード例 #1
0
        public ResultPakage <CurrentInfoReturnDto> GetCurrentDayInfoList(string startDate, string endDate, string openId)
        {
            var db        = new Db();
            var returnDto = new CurrentInfoReturnDto();

            var MyRecord = new List <List <CurrentInfoListDto> >();
            var MyReport = new List <List <CurrentInfoListDto> >();

            //根据openid 查询病人信息
            var patient = db.Users.First(a => a.OpenId == openId).Patients.First();

            //查询当前病人的标准指标信息
            //如果当期病人没有绑定医院信息,则默认使用华西医院的标准指标
            //查询病人医院数据
            var patientHospitalCode = "";

            if (patient.Hospital != null)
            {
                patientHospitalCode = patient.Hospital.Code;
            }
            var indicators = GetIndicatorInfo(patientHospitalCode, patient.Id);
            //病人当天的所有的报告信息
            var reportList = new List <CurrentInfoListDto>();

            //Expression<Func<SysUser, bool>>

            //病人当天的所有自我记录信息
            var patientData = db.PatientsDatas
                              .Where(a => a.RecordDate.CompareTo(startDate) >= 0 && a.RecordDate.CompareTo(endDate) <= 0 &&
                                     a.ReportId == null && a.PatientId == patient.Id)
                              .Select(a => new { a.DataCode, a.DataValue, a.CreateTime, a.RecordTime, a.FormType, a.RecordDate })
                              .OrderByDescending(a => new { a.RecordDate, a.RecordTime, a.CreateTime }).ToList();
            var datas = patientData.OrderByDescending(a => DateTime.Parse(a.RecordDate + " " + a.RecordTime));

            var reportData = db.Reports
                             .Where(a => a.ReportDate.CompareTo(startDate) >= 0 && a.ReportDate.CompareTo(endDate) <= 0 &&
                                    a.PatientId == patient.Id).Select(a => new { a.Id, a.CreateTime, a.ReportType, a.ReportDate })
                             .OrderBy(a => a.Id).OrderByDescending(a => new { a.ReportDate, a.CreateTime }).ToList();

            var reportDetailDatas = db.Reports
                                    .Where(a => a.ReportDate.CompareTo(startDate) >= 0 && a.ReportDate.CompareTo(endDate) <= 0 &&
                                           a.PatientId == patient.Id)
                                    .SelectMany(a => a.PatientsDatas.Select(b => new { b.DataCode, b.DataValue, b.CreateTime, b.RecordTime }))
                                    .ToList();

            reportData.ForEach(a =>
            {
                var recordDto        = new CurrentInfoListDto();
                recordDto.ReportName = GetNameByReportType(a.ReportType ?? 1);
                recordDto.CreateTime = a.CreateTime?.ToString("yyyy-MM-dd HH:mm:ss");
                recordDto.RecordDate = a.ReportDate;
                reportList.Add(recordDto);
            });

            reportDetailDatas.ForEach(item =>
            {
                var oneReturnDto        = new CurrentInfoListDto();
                oneReturnDto.DataValue  = item.DataValue;
                oneReturnDto.CreateTime = item.CreateTime?.ToString("yyyy-MM-dd HH:mm:ss");
                oneReturnDto.DataCode   = item.DataCode;
                oneReturnDto.RecordTime = item.RecordTime;
                oneReturnDto.DataName   = GetNameByCode(item.DataCode ?? 9);
                reportList.Add(oneReturnDto);
            });

            reportList.GroupBy(a => a.CreateTime).ForEach(a =>
            {
                var MyRecordList = new List <CurrentInfoListDto>();
                a.ForEach(item =>
                {
                    MyRecordList.Add(item);
                });
                MyReport.Add(MyRecordList);
            });

            var mapper = Util.GetDynamicMap();


            //合并数据
            //Step1 病人当天数据按创建时间进行分组
            datas.GroupBy(a => a.CreateTime).ForEach(a =>
            {
                var MyRecordList = new List <CurrentInfoListDto>();
                a.ForEach(item =>
                {
                    var oneReturnDto = new CurrentInfoListDto(); var diastolicPressureValue = "";

                    //如果类型为舒张压,则直接跳过
                    if (item.DataCode != (int)PatientsDataType.DiastolicPressure)
                    {
                        oneReturnDto.CreateTime   = item.CreateTime?.ToString("yyyy-MM-dd HH:mm:ss");
                        oneReturnDto.DataCode     = item.DataCode;
                        oneReturnDto.DataValue    = item.DataValue;
                        oneReturnDto.RecordTime   = item.RecordTime;
                        oneReturnDto.RecordDate   = item.RecordDate;
                        oneReturnDto.TimeForOrder = DateTime.Parse(item.RecordDate + " " + item.RecordTime);
                        //如果有表单类型0,则说明为自定义表单字段,需要恢复设置的表单值
                        if (item.FormType != 0)
                        {
                            oneReturnDto.DataName = GetNameByFormType(item.FormType ?? 0);
                        }
                        else
                        {
                            oneReturnDto.DataName = GetNameByCode(item.DataCode ?? 9);
                        }
                        //判定指标是否正确
                        IndicatorJudge(indicators, oneReturnDto);
                    }

                    //如果类型为收缩压,则找出对应的舒张压,并把舒张压放入收缩压返回值,并设置名称为血压
                    if (item.DataCode == (int)PatientsDataType.SystolicPressure)
                    {
                        //查找对应的舒张压
                        var diastolicPressure = a.FirstOrDefault(x => x.DataCode == (int)PatientsDataType.DiastolicPressure);
                        if (diastolicPressure != null)
                        {
                            oneReturnDto.DataValue = item.DataValue + "/" + diastolicPressure.DataValue;
                        }
                        //对舒张压值进行判定比较
                        var diastolicPressureDto       = new CurrentInfoListDto();
                        diastolicPressureDto.DataCode  = diastolicPressure.DataCode;
                        diastolicPressureDto.DataValue = diastolicPressure.DataValue;
                        IndicatorJudge(indicators, diastolicPressureDto);

                        oneReturnDto.DataName = "血压";
                        oneReturnDto.IsNomoal = diastolicPressureDto.IsNomoal && oneReturnDto.IsNomoal;
                    }

                    if (item.DataCode != (int)PatientsDataType.DiastolicPressure)
                    {
                        MyRecordList.Add(oneReturnDto);
                    }
                });
                MyRecord.Add(MyRecordList);
            });
            //Step2 病人当天数据按创建时间进行分组


            //设置指标异常正常数据
            returnDto.MyRecord = MyRecord;
            //returnDto.MyRecord.ForEach(a => a.ForEach(b =>
            //  {
            //      IndicatorJudge(indicators, b);
            //  }));



            returnDto.MyReport = MyReport;
            returnDto.MyReport.ForEach(a => a.ForEach(b =>
            {
                IndicatorJudge(indicators, b);
            }));


            return(Util.ReturnOkResult(returnDto));
        }
コード例 #2
0
        public void IndicatorJudge(List <IndicatorsRange> indicators, CurrentInfoListDto b)
        {
            var indicator = indicators.FirstOrDefault(x => x.DataCode == b.DataCode);

            if (indicator != null)
            {
                if (indicator.Unit != null)
                {
                    b.Unit = indicator.Unit;
                }
                else
                {
                    b.Unit = "";
                }

                //数据为空直接返回异常
                if (b.DataValue == null)
                {
                    b.IsNomoal = false;
                    return;
                }

                //判断值是否相等
                if (!string.IsNullOrEmpty(indicator.Equal) && b.DataValue == indicator.Equal)
                {
                    b.IsNomoal = true;
                    return;
                }
                if (!string.IsNullOrEmpty(indicator.Equal) && b.DataValue != indicator.Equal)
                {
                    b.IsNomoal = false;
                    return;
                }

                //进行数值比较
                double inputvalue;
                if (double.TryParse(b.DataValue, out inputvalue))
                {
                    //如果指标小于最大值
                    if (string.IsNullOrEmpty(indicator.Max) || double.Parse(b.DataValue) < double.Parse(indicator.Max))
                    {
                        b.IsNomoal = true;
                    }
                    else
                    {
                        b.IsNomoal = false;
                        return;
                    }

                    //如果指标小于最大值
                    if (string.IsNullOrEmpty(indicator.Min) || double.Parse(b.DataValue) > double.Parse(indicator.Min))
                    {
                        b.IsNomoal = true;
                    }
                    else
                    {
                        b.IsNomoal = false;
                        return;
                    }
                }
            }
            else
            {
                b.IsNomoal = true;
                b.Unit     = "标准";
            }
        }