コード例 #1
0
        public Create3(Guid JZID, Guid?preGeneralRoomInfoId, Guid roomId)
        {
            this.PreGeneralRoomInfoId = preGeneralRoomInfoId;
            this.RoomId = roomId;
            this.JZID   = JZID;

            var dbTrasen             = new TrasenDbContext("TrasenConnection");
            var MZYS_JZJL            = dbTrasen.MZYS_JZJL.Where(c => c.JZID == JZID).FirstOrDefault();
            var BRXX                 = dbTrasen.VI_YY_BRXX.Where(c => c.BRXXID == MZYS_JZJL.BRXXID).FirstOrDefault();
            var GHXX                 = dbTrasen.VI_MZ_GHXX.Where(c => c.GHXXID == MZYS_JZJL.GHXXID).FirstOrDefault();
            var YY_KDJB              = dbTrasen.YY_KDJB.Where(c => c.BRXXID == MZYS_JZJL.BRXXID).FirstOrDefault();
            var JC_SEXCODE           = dbTrasen.JC_SEXCODE.Where(c => c.CODE == BRXX.XB).FirstOrDefault();
            var JC_EMPLOYEE_PROPERTY = dbTrasen.JC_EMPLOYEE_PROPERTY.Where(c => c.EMPLOYEE_ID == MZYS_JZJL.JSYSDM).FirstOrDefault();

            if (MZYS_JZJL == null || BRXX == null || GHXX == null || YY_KDJB == null)
            {
                throw new ArgumentException("JZID无效");
            }

            this.PatientName      = BRXX?.BRXM;
            this.OutPatientNumber = YY_KDJB?.KH;
            this.Sex                 = JC_SEXCODE?.NAME;
            this.BirthDate           = BRXX?.CSRQ;
            this.DiagnosisNameOrigin = MZYS_JZJL?.ZDMC;
            this.ReceiveTime         = MZYS_JZJL?.JSSJ;
            this.FirstDoctorName     = JC_EMPLOYEE_PROPERTY?.NAME;

            this.KDJID  = YY_KDJB.KDJID;
            this.BRXXID = BRXX.BRXXID;
            this.GHXXID = GHXX.GHXXID;
        }
コード例 #2
0
        public Create2(string outPatientNumber, Guid roomId, Guid?preGeneralRoomInfoId)
        {
            this.RoomId = roomId;
            this.PreGeneralRoomInfoId = preGeneralRoomInfoId;

            var db3  = new Domains3.Entities.EiSDbContext();
            var room = db3.Rooms.Find(this.RoomId);

            this.RoomName = room.RoomName;

            Domains3.Entities.GeneralRoomInfo target = null;
            if (this.PreGeneralRoomInfoId != null)
            {
                target = db3.GeneralRoomInfos.Find(this.PreGeneralRoomInfoId);
            }

            var dbTrasen = new TrasenDbContext("TrasenConnection");

            var itemKDJB = dbTrasen.YY_KDJB.Where(c => c.KH == outPatientNumber).First();
            List <VI_MZ_GHXX> listGHXX;

            if (target == null)
            {
                listGHXX = dbTrasen.VI_MZ_GHXX.Where(c => c.BRXXID == itemKDJB.BRXXID).OrderByDescending(c => c.GHSJ).ThenBy(c => c.GHXXID).ToList();
            }
            else
            {
                listGHXX = dbTrasen.VI_MZ_GHXX.Where(c => c.BRXXID == itemKDJB.BRXXID && c.GHSJ >= target.ReceiveTime.Value).OrderByDescending(c => c.GHSJ).ThenBy(c => c.GHXXID).ToList();
            }

            this.ListGhxx = listGHXX.Select(c => new ItemGhxx(c, this.RoomId, this.PreGeneralRoomInfoId)).ToList();
        }
コード例 #3
0
        /// <summary>
        /// 初始化。
        /// </summary>
        /// <param name="outPatientNumber">卡号。</param>
        public Create2(string outPatientNumber)
        {
            var dbTrasen = new TrasenDbContext("TrasenConnection");

            var itemKDJB = dbTrasen.YY_KDJB.Where(c => c.KH == outPatientNumber).First();
            var listGHXX = dbTrasen.VI_MZ_GHXX.Where(c => c.BRXXID == itemKDJB.BRXXID).OrderByDescending(c => c.GHSJ).ThenBy(c => c.GHXXID).ToList();

            this.ListGhxx = listGHXX.Select(c => new ItemGhxx(c)).ToList();
        }
コード例 #4
0
        /// <summary>
        /// 初始化。
        /// </summary>
        /// <param name="GHXX">挂号信息。</param>
        public ItemGhxx(VI_MZ_GHXX GHXX)
        {
            var dbTrasen = new TrasenDbContext("TrasenConnection");

            this.RegisterTime = GHXX.GHSJ;

            var listJZJL = dbTrasen.MZYS_JZJL.Where(c => c.GHXXID == GHXX.GHXXID).OrderByDescending(c => c.JSSJ).ThenBy(c => c.JZID).ToList();

            this.ListJzjl = listJZJL.Select(c => new ItemJzjl(c)).ToList();
        }
コード例 #5
0
        /// <summary>
        /// 初始化。
        /// </summary>
        /// <param name="JZJL">门诊医师接诊记录。</param>
        public ItemJzjl(MZYS_JZJL JZJL)
        {
            var dbTrasen = new TrasenDbContext("TrasenConnection");

            this.ORIGIN_JZID = JZJL.JZID;

            this.FirstDoctorName     = dbTrasen.JC_EMPLOYEE_PROPERTY.Where(c => c.EMPLOYEE_ID == JZJL.JSYSDM).FirstOrDefault()?.NAME;
            this.DiagnosisNameOrigin = JZJL.ZDMC;
            this.ReceiveTime         = JZJL.JSSJ;
        }
コード例 #6
0
        public ItemGhxx(VI_MZ_GHXX GHXX, Guid roomId, Guid?preGeneralRoomInfoId)
        {
            this.RoomId = roomId;
            this.PreGeneralRoomInfoId = preGeneralRoomInfoId;

            var dbTrasen = new TrasenDbContext("TrasenConnection");

            this.RegisterTime = GHXX.GHSJ;

            var listJZJL = dbTrasen.MZYS_JZJL.Where(c => c.GHXXID == GHXX.GHXXID).OrderByDescending(c => c.JSSJ).ThenBy(c => c.JZID).ToList();

            this.ListJzjl = listJZJL.Select(c => new ItemJzjl(c, this.RoomId, this.PreGeneralRoomInfoId)).ToList();
        }
コード例 #7
0
        public ItemJzjl(MZYS_JZJL JZJL, Guid roomId, Guid?preGeneralRoomInfoId)
        {
            this.RoomId = roomId;
            this.PreGeneralRoomInfoId = preGeneralRoomInfoId;

            var dbTrasen = new TrasenDbContext("TrasenConnection");

            this.ORIGIN_JZID = JZJL.JZID;

            this.FirstDoctorName     = dbTrasen.JC_EMPLOYEE_PROPERTY.Where(c => c.EMPLOYEE_ID == JZJL.JSYSDM).FirstOrDefault()?.NAME;
            this.DiagnosisNameOrigin = JZJL.ZDMC;
            this.ReceiveTime         = JZJL.JSSJ;

            var db3 = new Domains3.Entities.EiSDbContext();

            this.ExistRoomName = db3.GeneralRoomInfos.FirstOrDefault(c => c.JZID == JZJL.JZID)?.Room.RoomName;
        }
