/// <summary>
 /// 将页面内控件的值赋值给基类的_payBillManager
 /// </summary>
 private void SetCardCtrlsToDetailDS()
 {
     _payBillManager = new MDLFM_PayBill()
     {
         PB_PayTypeName            = cbPayTypeName.Text,
         PB_PayTypeCode            = cbPayTypeName.Value?.ToString() ?? "",
         PB_Remark                 = txtRemark.Text,
         PB_CertificateNo          = txtPayCertificateNo.Text,
         PB_PayableTotalAmount     = Convert.ToDecimal(txtPayableTotalAmount.Text.Trim() == "" ? "0" : txtPayableTotalAmount.Text.Trim()),
         PB_RealPayableTotalAmount = Convert.ToDecimal(numThisPayAmount.Value ?? 0)
     };
 }
 /// <summary>
 /// 生成选中项的值和描述
 /// </summary>
 void GenerateSelectedValueAndText()
 {
     SelectedGridList = new List <MDLFM_PayBill>();
     foreach (var loopSourceItem in ListGridDS)
     {
         if (!loopSourceItem.IsChecked)
         {
             continue;
         }
         MDLFM_PayBill argsPayBill = new MDLFM_PayBill
         {
             PB_ID = loopSourceItem.PB_ID,
             PB_No = loopSourceItem.PB_No,
             //PB_SourceTypeCode = loopSourceItem.PB_SourceTypeCode,
             //PB_SourceTypeName = loopSourceItem.PB_SourceTypeName,
             //PB_SrcBillNo = loopSourceItem.PB_SrcBillNo,
             PB_Pay_Org_ID             = loopSourceItem.PB_Pay_Org_ID,
             PB_Pay_Org_Name           = loopSourceItem.PB_Pay_Org_Name,
             PB_Date                   = loopSourceItem.PB_Date,
             PB_RecObjectTypeCode      = loopSourceItem.PB_RecObjectTypeCode,
             PB_RecObjectTypeName      = loopSourceItem.PB_RecObjectTypeName,
             PB_RecObjectID            = loopSourceItem.PB_RecObjectID,
             PB_RecObjectName          = loopSourceItem.PB_RecObjectName,
             PB_PayableTotalAmount     = loopSourceItem.PB_PayableTotalAmount,
             PB_RealPayableTotalAmount = loopSourceItem.PB_RealPayableTotalAmount,
             PB_PayAccount             = loopSourceItem.PB_PayAccount,
             PB_RecAccount             = loopSourceItem.PB_RecAccount,
             PB_PayTypeCode            = loopSourceItem.PB_PayTypeCode,
             PB_PayTypeName            = loopSourceItem.PB_PayTypeName,
             PB_CertificateNo          = loopSourceItem.PB_CertificateNo,
             PB_CertificatePic         = loopSourceItem.PB_CertificatePic,
             PB_BusinessStatusCode     = loopSourceItem.PB_BusinessStatusCode,
             PB_BusinessStatusName     = loopSourceItem.PB_BusinessStatusName,
             PB_ApprovalStatusCode     = loopSourceItem.PB_ApprovalStatusCode,
             PB_ApprovalStatusName     = loopSourceItem.PB_ApprovalStatusName,
             PB_Remark                 = loopSourceItem.PB_Remark,
             PB_IsValid                = loopSourceItem.PB_IsValid,
             PB_CreatedBy              = loopSourceItem.PB_CreatedBy,
             PB_CreatedTime            = loopSourceItem.PB_CreatedTime,
             PB_UpdatedBy              = loopSourceItem.PB_UpdatedBy,
             PB_UpdatedTime            = loopSourceItem.PB_UpdatedTime,
             PB_VersionNo              = loopSourceItem.PB_VersionNo
         };
         SelectedGridList.Add(argsPayBill);
     }
 }
        /// <summary>
        /// 保存数据
        /// </summary>
        /// <param name="paramPayable"></param>
        /// <param name="paramPayablePayConfirmList"></param>
        /// <returns></returns>
        public bool SavePayablePayConfirmData(MDLFM_PayBill paramPayable, List <PayablePayConfirmUIModel> paramPayablePayConfirmList)
        {
            var funcName = "SavePayableCashierConfirmData";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);

            #region 准备数据

            #region 变量定义

            //待保存的[付款单]
            MDLFM_PayBill insertPayBill = new MDLFM_PayBill();
            //待保存的[付款单明细]列表
            List <MDLFM_PayBillDetail> insertPayBillDetailList = new List <MDLFM_PayBillDetail>();
            //待更新的[应付单]列表
            List <MDLFM_AccountPayableBill> updateAccountPayableBillList = new List <MDLFM_AccountPayableBill>();
            //待更新的[应收单]列表
            List <MDLFM_AccountReceivableBill> updateAccountReceivableBillList = new List <MDLFM_AccountReceivableBill>();
            //待更新的[电子钱包]
            MDLEWM_Wallet updatewallet = new MDLEWM_Wallet();
            //待新增的[电子钱包异动]
            MDLEWM_WalletTrans insertwalletTrans = new MDLEWM_WalletTrans();

            #endregion

            #region 待保存的[付款单]

            insertPayBill.PB_ID           = Guid.NewGuid().ToString();
            insertPayBill.PB_No           = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.PB);
            insertPayBill.PB_Pay_Org_ID   = paramPayablePayConfirmList[0].BusinessOrgID;
            insertPayBill.PB_Pay_Org_Name = paramPayablePayConfirmList[0].BusinessOrgName;
            insertPayBill.PB_Date         = BLLCom.GetCurStdDatetime();

            insertPayBill.PB_RecObjectTypeCode = paramPayablePayConfirmList[0].ReceiveObjectTypeCode;
            insertPayBill.PB_RecObjectTypeName = paramPayablePayConfirmList[0].ReceiveObjectTypeName;
            insertPayBill.PB_RecObjectID       = paramPayablePayConfirmList[0].ReceiveObjectID;
            insertPayBill.PB_RecObjectName     = paramPayablePayConfirmList[0].ReceiveObjectName;

            insertPayBill.PB_PayableTotalAmount     = paramPayable.PB_PayableTotalAmount;
            insertPayBill.PB_RealPayableTotalAmount = paramPayable.PB_RealPayableTotalAmount;
            insertPayBill.PB_PayAccount             = paramPayable.PB_PayAccount;
            insertPayBill.PB_RecAccount             = paramPayable.PB_RecAccount;
            insertPayBill.PB_PayTypeName            = paramPayable.PB_PayTypeName;
            insertPayBill.PB_PayTypeCode            = paramPayable.PB_PayTypeCode;
            insertPayBill.PB_CertificateNo          = paramPayable.PB_CertificateNo;

            insertPayBill.PB_BusinessStatusName = ReceiptBillStatusEnum.Name.YWC;
            insertPayBill.PB_BusinessStatusCode = ReceiptBillStatusEnum.Code.YWC;
            insertPayBill.PB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            insertPayBill.PB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            insertPayBill.PB_Remark             = paramPayable.PB_Remark;
            insertPayBill.PB_IsValid            = true;
            insertPayBill.PB_CreatedBy          = LoginInfoDAX.UserName;
            insertPayBill.PB_CreatedTime        = BLLCom.GetCurStdDatetime();
            insertPayBill.PB_UpdatedBy          = LoginInfoDAX.UserName;
            insertPayBill.PB_UpdatedTime        = BLLCom.GetCurStdDatetime();

            #endregion

            #region 待保存的[付款单明细]列表,待更新[应收单]或[应付单]列表

            foreach (var loopItem in paramPayablePayConfirmList)
            {
                if (loopItem.ThisPayAmount == 0 && loopItem.UnPayTotalAmount != 0)
                {
                    continue;
                }

                #region 待保存的[付款单明细]

                MDLFM_PayBillDetail insertPayBillDetail = new MDLFM_PayBillDetail()
                {
                    PBD_ID          = Guid.NewGuid().ToString(),
                    PBD_PB_ID       = insertPayBill.PB_ID,
                    PBD_PB_No       = insertPayBill.PB_No,
                    PBD_PayAmount   = loopItem.ThisPayAmount,
                    PBD_CreatedBy   = LoginInfoDAX.UserName,
                    PBD_CreatedTime = BLLCom.GetCurStdDatetime(),
                    PBD_UpdatedBy   = LoginInfoDAX.UserName,
                    PBD_UpdatedTime = BLLCom.GetCurStdDatetime(),
                };
                insertPayBillDetail.PBD_SrcBillNo = loopItem.APB_SourceBillNo == "" ? loopItem.APB_No : loopItem.APB_SourceBillNo;
                if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.SHYF)
                {
                    insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.BZCG;
                    insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.BZCG;
                }
                else if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.CKYF)
                {
                    insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.THSK;
                    insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.THSK;
                }
                else if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.SGCJ)
                {
                    insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.SGFK;
                    insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.SGFK;
                }
                else if (loopItem.APB_SourceTypeName == AccountReceivableBillSourceTypeEnum.Name.XSYS)
                {
                    insertPayBillDetail.PBD_SourceTypeName = ReceiptBillDetailSourceTypeEnum.Name.XSSK;
                    insertPayBillDetail.PBD_SourceTypeCode = ReceiptBillDetailSourceTypeEnum.Code.XSSK;
                }
                else if (loopItem.APB_SourceTypeName == AccountReceivableBillSourceTypeEnum.Name.QTYS)
                {
                    insertPayBillDetail.PBD_SourceTypeName = ReceiptBillDetailSourceTypeEnum.Name.QTSK;
                    insertPayBillDetail.PBD_SourceTypeCode = ReceiptBillDetailSourceTypeEnum.Code.QTSK;
                }
                insertPayBillDetailList.Add(insertPayBillDetail);

                #endregion

                #region 待更新的[应付单]或[应收单]列表

                if (loopItem.IsBusinessSourceAccountPayableBill)
                {
                    #region 待更新的[应付单]列表

                    MDLFM_AccountPayableBill updateAccountPayableBill = new MDLFM_AccountPayableBill
                    {
                        APB_ID                   = loopItem.APB_ID,
                        APB_No                   = loopItem.APB_No,
                        APB_BillDirectCode       = loopItem.APB_BillDirectCode,
                        APB_BillDirectName       = loopItem.APB_BillDirectName,
                        APB_SourceTypeCode       = loopItem.APB_SourceTypeCode,
                        APB_SourceTypeName       = loopItem.APB_SourceTypeName,
                        APB_SourceBillNo         = loopItem.APB_SourceBillNo,
                        APB_Org_ID               = loopItem.APB_Org_ID,
                        APB_Org_Name             = loopItem.APB_Org_Name,
                        APB_AccountPayableAmount = loopItem.APB_AccountPayableAmount,
                        APB_ApprovalStatusCode   = loopItem.APB_ApprovalStatusCode,
                        APB_ApprovalStatusName   = loopItem.APB_ApprovalStatusName,
                        APB_CreatedBy            = loopItem.APB_CreatedBy,
                        APB_CreatedTime          = loopItem.APB_CreatedTime,
                        APB_UpdatedBy            = LoginInfoDAX.UserName,
                        APB_UpdatedTime          = BLLCom.GetCurStdDatetime(),
                        APB_VersionNo            = loopItem.APB_VersionNo,
                        WHERE_APB_ID             = loopItem.APB_ID,
                        WHERE_APB_VersionNo      = loopItem.APB_VersionNo
                    };
                    if (updateAccountPayableBill.APB_BillDirectName == BillDirectionEnum.Name.PLUS)
                    {
                        //已付金额
                        updateAccountPayableBill.APB_PaidAmount = (loopItem.APB_PaidAmount ?? 0) + Math.Abs(loopItem.ThisPayAmount ?? 0);
                    }
                    else
                    {
                        //已付金额
                        updateAccountPayableBill.APB_PaidAmount = (loopItem.APB_PaidAmount ?? 0) - Math.Abs(loopItem.ThisPayAmount ?? 0);
                    }
                    //未付金额
                    updateAccountPayableBill.APB_UnpaidAmount = (loopItem.APB_AccountPayableAmount ?? 0) - (updateAccountPayableBill.APB_PaidAmount ?? 0);

                    if (Math.Abs(updateAccountPayableBill.APB_PaidAmount ?? 0) >= Math.Abs(loopItem.APB_AccountPayableAmount ?? 0))
                    {
                        updateAccountPayableBill.APB_UnpaidAmount = 0;
                        //单据状态
                        updateAccountPayableBill.APB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.YWC;
                        updateAccountPayableBill.APB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.YWC;
                    }
                    updateAccountPayableBillList.Add(updateAccountPayableBill);

                    #endregion
                }
                else
                {
                    #region 待更新的[应收单]列表

                    MDLFM_AccountReceivableBill updateAccountReceivableBill = new MDLFM_AccountReceivableBill
                    {
                        ARB_ID                      = loopItem.APB_ID,
                        ARB_No                      = loopItem.APB_No,
                        ARB_BillDirectCode          = loopItem.APB_BillDirectCode,
                        ARB_BillDirectName          = loopItem.APB_BillDirectName,
                        ARB_SourceTypeCode          = loopItem.APB_SourceTypeCode,
                        ARB_SourceTypeName          = loopItem.APB_SourceTypeName,
                        ARB_SrcBillNo               = loopItem.APB_SourceBillNo,
                        ARB_Org_ID                  = loopItem.APB_Org_ID,
                        ARB_Org_Name                = loopItem.APB_Org_Name,
                        ARB_AccountReceivableAmount = loopItem.APB_AccountPayableAmount,
                        ARB_ApprovalStatusCode      = loopItem.APB_ApprovalStatusCode,
                        ARB_ApprovalStatusName      = loopItem.APB_ApprovalStatusName,
                        ARB_CreatedBy               = loopItem.APB_CreatedBy,
                        ARB_CreatedTime             = loopItem.APB_CreatedTime,
                        ARB_UpdatedBy               = LoginInfoDAX.UserName,
                        ARB_UpdatedTime             = BLLCom.GetCurStdDatetime(),
                        ARB_VersionNo               = loopItem.APB_VersionNo,
                        WHERE_ARB_ID                = loopItem.APB_ID,
                        WHERE_ARB_VersionNo         = loopItem.APB_VersionNo
                    };
                    if (updateAccountReceivableBill.ARB_BillDirectName == BillDirectionEnum.Name.PLUS)
                    {
                        //已收金额
                        updateAccountReceivableBill.ARB_ReceivedAmount = (loopItem.APB_PaidAmount ?? 0) + Math.Abs(loopItem.ThisPayAmount ?? 0);
                    }
                    else
                    {
                        //已收金额
                        updateAccountReceivableBill.ARB_ReceivedAmount = (loopItem.APB_PaidAmount ?? 0) - Math.Abs(loopItem.ThisPayAmount ?? 0);
                    }
                    //未收金额
                    updateAccountReceivableBill.ARB_UnReceiveAmount = (loopItem.APB_AccountPayableAmount ?? 0) - (updateAccountReceivableBill.ARB_ReceivedAmount ?? 0);

                    if (Math.Abs(updateAccountReceivableBill.ARB_ReceivedAmount ?? 0) >= Math.Abs(loopItem.APB_AccountPayableAmount ?? 0))
                    {
                        updateAccountReceivableBill.ARB_UnReceiveAmount = 0;
                        //单据状态
                        updateAccountReceivableBill.ARB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.YWC;
                        updateAccountReceivableBill.ARB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.YWC;
                    }
                    updateAccountReceivableBillList.Add(updateAccountReceivableBill);

                    #endregion
                }

                #endregion
            }

            #endregion

            #region 更新的[电子钱包]、新增的[电子钱包异动]

            if (paramPayable.PB_PayTypeName == TradeTypeEnum.Name.WALLET && (!string.IsNullOrEmpty(paramPayablePayConfirmList[0].Wal_ID)))
            {
                #region 待更新的[电子钱包]

                updatewallet.WHERE_Wal_ID         = paramPayablePayConfirmList[0].Wal_ID;
                updatewallet.WHERE_Wal_VersionNo  = paramPayablePayConfirmList[0].Wal_VersionNo;
                updatewallet.Wal_AvailableBalance = paramPayablePayConfirmList[0].Wal_AvailableBalance +
                                                    paramPayable.PB_RealPayableTotalAmount;
                updatewallet.Wal_VersionNo = paramPayablePayConfirmList[0].Wal_VersionNo + 1;

                #endregion

                #region 待新增的[电子钱包异动]

                insertwalletTrans.WalT_ID       = System.Guid.NewGuid().ToString();
                insertwalletTrans.WalT_Org_ID   = LoginInfoDAX.OrgID;
                insertwalletTrans.WalT_Org_Name = LoginInfoDAX.OrgShortName;
                insertwalletTrans.WalT_Wal_ID   = paramPayablePayConfirmList[0].Wal_ID;
                insertwalletTrans.WalT_Wal_No   = paramPayablePayConfirmList[0].Wal_No;
                insertwalletTrans.WalT_Time     = BLLCom.GetCurStdDatetime();
                insertwalletTrans.WalT_TypeCode = WalTransTypeEnum.Code.XF;
                insertwalletTrans.WalT_TypeName = WalTransTypeEnum.Name.XF;

                insertwalletTrans.WalT_Amount      = -paramPayable.PB_RealPayableTotalAmount;;
                insertwalletTrans.WalT_BillNo      = insertPayBill.PB_No;
                insertwalletTrans.WalT_IsValid     = true;
                insertwalletTrans.WalT_CreatedBy   = LoginInfoDAX.UserName;
                insertwalletTrans.WalT_CreatedTime = BLLCom.GetCurStdDatetime();
                insertwalletTrans.WalT_UpdatedBy   = LoginInfoDAX.UserName;
                insertwalletTrans.WalT_UpdatedTime = BLLCom.GetCurStdDatetime();

                #endregion
            }

            #endregion

            #endregion

            #region 带事务的保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存[付款单明细]

                bool insertPayBillResult = _bll.Insert(insertPayBill);
                if (!insertPayBillResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_PayBillDetail });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存[付款单明细]列表

                if (insertPayBillDetailList.Count > 0)
                {
                    bool insertPayBillDetailResult = _bll.InsertByList <MDLFM_PayBillDetail, MDLFM_PayBillDetail>(insertPayBillDetailList);
                    if (!insertPayBillDetailResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_PayBillDetail });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 更新[应付单]列表

                if (updateAccountPayableBillList.Count > 0)
                {
                    foreach (var loopAccountPayableBill in updateAccountPayableBillList)
                    {
                        bool updateAccountReceivableBill = _bll.Update(loopAccountPayableBill);
                        if (!updateAccountReceivableBill)
                        {
                            DBManager.RollBackTransaction(DBCONFIG.Coeus);
                            ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_AccountPayableBill });
                            LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                            return(false);
                        }
                    }
                }

                #endregion

                #region 更新[应收单]列表

                if (updateAccountReceivableBillList.Count > 0)
                {
                    foreach (var loopAccountReceivableBill in updateAccountReceivableBillList)
                    {
                        bool updateAccountReceivableBill = _bll.Update(loopAccountReceivableBill);
                        if (!updateAccountReceivableBill)
                        {
                            DBManager.RollBackTransaction(DBCONFIG.Coeus);
                            ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_AccountReceivableBill });
                            LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                            return(false);
                        }
                    }
                }

                #endregion

                #region 更新的[电子钱包]、新增的[电子钱包异动]

                if (paramPayable.PB_PayTypeName == TradeTypeEnum.Name.WALLET && (!string.IsNullOrEmpty(paramPayablePayConfirmList[0].Wal_ID)))
                {
                    #region 更新的[电子钱包]

                    bool updatewalletResult = _bll.Update(updatewallet);
                    if (!updatewalletResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.UPDATE + SystemTableEnums.Name.EWM_Wallet });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }

                    #endregion

                    #region 待新增的[电子钱包异动]

                    bool insertwalletTranslResult = _bll.Insert(insertwalletTrans);
                    if (!insertwalletTranslResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.EWM_WalletTrans });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }

                    #endregion
                }

                #endregion

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.SAVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ex.Message, "", null);
                return(false);
            }

            #endregion

            return(true);
        }
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="paramHead"></param>
        /// <param name="paramDetailList"></param>
        /// <returns></returns>
        public bool ApprovePayBill(PayBillManagerUIModel paramHead, SkyCarBindingList <PayBillManagerDetailUIModel, MDLFM_PayBillDetail> paramDetailList)
        {
            var funcName = "ApproveDetailDS";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);

            if (paramHead == null)
            {
                //没有获取到付款单,审核失败
                ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.FM_PayBill, SystemActionEnum.Name.APPROVE });
                return(false);
            }
            var payBillManagerDetailList =
                paramDetailList.Where(x => x.PBD_SourceTypeName == PayBillDetailSourceTypeEnum.Name.SGFK);

            if (payBillManagerDetailList.Count() != paramDetailList.Count() || payBillManagerDetailList.Count() == 0)
            {
                //收款单不为手工付款,不能审核
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0017, new object[] { SystemTableEnums.Name.FM_PayBill + MsgParam.NO + MsgParam.BE + PayBillDetailSourceTypeEnum.Name.SGFK, SystemActionEnum.Name.APPROVE });
                return(false);
            }

            #region 定义变量

            //待更新[付款单]
            MDLFM_PayBill updatePayBill = paramHead.ToTBModelForSaveAndDelete <MDLFM_PayBill>();
            //待更新[付款单明细]
            List <MDLFM_PayBillDetail> updatePayBillDetaillList = new List <MDLFM_PayBillDetail>();
            //待新增对应的[应付单]
            List <MDLFM_AccountPayableBill> addAccountPayableBillList = new List <MDLFM_AccountPayableBill>();
            //待新增对应的[应付单明细]
            List <MDLFM_AccountPayableBillDetail> addAccountPayableBillDetailList = new List <MDLFM_AccountPayableBillDetail>();
            //待更新的[钱包]
            MDLEWM_Wallet updateWallet = new MDLEWM_Wallet();
            //待新增的[钱包异动]
            MDLEWM_WalletTrans addWalletTrans = new MDLEWM_WalletTrans();

            #endregion

            #region 准备数据

            if (paramDetailList[0].PBD_SourceTypeName == PayBillDetailSourceTypeEnum.Name.SGFK)
            {
                #region 新增[应付单]和[应付单明细]

                foreach (var loopDetail in paramDetailList)
                {
                    #region 新增[应付单]

                    MDLFM_AccountPayableBill accountPayableBill = new MDLFM_AccountPayableBill
                    {
                        APB_ID                    = System.Guid.NewGuid().ToString(),
                        APB_No                    = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.APB),
                        APB_BillDirectCode        = BillDirectionEnum.Code.PLUS,
                        APB_BillDirectName        = BillDirectionEnum.Name.PLUS,
                        APB_SourceTypeCode        = AccountPayableBillSourceTypeEnum.Code.SGCJ,
                        APB_SourceTypeName        = AccountPayableBillSourceTypeEnum.Name.SGCJ,
                        APB_ReceiveObjectTypeCode = paramHead.PB_RecObjectTypeCode,
                        APB_ReceiveObjectTypeName = paramHead.PB_RecObjectTypeName,
                        APB_ReceiveObjectID       = paramHead.PB_RecObjectID,
                        APB_ReceiveObjectName     = paramHead.PB_RecObjectName,
                        APB_Org_ID                = LoginInfoDAX.OrgID,
                        APB_Org_Name              = LoginInfoDAX.OrgShortName,
                        APB_AccountPayableAmount  = loopDetail.PBD_PayAmount,
                        APB_PaidAmount            = loopDetail.PBD_PayAmount,
                        APB_UnpaidAmount          = 0,
                        APB_BusinessStatusName    = AccountPayableBillStatusEnum.Name.YWC,
                        APB_BusinessStatusCode    = AccountPayableBillStatusEnum.Code.YWC,
                        APB_ApprovalStatusName    = ApprovalStatusEnum.Name.YSH,
                        APB_ApprovalStatusCode    = ApprovalStatusEnum.Code.YSH,
                        APB_IsValid               = true,
                        APB_CreatedBy             = LoginInfoDAX.UserName,
                        APB_CreatedTime           = BLLCom.GetCurStdDatetime(),
                        APB_UpdatedBy             = LoginInfoDAX.UserName,
                        APB_UpdatedTime           = BLLCom.GetCurStdDatetime(),
                    };
                    addAccountPayableBillList.Add(accountPayableBill);
                    //回写付款单的来源的单号
                    loopDetail.PBD_SrcBillNo = accountPayableBill.APB_No;
                    #endregion

                    #region 新增[应付单明细]

                    MDLFM_AccountPayableBillDetail accountPayableBillDetail = new MDLFM_AccountPayableBillDetail
                    {
                        APBD_ID                   = Guid.NewGuid().ToString(),
                        APBD_APB_ID               = accountPayableBill.APB_ID,
                        APBD_IsMinusDetail        = false,
                        APBD_Org_ID               = accountPayableBill.APB_Org_ID,
                        APBD_Org_Name             = accountPayableBill.APB_Org_Name,
                        APBD_AccountPayableAmount = loopDetail.PBD_PayAmount,
                        APBD_PaidAmount           = loopDetail.PBD_PayAmount,
                        APBD_UnpaidAmount         = 0,
                        APBD_BusinessStatusName   = accountPayableBill.APB_BusinessStatusName,
                        APBD_BusinessStatusCode   = accountPayableBill.APB_BusinessStatusCode,
                        APBD_ApprovalStatusName   = accountPayableBill.APB_ApprovalStatusName,
                        APBD_ApprovalStatusCode   = accountPayableBill.APB_ApprovalStatusCode,
                        APBD_IsValid              = true,
                        APBD_CreatedBy            = LoginInfoDAX.UserName,
                        APBD_CreatedTime          = BLLCom.GetCurStdDatetime(),
                        APBD_UpdatedBy            = LoginInfoDAX.UserName,
                        APBD_UpdatedTime          = BLLCom.GetCurStdDatetime(),
                    };
                    addAccountPayableBillDetailList.Add(accountPayableBillDetail);
                    #endregion
                }
                #endregion
            }

            #region 更新[付款单]数据

            updatePayBill.PB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            updatePayBill.PB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            updatePayBill.PB_BusinessStatusName = PayBillStatusEnum.Name.YWC;
            updatePayBill.PB_BusinessStatusCode = PayBillStatusEnum.Code.YWC;
            updatePayBill.PB_UpdatedBy          = LoginInfoDAX.UserName;
            updatePayBill.PB_UpdatedTime        = BLLCom.GetCurStdDatetime();

            #endregion

            #region 更新[付款单明细]数据

            _bll.CopyModelList <PayBillManagerDetailUIModel, MDLFM_PayBillDetail>(paramDetailList, updatePayBillDetaillList);
            foreach (var loopPayBillDetaill in updatePayBillDetaillList)
            {
                loopPayBillDetaill.WHERE_PBD_ID        = loopPayBillDetaill.PBD_ID;
                loopPayBillDetaill.WHERE_PBD_VersionNo = loopPayBillDetaill.PBD_VersionNo;
                loopPayBillDetaill.PBD_VersionNo++;
            }

            #endregion

            #region 更新[钱包余额]和新增[钱包异动]

            if (paramHead.PB_PayTypeName == TradeTypeEnum.Name.WALLET)
            {
                #region 更新[钱包]

                updateWallet.WHERE_Wal_ID         = paramHead.Wal_ID;
                updateWallet.WHERE_Wal_VersionNo  = paramHead.Wal_VersionNo;
                updateWallet.Wal_AvailableBalance = paramHead.Wal_AvailableBalance + paramHead.PB_RealPayableTotalAmount;
                paramHead.Wal_AvailableBalance    = updateWallet.Wal_AvailableBalance ?? 0;

                #endregion

                #region 新增[钱包异动]

                addWalletTrans.WalT_ID          = System.Guid.NewGuid().ToString();
                addWalletTrans.WalT_Org_ID      = LoginInfoDAX.OrgID;
                addWalletTrans.WalT_Org_Name    = LoginInfoDAX.OrgShortName;
                addWalletTrans.WalT_Wal_ID      = paramHead.Wal_ID;
                addWalletTrans.WalT_Wal_No      = paramHead.Wal_No;
                addWalletTrans.WalT_Time        = BLLCom.GetCurStdDatetime();
                addWalletTrans.WalT_TypeCode    = WalTransTypeEnum.Code.TK;
                addWalletTrans.WalT_TypeName    = WalTransTypeEnum.Name.TK;
                addWalletTrans.WalT_Amount      = paramHead.PB_RealPayableTotalAmount;
                addWalletTrans.WalT_BillNo      = paramHead.PB_No;
                addWalletTrans.WalT_IsValid     = true;
                addWalletTrans.WalT_CreatedBy   = LoginInfoDAX.UserName;
                addWalletTrans.WalT_CreatedTime = BLLCom.GetCurStdDatetime();
                addWalletTrans.WalT_UpdatedBy   = LoginInfoDAX.UserName;
                addWalletTrans.WalT_UpdatedTime = BLLCom.GetCurStdDatetime();

                #endregion
            }

            #endregion

            #endregion

            #region 带事务的保存
            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 更新[付款单]

                bool updatePayBillResult = _bll.Save(updatePayBill);
                if (!updatePayBillResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.APPROVE + SystemTableEnums.Name.FM_PayBill });
                    return(false);
                }

                #endregion

                #region 更新[付款单明细]

                foreach (var loopPayBillDetaill in updatePayBillDetaillList)
                {
                    bool updateDetailResult = _bll.Update(loopPayBillDetaill);
                    if (!updateDetailResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.APPROVE + SystemTableEnums.Name.FM_PayBillDetail });
                        return(false);
                    }
                }

                #endregion

                #region 新增[应付单]

                bool addAccountPayableBillResult = _bll.InsertByList <MDLFM_AccountPayableBill, MDLFM_AccountPayableBill>(addAccountPayableBillList);
                if (!addAccountPayableBillResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.FM_AccountPayableBill });
                    return(false);
                }

                #endregion

                #region 新增[应付单明细]

                bool addAccountPayableBillDetailResult = _bll.InsertByList <MDLFM_AccountPayableBillDetail, MDLFM_AccountPayableBillDetail>(addAccountPayableBillDetailList);
                if (!addAccountPayableBillDetailResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.FM_AccountPayableBillDetail });
                    return(false);
                }

                #endregion

                #region  更新[钱包余额]和新增[钱包异动]

                if (paramHead.PB_PayTypeName == TradeTypeEnum.Name.WALLET)
                {
                    #region 更新[钱包余额]

                    bool updateWalletResult = _bll.Save(updateWallet);
                    if (!updateWalletResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.UPDATE + SystemTableEnums.Name.EWM_Wallet });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }

                    #endregion

                    #region 新增[钱包异动]

                    bool addWalletTransResult = _bll.Insert <MDLEWM_WalletTrans>(addWalletTrans);
                    if (!addWalletTransResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.EWM_WalletTrans });
                        return(false);
                    }

                    #endregion
                }

                #endregion

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.APPROVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, MethodBase.GetCurrentMethod().ToString(),
                                            ex.Message, "", null);
                return(false);
            }

            #endregion

            //将最新数据回写给DetailDS
            CopyModel(updatePayBill, paramHead);
            return(true);
        }
        /// <summary>
        /// 保存数据
        /// </summary>
        /// <param name="paramPayBill"></param>
        /// <param name="paramBusinessPayConfirmList"></param>
        /// <param name="paramAccountPayableBillList"></param>
        /// <returns></returns>
        public bool SavePurchaseOrderToPayConfirmData(MDLFM_PayBill paramPayBill, List <PurchaseOrderToPayConfirmWindowModel> paramBusinessPayConfirmList, List <MDLFM_AccountPayableBill> paramAccountPayableBillList)
        {
            var funcName = "SaveBusinessPayConfirmData";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);

            #region 准备数据

            //待新增的[付款单]
            MDLFM_PayBill insertPayBill = new MDLFM_PayBill();
            //待新增的[付款单明细]列表
            List <MDLFM_PayBillDetail> insertPayBillDetailList = new List <MDLFM_PayBillDetail>();
            //待更新的[应付单]列表
            List <MDLFM_AccountPayableBill> updateAccountPayableBillList = new List <MDLFM_AccountPayableBill>();

            #region 新增付款单

            insertPayBill.PB_ID           = Guid.NewGuid().ToString();
            insertPayBill.PB_No           = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.PB);
            insertPayBill.PB_Pay_Org_ID   = paramBusinessPayConfirmList[0].BusinessOrgID;
            insertPayBill.PB_Pay_Org_Name = paramBusinessPayConfirmList[0].BusinessOrgName;
            insertPayBill.PB_Date         = BLLCom.GetCurStdDatetime();

            insertPayBill.PB_RecObjectTypeCode = paramBusinessPayConfirmList[0].ReceiveObjectTypeCode;
            insertPayBill.PB_RecObjectTypeName = paramBusinessPayConfirmList[0].ReceiveObjectTypeName;
            insertPayBill.PB_RecObjectID       = paramBusinessPayConfirmList[0].ReceiveObjectID;
            insertPayBill.PB_RecObjectName     = paramBusinessPayConfirmList[0].ReceiveObjectName;

            insertPayBill.PB_PayableTotalAmount     = paramPayBill.PB_PayableTotalAmount;
            insertPayBill.PB_RealPayableTotalAmount = paramPayBill.PB_RealPayableTotalAmount;
            insertPayBill.PB_PayAccount             = paramPayBill.PB_PayAccount;
            insertPayBill.PB_RecAccount             = paramPayBill.PB_RecAccount;
            insertPayBill.PB_PayTypeName            = paramPayBill.PB_PayTypeName;
            insertPayBill.PB_PayTypeCode            = paramPayBill.PB_PayTypeCode;
            insertPayBill.PB_CertificateNo          = paramPayBill.PB_CertificateNo;

            insertPayBill.PB_BusinessStatusName = ReceiptBillStatusEnum.Name.YWC;
            insertPayBill.PB_BusinessStatusCode = ReceiptBillStatusEnum.Code.YWC;
            insertPayBill.PB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            insertPayBill.PB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            insertPayBill.PB_Remark             = paramPayBill.PB_Remark;
            insertPayBill.PB_IsValid            = true;
            insertPayBill.PB_CreatedBy          = LoginInfoDAX.UserName;
            insertPayBill.PB_CreatedTime        = BLLCom.GetCurStdDatetime();
            insertPayBill.PB_UpdatedBy          = LoginInfoDAX.UserName;
            insertPayBill.PB_UpdatedTime        = BLLCom.GetCurStdDatetime();

            #endregion

            foreach (var loopItem in paramBusinessPayConfirmList)
            {
                if (loopItem.ThisPayAmount == 0 && loopItem.UnPayTotalAmount != 0)
                {
                    continue;
                }

                #region 待新增的[付款单明细]

                MDLFM_PayBillDetail insertPayBillDetail = new MDLFM_PayBillDetail()
                {
                    PBD_ID          = Guid.NewGuid().ToString(),
                    PBD_PB_ID       = insertPayBill.PB_ID,
                    PBD_PB_No       = insertPayBill.PB_No,
                    PBD_SrcBillNo   = loopItem.BusinessNo,
                    PBD_PayAmount   = loopItem.ThisPayAmount,
                    PBD_CreatedBy   = LoginInfoDAX.UserName,
                    PBD_CreatedTime = BLLCom.GetCurStdDatetime(),
                    PBD_UpdatedBy   = LoginInfoDAX.UserName,
                    PBD_UpdatedTime = BLLCom.GetCurStdDatetime(),
                };
                if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.SHYF)
                {
                    insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.BZCG;
                    insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.BZCG;
                }
                else if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.CKYF)
                {
                    insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.THSK;
                    insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.THSK;
                }
                else if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.SGCJ)
                {
                    insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.SGFK;
                    insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.SGFK;
                }
                else if (loopItem.APB_SourceTypeName == AccountReceivableBillSourceTypeEnum.Name.XSYS)
                {
                    insertPayBillDetail.PBD_SourceTypeName = ReceiptBillDetailSourceTypeEnum.Name.XSSK;
                    insertPayBillDetail.PBD_SourceTypeCode = ReceiptBillDetailSourceTypeEnum.Code.XSSK;
                }
                else if (loopItem.APB_SourceTypeName == AccountReceivableBillSourceTypeEnum.Name.QTYS)
                {
                    insertPayBillDetail.PBD_SourceTypeName = ReceiptBillDetailSourceTypeEnum.Name.QTSK;
                    insertPayBillDetail.PBD_SourceTypeCode = ReceiptBillDetailSourceTypeEnum.Code.QTSK;
                }
                insertPayBillDetailList.Add(insertPayBillDetail);

                #endregion

                #region 待更新的[应付单]列表

                //筛选出当前业务单下所有的应付单
                var tempAccountPayableBillList =
                    paramAccountPayableBillList.Where(x => x.APB_SourceBillNo == loopItem.APB_SourceBillNo).ToList();
                //当前业务单对应的未付总金额
                decimal unPaidTotalAmount = 0;
                //当前业务单对应的本次付款金额
                decimal thisPayAmount = loopItem.ThisPayAmount ?? 0;
                for (int i = 0; i < tempAccountPayableBillList.Count; i++)
                {
                    //当本次付款金额小于或等于0是调出循环
                    if (loopItem.ThisPayAmount <= 0)
                    {
                        break;
                    }

                    unPaidTotalAmount += (tempAccountPayableBillList[i].APB_UnpaidAmount ?? 0);

                    //本次付款多付出的钱
                    decimal overPaidAmount = 0;
                    if (thisPayAmount > unPaidTotalAmount)
                    {
                        overPaidAmount = thisPayAmount - unPaidTotalAmount;
                    }

                    if (loopItem.ThisPayAmount <= tempAccountPayableBillList[i].APB_UnpaidAmount && tempAccountPayableBillList[i].APB_UnpaidAmount > 0)
                    {
                        #region 更新的应付单

                        MDLFM_AccountPayableBill updatePayableBill = new MDLFM_AccountPayableBill()
                        {
                            APB_ID                   = tempAccountPayableBillList[i].APB_ID,
                            APB_No                   = tempAccountPayableBillList[i].APB_No,
                            APB_BillDirectCode       = tempAccountPayableBillList[i].APB_BillDirectCode,
                            APB_BillDirectName       = tempAccountPayableBillList[i].APB_BillDirectName,
                            APB_SourceTypeCode       = tempAccountPayableBillList[i].APB_SourceTypeCode,
                            APB_SourceTypeName       = tempAccountPayableBillList[i].APB_SourceTypeName,
                            APB_SourceBillNo         = tempAccountPayableBillList[i].APB_SourceBillNo,
                            APB_Org_ID               = tempAccountPayableBillList[i].APB_Org_ID,
                            APB_Org_Name             = tempAccountPayableBillList[i].APB_Org_Name,
                            APB_AccountPayableAmount = tempAccountPayableBillList[i].APB_AccountPayableAmount,
                            APB_ApprovalStatusCode   = tempAccountPayableBillList[i].APB_ApprovalStatusCode,
                            APB_ApprovalStatusName   = tempAccountPayableBillList[i].APB_ApprovalStatusName,
                            APB_CreatedBy            = tempAccountPayableBillList[i].APB_CreatedBy,
                            APB_CreatedTime          = tempAccountPayableBillList[i].APB_CreatedTime,
                            APB_UpdatedBy            = LoginInfoDAX.UserName,
                            APB_UpdatedTime          = BLLCom.GetCurStdDatetime(),
                            APB_VersionNo            = tempAccountPayableBillList[i].APB_VersionNo,
                            WHERE_APB_ID             = tempAccountPayableBillList[i].APB_ID,
                            WHERE_APB_VersionNo      = tempAccountPayableBillList[i].APB_VersionNo
                        };
                        //已付金额
                        updatePayableBill.APB_PaidAmount = (tempAccountPayableBillList[i].APB_PaidAmount ?? 0) +
                                                           (loopItem.ThisPayAmount ?? 0);
                        //本次付款金额
                        loopItem.ThisPayAmount = loopItem.ThisPayAmount - ((updatePayableBill.APB_AccountPayableAmount ?? 0) - (updatePayableBill.APB_UnpaidAmount ?? 0));
                        //未付金额
                        updatePayableBill.APB_UnpaidAmount = (tempAccountPayableBillList[i].APB_AccountPayableAmount ?? 0) -
                                                             (updatePayableBill.APB_PaidAmount ?? 0);

                        if ((updatePayableBill.APB_PaidAmount ?? 0) >= (tempAccountPayableBillList[i].APB_AccountPayableAmount ?? 0))
                        {
                            //单据状态
                            updatePayableBill.APB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.YWC;
                            updatePayableBill.APB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.YWC;
                        }
                        updateAccountPayableBillList.Add(updatePayableBill);

                        #endregion
                    }
                    else if (loopItem.ThisPayAmount > tempAccountPayableBillList[i].APB_UnpaidAmount && tempAccountPayableBillList[i].APB_UnpaidAmount > 0)
                    {
                        //本次付款金额>当前应付单未付金额的场合,当前应付单的已付金额=应付金额
                        #region 更新的应付单

                        MDLFM_AccountPayableBill updatePayableBill = new MDLFM_AccountPayableBill()
                        {
                            APB_ID                   = tempAccountPayableBillList[i].APB_ID,
                            APB_No                   = tempAccountPayableBillList[i].APB_No,
                            APB_BillDirectCode       = tempAccountPayableBillList[i].APB_BillDirectCode,
                            APB_BillDirectName       = tempAccountPayableBillList[i].APB_BillDirectName,
                            APB_SourceTypeCode       = tempAccountPayableBillList[i].APB_BillDirectName,
                            APB_SourceTypeName       = tempAccountPayableBillList[i].APB_SourceTypeName,
                            APB_SourceBillNo         = tempAccountPayableBillList[i].APB_SourceBillNo,
                            APB_Org_ID               = tempAccountPayableBillList[i].APB_Org_ID,
                            APB_Org_Name             = tempAccountPayableBillList[i].APB_Org_Name,
                            APB_AccountPayableAmount = tempAccountPayableBillList[i].APB_AccountPayableAmount,
                            APB_ApprovalStatusCode   = tempAccountPayableBillList[i].APB_ApprovalStatusCode,
                            APB_ApprovalStatusName   = tempAccountPayableBillList[i].APB_ApprovalStatusName,
                            APB_CreatedBy            = tempAccountPayableBillList[i].APB_CreatedBy,
                            APB_CreatedTime          = tempAccountPayableBillList[i].APB_CreatedTime,
                            APB_UpdatedBy            = LoginInfoDAX.UserName,
                            APB_UpdatedTime          = BLLCom.GetCurStdDatetime(),
                            APB_VersionNo            = tempAccountPayableBillList[i].APB_VersionNo,
                            WHERE_APB_ID             = tempAccountPayableBillList[i].APB_ID,
                            WHERE_APB_VersionNo      = tempAccountPayableBillList[i].APB_VersionNo
                        };
                        loopItem.ThisPayAmount = loopItem.ThisPayAmount - paramAccountPayableBillList[i].APB_UnpaidAmount;
                        //已付金额
                        updatePayableBill.APB_PaidAmount = updatePayableBill.APB_AccountPayableAmount;
                        //未付金额
                        updatePayableBill.APB_UnpaidAmount = 0;

                        //单据状态
                        updatePayableBill.APB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.YWC;
                        updatePayableBill.APB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.YWC;
                        updateAccountPayableBillList.Add(updatePayableBill);

                        #endregion
                    }
                    if (overPaidAmount > 0 && i == tempAccountPayableBillList.Count - 1)
                    {
                        bool isRepeat = false;
                        foreach (var loopUpdateAccountPayableBill in updateAccountPayableBillList)
                        {
                            if (loopUpdateAccountPayableBill.APB_ID == tempAccountPayableBillList[i].APB_ID)
                            {
                                loopUpdateAccountPayableBill.APB_PaidAmount   = loopUpdateAccountPayableBill.APB_PaidAmount + overPaidAmount;
                                loopUpdateAccountPayableBill.APB_UnpaidAmount = 0;
                                isRepeat = true;
                                break;
                            }
                        }
                        if (!isRepeat)
                        {
                            MDLFM_AccountPayableBill updatePayableBill = new MDLFM_AccountPayableBill()
                            {
                                APB_ID                   = tempAccountPayableBillList[i].APB_ID,
                                APB_No                   = tempAccountPayableBillList[i].APB_No,
                                APB_BillDirectCode       = tempAccountPayableBillList[i].APB_BillDirectCode,
                                APB_BillDirectName       = tempAccountPayableBillList[i].APB_BillDirectName,
                                APB_SourceTypeCode       = tempAccountPayableBillList[i].APB_BillDirectName,
                                APB_SourceTypeName       = tempAccountPayableBillList[i].APB_SourceTypeName,
                                APB_SourceBillNo         = tempAccountPayableBillList[i].APB_SourceBillNo,
                                APB_Org_ID               = tempAccountPayableBillList[i].APB_Org_ID,
                                APB_Org_Name             = tempAccountPayableBillList[i].APB_Org_Name,
                                APB_AccountPayableAmount = tempAccountPayableBillList[i].APB_AccountPayableAmount,
                                APB_ApprovalStatusCode   = tempAccountPayableBillList[i].APB_ApprovalStatusCode,
                                APB_ApprovalStatusName   = tempAccountPayableBillList[i].APB_ApprovalStatusName,
                                APB_CreatedBy            = tempAccountPayableBillList[i].APB_CreatedBy,
                                APB_CreatedTime          = tempAccountPayableBillList[i].APB_CreatedTime,
                                APB_UpdatedBy            = LoginInfoDAX.UserName,
                                APB_UpdatedTime          = BLLCom.GetCurStdDatetime(),
                                APB_VersionNo            = tempAccountPayableBillList[i].APB_VersionNo,
                                WHERE_APB_ID             = tempAccountPayableBillList[i].APB_ID,
                                WHERE_APB_VersionNo      = tempAccountPayableBillList[i].APB_VersionNo
                            };
                            updatePayableBill.APB_PaidAmount   = tempAccountPayableBillList[i].APB_PaidAmount + overPaidAmount;
                            updatePayableBill.APB_UnpaidAmount = tempAccountPayableBillList[i].APB_UnpaidAmount - overPaidAmount;
                            updateAccountPayableBillList.Add(updatePayableBill);
                        }
                    }
                }

                #endregion
            }

            #endregion

            #region 带事务的保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 新增的[付款单]

                bool insertPayBillResult = _bll.Insert(insertPayBill);
                if (!insertPayBillResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_PayBill });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存[付款单明细]列表

                if (insertPayBillDetailList.Count > 0)
                {
                    bool insertPayBillDetailResult = _bll.InsertByList <MDLFM_PayBillDetail, MDLFM_PayBillDetail>(insertPayBillDetailList);
                    if (!insertPayBillDetailResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_PayBillDetail });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 更新应付单

                if (updateAccountPayableBillList.Count > 0)
                {
                    foreach (var loopAccountReceivableBill in updateAccountPayableBillList)
                    {
                        bool updateAccountReceivableBill = _bll.Update(loopAccountReceivableBill);
                        if (!updateAccountReceivableBill)
                        {
                            DBManager.RollBackTransaction(DBCONFIG.Coeus);
                            ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_AccountPayableBill });
                            LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                            return(false);
                        }
                    }
                }
                #endregion

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.SAVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ex.Message, "", null);
                return(false);
            }

            #endregion

            return(true);
        }