Пример #1
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
        }
Пример #2
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
        }