예제 #1
0
        public object QueryYearMonthMonFeeInfo(BillV2 request)
        {
            var response = new MonFeeModel();

            Mapper.CreateMap <NCIP_NSMONFEE, MonFeeModel>();
            var model = unitOfWork.GetRepository <NCIP_NSMONFEE>().dbSet.FirstOrDefault(m => m.NSNO == request.OrgId && m.ISDELETE != true && m.YEARMONTH == request.BillMonth);

            response = Mapper.Map <MonFeeModel>(model);
            return(response);
        }
예제 #2
0
 public async Task<object> CancelMonthData(string yearMonth)
 {
     var http = HttpClientHelper.LtcHttpClient;
     var request = new BillV2();
     request.BillMonth = yearMonth;
     request.OrgId = SecurityHelper.CurrentPrincipal.OrgId ;
     var monFeeInfo = new MonFeeModel();
     try
     {
         var result = await http.PostAsJsonAsync("/api/monFee/GetNsMonfee", request);
         var resultContent = await result.Content.ReadAsStringAsync();
         monFeeInfo = JsonConvert.DeserializeObject<MonFeeModel>(resultContent);
     }
     catch (Exception ex)
     {
         throw ex;
     }
     return monFeeInfo;
 }
예제 #3
0
        public BillV2 GetYearMonthFees(BillV2Info request, BillV2 billv2, bool isHaveNCI)
        {
            var keyDateList = GetDiffDateRange(request.STime, request.ETime.AddDays(1).AddSeconds(-1));

            //身份证号码
            var q = from ipd in unitOfWork.GetRepository <LTC_IPDREG>().dbSet
                    where ipd.FEENO == request.Feeno && ipd.ORGID == SecurityHelper.CurrentPrincipal.OrgId
                    join reg in unitOfWork.GetRepository <LTC_REGFILE>().dbSet on ipd.REGNO equals reg.REGNO into bs
                    from b in bs.DefaultIfEmpty()
                    select new Person
            {
                IdNo = b.IDNO,
            };

            var idNo = q.FirstOrDefault().IdNo;

            #region 年月分段
            foreach (var item in keyDateList)
            {
                var yearMonth = string.Format("{0}{1}", item.startDate.Year, item.startDate.Month);
                // 查询额度信息

                Mapper.CreateMap <LTC_MONTHLYPAYLIMIT, MonthlyPayLimit>();
                var lim       = unitOfWork.GetRepository <LTC_MONTHLYPAYLIMIT>().dbSet.Where(m => m.FEENO == request.Feeno && m.ORGID == SecurityHelper.CurrentPrincipal.OrgId && m.YEARMONTH == yearMonth).ToList();
                var limitList = Mapper.Map <List <MonthlyPayLimit> >(lim);

                if (limitList != null && limitList.Count > 0)
                {
                    #region  额度数据
                    HasQuotaInfo(request, item, isHaveNCI, billv2, idNo);
                    #endregion
                }
                else
                {
                    #region 无额度数据
                    NotHasQuotaInfo(request, item, isHaveNCI, billv2, idNo);
                    #endregion
                }
            }
            return(billv2);

            #endregion
        }
예제 #4
0
        public BaseResponse <BillV2> SaveBillV2(BillV2 request, string UpdateBy, DateTime UpdateDate)
        {
            var newItem = new BillV2()
            {
                BillId           = request.BillId,
                BillPayId        = request.BillPayId,
                ReFundRecordId   = request.ReFundRecordId,
                FeeNo            = request.FeeNo,
                NCIItemTotalCost = request.NCIItemTotalCost,
                SelfPay          = request.SelfPay,
                NCIPayLevel      = request.NCIPayLevel,
                NCIPaysCale      = request.NCIPaysCale,
                NCIPay           = request.NCIPay,
                NCIItemSelfPay   = request.NCIItemSelfPay,
                BalanceStartTime = request.BalanceStartTime,
                BalanceEndTime   = request.BalanceEndTime,
                HospDay          = request.HospDay,
                Status           = 2,
                BillCreator      = request.BillCreator,
                BalanceOperator  = request.BalanceOperator,
                RefundOperator   = request.RefundOperator,
                CreateBy         = request.CreateBy,
                CreateTime       = request.CreateTime,
                UpdateBy         = UpdateBy,
                UpdateTime       = UpdateDate,
                IsDelete         = request.IsDelete,
            };

            if (newItem.BillId != null)
            {
                var billInfo = unitOfWork.GetRepository <LTC_BILLV2>().dbSet.Where(m => m.BILLID == newItem.BillId).FirstOrDefault();
                if (billInfo != null)
                {
                    unitOfWork.GetRepository <LTC_BILLV2>().Update(billInfo);
                    unitOfWork.Save();
                }
            }
            ;
            return(base.Save <LTC_BILLV2, BillV2>(newItem, (q) => q.BILLID == newItem.BillId));
        }