コード例 #8
0
        public void GetDoctor(bool isUpdateExists = true)
        {
            var db       = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);
            var dbTrasen = new TrasenDbContext(this.trasenConnection);

            //测试使用。
            {
                //db.Database.Log = Console.WriteLine;
                //dbTrasen.Database.Log = Console.WriteLine;
            }

            var listDoctors = db.Doctors.ToList();
            var listTrasen_JC_EMPLOYEE_PROPERTY = dbTrasen.JC_EMPLOYEE_PROPERTY.ToList();

            foreach (var itemTrasen_JC_EMPLOYEE_PROPERTY in listTrasen_JC_EMPLOYEE_PROPERTY)
            {
                var doctor = listDoctors.Where(c => c.ORIGIN_EMPLOYEE_ID == itemTrasen_JC_EMPLOYEE_PROPERTY.EMPLOYEE_ID).FirstOrDefault();

                if (doctor == null)
                {
                    doctor = new PhMS2dot1Domain.Models.Doctor();

                    doctor.DoctorName         = itemTrasen_JC_EMPLOYEE_PROPERTY.NAME;
                    doctor.DoctorCode         = itemTrasen_JC_EMPLOYEE_PROPERTY.D_CODE;
                    doctor.ORIGIN_EMPLOYEE_ID = itemTrasen_JC_EMPLOYEE_PROPERTY.EMPLOYEE_ID;

                    db.Doctors.Add(doctor);
                }
                else
                {
                    if (isUpdateExists)
                    {
                        doctor.DoctorName         = itemTrasen_JC_EMPLOYEE_PROPERTY.NAME;
                        doctor.DoctorCode         = itemTrasen_JC_EMPLOYEE_PROPERTY.D_CODE;
                        doctor.ORIGIN_EMPLOYEE_ID = itemTrasen_JC_EMPLOYEE_PROPERTY.EMPLOYEE_ID;
                    }
                }
                db.SaveChanges();
            }
        }
コード例 #9
0
        public void GetDepartment(bool isUpdateExists = true)
        {
            var db       = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);
            var dbTrasen = new TrasenDbContext(this.trasenConnection);

            //测试使用。
            {
                //db.Database.Log = Console.WriteLine;
                //dbTrasen.Database.Log = Console.WriteLine;
            }

            var listDepartments             = db.Departments.ToList();
            var listTrasen_JC_DEPT_PROPERTY = dbTrasen.JC_DEPT_PROPERTY.ToList();

            foreach (var itemTrasen_JC_DEPT_PROPERTY in listTrasen_JC_DEPT_PROPERTY)
            {
                var department = listDepartments.Where(c => c.Origin_DEPT_ID == itemTrasen_JC_DEPT_PROPERTY.DEPT_ID).FirstOrDefault();

                if (department == null)
                {
                    department = new PhMS2dot1Domain.Models.Department();

                    department.DepartmentName = itemTrasen_JC_DEPT_PROPERTY.NAME;
                    department.Origin_DEPT_ID = itemTrasen_JC_DEPT_PROPERTY.DEPT_ID;

                    db.Departments.Add(department);
                }
                else
                {
                    if (isUpdateExists)
                    {
                        department.DepartmentName = itemTrasen_JC_DEPT_PROPERTY.NAME;
                        department.Origin_DEPT_ID = itemTrasen_JC_DEPT_PROPERTY.DEPT_ID;
                    }
                }
                db.SaveChanges();
            }
        }
