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