Пример #1
0
        /// <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);
            }
        }
Пример #2
0
 /// <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);
             }
         });
     });
 }
Пример #3
0
 /// <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);;
            }
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
 }