コード例 #10
0
        /// <summary>
        /// 获取门诊用药记录。
        /// </summary>
        /// <param name="start">时段起点(闭区间)。</param>
        /// <param name="end">时段终点(开区间)。</param>
        /// <param name="isUpdateExists">是否更新已有记录。</param>
        /// <remarks>存在部分“创新”中的处方明细表记录无法对应处方的记录,目前以忽略处理。</remarks>
        public void GetOutPatientDrugRecords(DateTime start, DateTime end, bool isUpdateExists = false)
        {
            //==初始化==

            #region "初始化"

            var importDataLog = new PhMS2dot1Domain.Models.ImportDataLog();

            this.LogInitial(importDataLog, "Trasen", "VI_MZ_CFB_MX, YP_YPCJD, YP_YPGGD", "OutPatientDrugRecords", start, end);

            this.LogAppendRemarks(importDataLog, string.Format("MethodName=GetOutPatientDrugRecords. IsUpdateExists={0}. ", isUpdateExists));

            #endregion

            //==对创新取数==

            #region "对创新取数"

            var dbTrasen = new TrasenDbContext(this.trasenConnection);

            var queryTrasenVI_MZ_CFB_MX = dbTrasen.VI_MZ_CFB_MX.Where(c => start <= c.QRSJ && c.QRSJ < end && (c.TJDXMDM == "01" || c.TJDXMDM == "02" || c.TJDXMDM == "03"));
            //(取创新中的原数据的可选筛选条件,暂无)

            this.LogSetReadStartTime(importDataLog);

            var listTrasenVI_MZ_CFB_MX = queryTrasenVI_MZ_CFB_MX.ToList();

            var listYP_YPCJD = dbTrasen.YP_YPCJD.ToList();
            var listYP_YPGGD = dbTrasen.YP_YPGGD.Where(c => !c.BDELETE).ToList();

            this.LogSetReadEndTime(importDataLog);
            this.LogSetSourceRecordCount(importDataLog, listTrasenVI_MZ_CFB_MX.Count());

            #endregion

            //==处理OutPatientDrugRecords==。

            #region "处理OutPatientDrugRecords"

            this.LogSetSuccessImportRecordCount(importDataLog, (int)importDataLog.SourceRecordCount);
            this.LogSetWriteStartTime(importDataLog);

            Parallel.ForEach(listTrasenVI_MZ_CFB_MX, new ParallelOptions {
                MaxDegreeOfParallelism = this.MaxDegreeOfParallelism
            }, (itemTrasenVI_MZ_CFB_MX, state, index) =>
            {
                var dbParallel = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);

                var outPatientDrugRecord = dbParallel.OutPatientDrugRecords.Where(c => c.Origin_CFMXID == itemTrasenVI_MZ_CFB_MX.CFMXID).FirstOrDefault();
                if (outPatientDrugRecord == null)
                {
                    //检测父节点
                    if (!dbParallel.OutPatientPrescriptions.Where(c => c.OutPatientPrescriptionID == itemTrasenVI_MZ_CFB_MX.CFID).Any())
                    {
                        this.LogAppendErrorMessage(importDataLog, "Failded Insert OutPatientDrugRecord: index:" + index + ", OutPatientDrugRecordID:" + itemTrasenVI_MZ_CFB_MX.CFMXID + ". ");
                    }
                    else
                    {
                        var itemYP_YPCJD = listYP_YPCJD.Where(c => c.CJID == itemTrasenVI_MZ_CFB_MX.XMID).First();
                        var itemYP_YPGGD = listYP_YPGGD.Where(c => c.GGID == itemYP_YPCJD.GGID).First();

                        outPatientDrugRecord = new PhMS2dot1Domain.Models.OutPatientDrugRecord();

                        outPatientDrugRecord.OutPatientDrugRecordID   = itemTrasenVI_MZ_CFB_MX.CFMXID;
                        outPatientDrugRecord.OutPatientPrescriptionID = itemTrasenVI_MZ_CFB_MX.CFID;
                        outPatientDrugRecord.ProductName                  = itemTrasenVI_MZ_CFB_MX.PM;
                        outPatientDrugRecord.IsEssential                  = itemYP_YPGGD.GJJBYW.Value;
                        outPatientDrugRecord.Origin_CFMXID                = itemTrasenVI_MZ_CFB_MX.CFMXID;
                        outPatientDrugRecord.Origin_KSSDJID               = itemYP_YPGGD.KSSDJID;
                        outPatientDrugRecord.Origin_CJID                  = (int)itemTrasenVI_MZ_CFB_MX.XMID;
                        outPatientDrugRecord.IsWesternMedicine            = (itemTrasenVI_MZ_CFB_MX.TJDXMDM == "01");
                        outPatientDrugRecord.IsChinesePatentMedicine      = (itemTrasenVI_MZ_CFB_MX.TJDXMDM == "02");
                        outPatientDrugRecord.IsTraditionalChineseMedicine = (itemTrasenVI_MZ_CFB_MX.TJDXMDM == "03");
                        outPatientDrugRecord.DosageForm  = itemTrasenVI_MZ_CFB_MX.GG;
                        outPatientDrugRecord.Ddd         = itemYP_YPGGD.DDD.Value;
                        outPatientDrugRecord.Origin_YFMC = itemTrasenVI_MZ_CFB_MX.YFMC;
                        outPatientDrugRecord.UnitPrice   = itemTrasenVI_MZ_CFB_MX.DJ;
                        outPatientDrugRecord.UnitName    = itemTrasenVI_MZ_CFB_MX.DW;
                        outPatientDrugRecord.Quantity    = itemTrasenVI_MZ_CFB_MX.SL;
                        outPatientDrugRecord.ActualPrice = itemTrasenVI_MZ_CFB_MX.JE;
                        outPatientDrugRecord.EffectiveConstituentAmount = itemYP_YPGGD.DDDJL.HasValue ? itemYP_YPGGD.DDDJL.Value : itemYP_YPGGD.HLXS;

                        dbParallel.OutPatientDrugRecords.Add(outPatientDrugRecord);
                        dbParallel.SaveChanges();
                    }
                }
                else
                {
                    if (isUpdateExists)
                    {
                        var itemYP_YPCJD = listYP_YPCJD.Where(c => c.CJID == itemTrasenVI_MZ_CFB_MX.XMID).First();
                        var itemYP_YPGGD = listYP_YPGGD.Where(c => c.GGID == itemYP_YPCJD.GGID).First();

                        outPatientDrugRecord.OutPatientPrescriptionID = itemTrasenVI_MZ_CFB_MX.CFID;
                        outPatientDrugRecord.ProductName                  = itemTrasenVI_MZ_CFB_MX.PM;
                        outPatientDrugRecord.IsEssential                  = itemYP_YPGGD.GJJBYW.Value;
                        outPatientDrugRecord.Origin_KSSDJID               = itemYP_YPGGD.KSSDJID;
                        outPatientDrugRecord.Origin_CJID                  = (int)itemTrasenVI_MZ_CFB_MX.XMID;
                        outPatientDrugRecord.IsWesternMedicine            = (itemTrasenVI_MZ_CFB_MX.TJDXMDM == "01");
                        outPatientDrugRecord.IsChinesePatentMedicine      = (itemTrasenVI_MZ_CFB_MX.TJDXMDM == "02");
                        outPatientDrugRecord.IsTraditionalChineseMedicine = (itemTrasenVI_MZ_CFB_MX.TJDXMDM == "03");
                        outPatientDrugRecord.DosageForm  = itemTrasenVI_MZ_CFB_MX.GG;
                        outPatientDrugRecord.Ddd         = itemYP_YPGGD.DDD.Value;
                        outPatientDrugRecord.Origin_YFMC = itemTrasenVI_MZ_CFB_MX.YFMC;
                        outPatientDrugRecord.UnitPrice   = itemTrasenVI_MZ_CFB_MX.DJ;
                        outPatientDrugRecord.UnitName    = itemTrasenVI_MZ_CFB_MX.DW;
                        outPatientDrugRecord.Quantity    = itemTrasenVI_MZ_CFB_MX.SL;
                        outPatientDrugRecord.ActualPrice = itemTrasenVI_MZ_CFB_MX.JE;
                        outPatientDrugRecord.EffectiveConstituentAmount = itemYP_YPGGD.DDDJL.HasValue ? itemYP_YPGGD.DDDJL.Value : itemYP_YPGGD.HLXS;

                        dbParallel.SaveChanges();
                    }
                }
            });

            this.LogSetWriteEndTime(importDataLog);

            #endregion

            //==完成==

            #region "完成"

            this.LogSave(importDataLog);

            Console.WriteLine("Finish Get OutPatientDrugRecords:{0} To {1}.", start, end);

            #endregion
        }
