/// <summary> /// 根据药品的种类获获得药物的编码和药物名称. /// </summary> /// <returns>EssentialDrugMessage.</returns> internal DrugMessage GetDrugCategoryMessage(EnumDrugCategory drugCategory) { var result = new DrugMessage { ProductID = this.Origin_CJID.HasValue ? this.Origin_CJID.Value : -1, ProductName = this.ProductName, Cost = this.ActualPrice }; switch (drugCategory) { case EnumDrugCategory.ALL_DRUG: break; case EnumDrugCategory.ESSENTIAL_DRUG: if (!IsEssential) { result = null; } break; case EnumDrugCategory.ANTIBIOTIC_DRUG: if (!this.IsAntibiotic) { result = null; } break; default: break; } return(result); }
public IDrugTopRank CreateDrugTopRank(EnumDrugCategory drugCategory) { IDrugTopRank drugTopRank = null; switch (drugCategory) { case EnumDrugCategory.ALL_DRUG: drugTopRank = new ImDrugTopThirtyRank(); break; case EnumDrugCategory.ANTIBIOTIC_DRUG: drugTopRank = new ImTopTenAntibioticRank(); break; case EnumDrugCategory.ANTIBIOTIC_DRUG_DEP: drugTopRank = new ImTopTenAntibioticDepRank(); break; } return(drugTopRank); }
/// <summary> /// 该挂号信息包含的基本药物种类需计数为-1的药品种类集合. /// </summary> /// <param name="startTime">The start time.</param> /// <param name="endTime">The end time.</param> /// <returns>List<System.String>.</returns> internal List <int> DrugCategoryNumberNegativeList(DateTime startTime, DateTime endTime, EnumDrugCategory drugCategory) { List <int> result = new List <int>(); //获取在startTime之前的基本药物种类总金额==0的集合, //并且获取在endTime之前的基本药物种类总金额 >0的集合 var preStartTimeList = OutPatientPrescriptions.SelectMany(opp => opp.GetEssentialDrugMessage(this.ChargeTime, startTime)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) > 0).Select(s => s.Key).ToList(); var preEndTimeList = OutPatientPrescriptions.SelectMany(opp => opp.GetEssentialDrugMessage(this.ChargeTime, endTime)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) == 0).Select(s => s.Key).ToList(); //preStartTimeList preEndTimeList 的交集,即为该挂号信息中有效的药品种类 if (preStartTimeList.Count > 0 && preEndTimeList.Count > 0) { result = preEndTimeList.Intersect(preEndTimeList).ToList(); } return(result); }
/// <summary> /// 该挂号信息包含的基本药物种类需计数为+1的药品种类集合. /// </summary> /// <param name="startTime">The start time.</param> /// <param name="endTime">The end time.</param> /// <returns>List<System.String>.</returns> internal List <int> DrugCategoryNumberPositiveList(DateTime startTime, DateTime endTime, EnumDrugCategory drugCategory) { List <int> result = new List <int>(); //获取在startTime之前的基本药物种类总金额==0的集合, //并且获取在endTime之前的基本药物种类总金额 >0的集合 try { var preStartTimeList = OutPatientPrescriptions.SelectMany(opp => opp.GetDrugCategoryMessage(this.ChargeTime, startTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) == 0).Select(s => s.Key).ToList(); var preStartTimeGreaterZeroList = OutPatientPrescriptions.SelectMany(opp => opp.GetDrugCategoryMessage(this.ChargeTime, startTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) > 0).Select(s => s.Key).ToList(); var preEndTimeList = OutPatientPrescriptions.SelectMany(opp => opp.GetDrugCategoryMessage(this.ChargeTime, endTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) > 0).Select(s => s.Key).ToList(); //preStartTimeList preEndTimeList 的交集,即为该挂号信息中有效的药品种类 if (preStartTimeGreaterZeroList.Count > 0 && preEndTimeList.Count > 0) { //返回空,计数0 } else if (preStartTimeList.Count > 0 && preEndTimeList.Count > 0) { result = preEndTimeList.Intersect(preEndTimeList).ToList(); } else if (preStartTimeList.Count == 0 && preEndTimeList.Count > 0) { result = preEndTimeList; } } catch (Exception e) { throw new InvalidOperationException(String.Format("数据操作出错! {0}", e.Message)); } return(result); }
/// <summary> /// 该挂号信息包含的药物种类需计数为-1的药品种类集合. /// </summary> /// <param name="startTime">The start time.</param> /// <param name="endTime">The end time.</param> /// <returns>List<System.String>.</returns> internal List <int> DrugCategoryNumberNegativeList(DateTime startTime, DateTime endTime, EnumDrugCategory drugCategory) { List <int> result = new List <int>(); //并且获取在endTime之前的基本药物种类总金额 >0的集合 try { //outDate小于startTime,才需要判断是否有负数 if (this.OutDate.HasValue && this.OutDate < startTime) { var preStartTimeList = this.InPatientDrugRecords.Select(opp => opp.GetDrugCategoryMessage(this.InDate, startTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) > 0).Select(s => s.Key).ToList(); var preEndTimeList = InPatientDrugRecords.Select(opp => opp.GetDrugCategoryMessage(this.InDate, endTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) == 0).Select(s => s.Key).ToList(); //preStartTimeList preEndTimeList 的交集,即为该挂号信息中有效的药品种类 if (preStartTimeList.Count > 0 && preEndTimeList.Count > 0) { result = preEndTimeList.Intersect(preEndTimeList).ToList(); } } } catch (Exception e) { throw new InvalidOperationException(String.Format("数据操作出错! {0}", e.Message)); } return(result); }
/// <summary> /// 该住院病例信息包含的药物种类需计数为+1的药品种类集合. /// </summary> /// <param name="startTime">The start time.</param> /// <param name="endTime">The end time.</param> /// <returns>List<System.String>.</returns> /// <remarks> /// outDate在startTime之前的情况,获取preStartTimeList中的时间为InDate到startTime /// outDate在取定时间段内的情况,preStartTimeList = 0 /// </remarks> internal List <int> DrugCategoryNumberPositiveList(DateTime startTime, DateTime endTime, EnumDrugCategory drugCategory) { var result = new List <int>(); var preStartTimeList = new List <int>(); var preEndTimeList = new List <int>(); var preStartTimeGreaterZeroList = new List <int>(); //获取在startTime之前的基本药物种类总金额==0的集合, //并且获取在endTime之前的基本药物种类总金额 >0的集合 try { if (this.OutDate.HasValue && this.OutDate.Value >= startTime) { preEndTimeList = InPatientDrugRecords.Select(opp => opp.GetDrugCategoryMessage(this.InDate, endTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) > 0).Select(s => s.Key).ToList(); } else if (this.OutDate.HasValue && this.OutDate.Value < startTime) { preStartTimeList = this.InPatientDrugRecords.Select(opp => opp.GetDrugCategoryMessage(this.InDate, startTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) == 0).Select(s => s.Key).ToList(); preStartTimeGreaterZeroList = InPatientDrugRecords.Select(opp => opp.GetDrugCategoryMessage(this.OutDate.Value, startTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) > 0).Select(s => s.Key).ToList(); preEndTimeList = InPatientDrugRecords.Select(opp => opp.GetDrugCategoryMessage(this.OutDate.Value, endTime, drugCategory)).ToList() .GroupBy(g => g.ProductID).Where(w => w.Sum(su => su.Cost) > 0).Select(s => s.Key).ToList(); } //preStartTimeList preEndTimeList 的交集,即为该挂号信息中有效的药品种类 if (preStartTimeGreaterZeroList.Count > 0 && preEndTimeList.Count > 0) { //preStartTimeGreaterZeroList为在startTime之前总费用大于0,但在preEndTimeList中总费用也大于0,计数为0。 //返回空,计数0 } else if (preStartTimeList.Count > 0 && preEndTimeList.Count > 0) { //如果preStartTimeList result = preEndTimeList.Intersect(preEndTimeList).ToList(); } else if (preStartTimeList.Count == 0 && preEndTimeList.Count > 0) { result = preEndTimeList; } } catch (Exception e) { throw new InvalidOperationException(String.Format("数据操作出错! {0}", e.Message)); } return(result); }
/// <summary> /// 获得该处方包含的基本药物信息的集合. /// </summary> /// <param name="startTime">The start time.</param> /// <param name="endTime">The end time.</param> /// <returns>List<EssentialDrugMessage>.</returns> internal List <DrugMessage> GetDrugCategoryMessage(DateTime startTime, DateTime endTime, EnumDrugCategory drugCategory) { List <DrugMessage> result = new List <DrugMessage>(); if (this.ChargeTime >= startTime && this.ChargeTime < endTime) { result = OutPatientDrugRecords.Select(oop => oop.GetDrugCategoryMessage(drugCategory)).ToList(); } return(result); }
/// <summary> /// 根据药品的种类获获得药物的编码和药物名称. /// </summary> /// <returns>EssentialDrugMessage.</returns> internal DrugMessage GetDrugCategoryMessage(DateTime startTime, DateTime endTime, EnumDrugCategory drugCategory) { var result = new DrugMessage { ProductID = this.Origin_CJID, ProductName = this.ProductName, Cost = this.DrugFees.Sum(d => d.ActualPriceInDuration(startTime, endTime)) }; switch (drugCategory) { case EnumDrugCategory.ALL_DRUG: break; case EnumDrugCategory.ESSENTIAL_DRUG: if (!IsEssential) { result = new DrugMessage(); } break; case EnumDrugCategory.ANTIBIOTIC_DRUG: if (!this.IsAntibioticDrug) { result = new DrugMessage(); } break; default: break; } return(result); }