/// <summary> /// 检索数据 /// </summary> /// <param name="filter"></param> /// <param name="responseEntity"></param> public void PayAccount(PayAccountFilter filter, ResponseEntity responseEntity) { if (filter == null) { ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.RequestCommandError); return; } string message = ""; string guid = Guid.NewGuid().ToString(); if (!string.IsNullOrEmpty(filter.JsonString)) { if (!BusinessHelper.JsonToReceivedItem(filter, guid)) { message = "错误,实收金额不允许大于应收金额!"; ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Others, message); m_Logger.Info(message); return; } } // 更新订单、帐单信息 filter.BusinessID = filter.BusinessID; filter.Guid = guid; if (Singleton <BusinessSaveDAL> .Instance.Update(filter) > 0) { ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Success); } else { ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Others); } }
/// <summary> /// 针对已存在的帐单科目添加调整款项 /// </summary> /// <param name="bills"></param> /// <param name="tempReceived"></param> /// <param name="tempBillItems"></param> /// <param name="receivedList"></param> /// <param name="filter"></param> private static void AddReceivedItem(List <JsonBill> bills , List <Received> tempReceived , List <string> tempBillItems , List <Received> receivedList , PayAccountFilter filter) { bills.ForEach(p => { p.Subjects.ForEach( o => { o.BillID = p.BillId; o.CreateTime = DateTime.Now; o.ReceivedTime = filter.RecTime; o.OperatorID = filter.UserId; o.Explain = filter.Explain; if (o.TempBillItemID.Contains('_')) { tempReceived.Add(o); if (!tempBillItems.Contains(o.TempBillItemID)) { tempBillItems.Add(o.TempBillItemID); } } else { o.BillItemID = long.Parse(o.TempBillItemID); receivedList.Add(o); } }); }); }
/// <summary> /// 针对刚创建的帐单科目添加调整款项 /// </summary> /// <param name="tempReceived"></param> /// <param name="tempBillItems"></param> /// <param name="receivedList"></param> /// <param name="filter"></param> private static void AddBillItemAndReceivedItem(List <Received> tempReceived , List <string> tempBillItems , List <Received> receivedList , List <BillItem> billItems , PayAccountFilter filter) { if (tempBillItems.Count > 0) { foreach (var strbillItem in tempBillItems) { var arr = strbillItem.Split('_'); var billItem = new BillItem { BillID = arr[0].ToLong(), CreateTime = DateTime.Now, Subject = arr[1].ToByte(), SubjectType = (byte)EnumSubjectKind.Supplement, Amount = arr[2].ToDecimal(), DueAmt = arr[2].ToDecimal(), OperatorID = filter.UserId, }; billItems.Add(billItem); } receivedList.AddRange(tempReceived); } }
/// <summary> /// 为提前清贷订单进行自动填帐收款 /// </summary> /// <param name="business"></param> /// <param name="payid"></param> /// <param name="filter"></param> /// <param name="lstUpdateItem"></param> /// <param name="lstReceived"></param> protected void AutoReceivedByCLoan(Business business, int payid, PayAccountFilter filter , List <UpdateItem> lstUpdateItem, List <Received> lstReceived) { var bills = BillDAL.GetArrearsBills(business.Bills); CloanApply apply = null; var lstApply = Singleton <CloanApplyDetailDAL <CloanApply> > .Instance.SearchData(filter); if (lstApply == null || lstApply.Count == 0) { return; } apply = lstApply[0]; IEnumerable <CloanApplyItem> items = new List <CloanApplyItem>(); if (apply != null) { filter.CloanApplyID = apply.CloanApplyID; apply.CloanApplyItems = Singleton <CloanApplyItemDetailDAL <CloanApplyItem> > .Instance.SearchData(filter); items = apply.CloanApplyItems.Where(p => p.IsAnnul); } if (bills.Count > 0) { if (items.Count() > 0)//有减免项,先做减免 { //提前清贷服务费重置为不包括减免金额 Bill advbill = bills.FirstOrDefault(p => p.BillType == (byte)EnumBillKind.Advance); BillItem billitem = advbill.BillItems.FirstOrDefault(p => p.Subject == (byte)EnumCostSubject.AdvServiceFee); billitem.DueAmt = billitem.DueAmt + items.Sum(p => p.Amount); lstUpdateItem.Add(new UpdateItem { Id = billitem.BillItemID, Amount = billitem.DueAmt, Type = 2 }); //billItemDAL.Update(billitem); foreach (var item in items) { AnnulBillItemBySubAndAmount(bills, item.Subject, item.Amount, payid, DateTime.Now, lstReceived, lstUpdateItem); } } foreach (var bill in bills) { FtpAdvRecevied(bill.BillItems.Where(p => p.DueAmt - p.ReceivedAmt > 0).ToList(), payid, DateTime.Now , filter.UserId, filter.Explain, lstReceived, lstUpdateItem, EnumAdjustKind.Transfer); } //apply.CloanApplyStatus = (byte)EnumCloanApplyStatus.Success; //cLoanApplyDAL.Update(apply); } else { m_Logger.Error("提前清贷出错,未找到相应账单:" + business.BusinessID);; } }
/// <summary> /// 获取更新数据库存储过程的参数 /// </summary> /// <param name="baseFilter"></param> /// <returns></returns> protected override IDictionary <string, object> GetUpdateSpInParams(BaseFilter baseFilter) { PayAccountFilter filter = baseFilter as PayAccountFilter; if (filter == null) { return(null); } IDictionary <string, object> inPutParam = new Dictionary <string, object>(); inPutParam.Add("@BusinessID", filter.BusinessID); inPutParam.Add("@Guid", filter.Guid); return(inPutParam); }
/// <summary> /// 将json字符串转换成调整科目 /// </summary> /// <param name="filter"></param> /// <param name="guid"></param> /// <returns></returns> public static bool JsonToReceivedItem(PayAccountFilter filter, string guid) { try { var bills = JsonConvert.DeserializeObject <List <JsonBill> >(filter.JsonString); var tempReceived = new List <Received>(); var tempBillItems = new List <string>(); var receivedList = new List <Received>(); var billItems = new List <BillItem>(); AddReceivedItem(bills, tempReceived, tempBillItems, receivedList, filter); AddBillItemAndReceivedItem(tempReceived, tempBillItems, receivedList, billItems, filter); BusinessHelper.SaveReceivedTempDataBase(guid, receivedList); BusinessHelper.SaveBillItemTempDataBase(guid, billItems); return(CreateReceivedItem(receivedList, guid)); } catch (Exception ex) { throw ex; } }
/// <summary> /// 检索数据 /// </summary> /// <param name="filter"></param> /// <param name="responseEntity"></param> public void PayAccount(PayAccountFilter filter, ResponseEntity responseEntity) { if (filter == null) { ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.RequestCommandError); return; } string message = ""; string guid = Guid.NewGuid().ToString(); if (!string.IsNullOrEmpty(filter.JsonString)) { if (!BusinessHelper.JsonToReceivedItem(filter, guid)) { message = "错误,实收金额不允许大于应收金额!"; ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Others, message); m_Logger.Info(message); return; } } if (filter.Amout > 0) { // 获取订单信息 Business business = BusinessHelper.GetBusinessInfo(filter); List <UpdateItem> lstUpdateItem = new List <UpdateItem>(); List <Received> lstReceived = new List <Received>(); // 根据不同订单清贷状态分别处理 if (business.CLoanStatus == (byte)EnumCLoanStatus.AdvanceProcess) { #region 提前清贷自动填帐 var bills = BillDAL.GetArrearsBills(business.Bills); var countAmout = bills.Sum(b => b.BillItems.Sum(i => i.DueAmt - i.ReceivedAmt)); // 提前清贷订单自定义付款金额必须大于等于提前清贷总额 if (filter.Amout < countAmout) { message = "抱歉,您的输入金额不足,提前清贷订单【欠费:" + countAmout + "】必须足额支付!"; ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Others, message); m_Logger.Info(message); return; } AutoReceivedByCLoan(business, 0, filter, lstUpdateItem, lstReceived); // 插入临时表数据 BusinessHelper.SaveUpdateItemTempDataBase(guid, lstUpdateItem); BusinessHelper.SaveReceivedTempDataBase(guid, lstReceived); // 更新订单、帐单信息 filter.UpdateCloanApplyStatus = 1; filter.Guid = guid; Singleton <BusinessPayAccountDAL> .Instance.Update(filter); // 更新订单、帐单信息 //UpdateBusinessInfo(filter, responseEntity); //decimal losAmt = filter.Amout - countAmout; var result = new PayAccountResultViewData(); result.LostAmt = filter.Amout - countAmout; var responseResult = new ResponseListResult <PayAccountResultViewData>(); responseResult.TotalCount = 1; responseResult.LstResult = new List <PayAccountResultViewData>(); responseResult.LstResult.Add(result); responseEntity.Results = responseResult; responseEntity.ResponseStatus = (int)EnumResponseState.Success; return; #endregion } else if (business.CLoanStatus == (byte)EnumCLoanStatus.Refunding) { #region 普通账单自动填帐 VcreditProduct s = null; if (business.ProductType == 8) { s = new JingAnMortgageLoan(business); } else if (business.ProductType == 9) { s = new JingAnUnMortgageLoan(business); } else { s = new UnsecuredLoan(business); } //成都填充项判断 List <BillItem> list = s.GetFillItems(filter.Amout); if (list == null || list.Count < 1) { message = "金额不足,无法填充款项!"; ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Others, message); m_Logger.Info(message); return; } decimal couAcmou = 0; //余额 foreach (var item in list) { decimal ssrmt = item.DueAmt - item.ReceivedAmt; couAcmou += ssrmt; item.ReceivedAmt = item.DueAmt; item.FullPaidTime = filter.Dectime; lstUpdateItem.Add(new UpdateItem { Id = item.BillItemID, Amount = item.DueAmt, FullPaidTime = filter.Dectime, Type = 3 }); //_FinanceFactory.CreateBillItemDAL().Update(item); //_FinanceContext.SaveChanges(); lstReceived.Add(new Received { BillID = item.BillID, BillItemID = item.BillItemID, Amount = ssrmt, CreateTime = DateTime.Now, OperatorID = filter.UserId, PayID = 0, ReceivedTime = filter.Dectime, ReceivedType = (byte)EnumAdjustKind.Transfer, DeductionID = 0, Explain = "" }); } // 插入临时表数据 BusinessHelper.SaveUpdateItemTempDataBase(guid, lstUpdateItem); BusinessHelper.SaveReceivedTempDataBase(guid, lstReceived); // 更新订单、帐单信息 filter.UpdateCloanApplyStatus = 0; filter.Guid = guid; Singleton <BusinessPayAccountDAL> .Instance.Update(filter); // 更新订单、帐单信息 //UpdateBusinessInfo(filter, responseEntity); //decimal losAmt = filter.Amout - couAcmou; var result = new PayAccountResultViewData(); result.LostAmt = filter.Amout - couAcmou; var responseResult = new ResponseListResult <PayAccountResultViewData>(); responseResult.TotalCount = 1; responseResult.LstResult = new List <PayAccountResultViewData>(); responseResult.LstResult.Add(result); responseEntity.Results = responseResult; responseEntity.ResponseStatus = (int)EnumResponseState.Success; //ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Success); #endregion } else { message = "抱歉,当前的订单状态不允许手工扣款!"; ServiceUtility.SetResponseStatus(responseEntity, EnumResponseState.Others, message); m_Logger.Info(message); return; } } }
/// <summary> /// 更新业务信息 /// </summary> /// <param name="filter"></param> /// <param name="responseEntity"></param> private void UpdateBusinessInfo(PayAccountFilter filter, ResponseEntity responseEntity) { // 订单更新 Singleton <BaseUpdateBLL <BusinessUpdateInfoDAL> > .Instance.UpdateData(filter, responseEntity); }