コード例 #11
0
        /// <summary>
        /// 获取住院病例,并同时获取病人。
        /// </summary>
        /// <param name="start">时段起点(闭区间)。</param>
        /// <param name="end">时段终点(开区间)。</param>
        /// <param name="isRemoveCancel">指定是否将“CANCEL_BIT”为1的记录从本地删除。</param>
        /// <param name="isContainNullOutDate">是否包含未出院记录。</param>
        /// <param name="isUpdateExist">是否更新已存在记录。</param>
        /// <remarks>病人为住院、门诊共用。</remarks>
        /// <example>
        /// 获取2016年9月数据
        /// <code>
        /// GetPatienstAndInPatients(new DateTime(2016, 9, 1), new DateTime(2016, 10, 1));
        /// </code>
        /// </example>
        public void GetPatienstAndInPatients(DateTime start, DateTime end, bool isRemoveCancel = true, bool isContainNullOutDate = false, bool isUpdateExist = false)
        {
            //==初始化==

            #region 初始化

            var importDataLogPatient   = new PhMS2dot1Domain.Models.ImportDataLog();
            var importDataLogInPatient = new PhMS2dot1Domain.Models.ImportDataLog();

            this.LogInitial(importDataLogPatient, "Trasen", "VI_ZY_VINPATIENT", "Patients", start, end);
            this.LogInitial(importDataLogInPatient, "Trasen", "VI_ZY_VINPATIENT", "InPatients", start, end);

            this.LogAppendRemarks(importDataLogPatient, string.Format("MethodName=GetPatienstAndInPatients. isRemoveCancel={0}, isContainNullOutDate={1}, IsUpdateExists={2}. ", isRemoveCancel, isContainNullOutDate, isUpdateExist));
            this.LogAppendRemarks(importDataLogInPatient, string.Format("MethodName=GetPatienstAndInPatients. isRemoveCancel={0}, isContainNullOutDate={1}, IsUpdateExists={2}. ", isRemoveCancel, isContainNullOutDate, isUpdateExist));

            #endregion

            //==对创新取数==

            #region 对创新取数

            var dbTrasen = new TrasenDbContext(this.trasenConnection);

            var queryTrasenVI_ZY_VINPATIENT = dbTrasen.VI_ZY_VINPATIENT.Where(c => (start <= c.OUT_DATE && c.OUT_DATE < end) || (start <= c.CANCEL_DATE && c.CANCEL_DATE < end));

            //(取创新中的原数据的可选筛选条件)
            if (isContainNullOutDate)
            {
                queryTrasenVI_ZY_VINPATIENT = queryTrasenVI_ZY_VINPATIENT.Union(dbTrasen.VI_ZY_VINPATIENT.Where(c => !c.OUT_DATE.HasValue));
            }

            this.LogSetReadStartTime(importDataLogPatient);
            this.LogSetReadStartTime(importDataLogInPatient);

            var listTrasen_VI_ZY_VINPATIENT          = queryTrasenVI_ZY_VINPATIENT.ToList();
            var listTrasen_VI_ZY_VINPATIENT_Distinct = listTrasen_VI_ZY_VINPATIENT.Distinct(new Infrastructure.VI_ZY_VINPATIENT_Comparer()).ToList();

            this.LogSetReadEndTime(importDataLogPatient);
            this.LogSetReadEndTime(importDataLogInPatient);

            this.LogSetSourceRecordCount(importDataLogPatient, listTrasen_VI_ZY_VINPATIENT_Distinct.Count());
            this.LogSetSourceRecordCount(importDataLogInPatient, listTrasen_VI_ZY_VINPATIENT.Count());

            #endregion

            //==处理Patients==

            #region 处理Patients

            this.LogSetSuccessImportRecordCount(importDataLogPatient, (int)importDataLogPatient.SourceRecordCount);
            this.LogSetWriteStartTime(importDataLogPatient);

            Parallel.ForEach(listTrasen_VI_ZY_VINPATIENT_Distinct, new ParallelOptions {
                MaxDegreeOfParallelism = this.MaxDegreeOfParallelism
            }, (itemTrasen_VI_ZY_VINPATIENT, state, index) =>
            {
                var dbParallel = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);

                var patient = dbParallel.Patients.Where(old => old.Origin_PATIENT_ID == itemTrasen_VI_ZY_VINPATIENT.PATIENT_ID).FirstOrDefault();
                if (patient == null)
                {
                    patient = new PhMS2dot1Domain.Models.Patient();

                    patient.PatientID         = itemTrasen_VI_ZY_VINPATIENT.PATIENT_ID;
                    patient.Origin_PATIENT_ID = itemTrasen_VI_ZY_VINPATIENT.PATIENT_ID;
                    patient.BirthDate         = itemTrasen_VI_ZY_VINPATIENT.BIRTHDAY;
                    patient.PatientName       = itemTrasen_VI_ZY_VINPATIENT.NAME;

                    dbParallel.Patients.Add(patient);
                    dbParallel.SaveChanges();
                }
                else
                {
                    if (isUpdateExist)
                    {
                        patient.BirthDate   = itemTrasen_VI_ZY_VINPATIENT.BIRTHDAY;
                        patient.PatientName = itemTrasen_VI_ZY_VINPATIENT.NAME;

                        dbParallel.SaveChanges();
                    }
                }
            });

            this.LogSetWriteEndTime(importDataLogPatient);

            #endregion

            //==处理InPatients==

            #region 处理InPatients

            this.LogSetSuccessImportRecordCount(importDataLogInPatient, (int)importDataLogInPatient.SourceRecordCount);
            this.LogSetWriteStartTime(importDataLogInPatient);

            Parallel.ForEach(listTrasen_VI_ZY_VINPATIENT, new ParallelOptions {
                MaxDegreeOfParallelism = this.MaxDegreeOfParallelism
            }, (itemTrasen_VI_ZY_VINPATIENT, state, index) =>
            {
                var dbParallel = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);
                var inPatient  = dbParallel.InPatients.Where(c => c.Origin_INPATIENT_ID == itemTrasen_VI_ZY_VINPATIENT.INPATIENT_ID).FirstOrDefault();

                if (itemTrasen_VI_ZY_VINPATIENT.CANCEL_BIT != 0)
                {
                    if (isRemoveCancel)
                    {
                        if (inPatient != null)
                        {
                            dbParallel.InPatients.Remove(inPatient);
                        }
                    }
                }
                else
                {
                    if (inPatient == null)
                    {
                        inPatient = new PhMS2dot1Domain.Models.InPatient();

                        inPatient.InPatientID         = itemTrasen_VI_ZY_VINPATIENT.INPATIENT_ID;
                        inPatient.PatientID           = itemTrasen_VI_ZY_VINPATIENT.PATIENT_ID;
                        inPatient.CaseNumber          = itemTrasen_VI_ZY_VINPATIENT.INPATIENT_NO;
                        inPatient.Times               = itemTrasen_VI_ZY_VINPATIENT.TIMES;
                        inPatient.InDate              = itemTrasen_VI_ZY_VINPATIENT.IN_DATE.Value;
                        inPatient.OutDate             = itemTrasen_VI_ZY_VINPATIENT.OUT_DATE;
                        inPatient.Origin_INPATIENT_ID = itemTrasen_VI_ZY_VINPATIENT.INPATIENT_ID;
                        inPatient.Origin_IN_DEPT      = itemTrasen_VI_ZY_VINPATIENT.IN_DEPT;
                        inPatient.Origin_DEPT_ID      = itemTrasen_VI_ZY_VINPATIENT.DEPT_ID;

                        dbParallel.InPatients.Add(inPatient);
                        dbParallel.SaveChanges();
                    }
                    else
                    {
                        if (isUpdateExist)
                        {
                            inPatient.PatientID      = itemTrasen_VI_ZY_VINPATIENT.PATIENT_ID;
                            inPatient.CaseNumber     = itemTrasen_VI_ZY_VINPATIENT.INPATIENT_NO;
                            inPatient.Times          = itemTrasen_VI_ZY_VINPATIENT.TIMES;
                            inPatient.InDate         = itemTrasen_VI_ZY_VINPATIENT.IN_DATE.Value;
                            inPatient.OutDate        = itemTrasen_VI_ZY_VINPATIENT.OUT_DATE;
                            inPatient.Origin_IN_DEPT = itemTrasen_VI_ZY_VINPATIENT.IN_DEPT;
                            inPatient.Origin_DEPT_ID = itemTrasen_VI_ZY_VINPATIENT.DEPT_ID;

                            dbParallel.SaveChanges();
                        }
                    }
                }
            });

            this.LogSetWriteEndTime(importDataLogInPatient);

            #endregion

            //==完成==

            #region "完成"

            this.LogSave(importDataLogPatient);
            this.LogSave(importDataLogInPatient);

            Console.WriteLine("Finish Get GetPatienstAndInPatients:{0} To {1}.", start, end);

            #endregion
        }
