Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        /// <summary>
        /// 该挂号信息包含的基本药物种类需计数为-1的药品种类集合.
        /// </summary>
        /// <param name="startTime">The start time.</param>
        /// <param name="endTime">The end time.</param>
        /// <returns>List&lt;System.String&gt;.</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);
        }
Beispiel #4
0
        /// <summary>
        /// 该挂号信息包含的基本药物种类需计数为+1的药品种类集合.
        /// </summary>
        /// <param name="startTime">The start time.</param>
        /// <param name="endTime">The end time.</param>
        /// <returns>List&lt;System.String&gt;.</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);
        }
Beispiel #5
0
        /// <summary>
        /// 该挂号信息包含的药物种类需计数为-1的药品种类集合.
        /// </summary>
        /// <param name="startTime">The start time.</param>
        /// <param name="endTime">The end time.</param>
        /// <returns>List&lt;System.String&gt;.</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);
        }
Beispiel #6
0
        /// <summary>
        /// 该住院病例信息包含的药物种类需计数为+1的药品种类集合.
        /// </summary>
        /// <param name="startTime">The start time.</param>
        /// <param name="endTime">The end time.</param>
        /// <returns>List&lt;System.String&gt;.</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);
        }
Beispiel #7
0
        /// <summary>
        /// 获得该处方包含的基本药物信息的集合.
        /// </summary>
        /// <param name="startTime">The start time.</param>
        /// <param name="endTime">The end time.</param>
        /// <returns>List&lt;EssentialDrugMessage&gt;.</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);
        }
Beispiel #8
0
        /// <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);
        }