Ejemplo n.º 1
0
        /// <summary>
        /// 获取处方费用明细
        /// </summary>
        /// <param name="brid"></param>
        /// <param name="qybr"></param>
        /// <param name="cfsj"></param>
        /// <param name="webCfsj"></param>
        /// <returns></returns>
        private IList <OpFeeDetail> GetRecipeFeeDetails(decimal brid, decimal qybr, DateTime cfsj, DateTime webCfsj)
        {
            var cfmx = Ctx.MsCf01Set.Where(p => p.Zfpb == 0 &&
                                           p.Brid == brid &&
                                           p.Fphm == null &&
                                           p.Cfbz < 2 &&
                                           ((p.Kfrq >= cfsj &&
                                             p.Fybz == 0) ||
                                            (p.Fybz == 1 && p.Qybr == 1 && p.Kfrq >= webCfsj)))
                       .Include(p => p.MsCf02.Select(t => t.YkTypk))
                       .ToList();
            var feeList = new List <OpFeeDetail>();

            if (cfmx.Any())
            {
                var drugList = new List <decimal>();
                var ypyfList = new List <string>();
                var ypsxList = new List <string>();
                var gytjList = new List <decimal>();
                cfmx.ForEach(p =>
                {
                    var enumerable = p.MsCf02.Select(t => new { t.Ypxh, t.Ypyf, t.Gytj, t.YkTypk.Ypsx }).Distinct().ToList();
                    drugList.AddRange(enumerable.Select(x => x.Ypxh).Distinct());
                    ypsxList.AddRange(enumerable.Select(x => x.Ypsx.ToString()).Distinct());
                    ypyfList.AddRange(enumerable.Select(x => x.Ypyf).Distinct());
                    gytjList.AddRange(enumerable.Select(x => x.Gytj ?? 0).Distinct());
                });
                var ypdzNew   = Ctx.YbYpdzNewSet.Where(p => drugList.Contains(p.Ypxh)).ToList();
                var hzybDmzds = Ctx.HzybDmzdSet.Where(p => (p.Dmlb == "YPJX_DZ" && ypsxList.Contains(p.Dmsb)) ||
                                                      (p.Dmlb == "SYPC_DZ" && ypyfList.Contains(p.Dmsb)))
                                .ToList();
                var zyYpyf      = Ctx.ZyYpyfSet.Where(p => gytjList.Contains(p.Ypyf)).ToList();
                var feeItemList = new List <OpFeeDetailItem>();
                foreach (var item in cfmx)
                {
                    if (item.MsCf02.Any())
                    {
                        foreach (var sub in item.MsCf02)
                        {
                            var ypdz = ypdzNew.FirstOrDefault(p =>
                                                              p.Ypxh == sub.Ypxh && p.Kssj <= item.Kfrq &&
                                                              (p.Zzsj == null || p.Zzsj >= item.Kfrq));

                            var ypjx = hzybDmzds.FirstOrDefault(p =>
                                                                p.Dmlb == "YPJX_DZ" && p.Dmsb == sub.YkTypk.Ypsx.ToString());

                            var sypc = hzybDmzds.FirstOrDefault(p =>
                                                                p.Dmlb == "SYPC_DZ" && p.Dmsb == sub.Ypyf);
                            var opFeeItem = new OpFeeDetailItem
                            {
                                itemNumber   = sub.Sbxh,
                                XMLB         = 1,
                                SFLB         = ypdz?.Hzyb_Sflb ?? "", //填充数据
                                DetailType   = 1,
                                ItemCode     = ypdz?.Ybbm ?? "",      //填充数据
                                ItemHospCode = $"{sub.Ypxh}-{sub.Ypcd}",
                                ItemHospName = sub.YkTypk.Ypmc,
                                Price        = sub.Ypdj,
                                Amount       = sub.Ypsl,
                                Amount_T     = sub.Cfts,
                                Unit         = sub.Yfdw,
                                Spec         = sub.Yfgg ?? "",
                                MedType      = ypjx?.Dmmc ?? "A001", //填充数据
                                ItemTotal    = sub.Hjje,
                                SelfDeal     = 0,
                                SelfPay      = 0,
                                DayTimes     = sypc?.Dmmc ?? "",                  //填充数据
                                Dosage       = (sub.Ycjl ?? 0) / sub.YkTypk.Ypjl, //填充数据
                                SelfPayRate  = 1,
                                QEZFBZ       = sub.Ybzfpb ?? 0,
                                DisAudNo_DJ  = sub.Spbh.ToString(),
                                Usage        = "口服"
                            };
                            feeItemList.Add(opFeeItem);
                        }
                    }
                    var opFee = new OpFeeDetail
                    {
                        Type     = 1,
                        Name     = item.Cflx == 3 ? "草药方" : "西(成)药方",
                        itemNo   = item.Cfsb,
                        itemCost = item.MsCf02.Sum(p => p.Hjje),
                        Item     = feeItemList
                    };
                    feeList.Add(opFee);
                }
            }

            return(feeList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取诊疗费用明细
        /// </summary>
        /// <param name="brid"></param>
        /// <param name="cfsj"></param>
        /// <returns></returns>
        private IList <OpFeeDetail> GetTreatFeeDetails(decimal brid, DateTime cfsj)
        {
            var yjmx = Ctx.MsYj01Set.Where(p => p.Zfpb == 0 && p.Kdrq >= cfsj && p.Fphm == null && p.Cfbz < 2 && p.Brid == brid)
                       .Include(p => p.MsYj02.Select(t => t.GyYlsf))
                       .ToList();
            var feeList = new List <OpFeeDetail>();

            if (yjmx.Any())
            {
                var ylxhList = new List <Decimal>();
                foreach (var item in yjmx)
                {
                    if (item.MsYj02.Any())
                    {
                        yjmx.ForEach(p =>
                        {
                            var enumerator = p.MsYj02.Select(x => x.Ylxh).Distinct();
                            ylxhList.AddRange(enumerator);
                        });

                        IList <YbFydz> ybFydzes = new List <YbFydz>();
                        if (ylxhList.Any())
                        {
                            ybFydzes = Ctx.YbFydzSet.Where(p => ylxhList.Contains(p.Fyxh)).ToList();
                        }
                        List <OpFeeDetailItem> feeDetailItems = new List <OpFeeDetailItem>();
                        foreach (var sub in item.MsYj02)
                        {
                            var ybFydz = ybFydzes.FirstOrDefault(p =>
                                                                 p.Fyxh == sub.Ylxh && p.Kssj <= item.Kdrq && (p.Zzsj == null || p.Zzsj >= item.Kdrq));
                            var fee = new OpFeeDetailItem
                            {
                                itemNumber   = sub.Sbxh,
                                XMLB         = 2,
                                SFLB         = ybFydz?.Hzyb_Sflb ?? "",
                                DetailType   = 2,
                                ItemCode     = ybFydz?.Ybbm ?? "",
                                ItemHospCode = sub.Ylxh.ToString(CultureInfo.InvariantCulture),
                                ItemHospName = sub.GyYlsf.Fymc,
                                SDFlag       = 0,
                                Price        = sub.Yldj,
                                Amount       = sub.Ylsl,
                                Amount_T     = 1,
                                Unit         = sub.GyYlsf.Fydw,
                                Spec         = "",
                                MedType      = "",
                                ItemTotal    = sub.Hjje,
                                SelfDeal     = 0,
                                SelfPay      = 0,
                                SelfPayRate  = 1,
                                DayTimes     = "1",
                                Dosage       = 1,
                                QEZFBZ       = sub.Ybzfpb == 1 ? 1 : 0,
                                DisAudNo_DJ  = sub.Spbh == null ? "" : sub.Spbh.ToString(),
                                Usage        = ""
                            };
                            feeDetailItems.Add(fee);
                        }
                        var opFee = new OpFeeDetail
                        {
                            Type     = 2,
                            Name     = "诊疗费用",
                            itemNo   = item.Yjxh,
                            itemCost = item.MsYj02.Sum(p => p.Hjje),
                            Item     = feeDetailItems
                        };
                        feeList.Add(opFee);
                    }
                }
            }
            return(feeList);
        }