コード例 #12
0
        /// <summary>
        /// 获取门诊处方。
        /// </summary>
        /// <param name="start">时段起点(闭区间)。</param>
        /// <param name="end">时段终点(开区间)。</param>
        /// <param name="isUpdateExists">是否更新已有记录。</param>
        /// <remarks>存在部分“创新”中的处方表记录无法对应挂号记录的记录,目前以忽略处理。</remarks>
        public void GetOutPatientPrescriptions(DateTime start, DateTime end, bool isUpdateExists = false)
        {
            //==初始化==

            #region 初始化

            var importDataLog = new PhMS2dot1Domain.Models.ImportDataLog();

            this.LogInitial(importDataLog, "Trasen", "VI_MZ_CFB", "OutPatientPrescriptions", start, end);

            this.LogAppendRemarks(importDataLog, string.Format("MethodName=GetOutPatientPrescriptions. IsUpdateExists={0}. ", isUpdateExists));

            #endregion

            //==对创新取数==

            #region "对创新取数"

            var dbTrasen = new TrasenDbContext(this.trasenConnection);

            var queryTrasenVI_MZ_CFB = dbTrasen.VI_MZ_CFB.Where(c => start <= c.SFRQ && c.SFRQ < end);
            //(取创新中的原数据的可选筛选条件,暂无)

            this.LogSetReadStartTime(importDataLog);

            var listTrasenVI_MZ_CFB = queryTrasenVI_MZ_CFB.ToList();

            this.LogSetReadEndTime(importDataLog);
            this.LogSetSourceRecordCount(importDataLog, listTrasenVI_MZ_CFB.Count());

            #endregion

            //==处理OutPatientPrescriptions==

            #region "处理OutPatientPrescriptions"

            this.LogSetSuccessImportRecordCount(importDataLog, (int)importDataLog.SourceRecordCount);
            this.LogSetWriteStartTime(importDataLog);

            Parallel.ForEach(listTrasenVI_MZ_CFB, new ParallelOptions {
                MaxDegreeOfParallelism = this.MaxDegreeOfParallelism
            }, (itemTrasenVI_MZ_CFB, state, index) =>
            {
                var dbParallel = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);

                var outPatientPrescription = dbParallel.OutPatientPrescriptions.Where(c => c.Origin_CFID == itemTrasenVI_MZ_CFB.CFID).FirstOrDefault();
                if (outPatientPrescription == null)
                {
                    //检测父节点
                    if (!dbParallel.OutPatients.Where(c => c.OutPatientID == itemTrasenVI_MZ_CFB.GHXXID.Value).Any())
                    {
                        this.LogAppendErrorMessage(importDataLog, "Failded Insert OutPatientPrescription: index:" + index + ", OutPatientPrescriptionID:" + itemTrasenVI_MZ_CFB.CFID + ". ");
                    }
                    else
                    {
                        outPatientPrescription = new PhMS2dot1Domain.Models.OutPatientPrescription();

                        outPatientPrescription.OutPatientPrescriptionID = itemTrasenVI_MZ_CFB.CFID;
                        outPatientPrescription.OutPatientID             = itemTrasenVI_MZ_CFB.GHXXID.Value;
                        outPatientPrescription.Origin_CFID = itemTrasenVI_MZ_CFB.CFID;
                        outPatientPrescription.ChargeTime  = itemTrasenVI_MZ_CFB.SFRQ.Value;
                        outPatientPrescription.Origin_KSDM = itemTrasenVI_MZ_CFB.KSDM;
                        outPatientPrescription.Origin_YSDM = itemTrasenVI_MZ_CFB.YSDM;

                        dbParallel.OutPatientPrescriptions.Add(outPatientPrescription);
                        dbParallel.SaveChanges();
                    }
                }
                else
                {
                    if (isUpdateExists)
                    {
                        outPatientPrescription.OutPatientID = itemTrasenVI_MZ_CFB.GHXXID.Value;
                        outPatientPrescription.ChargeTime   = itemTrasenVI_MZ_CFB.SFRQ.Value;
                        outPatientPrescription.Origin_KSDM  = itemTrasenVI_MZ_CFB.KSDM;
                        outPatientPrescription.Origin_YSDM  = itemTrasenVI_MZ_CFB.YSDM;

                        dbParallel.SaveChanges();
                    }
                }
            });

            this.LogSetWriteEndTime(importDataLog);

            #endregion

            //==完成==

            #region "完成"

            this.LogSave(importDataLog);

            Console.WriteLine("Finish Get OutPatientPrescriptions:{0} To {1}.", start, end);

            #endregion
        }
コード例 #13
0
        /// <summary>
        /// 获取门诊病例,并同时获取病人。
        /// </summary>
        /// <param name="start">时段起点(闭区间)。</param>
        /// <param name="end">时段终点(开区间)。</param>
        /// <param name="isUpdateExist">是否更新已有记录。</param>
        /// <remarks>病人为住院、门诊共用。</remarks>
        public void GetPatientsAndOutPatients(DateTime start, DateTime end, bool isUpdateExist = false)
        {
            //==初始化==

            #region 初始化

            var importDataLogPatient    = new PhMS2dot1Domain.Models.ImportDataLog();
            var importDataLogOutPatient = new PhMS2dot1Domain.Models.ImportDataLog();

            this.LogInitial(importDataLogPatient, "Trasen", "VI_MZ_GHXX", "Patients", start, end);
            this.LogInitial(importDataLogOutPatient, "Trasen", "VI_MZ_GHXX", "OutPatients", start, end);

            this.LogAppendRemarks(importDataLogPatient, string.Format("MethodName=GetPatientsAndOutPatients. IsUpdateExists={0}. ", isUpdateExist));
            this.LogAppendRemarks(importDataLogOutPatient, string.Format("MethodName=GetPatientsAndOutPatients. IsUpdateExists={0}. ", isUpdateExist));

            #endregion

            //==对创新取数==

            #region 对创新取数

            var dbTrasen = new TrasenDbContext(this.trasenConnection);

            var queryTrasenVI_MZ_GHXX = dbTrasen.VI_MZ_GHXX.Where(c => (start <= c.GHDJSJ && c.GHDJSJ < end) || (c.QXGHSJ.HasValue && start <= c.QXGHSJ && c.QXGHSJ < end));
            //(取创新中的原数据的可选筛选条件,暂无)

            this.LogSetReadStartTime(importDataLogPatient);
            this.LogSetReadStartTime(importDataLogOutPatient);

            var listTrasen_VI_MZ_GHXX          = queryTrasenVI_MZ_GHXX.ToList();
            var listTrasen_VI_MZ_GHXX_Distinct = listTrasen_VI_MZ_GHXX.Distinct(new Infrastructure.VI_MZ_GHXX_Comparer()).ToList();

            this.LogSetReadEndTime(importDataLogPatient);
            this.LogSetReadEndTime(importDataLogOutPatient);

            this.LogSetSourceRecordCount(importDataLogPatient, listTrasen_VI_MZ_GHXX_Distinct.Count());
            this.LogSetSourceRecordCount(importDataLogOutPatient, listTrasen_VI_MZ_GHXX.Count());

            #endregion

            //==处理Patients==

            #region 处理Patients

            this.LogSetSuccessImportRecordCount(importDataLogPatient, (int)importDataLogPatient.SourceRecordCount);
            this.LogSetWriteStartTime(importDataLogPatient);

            Parallel.ForEach(listTrasen_VI_MZ_GHXX_Distinct, new ParallelOptions {
                MaxDegreeOfParallelism = this.MaxDegreeOfParallelism
            }, (itemTrasen_VI_MZ_GHXX, state, index) =>
            {
                //-读取时间未累积-
                var dbTrasenParallel      = new TrasenDbContext(this.trasenConnection);
                var itemTrasen_VI_YY_BRXX = dbTrasenParallel.VI_YY_BRXX.Where(c => c.BRXXID == itemTrasen_VI_MZ_GHXX.BRXXID).First();

                var dbParallel = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);

                var patient = dbParallel.Patients.Where(c => c.Origin_PATIENT_ID == itemTrasen_VI_MZ_GHXX.BRXXID).FirstOrDefault();
                if (patient == null)
                {
                    patient = new PhMS2dot1Domain.Models.Patient();

                    patient.PatientID         = itemTrasen_VI_MZ_GHXX.BRXXID.Value;
                    patient.Origin_PATIENT_ID = itemTrasen_VI_MZ_GHXX.BRXXID.Value;
                    patient.PatientName       = itemTrasen_VI_YY_BRXX.BRXM;
                    patient.BirthDate         = itemTrasen_VI_YY_BRXX.CSRQ;

                    dbParallel.Patients.Add(patient);
                    dbParallel.SaveChanges();
                }
                else
                {
                    if (isUpdateExist)
                    {
                        patient.PatientName = itemTrasen_VI_YY_BRXX.BRXM;
                        patient.BirthDate   = itemTrasen_VI_YY_BRXX.CSRQ;
                    }
                }
            });

            this.LogSetWriteEndTime(importDataLogPatient);

            #endregion

            //==处理OutPatients==

            #region 处理OutPatients

            this.LogSetSuccessImportRecordCount(importDataLogOutPatient, (int)importDataLogOutPatient.SourceRecordCount);
            this.LogSetWriteStartTime(importDataLogOutPatient);

            Parallel.ForEach(listTrasen_VI_MZ_GHXX, new ParallelOptions {
                MaxDegreeOfParallelism = this.MaxDegreeOfParallelism
            }, (itemTrasen_VI_MZ_GHXX, state, index) =>
            {
                var dbParallel = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);

                var outPatient = dbParallel.OutPatients.Where(c => c.Origin_GHXXID == itemTrasen_VI_MZ_GHXX.GHXXID).FirstOrDefault();
                if (outPatient == null)
                {
                    outPatient = new PhMS2dot1Domain.Models.OutPatient();

                    outPatient.OutPatientID     = itemTrasen_VI_MZ_GHXX.GHXXID;
                    outPatient.PatientID        = itemTrasen_VI_MZ_GHXX.BRXXID.Value;
                    outPatient.Origin_GHXXID    = itemTrasen_VI_MZ_GHXX.GHXXID;
                    outPatient.Origin_GHLB      = itemTrasen_VI_MZ_GHXX.GHLB;
                    outPatient.ChargeTime       = itemTrasen_VI_MZ_GHXX.GHDJSJ.Value;
                    outPatient.CancelChargeTime = itemTrasen_VI_MZ_GHXX.QXGHSJ;

                    dbParallel.OutPatients.Add(outPatient);
                    dbParallel.SaveChanges();
                }
                else
                {
                    if (isUpdateExist)
                    {
                        outPatient.Origin_GHLB      = itemTrasen_VI_MZ_GHXX.GHLB;
                        outPatient.ChargeTime       = itemTrasen_VI_MZ_GHXX.GHDJSJ.Value;
                        outPatient.CancelChargeTime = itemTrasen_VI_MZ_GHXX.QXGHSJ;
                        outPatient.PatientID        = itemTrasen_VI_MZ_GHXX.BRXXID.Value;

                        dbParallel.SaveChanges();
                    }
                }
            });

            this.LogSetWriteEndTime(importDataLogOutPatient);

            #endregion

            //==完成==

            #region "完成"

            this.LogSave(importDataLogPatient);
            this.LogSave(importDataLogOutPatient);

            Console.WriteLine("Finish Get GetPatientsAndOutPatients:{0} To {1}.", start, end);

            #endregion
        }