예제 #5
0
        public IHttpActionResult GetNsMonfee(BillV2 request)
        {
            var response = service.QueryYearMonthMonFeeInfo(request);

            return(Ok(response));
        }
예제 #6
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
                }
            }
        }
예제 #7
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
                }
            }
        }
예제 #8
0
        /// <summary>
        /// 保存费用录入信息
        /// </summary>
        /// <param name="request">请求数据</param>
        /// <returns>返回信息</returns>
        public BaseResponse <List <FeeRecordBaseInfo> > SaveFeeRecord(BillV2Info request)
        {
            BaseResponse <List <FeeRecordBaseInfo> > response = new BaseResponse <List <FeeRecordBaseInfo> >();

            if (request.feeRecordList != null && request.feeRecordList.Count > 0)
            {
                #region 住民账户信息
                Mapper.CreateMap <LTC_RESIDENTBALANCE, ResidentBalance>();
                var bal     = unitOfWork.GetRepository <LTC_RESIDENTBALANCE>().dbSet.FirstOrDefault(m => m.FEENO == request.Feeno && m.STATUS == 0);
                var balance = Mapper.Map <ResidentBalance>(bal);

                bool isHaveNCI = balance.ISHAVENCI == 0 ? true : false;
                #endregion

                #region 账单初始化数据
                BillV2 billv2 = new BillV2();
                billv2.BILLID           = String.Format("{0}{1}", SecurityHelper.CurrentPrincipal.OrgId, DateTime.Now.ToString("yyyyMMddHHmmss")); //账单ID
                billv2.BILLPAYID        = null;
                billv2.REFUNDRECORDID   = null;
                billv2.FEENO            = Convert.ToInt32(request.Feeno);
                billv2.NCIITEMTOTALCOST = 0;
                billv2.SELFPAY          = 0;
                billv2.NCIPAYLEVEL      = balance.NCIPAYLEVEL;
                billv2.NCIPAYSCALE      = balance.NCIPAYSCALE;
                billv2.NCIPAY           = 0;
                billv2.NCIITEMSELFPAY   = 0;
                billv2.BALANCESTARTTIME = request.STime;
                billv2.BALANCEENDTIME   = request.ETime;
                billv2.HOSPDAY          = 0;
                billv2.BILLCREATOR      = SecurityHelper.CurrentPrincipal.UserId.ToString();
                billv2.BALANCEOPERATOR  = string.Empty;
                billv2.REFUNDOPERATOR   = string.Empty;
                billv2.CREATEBY         = SecurityHelper.CurrentPrincipal.UserId.ToString();
                billv2.CREATETIME       = DateTime.Now;
                billv2.UPDATEBY         = string.Empty;
                billv2.UPDATETIME       = null;
                billv2.ISDELETE         = false;
                #endregion

                var billv2Info = GetYearMonthFees(request, billv2, isHaveNCI);

                Mapper.CreateMap <BillV2, LTC_BILLV2>();
                var billModel = Mapper.Map <LTC_BILLV2>(billv2Info);
                unitOfWork.GetRepository <LTC_BILLV2>().Insert(billModel);
                unitOfWork.Save();

                #region 费用记录
                foreach (var item in request.feeRecordList)
                {
                    LTC_FEERECORD model = new LTC_FEERECORD();
                    model.FEERECORDID      = String.Format("{0}{1}{2}{3}", SecurityHelper.CurrentPrincipal.OrgId, DateTime.Now.ToString("yyyyMMddHHmmss"), item.ChargeRecordType, item.ChargeRecordID);
                    model.BILLID           = billv2.BILLID;
                    model.CREATEBY         = SecurityHelper.CurrentPrincipal.UserId.ToString();
                    model.CREATETIME       = DateTime.Now;
                    model.ISDELETE         = false;
                    model.FEENO            = item.FeeNo;
                    model.CHARGERECORDTYPE = item.ChargeRecordType;
                    model.CHARGERECORDID   = item.ChargeRecordID;
                    model.UNITPRICE        = item.UnitPrice;
                    model.COUNT            = item.Count;
                    model.COST             = Convert.ToDecimal(item.Cost);
                    model.ISNCIITEM        = item.IsNCIItem;
                    model.ISREFUNDRECORD   = false;
                    unitOfWork.GetRepository <LTC_FEERECORD>().Insert(model);
                }
                unitOfWork.Save();
                response.ResultCode    = 1001;
                response.ResultMessage = "生成账单成功,请到费用查询中进行查看!";
                #endregion
            }
            else
            {
                response.ResultCode    = -1;
                response.ResultMessage = "未查询到有效的使用记录数据!";
            }
            return(response);
        }