Esempio n. 1
0
        /// <summary>
        /// 保存额度历史记录表数据
        /// </summary>
        /// <param name="monthBillRecord">额度历史数据</param>
        public void SaveMonthlyPayBillRecord(MonthlyPayBillRecord monthBillRecord)
        {
            Mapper.CreateMap <LTC_MONTHLYPAYBILLRECORD, MonthlyPayBillRecord>();
            Mapper.CreateMap <MonthlyPayBillRecord, LTC_MONTHLYPAYBILLRECORD>();
            var model = Mapper.Map <LTC_MONTHLYPAYBILLRECORD>(monthBillRecord);

            unitOfWork.GetRepository <LTC_MONTHLYPAYBILLRECORD>().Insert(model);
            unitOfWork.Save();
        }
Esempio n. 2
0
        /// <summary>
        /// 无额度信息生成账单
        /// </summary>
        /// <param name="billV2">使用记录信息</param>
        /// <param name="item">时间集合</param>
        /// <param name="isHaveNCI">是否拥有护理险资格</param>
        /// <param name="billInfo">账单数据</param>
        public void NotHasQuotaInfo(BillV2Info billV2, KeyValueForDate item, bool isHaveNCI, BillV2 billInfo, string idNo)
        {
            var feeRecordYearMonth = billV2.feeRecordList.Where(m => m.TakeTime >= item.startDate && m.TakeTime <= item.endtDate.AddDays(1).AddSeconds(-1)).ToList();

            if (feeRecordYearMonth != null && feeRecordYearMonth.Count > 0)
            {
                decimal payedAmount = 0;                                                                     //累计额度

                var selfPay          = feeRecordYearMonth.Where(m => m.IsNCIItem == false).Sum(m => m.Cost); //自费项目总费用
                var nciItemTotalCost = feeRecordYearMonth.Where(m => m.IsNCIItem == true).Sum(m => m.Cost);  // 护理险项目总费用

                int hospDay     = GetDiffDateDays(item.startDate, item.endtDate);
                var nciPayLevel = billInfo.NCIPAYLEVEL;
                var nciPaysCale = billInfo.NCIPAYSCALE;

                // 是否拥有护理资格
                if (isHaveNCI)
                {
                    #region  护理险资格
                    #region 账单数据更新
                    billInfo.SELFPAY          += Convert.ToDecimal(selfPay);
                    billInfo.NCIITEMTOTALCOST += Convert.ToDecimal(nciItemTotalCost);
                    billInfo.HOSPDAY          += hospDay;

                    var nciPayCost = Convert.ToDecimal(hospDay * Convert.ToDecimal(nciPayLevel) * Convert.ToDecimal(nciPaysCale)); // 护理险最多可报销的费用

                    if (Convert.ToDecimal(nciItemTotalCost) <= nciPayCost)
                    {
                        billInfo.NCIPAY         += Convert.ToDecimal(nciItemTotalCost);
                        payedAmount              = Convert.ToDecimal(nciItemTotalCost);
                        billInfo.NCIITEMSELFPAY += Convert.ToDecimal(selfPay);
                    }
                    else
                    {
                        billInfo.NCIPAY         += Convert.ToDecimal(nciPayCost);
                        payedAmount              = Convert.ToDecimal(nciPayCost);
                        billInfo.NCIITEMSELFPAY += Convert.ToDecimal(selfPay + Convert.ToDecimal(nciItemTotalCost) - nciPayCost);
                    }
                    #endregion

                    #region 保存额度信息表 和 额度历史记录表  和 住民账户表
                    #region 保存额度信息表
                    MonthlyPayLimit monthLimit = new MonthlyPayLimit();
                    monthLimit.YEARMONTH    = string.Format("{0}{1}", item.startDate.Year, item.startDate.Month);
                    monthLimit.FEENO        = billInfo.FEENO;
                    monthLimit.RESIDENTSSID = idNo;
                    monthLimit.PAYEDAMOUNT  = payedAmount;
                    monthLimit.NCIPAYLEVEL  = nciPayLevel;
                    monthLimit.NCIPAYSCALE  = nciPaysCale;
                    monthLimit.ORGID        = SecurityHelper.CurrentPrincipal.OrgId;
                    monthLimit.CREATEBY     = SecurityHelper.CurrentPrincipal.UserId.ToString();
                    monthLimit.CREATETIME   = DateTime.Now;
                    int payLimitId = SaveMonthlyPayLimit(monthLimit);
                    #endregion
                    #region 保存额度历史记录表
                    MonthlyPayBillRecord monthBillRecord = new MonthlyPayBillRecord();
                    monthBillRecord.BILLID        = billInfo.BILLID;
                    monthBillRecord.YEARMONTH     = string.Format("{0}{1}", item.startDate.Year, item.startDate.Month);
                    monthBillRecord.FEENO         = billInfo.FEENO;
                    monthBillRecord.PAYEDAMOUNT   = payedAmount;
                    monthBillRecord.COMPSTARTDATE = item.startDate;
                    monthBillRecord.COMPENDDATE   = item.endtDate;
                    monthBillRecord.STATUS        = 0;
                    monthBillRecord.CREATEBY      = SecurityHelper.CurrentPrincipal.UserId.ToString();
                    monthBillRecord.CREATETIME    = DateTime.Now;
                    monthBillRecord.ISDELETE      = false;
                    SaveMonthlyPayBillRecord(monthBillRecord);
                    #endregion
                    #region 更新住民账户信息
                    var banmodel = unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().dbSet.Where(x => x.FEENO == billInfo.FEENO).FirstOrDefault();
                    if (banmodel != null)
                    {
                        banmodel.TOTALCOST   = banmodel.TOTALCOST == null ? 0 : banmodel.TOTALCOST + selfPay + nciItemTotalCost;
                        banmodel.TOTALNCIPAY = banmodel.TOTALNCIPAY == null ? 0 : banmodel.TOTALNCIPAY + payedAmount;
                        unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().Update(banmodel);
                        unitOfWork.Save();
                    }
                    #endregion
                    #endregion
                    #endregion
                }
                else
                {
                    #region 无护理险资格
                    billInfo.SELFPAY          += Convert.ToDecimal(selfPay);
                    billInfo.NCIITEMTOTALCOST += Convert.ToDecimal(nciItemTotalCost);
                    billInfo.NCIPAY           += 0;
                    billInfo.HOSPDAY          += hospDay;
                    billInfo.NCIITEMSELFPAY   += Convert.ToDecimal(selfPay + nciItemTotalCost);
                    var banmodel = unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().dbSet.Where(x => x.FEENO == billInfo.FEENO).FirstOrDefault();
                    if (banmodel != null)
                    {
                        banmodel.TOTALCOST = banmodel.TOTALCOST == null ? 0 : banmodel.TOTALCOST + selfPay + nciItemTotalCost;
                        unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().Update(banmodel);
                        unitOfWork.Save();
                    }
                    #endregion
                }
            }
        }