コード例 #14
0
        /// <summary>
        /// 获取住院费用记录。
        /// </summary>
        /// <param name="start">时段起点(闭区间)。</param>
        /// <param name="end">时段终点(开区间)。</param>
        /// <param name="isRemoveDelete">指定是否将DELETE_BIT为1的记录在本地删除。</param>
        /// <param name="isContainNullOutDate">是否包含未出院记录。</param>
        /// <param name="isUpdateExists">是否更新已存在记录。</param>
        public void GetDrugFee(DateTime start, DateTime end, bool isRemoveDelete = true, bool isContainNullOutDate = false, bool isUpdateExists = true)
        {
            var db       = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);
            var dbTrasen = new TrasenDbContext(this.trasenConnection);

            //取InPatients。
            var queryInPatients = db.InPatients.Where(c => start <= c.OutDate && c.OutDate < end);

            if (isContainNullOutDate)
            {
                queryInPatients = queryInPatients.Union(db.InPatients.Where(c => !c.OutDate.HasValue));
            }
            var listInPatient = queryInPatients.ToList();

            foreach (var itemInPatient in listInPatient)
            {
                //预先获取InPatient相关的DrugFee,方便取数。
                var listDrugFee = db.DrugFees.Where(c => c.InPatientDrugRecord.InPatientID == itemInPatient.InPatientID).ToList();

                //取对应的VI_ZY_FEE_SPECI。
                var listTrasen_VI_ZY_FEE_SPECI = dbTrasen.VI_ZY_FEE_SPECI.Where(c => c.INPATIENT_ID == itemInPatient.InPatientID && c.XMLY == 1 && c.ORDER_ID != new Guid("00000000-0000-0000-0000-000000000000")).ToList();

                foreach (var itemVI_ZY_FEE_SPECI in listTrasen_VI_ZY_FEE_SPECI)
                {
                    if (itemVI_ZY_FEE_SPECI.DELETE_BIT == 1)
                    {
                        if (isRemoveDelete)
                        {
                            var drugFee = db.DrugFees.Where(c => c.Origin_ID == itemVI_ZY_FEE_SPECI.ID).FirstOrDefault();

                            if (drugFee != null)
                            {
                                db.DrugFees.Remove(drugFee);
                                db.SaveChanges();
                            }
                        }
                    }
                    else
                    {
                        var drugFee = listDrugFee.Where(c => c.Origin_ID == itemVI_ZY_FEE_SPECI.ID).FirstOrDefault();
                        if (drugFee == null)
                        {
                            drugFee = new PhMS2dot1Domain.Models.DrugFee();

                            drugFee.DrugFeeID             = itemVI_ZY_FEE_SPECI.ID;
                            drugFee.InPatientDrugRecordID = itemVI_ZY_FEE_SPECI.ORDER_ID;
                            drugFee.UnitPrice             = itemVI_ZY_FEE_SPECI.COST_PRICE;
                            drugFee.Quantity    = itemVI_ZY_FEE_SPECI.NUM;
                            drugFee.ActualPrice = itemVI_ZY_FEE_SPECI.ACVALUE;
                            drugFee.ChargeTime  = itemVI_ZY_FEE_SPECI.CHARGE_DATE.Value;
                            drugFee.Origin_ID   = itemVI_ZY_FEE_SPECI.ID;
                            drugFee.Origin_Unit = itemVI_ZY_FEE_SPECI.UNIT;

                            db.DrugFees.Add(drugFee);
                        }
                        else
                        {
                            if (isUpdateExists)
                            {
                                drugFee.InPatientDrugRecordID = itemVI_ZY_FEE_SPECI.ORDER_ID;
                                drugFee.UnitPrice             = itemVI_ZY_FEE_SPECI.COST_PRICE;
                                drugFee.Quantity    = itemVI_ZY_FEE_SPECI.NUM;
                                drugFee.ActualPrice = itemVI_ZY_FEE_SPECI.ACVALUE;
                                drugFee.ChargeTime  = itemVI_ZY_FEE_SPECI.CHARGE_DATE.Value;
                                drugFee.Origin_ID   = itemVI_ZY_FEE_SPECI.ID;
                                drugFee.Origin_Unit = itemVI_ZY_FEE_SPECI.UNIT;
                            }
                        }
                    }
                }
                db.SaveChanges();
            }
        }
