/// <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 }
/// <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 }