Esempio n. 3
0
        public void HasQuotaInfo(BillV2Info billV2, KeyValueForDate item, bool isHaveNCI, BillV2 billInfo, string idNo)
        {
            var feeRecordYearMonth = billV2.feeRecordList.Where(m => m.TakeTime >= item.startDate && m.TakeTime <= item.endtDate.AddDays(1).AddSeconds(-1)).ToList();

            if (feeRecordYearMonth != null && feeRecordYearMonth.Count > 0)
            {
                #region 已有额度信息
                var yearMonth = string.Format("{0}{1}", item.startDate.Year, item.startDate.Month);
                Mapper.CreateMap <LTC_MONTHLYPAYLIMIT, MonthlyPayLimit>();
                var limit         = unitOfWork.GetRepository <LTC_MONTHLYPAYLIMIT>().dbSet.FirstOrDefault(m => m.FEENO == billInfo.FEENO && m.YEARMONTH == yearMonth);
                var monthlyRecord = Mapper.Map <MonthlyPayLimit>(limit);
                #endregion
                #region 额度历史记录
                Mapper.CreateMap <LTC_MONTHLYPAYBILLRECORD, MonthlyPayBillRecord>();
                var record       = unitOfWork.GetRepository <LTC_MONTHLYPAYBILLRECORD>().dbSet.Where(m => m.FEENO == billInfo.FEENO && m.YEARMONTH == yearMonth);
                var payLimitList = Mapper.Map <List <MonthlyPayBillRecord> >(record.ToList());
                #endregion
                #region 最新一笔费用信息

                decimal payedAmount = 0;                                                                     //累计额度

                var selfPay          = feeRecordYearMonth.Where(m => m.IsNCIItem == false).Sum(m => m.Cost); //自费项目总费用
                var nciItemTotalCost = feeRecordYearMonth.Where(m => m.IsNCIItem == true).Sum(m => m.Cost);  // 护理险项目总费用

                var nciPayLevel = billInfo.NCIPAYLEVEL;
                var nciPaysCale = billInfo.NCIPAYSCALE;
                var hospDay     = GetDiffDateDays(item.startDate, item.endtDate);
                int maxPayDays  = GetRangeHospDay(Convert.ToDateTime(payLimitList.Min(m => m.COMPSTARTDATE)), Convert.ToDateTime(payLimitList.Max(m => m.COMPENDDATE)), item.startDate, item.endtDate);
                #endregion
                if (isHaveNCI)
                {
                    billInfo.SELFPAY          += Convert.ToDecimal(selfPay);
                    billInfo.NCIITEMTOTALCOST += Convert.ToDecimal(nciItemTotalCost);
                    billInfo.HOSPDAY          += hospDay;
                    var maxNCIPay    = Convert.ToDecimal(maxPayDays * Convert.ToDecimal(nciPayLevel) * Convert.ToDecimal(nciPaysCale)); //最大可报销费用
                    var nciPayedCost = maxNCIPay - monthlyRecord.PAYEDAMOUNT;                                                           //  剩余的报销费用
                    if (Convert.ToDecimal(nciItemTotalCost) <= nciPayedCost)
                    {
                        billInfo.NCIPAY         += Convert.ToDecimal(nciItemTotalCost);
                        payedAmount              = Convert.ToDecimal(nciItemTotalCost);
                        billInfo.NCIITEMSELFPAY += Convert.ToDecimal(selfPay);
                    }
                    else
                    {
                        billInfo.NCIPAY         += Convert.ToDecimal(nciPayedCost);
                        payedAmount              = Convert.ToDecimal(nciPayedCost);
                        billInfo.NCIITEMSELFPAY += Convert.ToDecimal(selfPay + Convert.ToDecimal(nciItemTotalCost) - nciPayedCost);
                    }

                    #region 修改额度信息表
                    Mapper.CreateMap <LTC_MONTHLYPAYLIMIT, MonthlyPayLimit>();
                    Mapper.CreateMap <MonthlyPayLimit, LTC_MONTHLYPAYLIMIT>();
                    var recordModel = Mapper.Map <LTC_MONTHLYPAYLIMIT>(monthlyRecord);
                    recordModel.PAYEDAMOUNT += payedAmount;
                    unitOfWork.GetRepository <LTC_MONTHLYPAYLIMIT>().Update(recordModel);
                    unitOfWork.Save();
                    #endregion

                    #region 保存额度历史记录表
                    MonthlyPayBillRecord monthBillRecord = new MonthlyPayBillRecord();
                    monthBillRecord.BILLID        = billInfo.BILLID;
                    monthBillRecord.YEARMONTH     = string.Format("{0}{1}", item.startDate.Year, item.startDate.Month);
                    monthBillRecord.FEENO         = billInfo.FEENO;
                    monthBillRecord.PAYEDAMOUNT   = payedAmount;
                    monthBillRecord.COMPSTARTDATE = item.startDate;
                    monthBillRecord.COMPENDDATE   = item.endtDate;
                    monthBillRecord.STATUS        = 0;
                    monthBillRecord.CREATEBY      = SecurityHelper.CurrentPrincipal.UserId.ToString();
                    monthBillRecord.CREATETIME    = DateTime.Now;
                    monthBillRecord.ISDELETE      = false;
                    SaveMonthlyPayBillRecord(monthBillRecord);
                    #endregion

                    #region 更新住民账户信息
                    var banmodel = unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().dbSet.Where(x => x.FEENO == billInfo.FEENO).FirstOrDefault();
                    if (banmodel != null)
                    {
                        banmodel.TOTALCOST   = banmodel.TOTALCOST == null ? 0 : banmodel.TOTALCOST + selfPay + nciItemTotalCost;
                        banmodel.TOTALNCIPAY = banmodel.TOTALNCIPAY == null ? 0 : banmodel.TOTALNCIPAY + payedAmount;
                        unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().Update(banmodel);
                        unitOfWork.Save();
                    }
                    #endregion
                }
                else
                {
                    #region 无护理险资格
                    billInfo.SELFPAY          += Convert.ToDecimal(selfPay);
                    billInfo.NCIITEMTOTALCOST += Convert.ToDecimal(nciItemTotalCost);
                    billInfo.NCIPAY           += 0;
                    billInfo.HOSPDAY          += hospDay;
                    billInfo.NCIITEMSELFPAY   += Convert.ToDecimal(selfPay + nciItemTotalCost);
                    var banmodel = unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().dbSet.Where(x => x.FEENO == billInfo.FEENO).FirstOrDefault();
                    if (banmodel != null)
                    {
                        banmodel.TOTALCOST = banmodel.TOTALCOST == null ? 0 : banmodel.TOTALCOST + selfPay + nciItemTotalCost;
                        unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().Update(banmodel);
                        unitOfWork.Save();
                    }

                    #endregion
                }
            }
        }