コード例 #15
0
        /// <summary>
        /// 获取住院用药记录。
        /// </summary>
        /// <param name="start">时段起点(闭区间)。</param>
        /// <param name="end">时段终点(开区间)。</param>
        /// <param name="isContainNullOutDate">是否包含未出院记录。</param>
        /// <param name="isUpdateExists">是否更新已存在记录。</param>
        public void GetInPatientDrugRecords(DateTime start, DateTime end, bool isContainNullOutDate = false, bool isUpdateExists = false)
        {
            //==初始化==

            #region 初始化

            var importDataLog = new PhMS2dot1Domain.Models.ImportDataLog();

            this.LogInitial(importDataLog, "Trasen", "VI_ZY_ORDERRECORD, YP_YPCJD, YP_YPGGD", "InPatientDrugRecords", start, end);

            this.LogAppendRemarks(importDataLog, string.Format("MethodName=GetInPatientDrugRecords. isContainNullOutDate={0}. isUpdateExists={1}. (无法精确计算时间点)", isContainNullOutDate, isUpdateExists));

            #endregion

            this.LogSetReadStartTime(importDataLog);
            this.LogSetWriteStartTime(importDataLog);
            int sourceRecordCount = 0;

            var dbTrasen = new TrasenDbContext(this.trasenConnection);
            var db       = new PhMS2dot1Domain.Models.PhMS2dot1DomainContext(this.localConnection);

            //预先获取整个表,方便取数。
            var listYP_YPCJD = dbTrasen.YP_YPCJD.ToList();
            var listYP_YPGGD = dbTrasen.YP_YPGGD.Where(c => !c.BDELETE).ToList();

            //取InPatients。
            var queryInPatients = db.InPatients.Where(c => start <= c.OutDate && c.OutDate < end);
            if (isContainNullOutDate)
            {
                queryInPatients = queryInPatients.Union(db.InPatients.Where(c => !c.OutDate.HasValue));
            }
            var listInPatients = queryInPatients.ToList();

            foreach (var itemInPatient in listInPatients)
            {
                //预先获取InPatient相关的InPatientDrugRecord,方便取数。
                var listInPatientDrugRecord = itemInPatient.InPatientDrugRecords.ToList();

                //取对应的VI_ZY_ORDERRECORD。
                var listTrasen_VI_ZY_ORDERRECORD = dbTrasen.VI_ZY_ORDERRECORD.Where(c => c.INPATIENT_ID == itemInPatient.Origin_INPATIENT_ID && c.XMLY == 1 && c.HOITEM_ID != -1).ToList();
                sourceRecordCount += listTrasen_VI_ZY_ORDERRECORD.Count();

                foreach (var itemVI_ZY_ORDERRECORD in listTrasen_VI_ZY_ORDERRECORD)
                {
                    //关联的实例。
                    var objectYP_YPCJD = listYP_YPCJD.Where(c => c.CJID == itemVI_ZY_ORDERRECORD.HOITEM_ID).First();
                    var objectYP_YPGGD = listYP_YPGGD.Where(c => c.GGID == objectYP_YPCJD.GGID).First();

                    //获取是否已存在InPatientDrugRecord。
                    var inPatientDrugRecord = listInPatientDrugRecord.Where(c => c.Origin_ORDER_ID.Value == itemVI_ZY_ORDERRECORD.ORDER_ID).FirstOrDefault();
                    if (inPatientDrugRecord == null)
                    {
                        inPatientDrugRecord = new PhMS2dot1Domain.Models.InPatientDrugRecord();

                        inPatientDrugRecord.InPatientDrugRecordID = itemVI_ZY_ORDERRECORD.ORDER_ID;
                        inPatientDrugRecord.InPatientID           = itemVI_ZY_ORDERRECORD.INPATIENT_ID;
                        inPatientDrugRecord.ProductName           = objectYP_YPCJD.S_YPPM;
                        inPatientDrugRecord.IsEssential           = objectYP_YPGGD.GJJBYW.Value;
                        inPatientDrugRecord.DosageForm            = objectYP_YPGGD.YPGG;
                        inPatientDrugRecord.DDD                          = objectYP_YPGGD.DDD.Value;
                        inPatientDrugRecord.Origin_ORDER_ID              = itemVI_ZY_ORDERRECORD.ORDER_ID;
                        inPatientDrugRecord.Origin_EXEC_DEPT             = itemVI_ZY_ORDERRECORD.EXEC_DEPT;
                        inPatientDrugRecord.Origin_ORDER_DOC             = itemVI_ZY_ORDERRECORD.ORDER_DOC;
                        inPatientDrugRecord.Origin_KSSDJID               = objectYP_YPGGD.KSSDJID;
                        inPatientDrugRecord.Origin_CJID                  = objectYP_YPCJD.CJID;
                        inPatientDrugRecord.Origin_ORDER_USAGE           = itemVI_ZY_ORDERRECORD.ORDER_USAGE;
                        inPatientDrugRecord.EffectiveConstituentAmount   = objectYP_YPGGD.DDDJL.HasValue ? objectYP_YPGGD.DDDJL.Value : objectYP_YPGGD.HLXS;
                        inPatientDrugRecord.IsWesternMedicine            = itemVI_ZY_ORDERRECORD.NTYPE == 1;
                        inPatientDrugRecord.IsChinesePatentMedicine      = itemVI_ZY_ORDERRECORD.NTYPE == 2;
                        inPatientDrugRecord.IsTraditionalChineseMedicine = itemVI_ZY_ORDERRECORD.NTYPE == 3;

                        db.InPatientDrugRecords.Add(inPatientDrugRecord);
                        db.SaveChanges();
                    }
                    else
                    {
                        if (isUpdateExists)
                        {
                            inPatientDrugRecord.InPatientID                  = itemVI_ZY_ORDERRECORD.INPATIENT_ID;
                            inPatientDrugRecord.ProductName                  = objectYP_YPCJD.S_YPPM;
                            inPatientDrugRecord.IsEssential                  = objectYP_YPGGD.GJJBYW.Value;
                            inPatientDrugRecord.DosageForm                   = objectYP_YPGGD.YPGG;
                            inPatientDrugRecord.DDD                          = objectYP_YPGGD.DDD.Value;
                            inPatientDrugRecord.Origin_EXEC_DEPT             = itemVI_ZY_ORDERRECORD.EXEC_DEPT;
                            inPatientDrugRecord.Origin_ORDER_DOC             = itemVI_ZY_ORDERRECORD.ORDER_DOC;
                            inPatientDrugRecord.Origin_KSSDJID               = objectYP_YPGGD.KSSDJID;
                            inPatientDrugRecord.Origin_CJID                  = objectYP_YPCJD.CJID;
                            inPatientDrugRecord.Origin_ORDER_USAGE           = itemVI_ZY_ORDERRECORD.ORDER_USAGE;
                            inPatientDrugRecord.EffectiveConstituentAmount   = objectYP_YPGGD.DDDJL.HasValue ? objectYP_YPGGD.DDDJL.Value : objectYP_YPGGD.HLXS;
                            inPatientDrugRecord.IsWesternMedicine            = itemVI_ZY_ORDERRECORD.NTYPE == 1;
                            inPatientDrugRecord.IsChinesePatentMedicine      = itemVI_ZY_ORDERRECORD.NTYPE == 2;
                            inPatientDrugRecord.IsTraditionalChineseMedicine = itemVI_ZY_ORDERRECORD.NTYPE == 3;

                            db.SaveChanges();
                        }
                    }
                }
            }

            this.LogSetReadEndTime(importDataLog);
            this.LogSetWriteEndTime(importDataLog);
            this.LogSetSourceRecordCount(importDataLog, sourceRecordCount);
            this.LogSetSuccessImportRecordCount(importDataLog, sourceRecordCount);
            this.LogSave(importDataLog);

            Console.WriteLine("Finish Get GetInPatientDrugRecords:{0} To {1}.", start, end);
        }
        /// <summary>
        /// 刷新。
        /// </summary>
        /// <param name="rescueRoomInfoId">归属的抢救室病例ID。</param>
        public ActionResult Refresh(Guid rescueRoomInfoId)
        {
            var db       = new EiSDbContext();
            var dbTrasen = new TrasenDbContext("TrasenConnection");

            var target = db.RescueRoomInfos.Find(rescueRoomInfoId);

            if (target == null)
            {
                return(HttpNotFound());
            }

            //设置时段起点、结点
            DateTime?timeUpperBound;
            DateTime?timeLowerBound;
            {
                timeUpperBound = target.ReceiveTime;
                var itemJZJL = dbTrasen.MZYS_JZJL.Where(c => c.JZID == target.JZID).FirstOrDefault();
                timeLowerBound = itemJZJL.WCSJ;
            }

            //==获取指定GHXXID的“处方表”记录。==
            var queryCFB = dbTrasen.VI_MZ_CFB.Where(c => c.GHXXID == target.GHXXID);

            //设置时段起点
            queryCFB = queryCFB.Where(c => timeUpperBound <= c.SFRQ);
            //设置时段结点
            if (timeLowerBound.HasValue)
            {
                queryCFB = queryCFB.Where(c => c.SFRQ <= timeLowerBound.Value);//该结点边界特殊,使用闭区间——结束的瞬间可能同时有医嘱。
            }
            var listCFB = queryCFB.ToList();

            foreach (var itemCFB in listCFB)
            {
                //获取指定CFID的“处方表明细”记录。
                var queryCFBMX = dbTrasen.VI_MZ_CFB_MX.Where(c => c.CFID == itemCFB.CFID);
                var listCFBMX  = queryCFBMX.ToList();

                foreach (var itemCFBMX in listCFBMX)
                {
                    if (db.RescueRoomDrugRecordDefinitions.Any(c => c.DrugCode == itemCFBMX.BM))
                    {
                        //判断是新增的药品还是退费的药品
                        if (!itemCFBMX.TYID.HasValue)
                        {
                            var rescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.CFMXID == itemCFBMX.CFMXID).FirstOrDefault();

                            if (rescueRoomDrugRecord == null)
                            {
                                rescueRoomDrugRecord = new RescueRoomDrugRecord();

                                rescueRoomDrugRecord.RescueRoomDrugRecordId = Guid.NewGuid();
                                rescueRoomDrugRecord.RescueRoomInfoId       = target.RescueRoomInfoId;
                                rescueRoomDrugRecord.ProductCode            = itemCFBMX.BM;
                                rescueRoomDrugRecord.ProductName            = itemCFBMX.PM;
                                rescueRoomDrugRecord.GoodsName        = itemCFBMX.SPM;
                                rescueRoomDrugRecord.DosageQuantity   = itemCFBMX.YL;
                                rescueRoomDrugRecord.DosageUnit       = itemCFBMX.YLDW;
                                rescueRoomDrugRecord.PrescriptionTime = itemCFB.SFRQ;
                                rescueRoomDrugRecord.Usage            = itemCFBMX.YFMC;

                                rescueRoomDrugRecord.CFMXID = itemCFBMX.CFMXID;
                                rescueRoomDrugRecord.CFID   = itemCFBMX.CFID;

                                rescueRoomDrugRecord.UpdateTime = DateTime.Now;

                                db.RescueRoomDrugRecords.Add(rescueRoomDrugRecord);
                                db.SaveChanges();
                            }
                            else
                            {
                                rescueRoomDrugRecord.RescueRoomInfoId = target.RescueRoomInfoId;
                                rescueRoomDrugRecord.ProductCode      = itemCFBMX.BM;
                                rescueRoomDrugRecord.ProductName      = itemCFBMX.PM;
                                rescueRoomDrugRecord.GoodsName        = itemCFBMX.SPM;
                                rescueRoomDrugRecord.DosageQuantity   = itemCFBMX.YL;
                                rescueRoomDrugRecord.DosageUnit       = itemCFBMX.YLDW;
                                rescueRoomDrugRecord.PrescriptionTime = itemCFB.SFRQ;
                                rescueRoomDrugRecord.Usage            = itemCFBMX.YFMC;

                                rescueRoomDrugRecord.CFMXID = itemCFBMX.CFMXID;
                                rescueRoomDrugRecord.CFID   = itemCFBMX.CFID;

                                db.SaveChanges();
                            }
                        }
                        else
                        {
                            var rescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.CFMXID == itemCFBMX.TYID.Value).FirstOrDefault();

                            if (rescueRoomDrugRecord != null)
                            {
                                rescueRoomDrugRecord.DosageQuantity -= itemCFBMX.YL;

                                if (rescueRoomDrugRecord.DosageQuantity == 0)
                                {
                                    db.RescueRoomDrugRecords.Remove(rescueRoomDrugRecord);
                                }

                                db.SaveChanges();
                            }
                            else
                            {
                                throw new Exception("无对应原始处方明细记录。");
                            }
                        }
                    }
                }
            }

            //删除处方时间早于时段起点的用药项
            if (timeUpperBound.HasValue)
            {
                var listRescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.RescueRoomInfoId == target.RescueRoomInfoId && c.PrescriptionTime < timeUpperBound).ToList();
                db.RescueRoomDrugRecords.RemoveRange(listRescueRoomDrugRecord);
                db.SaveChanges();
            }

            //删除处方时间超过时段结点的用药项
            if (timeLowerBound.HasValue)
            {
                var listRescueRoomDrugRecord = db.RescueRoomDrugRecords.Where(c => c.RescueRoomInfoId == target.RescueRoomInfoId && timeLowerBound < c.PrescriptionTime).ToList();
                db.RescueRoomDrugRecords.RemoveRange(listRescueRoomDrugRecord);
                db.SaveChanges();
            }

            //删除编码在定义外的用药项
            if (true)
            {
                var listRescueRoomDrugRecord           = db.RescueRoomDrugRecords.ToList();
                var listRescueRoomDrugRecordDefinition = db.RescueRoomDrugRecordDefinitions.Where(c => c.GreenPathCode == "Ami").ToList();

                foreach (var itemRescueRoomDrugRecord in listRescueRoomDrugRecord)
                {
                    if (!listRescueRoomDrugRecordDefinition.Any(c => c.DrugCode == itemRescueRoomDrugRecord.ProductCode))
                    {
                        db.RescueRoomDrugRecords.Remove(itemRescueRoomDrugRecord);
                    }
                }
                db.SaveChanges();
            }

            return(RedirectToAction("IndexPartial", new { rescueRoomInfoId }));
        }