Esempio n. 1
0
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramModel">UIModel</param>
        /// <returns></returns>
        public bool SaveDetailDS(BatchJobManageUIModel paramModel)
        {
            var funcName = "SaveDetailDS";

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

            //服务端检查
            if (!ServerCheck(paramModel))
            {
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }

            #region 带事务的保存

            //将UIModel转为TBModel
            var argsBatchJob = paramModel.ToTBModelForSaveAndDelete <MDLCSM_BatchJob>();
            //判断主键是否被赋值
            if (string.IsNullOrEmpty(paramModel.BJ_ID))
            {
                argsBatchJob.BJ_ID = Guid.NewGuid().ToString();
                //作业编码
                argsBatchJob.BJ_Code        = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.BJ);
                argsBatchJob.BJ_CreatedBy   = LoginInfoDAX.UserName;
                argsBatchJob.BJ_CreatedTime = BLLCom.GetCurStdDatetime();
            }
            argsBatchJob.BJ_UpdatedBy   = LoginInfoDAX.UserName;
            argsBatchJob.BJ_UpdatedTime = BLLCom.GetCurStdDatetime();

            //执行保存
            if (!_bll.Save(argsBatchJob))
            {
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.CSM_BatchJob });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }

            //将最新数据回写给DetailDS
            CopyModel(argsBatchJob, paramModel);

            #endregion

            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramHead">单头UIModel</param>
        /// <returns></returns>
        public bool SaveDetailDS(AccountPayableBillManagerUIModel paramHead)
        {
            var funcName = "SaveDetailDS";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);
            //服务端检查
            if (!ServerCheck(paramHead))
            {
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }
            #region 准备数据

            #region 单头
            //将UIModel转为TBModel
            var argsHead = paramHead.ToTBModelForSaveAndDelete <MDLFM_AccountPayableBill>();
            //判断主键是否被赋值
            if (string.IsNullOrEmpty(paramHead.APB_ID))
            {
                argsHead.APB_ID = Guid.NewGuid().ToString();
                //单号
                argsHead.APB_No          = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.APB);
                argsHead.APB_CreatedBy   = LoginInfoDAX.UserName;
                argsHead.APB_CreatedTime = BLLCom.GetCurStdDatetime();
            }
            argsHead.APB_UpdatedBy   = LoginInfoDAX.UserName;
            argsHead.APB_UpdatedTime = BLLCom.GetCurStdDatetime();

            #endregion

            #endregion

            #region 事务操作

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存单头

                //执行保存
                if (!_bll.Save(argsHead, argsHead.APB_ID))
                {
                    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_0000, new object[] { "保存失败,失败原因:" + ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ex.Message, "", null);
                return(false);
            }

            #endregion

            //将最新数据回写给DetailDS
            CopyModel(argsHead, paramHead);

            return(true);
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramHead">单头UIModel</param>
        /// <param name="paramDetailList">明细UIModel列表</param>
        /// <returns></returns>
        public bool SaveDetailDS(PurchaseForecastOrderQueryUIModel paramHead, SkyCarBindingList <PurchaseForecastOrderQueryDetailUIModel, MDLPIS_PurchaseForecastOrderDetail> paramDetailList)
        {
            var funcName = "SaveDetailDS";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);
            //服务端检查
            if (!ServerCheck(paramHead, paramDetailList))
            {
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }

            #region 事务,多数据表操作

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存单头

                //将UIModel转为TBModel
                var argsHead = paramHead.ToTBModelForSaveAndDelete <MDLPIS_PurchaseForecastOrder>();
                //判断主键是否被赋值
                if (string.IsNullOrEmpty(paramHead.PFO_ID))
                {
                    argsHead.PFO_No = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.PFO);
                }
                //执行保存
                if (!_bll.Save(argsHead))
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0000, new object[] { "保存[XX]信息失败!" });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存明细

                //执行保存
                if (!_bll.UnitySave(paramDetailList))
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0000, new object[] { "保存[XX]信息失败!" });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                //将最新数据回写给DetailDS
                CopyModel(argsHead, paramHead);

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0000, new object[] { "保存失败,失败原因:" + ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ex.Message, "", null);
                return(false);
            }

            #endregion

            return(true);
        }
Esempio n. 4
0
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="paramHead">UIModel</param>
        /// <param name="paramDetailList">明细UIModel</param>
        /// <returns></returns>
        public bool ApproveDetailDS(ReceiptBillManagerUIModel paramHead, SkyCarBindingList <ReceiptBillManagerDetailUIModel, MDLFM_ReceiptBillDetail> paramDetailList)
        {
            var funcName = "ApproveDetailDS";

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

            if (paramHead == null ||
                string.IsNullOrEmpty(paramHead.RB_ID) ||
                string.IsNullOrEmpty(paramHead.RB_No))
            {
                //没有获取到收款单,审核失败
                ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.FM_ReceiptBill, SystemActionEnum.Name.APPROVE });
                return(false);
            }

            var receiptBillManagerDetailList =
                paramDetailList.Where(x => x.RBD_SourceTypeName == ReceiptBillDetailSourceTypeEnum.Name.SGSK);

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

            #region 定义变量

            //待更新的[收款单]
            MDLFM_ReceiptBill updateReceiptBill = paramHead.ToTBModelForSaveAndDelete <MDLFM_ReceiptBill>();
            //待更新[收款单明细]
            List <MDLFM_ReceiptBillDetail> updateReceiptBillDetailList = new List <MDLFM_ReceiptBillDetail>();
            //待新增对应的[应收单]
            List <MDLFM_AccountReceivableBill> addAccountReceivableBillList = new List <MDLFM_AccountReceivableBill>();
            //待新增对应的[应收单明细]
            List <MDLFM_AccountReceivableBillDetail> addAccountReceivableBillDetailList = new List <MDLFM_AccountReceivableBillDetail>();
            //待更新的[钱包]
            MDLEWM_Wallet updateWallet = new MDLEWM_Wallet();
            //待新增的[钱包异动]
            MDLEWM_WalletTrans addWalletTrans = new MDLEWM_WalletTrans();
            #endregion

            #region 准备数据

            if (paramDetailList[0].RBD_SourceTypeName == ReceiptBillDetailSourceTypeEnum.Name.SGSK)
            {
                #region 新增[应收单]和[应收单明细]

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

                    MDLFM_AccountReceivableBill accountReceivableBill = new MDLFM_AccountReceivableBill
                    {
                        ARB_ID                      = System.Guid.NewGuid().ToString(),
                        ARB_No                      = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.ARB),
                        ARB_BillDirectCode          = BillDirectionEnum.Code.PLUS,
                        ARB_BillDirectName          = BillDirectionEnum.Name.PLUS,
                        ARB_SourceTypeCode          = AccountReceivableBillSourceTypeEnum.Code.SGCJ,
                        ARB_SourceTypeName          = AccountReceivableBillSourceTypeEnum.Name.SGCJ,
                        ARB_Org_ID                  = LoginInfoDAX.OrgID,
                        ARB_Org_Name                = LoginInfoDAX.OrgShortName,
                        ARB_PayObjectTypeCode       = paramHead.RB_PayObjectTypeCode,
                        ARB_PayObjectTypeName       = paramHead.RB_PayObjectTypeName,
                        ARB_PayObjectID             = paramHead.RB_PayObjectID,
                        ARB_PayObjectName           = paramHead.RB_PayObjectName,
                        ARB_AccountReceivableAmount = loopDetail.RBD_ReceiveAmount,
                        ARB_ReceivedAmount          = loopDetail.RBD_ReceiveAmount,
                        ARB_UnReceiveAmount         = 0,
                        ARB_BusinessStatusName      = AccountReceivableBillStatusEnum.Name.YWC,
                        ARB_BusinessStatusCode      = AccountReceivableBillStatusEnum.Code.YWC,
                        ARB_ApprovalStatusName      = ApprovalStatusEnum.Name.YSH,
                        ARB_ApprovalStatusCode      = ApprovalStatusEnum.Code.YSH,
                        ARB_IsValid                 = true,
                        ARB_CreatedBy               = LoginInfoDAX.UserName,
                        ARB_CreatedTime             = BLLCom.GetCurStdDatetime(),
                        ARB_UpdatedBy               = LoginInfoDAX.UserName,
                        ARB_UpdatedTime             = BLLCom.GetCurStdDatetime(),
                    };
                    addAccountReceivableBillList.Add(accountReceivableBill);
                    //回写付款单的来源的单号
                    loopDetail.RBD_SrcBillNo = accountReceivableBill.ARB_No;
                    #endregion

                    #region 新增[应收单明细]

                    MDLFM_AccountReceivableBillDetail accountPayableBillDetail = new MDLFM_AccountReceivableBillDetail
                    {
                        ARBD_ID                      = Guid.NewGuid().ToString(),
                        ARBD_ARB_ID                  = accountReceivableBill.ARB_ID,
                        ARBD_IsMinusDetail           = false,
                        ARBD_Org_ID                  = accountReceivableBill.ARB_Org_ID,
                        ARBD_Org_Name                = accountReceivableBill.ARB_Org_Name,
                        ARBD_AccountReceivableAmount = loopDetail.RBD_ReceiveAmount,
                        ARBD_ReceivedAmount          = loopDetail.RBD_ReceiveAmount,
                        ARBD_UnReceiveAmount         = 0,
                        ARBD_BusinessStatusName      = accountReceivableBill.ARB_BusinessStatusName,
                        ARBD_BusinessStatusCode      = accountReceivableBill.ARB_BusinessStatusCode,
                        ARBD_ApprovalStatusName      = accountReceivableBill.ARB_ApprovalStatusName,
                        ARBD_ApprovalStatusCode      = accountReceivableBill.ARB_ApprovalStatusCode,
                        ARBD_IsValid                 = true,
                        ARBD_CreatedBy               = LoginInfoDAX.UserName,
                        ARBD_CreatedTime             = BLLCom.GetCurStdDatetime(),
                        ARBD_UpdatedBy               = LoginInfoDAX.UserName,
                        ARBD_UpdatedTime             = BLLCom.GetCurStdDatetime(),
                    };
                    addAccountReceivableBillDetailList.Add(accountPayableBillDetail);
                    #endregion
                }
                #endregion
            }

            #region 收款单

            //更新收款单[业务状态]为{已完成},[审核状态]为{已审核}
            updateReceiptBill.RB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            updateReceiptBill.RB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            updateReceiptBill.RB_BusinessStatusName = ReceiptBillStatusEnum.Name.YWC;
            updateReceiptBill.RB_BusinessStatusCode = ReceiptBillStatusEnum.Code.YWC;
            updateReceiptBill.RB_UpdatedBy          = LoginInfoDAX.UserName;
            updateReceiptBill.RB_UpdatedTime        = BLLCom.GetCurStdDatetime();

            #endregion

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

            _bll.CopyModelList <ReceiptBillManagerDetailUIModel, MDLFM_ReceiptBillDetail>(paramDetailList, updateReceiptBillDetailList);
            foreach (var loopPayBillDetaill in updateReceiptBillDetailList)
            {
                loopPayBillDetaill.WHERE_RBD_ID        = loopPayBillDetaill.RBD_ID;
                loopPayBillDetaill.WHERE_RBD_VersionNo = loopPayBillDetaill.RBD_VersionNo;
                loopPayBillDetaill.RBD_VersionNo++;
            }

            #endregion

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

            if (paramHead.RB_ReceiveTypeName == 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.RB_ReceiveTotalAmount;
                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.XF;
                addWalletTrans.WalT_TypeName    = WalTransTypeEnum.Name.XF;
                addWalletTrans.WalT_Amount      = -paramHead.RB_ReceiveTotalAmount;
                addWalletTrans.WalT_BillNo      = paramHead.RB_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 updateReceiptBillResult = _bll.Save(updateReceiptBill);
                if (!updateReceiptBillResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_ReceiptBill });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }
                #endregion

                #region 更新[收款单明细]

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

                #endregion

                #region 新增[应收单]

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

                #endregion

                #region 新增[应付单明细]

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

                #endregion

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

                if (paramHead.RB_ReceiveTypeName == 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(updateReceiptBill, paramHead);
            return(true);
        }
Esempio n. 5
0
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramHead"></param>
        /// <param name="paramDetailList"></param>
        /// <param name="paramPictureNameAndPath"></param>
        /// <returns></returns>
        public bool SaveDetailDS(ReceiptBillManagerUIModel paramHead, SkyCarBindingList <ReceiptBillManagerDetailUIModel, MDLFM_ReceiptBillDetail> paramDetailList,
                                 Dictionary <string, string> paramPictureNameAndPath)
        {
            var funcName = "SaveDetailDS";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);
            //服务端检查
            if (!ServerCheck(paramHead, paramDetailList))
            {
                return(false);
            }

            #region 准备数据

            #region 单头
            //将UIModel转为TBModel
            var argsHead = paramHead.ToTBModelForSaveAndDelete <MDLFM_ReceiptBill>();
            //判断主键是否被赋值
            if (string.IsNullOrEmpty(paramHead.RB_ID))
            {
                argsHead.RB_ID = Guid.NewGuid().ToString();
                //单号
                argsHead.RB_No          = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.RB);
                argsHead.RB_CreatedBy   = LoginInfoDAX.UserName;
                argsHead.RB_CreatedTime = BLLCom.GetCurStdDatetime();
            }
            argsHead.RB_UpdatedBy   = LoginInfoDAX.UserName;
            argsHead.RB_UpdatedTime = BLLCom.GetCurStdDatetime();

            #endregion

            #region 明细

            //添加的明细
            if (paramDetailList != null && paramDetailList.InsertList != null &&
                paramDetailList.InsertList.Count > 0)
            {
                foreach (var loopDetailItem in paramDetailList)
                {
                    loopDetailItem.RBD_RB_ID       = argsHead.RB_ID ?? argsHead.WHERE_RB_ID;
                    loopDetailItem.RBD_RB_No       = argsHead.RB_No;
                    loopDetailItem.RBD_CreatedBy   = LoginInfoDAX.UserName;
                    loopDetailItem.RBD_CreatedTime = BLLCom.GetCurStdDatetime();
                    loopDetailItem.RBD_UpdatedBy   = LoginInfoDAX.UserName;
                    loopDetailItem.RBD_UpdatedTime = BLLCom.GetCurStdDatetime();
                }
            }
            #endregion

            #region   图片

            foreach (var loopPicture in paramPictureNameAndPath)
            {
                if (string.IsNullOrEmpty(loopPicture.Key) ||
                    string.IsNullOrEmpty(loopPicture.Value))
                {
                    continue;
                }

                #region 将图片保存到本地以及上传文件服务器

                string fileNetUrl        = string.Empty;
                bool   savePictureResult = BLLCom.SaveFileByFileName(loopPicture.Value, loopPicture.Key, ref fileNetUrl);
                if (!savePictureResult)
                {
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + MsgParam.IMAGE });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }
                #endregion

                //截取上传图片返回值中的文件名称
                int fileNameStartIndex = fileNetUrl.IndexOf("FileName=", StringComparison.Ordinal) + 1;
                int fileNameEndIndex   = fileNameStartIndex + "FileName=".Length;
                int length             = fileNetUrl.Length;
                //文件名称
                string tempFileName = fileNetUrl.Substring(fileNameEndIndex - 1, length - (fileNameEndIndex - 1));

                //给各个图片赋值
                if (loopPicture.Key == argsHead.RB_CertificatePic)
                {
                    argsHead.RB_CertificatePic = tempFileName;
                }
            }
            #endregion

            #endregion

            #region 带事务的保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存单头

                //执行保存
                if (!_bll.Save(argsHead, argsHead.RB_ID))
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    foreach (var loopPicture in paramPictureNameAndPath)
                    {
                        if (string.IsNullOrEmpty(loopPicture.Key) ||
                            string.IsNullOrEmpty(loopPicture.Value))
                        {
                            continue;
                        }
                        //保存失败,删除本地以及文件服务器上的图片
                        var outMsg = string.Empty;
                        BLLCom.DeleteFileByFileName(loopPicture.Key, ref outMsg);
                    }

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_ReceiptBill });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存明细

                //执行保存
                if (!_bll.UnitySave(paramDetailList))
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    foreach (var loopPicture in paramPictureNameAndPath)
                    {
                        if (string.IsNullOrEmpty(loopPicture.Key) ||
                            string.IsNullOrEmpty(loopPicture.Value))
                        {
                            continue;
                        }
                        //保存失败,删除本地以及文件服务器上的图片
                        var outMsg = string.Empty;
                        BLLCom.DeleteFileByFileName(loopPicture.Key, ref outMsg);
                    }

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_ReceiptBillDetail });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);

                foreach (var loopPicture in paramPictureNameAndPath)
                {
                    if (string.IsNullOrEmpty(loopPicture.Key) ||
                        string.IsNullOrEmpty(loopPicture.Value))
                    {
                        continue;
                    }
                    //保存失败,删除本地以及文件服务器上的图片
                    var outMsg = string.Empty;
                    BLLCom.DeleteFileByFileName(loopPicture.Key, ref outMsg);
                }

                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

            //将最新数据回写给DetailDS
            CopyModel(argsHead, paramHead);

            //更新明细版本号
            if (paramDetailList != null)
            {
                if (paramDetailList.InsertList != null)
                {
                    foreach (var loopInsertDetail in paramDetailList.InsertList)
                    {
                        //新增时版本号为1
                        loopInsertDetail.RBD_VersionNo = 1;
                    }
                }

                foreach (var loopUpdateDetail in paramDetailList.UpdateList)
                {
                    //更新时版本号加1
                    loopUpdateDetail.RBD_VersionNo = loopUpdateDetail.RBD_VersionNo + 1;
                }
            }

            foreach (var loopPicture in paramPictureNameAndPath)
            {
                if (string.IsNullOrEmpty(loopPicture.Key) ||
                    string.IsNullOrEmpty(loopPicture.Value))
                {
                    continue;
                }
                //保存成功,删除临时保存的图片
                if (File.Exists(loopPicture.Value))
                {
                    File.Delete(loopPicture.Value);
                }
            }
            return(true);
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramHead">单头UIModel</param>
        /// <param name="paramDetailList">明细UIModel列表</param>
        /// <returns></returns>
        public bool SaveDetailDS(PurchaseReturnManagerUIModel paramHead, SkyCarBindingList <StockOutBillManagerDetailUIModel, MDLPIS_StockOutBillDetail> paramDetailList)
        {
            var funcName = "SaveDetailDS";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);
            //服务端检查
            if (!ServerCheck(paramHead, paramDetailList))
            {
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }

            #region 准备数据

            #region 单头
            //将UIModel转为TBModel
            var argsHead = paramHead.ToTBModelForSaveAndDelete <MDLPIS_StockOutBill>();
            //判断主键是否被赋值
            if (string.IsNullOrEmpty(paramHead.SOB_ID))
            {
                argsHead.SOB_ID = Guid.NewGuid().ToString();
                //单号
                argsHead.SOB_No          = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.SOB);
                argsHead.SOB_CreatedBy   = LoginInfoDAX.UserName;
                argsHead.SOB_CreatedTime = BLLCom.GetCurStdDatetime();
            }
            argsHead.SOB_UpdatedBy   = LoginInfoDAX.UserName;
            argsHead.SOB_UpdatedTime = BLLCom.GetCurStdDatetime();

            #endregion

            #region 明细

            //添加的明细
            if (paramDetailList != null && paramDetailList.InsertList != null &&
                paramDetailList.InsertList.Count > 0)
            {
                foreach (var loopDetailItem in paramDetailList.InsertList)
                {
                    loopDetailItem.SOBD_SOB_ID      = argsHead.SOB_ID ?? argsHead.WHERE_SOB_ID;
                    loopDetailItem.SOBD_SOB_No      = argsHead.SOB_No;
                    loopDetailItem.SOBD_CreatedBy   = LoginInfoDAX.UserName;
                    loopDetailItem.SOBD_CreatedTime = BLLCom.GetCurStdDatetime();
                    loopDetailItem.SOBD_UpdatedBy   = LoginInfoDAX.UserName;
                    loopDetailItem.SOBD_UpdatedTime = BLLCom.GetCurStdDatetime();
                }
            }
            #endregion

            #endregion

            #region 带事务的保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存单头

                //执行保存
                var saveStockOutBillResult = _bll.Save(argsHead, argsHead.SOB_ID);
                if (!saveStockOutBillResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_StockOutBill });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存明细

                //执行保存
                var saveStockOutDetailResult = _bll.UnitySave(paramDetailList);
                if (!saveStockOutDetailResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_StockOutBillDetail });
                    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

            //将最新数据回写给DetailDS
            CopyModel(argsHead, paramHead);

            //更新明细版本号
            if (paramDetailList != null)
            {
                if (paramDetailList.InsertList != null)
                {
                    foreach (var loopInsertDetail in paramDetailList.InsertList)
                    {
                        //新增时版本号为1
                        loopInsertDetail.SOBD_VersionNo = 1;
                    }
                }

                foreach (var loopUpdateDetail in paramDetailList.UpdateList)
                {
                    //更新时版本号加1
                    loopUpdateDetail.SOBD_VersionNo = loopUpdateDetail.SOBD_VersionNo + 1;
                }
            }

            return(true);
        }
        /// <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">UIModel</param>
        /// <param name="paramDetailList">出库单明细列表</param>
        /// <returns></returns>
        public bool ApproveDetailDS(PurchaseReturnManagerUIModel paramHead, SkyCarBindingList <StockOutBillManagerDetailUIModel, MDLPIS_StockOutBillDetail> paramDetailList)
        {
            var funcName = "ApproveDetailDS";

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

            #region 验证

            if (paramHead == null ||
                string.IsNullOrEmpty(paramHead.SOB_ID) ||
                string.IsNullOrEmpty(paramHead.SOB_No))
            {
                //没有获取到出库单,审核失败
                ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.PIS_StockOutBill, SystemActionEnum.Name.APPROVE });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }

            #endregion

            #region 准备数据

            #region 变量定义

            //待更新的出库单
            MDLPIS_StockOutBill updateStockOutBill = paramHead.ToTBModelForSaveAndDelete <MDLPIS_StockOutBill>();

            //待新增的[应付单]
            MDLFM_AccountPayableBill newAccountPayableBill = new MDLFM_AccountPayableBill();
            //待新增的[应付单明细]列表
            List <MDLFM_AccountPayableBillDetail> newAccountPayableBillDetailList = new List <MDLFM_AccountPayableBillDetail>();

            //待更新的[库存]列表
            List <MDLPIS_Inventory> updateInventoryList = new List <MDLPIS_Inventory>();
            //待新增的[库存异动日志]列表
            List <MDLPIS_InventoryTransLog> newInventoryTransLogList = new List <MDLPIS_InventoryTransLog>();

            #endregion

            //计算出库金额
            decimal totalStockOutAmount = CalculateStockOutAmount(updateStockOutBill, paramDetailList);

            #region 创建[应付单]的场合

            if (updateStockOutBill.SOB_SourceTypeName == StockOutBillSourceTypeEnum.Name.THCK)
            {
                //应付单
                newAccountPayableBill.APB_ID                    = Guid.NewGuid().ToString();
                newAccountPayableBill.APB_No                    = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.APB);
                newAccountPayableBill.APB_BillDirectCode        = BillDirectionEnum.Code.MINUS;
                newAccountPayableBill.APB_BillDirectName        = BillDirectionEnum.Name.MINUS;
                newAccountPayableBill.APB_SourceTypeCode        = AccountPayableBillSourceTypeEnum.Code.CKYF;
                newAccountPayableBill.APB_SourceTypeName        = AccountPayableBillSourceTypeEnum.Name.CKYF;
                newAccountPayableBill.APB_SourceBillNo          = updateStockOutBill.SOB_No;
                newAccountPayableBill.APB_Org_ID                = LoginInfoDAX.OrgID;
                newAccountPayableBill.APB_Org_Name              = LoginInfoDAX.OrgShortName;
                newAccountPayableBill.APB_ReceiveObjectTypeCode = AmountTransObjectTypeEnum.Code.AUTOPARTSSUPPLIER;
                newAccountPayableBill.APB_ReceiveObjectTypeName = AmountTransObjectTypeEnum.Name.AUTOPARTSSUPPLIER;
                newAccountPayableBill.APB_ReceiveObjectID       = paramHead.SOB_SUPP_ID;
                newAccountPayableBill.APB_ReceiveObjectName     = paramHead.SOB_SUPP_Name;
                newAccountPayableBill.APB_AccountPayableAmount  = -totalStockOutAmount;
                newAccountPayableBill.APB_PaidAmount            = 0;
                newAccountPayableBill.APB_UnpaidAmount          = -totalStockOutAmount;
                newAccountPayableBill.APB_BusinessStatusCode    = AccountPayableBillStatusEnum.Code.ZXZ;
                newAccountPayableBill.APB_BusinessStatusName    = AccountPayableBillStatusEnum.Name.ZXZ;
                newAccountPayableBill.APB_ApprovalStatusCode    = ApprovalStatusEnum.Code.YSH;
                newAccountPayableBill.APB_ApprovalStatusName    = ApprovalStatusEnum.Name.YSH;
                newAccountPayableBill.APB_IsValid               = true;
                newAccountPayableBill.APB_CreatedBy             = LoginInfoDAX.UserName;
                newAccountPayableBill.APB_CreatedTime           = BLLCom.GetCurStdDatetime();
                newAccountPayableBill.APB_UpdatedBy             = LoginInfoDAX.UserName;
                newAccountPayableBill.APB_UpdatedTime           = BLLCom.GetCurStdDatetime();
            }
            #endregion

            #region 更新[出库单]

            //将出库单审核状态更新为[已审核],单据状态更新为[已完成]
            updateStockOutBill.SOB_VersionNo++;
            updateStockOutBill.SOB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            updateStockOutBill.SOB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            updateStockOutBill.SOB_UpdatedBy          = LoginInfoDAX.UserName;
            updateStockOutBill.SOB_UpdatedTime        = BLLCom.GetCurStdDatetime();
            //updateStockOutBill.SOB_StatusCode = StockOutBillStatusEnum.Code.YWC;
            //updateStockOutBill.SOB_StatusName = StockOutBillStatusEnum.Name.YWC;
            #endregion

            #region 遍历[出库单明细]列表,创建[应付单明细]和[应收单明细],创建或更新[库存],创建[库存异动日志]

            foreach (var loopStockOutBillDetail in paramDetailList)
            {
                if (string.IsNullOrEmpty(loopStockOutBillDetail.SOBD_Barcode) ||
                    string.IsNullOrEmpty(loopStockOutBillDetail.SOBD_BatchNo))
                {
                    continue;
                }

                if (updateStockOutBill.SOB_SourceTypeName == StockOutBillSourceTypeEnum.Name.THCK)
                {
                    //出库明细
                    loopStockOutBillDetail.WHERE_SOBD_ID        = loopStockOutBillDetail.SOBD_ID;
                    loopStockOutBillDetail.WHERE_SOBD_VersionNo = loopStockOutBillDetail.SOBD_VersionNo;

                    #region 应付单明细

                    MDLFM_AccountPayableBillDetail newAccountPayableBillDetail = new MDLFM_AccountPayableBillDetail
                    {
                        APBD_ID                   = Guid.NewGuid().ToString(),
                        APBD_APB_ID               = newAccountPayableBill.APB_ID,
                        APBD_IsMinusDetail        = false,
                        APBD_SourceBillNo         = updateStockOutBill.SOB_No,
                        APBD_SourceBillDetailID   = loopStockOutBillDetail.SOBD_ID,
                        APBD_Org_ID               = newAccountPayableBill.APB_Org_ID,
                        APBD_Org_Name             = newAccountPayableBill.APB_Org_Name,
                        APBD_AccountPayableAmount = -loopStockOutBillDetail.SOBD_Amount,
                        APBD_PaidAmount           = 0,
                        APBD_UnpaidAmount         = -loopStockOutBillDetail.SOBD_Amount,
                        APBD_BusinessStatusCode   = newAccountPayableBill.APB_BusinessStatusCode,
                        APBD_BusinessStatusName   = newAccountPayableBill.APB_BusinessStatusName,
                        APBD_ApprovalStatusCode   = newAccountPayableBill.APB_ApprovalStatusCode,
                        APBD_ApprovalStatusName   = newAccountPayableBill.APB_ApprovalStatusName,
                        APBD_IsValid              = true,
                        APBD_CreatedBy            = LoginInfoDAX.UserName,
                        APBD_CreatedTime          = BLLCom.GetCurStdDatetime(),
                        APBD_UpdatedBy            = LoginInfoDAX.UserName,
                        APBD_UpdatedTime          = BLLCom.GetCurStdDatetime()
                    };
                    newAccountPayableBillDetailList.Add(newAccountPayableBillDetail);

                    #endregion

                    #region 库存和库存异动日志
                    //在[出库单明细]列表中第一次出现的配件[库存]信息
                    MDLPIS_Inventory inventoryExists = null;

                    foreach (var loopInventory in updateInventoryList)
                    {
                        if (loopInventory.INV_Barcode == loopStockOutBillDetail.SOBD_Barcode &&
                            loopInventory.INV_BatchNo == loopStockOutBillDetail.SOBD_BatchNo)
                        {
                            inventoryExists = loopInventory;
                            break;
                        }
                    }
                    if (inventoryExists != null)
                    {
                        if (inventoryExists.INV_Qty < loopStockOutBillDetail.SOBD_Qty)
                        {
                            //配件:loopStockOutBillDetail.SOBD_Name(条形码:loopStockOutBillDetail.SOBD_Barcode)的库存不足,审核失败
                            ResultMsg = MsgHelp.GetMsg(MsgCode.E_0030, new object[]
                            {
                                loopStockOutBillDetail.SOBD_Name, loopStockOutBillDetail.SOBD_Barcode,
                                MsgParam.SHORTAGE, SystemActionEnum.Name.APPROVE
                            });
                            LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                            return(false);
                        }
                        //[出库单明细]列表中已遍历过该配件,累减数量
                        inventoryExists.INV_Qty -= loopStockOutBillDetail.SOBD_Qty;

                        //生成[库存异动日志]
                        newInventoryTransLogList.Add(GenerateInventoryTransLogOfApprove(updateStockOutBill, loopStockOutBillDetail, inventoryExists));
                    }
                    else
                    {
                        //[出库单明细]列表中第一次出现该配件
                        //查询该配件是否在[库存]中存在
                        MDLPIS_Inventory resultInventory = new MDLPIS_Inventory();
                        _bll.QueryForObject <MDLPIS_Inventory, MDLPIS_Inventory>(new MDLPIS_Inventory
                        {
                            WHERE_INV_Org_ID  = updateStockOutBill.SOB_Org_ID,
                            WHERE_INV_Barcode = loopStockOutBillDetail.SOBD_Barcode,
                            WHERE_INV_BatchNo = loopStockOutBillDetail.SOBD_BatchNo,
                            WHERE_INV_WH_ID   = loopStockOutBillDetail.SOBD_WH_ID,
                            WHERE_INV_IsValid = true
                        }, resultInventory);

                        //[库存]中不存在该配件
                        if (string.IsNullOrEmpty(resultInventory.INV_ID))
                        {
                            //配件:loopStockOutBillDetail.SOBD_Name(条形码:loopStockOutBillDetail.SOBD_Barcode)的库存不存在,审核失败
                            ResultMsg = MsgHelp.GetMsg(MsgCode.E_0030, new object[]
                            {
                                loopStockOutBillDetail.SOBD_Name, loopStockOutBillDetail.SOBD_Barcode,
                                MsgParam.NOTEXIST, SystemActionEnum.Name.APPROVE
                            });
                            LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                            return(false);
                        }

                        if (resultInventory.INV_Qty < loopStockOutBillDetail.SOBD_Qty)
                        {
                            //配件:loopStockOutBillDetail.SOBD_Name(条形码:loopStockOutBillDetail.SOBD_Barcode)的库存不足,审核失败
                            ResultMsg = MsgHelp.GetMsg(MsgCode.E_0030, new object[] { loopStockOutBillDetail.SOBD_Name, loopStockOutBillDetail.SOBD_Barcode, MsgParam.SHORTAGE, SystemActionEnum.Name.APPROVE });
                            LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                            return(false);
                        }
                        //[库存]中存在该配件
                        //更新[库存]中该配件的数量
                        resultInventory.INV_Qty            -= loopStockOutBillDetail.SOBD_Qty;
                        resultInventory.INV_UpdatedBy       = LoginInfoDAX.UserName;
                        resultInventory.INV_UpdatedTime     = BLLCom.GetCurStdDatetime();
                        resultInventory.WHERE_INV_ID        = resultInventory.INV_ID;
                        resultInventory.WHERE_INV_VersionNo = resultInventory.INV_VersionNo;
                        updateInventoryList.Add(resultInventory);

                        //生成[库存异动日志]
                        newInventoryTransLogList.Add(GenerateInventoryTransLogOfApprove(updateStockOutBill, loopStockOutBillDetail, resultInventory));
                    }
                    #endregion
                }
            }
            #endregion

            #endregion

            #region 带事务的新增和保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 新增[应付单]

                if (!string.IsNullOrEmpty(newAccountPayableBill.APB_ID))
                {
                    bool insertAccountPayableBillResult = _bll.Insert(newAccountPayableBill);
                    if (!insertAccountPayableBillResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.FM_AccountPayableBill });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 新增[应付单明细]

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

                #region 保存[出库单]

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

                #endregion

                #region 保存[出库单明细]

                var updateDetailList = new List <MDLPIS_StockOutBillDetail>();
                //将当前DetailGridDS转换为指定类型的TBModelList
                paramDetailList.ToTBModelListForUpdateAndDelete <MDLPIS_StockOutBillDetail>(updateDetailList);
                foreach (var loopStockoutBillDetail in updateDetailList)
                {
                    bool saveStockOutBillDetailResult = _bll.Save(loopStockoutBillDetail);
                    if (!saveStockOutBillDetailResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_StockOutBillDetail });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 更新[库存]

                foreach (var loopInventory in updateInventoryList)
                {
                    bool saveInventoryResult = _bll.Save(loopInventory);
                    if (!saveInventoryResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_Inventory });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 新增[库存异动日志]

                if (newInventoryTransLogList.Count > 0)
                {
                    bool insertInventoryTransLogResult = _bll.InsertByList <MDLPIS_InventoryTransLog, MDLPIS_InventoryTransLog>(newInventoryTransLogList);
                    if (!insertInventoryTransLogResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_InventoryTransLog });
                        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.APPROVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }
            #endregion

            //将最新数据回写给DetailDS
            CopyModel(updateStockOutBill, paramHead);

            //更新明细版本号
            foreach (var loopInsertDetail in paramDetailList.InsertList)
            {
                //新增时版本号为1
                loopInsertDetail.SOBD_VersionNo = 1;
            }
            foreach (var loopUpdateDetail in paramDetailList.UpdateList)
            {
                //更新时版本号加1
                loopUpdateDetail.SOBD_VersionNo = loopUpdateDetail.SOBD_VersionNo + 1;
            }

            return(true);
        }
Esempio n. 9
0
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramHead">UIModel</param>
        /// <param name="paramDetailList">销售订单明细列表</param>
        /// <returns></returns>
        public bool SaveDetailDs(SalesReturnOrderManagerUIModel paramHead, SkyCarBindingList <SalesOrderDetailUIModel, MDLSD_SalesOrderDetail> paramDetailList)
        {
            var funcName = "SaveDetailDS";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);
            //服务端检查
            if (!ServerCheck(paramHead))
            {
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }

            #region 准备数据

            //待更新的[配件档案]列表
            List <MDLBS_AutoPartsArchive> updateAutoPartsArchiveList = new List <MDLBS_AutoPartsArchive>();

            #region 单头
            //将UIModel转为TBModel
            var argsHead = paramHead.ToTBModelForSaveAndDelete <MDLSD_SalesOrder>();
            //判断主键是否被赋值
            if (string.IsNullOrEmpty(paramHead.SO_ID))
            {
                argsHead.SO_ID = Guid.NewGuid().ToString();
                //单号
                argsHead.SO_No          = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.SO);
                argsHead.SO_CreatedBy   = LoginInfoDAX.UserName;
                argsHead.SO_CreatedTime = BLLCom.GetCurStdDatetime();
            }
            argsHead.SO_UpdatedBy   = LoginInfoDAX.UserName;
            argsHead.SO_UpdatedTime = BLLCom.GetCurStdDatetime();

            #endregion

            #region 明细

            //添加的明细
            if (paramDetailList != null && paramDetailList.InsertList != null &&
                paramDetailList.InsertList.Count > 0)
            {
                foreach (var loopSalesOrderDetail in paramDetailList.InsertList)
                {
                    //赋值销售订单ID
                    loopSalesOrderDetail.SOD_SO_ID = argsHead.SO_ID ?? argsHead.WHERE_SO_ID;

                    //如果[计价基准可改]为true
                    if (loopSalesOrderDetail.SOD_SalePriceRateIsChangeable ?? false)
                    {
                        //回写配件档案[条码和名称唯一]
                        //待更新的配件档案
                        MDLBS_AutoPartsArchive updateAutoPartsArchive = new MDLBS_AutoPartsArchive();
                        _bll.QueryForObject <MDLBS_AutoPartsArchive, MDLBS_AutoPartsArchive>(new MDLBS_AutoPartsArchive
                        {
                            WHERE_APA_IsValid = true,
                            WHERE_APA_Barcode = loopSalesOrderDetail.SOD_Barcode,
                            WHERE_APA_Name    = loopSalesOrderDetail.SOD_Name
                        }, updateAutoPartsArchive);
                        if (!string.IsNullOrEmpty(updateAutoPartsArchive.APA_ID))
                        {
                            updateAutoPartsArchive.WHERE_APA_ID        = updateAutoPartsArchive.APA_ID;
                            updateAutoPartsArchive.WHERE_APA_VersionNo = updateAutoPartsArchive.APA_VersionNo;
                            updateAutoPartsArchive.APA_VersionNo++;
                            updateAutoPartsArchive.APA_SalePriceRate = loopSalesOrderDetail.SOD_SalePriceRate;
                            updateAutoPartsArchive.APA_UpdatedBy     = LoginInfoDAX.UserName;
                            updateAutoPartsArchive.APA_UpdatedTime   = BLLCom.GetCurStdDatetime();

                            updateAutoPartsArchiveList.Add(updateAutoPartsArchive);
                        }
                    }
                }
            }

            #endregion

            #endregion

            #region 带事务的保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存单头

                //执行保存
                if (!_bll.Save(argsHead, argsHead.SO_ID))
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.SD_SalesOrder });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存明细

                if (paramDetailList != null)
                {
                    //执行保存
                    bool saveDetailResult = _bll.UnitySave(paramDetailList);
                    if (!saveDetailResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.SD_SalesOrderDetail });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }

                #endregion

                #region 更新[配件档案]列表

                foreach (var loopAutoPartsArchive in updateAutoPartsArchiveList)
                {
                    bool updateAutoPartsArchiveResult = _bll.Update(loopAutoPartsArchive);
                    if (!updateAutoPartsArchiveResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.UPDATE + SystemTableEnums.Name.BS_AutoPartsArchive });
                        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

            //将最新数据回写给DetailDS
            _bll.CopyModel(argsHead, paramHead);

            //更新明细版本号
            if (paramDetailList != null)
            {
                if (paramDetailList.InsertList != null)
                {
                    foreach (var loopInsertDetail in paramDetailList.InsertList)
                    {
                        //新增时版本号为1
                        loopInsertDetail.SOD_VersionNo = 1;
                    }
                }

                foreach (var loopUpdateDetail in paramDetailList.UpdateList)
                {
                    //更新时版本号加1
                    loopUpdateDetail.SOD_VersionNo = loopUpdateDetail.SOD_VersionNo + 1;
                }
            }

            return(true);
        }
Esempio n. 10
0
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="paramHead">销售订单</param>
        /// <param name="paramDetailList">销售订单明细列表</param>
        /// <param name="paramStockOutDetailList">出库明细列表</param>
        /// <param name="paramReturnStockInDetailList">退货入库明细列表</param>
        /// <param name="paramIsHasInventory">是否启用进销存模块</param>
        /// <returns></returns>
        public bool ApproveDetailDS(SalesReturnOrderManagerUIModel paramHead, SkyCarBindingList <SalesOrderDetailUIModel, MDLSD_SalesOrderDetail> paramDetailList, List <SalesStockOutDetailUIModel> paramStockOutDetailList, List <ReturnStockInDetailUIModel> paramReturnStockInDetailList, bool paramIsHasInventory)
        {
            var funcName = "ApproveDetailDS";

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

            #region 验证
            if (paramHead == null ||
                string.IsNullOrEmpty(paramHead.SO_ID) ||
                string.IsNullOrEmpty(paramHead.SO_No))
            {
                //没有获取到销售订单,审核失败
                ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.SD_SalesOrder, SystemActionEnum.Name.APPROVE });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }
            #endregion

            #region 准备数据

            #region 变量定义

            //待更新的[销售订单]
            MDLSD_SalesOrder updateSalesOrder = paramHead.ToTBModelForSaveAndDelete <MDLSD_SalesOrder>();

            //待新增的退货时的[应收单]
            MDLFM_AccountReceivableBill newRejectAccountReceivableBill = new MDLFM_AccountReceivableBill();
            //待新增的退货时的[应收单明细]列表
            List <MDLFM_AccountReceivableBillDetail> newRejectReceivableBillDetailList = new List <MDLFM_AccountReceivableBillDetail>();
            //待新增的退货入库[入库单]
            MDLPIS_StockInBill newReturnStockInBill = new MDLPIS_StockInBill();
            //待新增的退货入库[入库单明细]列表
            List <MDLPIS_StockInDetail> newReturnStockInDetailList = new List <MDLPIS_StockInDetail>();
            //待更新的[库存]列表
            List <MDLPIS_Inventory> updateStockInInventoryList = new List <MDLPIS_Inventory>();
            //待新增的[库存异动日志]列表
            List <MDLPIS_InventoryTransLog> newStockInInventoryTransLogList = new List <MDLPIS_InventoryTransLog>();

            #endregion

            #region 更新销售订单

            //更新[销售订单]审核状态为[已审核],单据状态根据[来源类型]决定
            updateSalesOrder.SO_VersionNo++;
            updateSalesOrder.SO_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            updateSalesOrder.SO_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            updateSalesOrder.SO_UpdatedBy          = LoginInfoDAX.UserName;
            updateSalesOrder.SO_UpdatedTime        = BLLCom.GetCurStdDatetime();

            #endregion

            #region [销售订单].[来源类型]为{手工创建退货}、{在线销售退货}、{主动销售退货}的场合

            //销售退货的场合,更新[销售订单].[单据状态]为[交易成功]
            updateSalesOrder.SO_StatusCode = SalesOrderStatusEnum.Code.JYCG;
            updateSalesOrder.SO_StatusName = SalesOrderStatusEnum.Name.JYCG;

            #region 创建退货入库的[入库单]

            //新增[来源类型]为[销售退货],[业务状态]为{已完成},[审核状态]为{已审核}的[入库单]
            newReturnStockInBill.SIB_ID                 = Guid.NewGuid().ToString();
            newReturnStockInBill.SIB_No                 = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.SIB);
            newReturnStockInBill.SIB_SourceTypeCode     = StockInBillSourceTypeEnum.Code.SSTH;
            newReturnStockInBill.SIB_SourceTypeName     = StockInBillSourceTypeEnum.Name.SSTH;
            newReturnStockInBill.SIB_SourceNo           = updateSalesOrder.SO_No;
            newReturnStockInBill.SIB_Org_ID             = updateSalesOrder.SO_Org_ID;
            newReturnStockInBill.SIB_StatusName         = StockInBillStatusEnum.Name.YWC;
            newReturnStockInBill.SIB_StatusCode         = StockInBillStatusEnum.Code.YWC;
            newReturnStockInBill.SIB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            newReturnStockInBill.SIB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            newReturnStockInBill.SIB_IsValid            = true;
            newReturnStockInBill.SIB_CreatedBy          = LoginInfoDAX.UserName;
            newReturnStockInBill.SIB_CreatedTime        = BLLCom.GetCurStdDatetime();
            newReturnStockInBill.SIB_UpdatedBy          = LoginInfoDAX.UserName;
            newReturnStockInBill.SIB_UpdatedTime        = BLLCom.GetCurStdDatetime();
            #endregion

            #region 创建负向的[应收单]

            //新增[来源类型]为[销售应收],[单据方向]为[负向],金额为负,[业务状态]为{执行中},[审核状态]为{已审核}的[应收单]
            newRejectAccountReceivableBill.ARB_ID             = Guid.NewGuid().ToString();
            newRejectAccountReceivableBill.ARB_No             = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.ARB);
            newRejectAccountReceivableBill.ARB_BillDirectCode = BillDirectionEnum.Code.MINUS;
            newRejectAccountReceivableBill.ARB_BillDirectName = BillDirectionEnum.Name.MINUS;
            newRejectAccountReceivableBill.ARB_SourceTypeCode = AccountReceivableBillSourceTypeEnum.Code.XSYS;
            newRejectAccountReceivableBill.ARB_SourceTypeName = AccountReceivableBillSourceTypeEnum.Name.XSYS;
            newRejectAccountReceivableBill.ARB_SrcBillNo      = updateSalesOrder.SO_No;
            newRejectAccountReceivableBill.ARB_Org_ID         = LoginInfoDAX.OrgID;
            newRejectAccountReceivableBill.ARB_Org_Name       = LoginInfoDAX.OrgShortName;
            if (paramHead.SO_CustomerTypeName == CustomerTypeEnum.Name.PTNQXSH)
            {
                newRejectAccountReceivableBill.ARB_PayObjectTypeName = AmountTransObjectTypeEnum.Name.PLATFORMAUTOFACTORY;
                newRejectAccountReceivableBill.ARB_PayObjectTypeCode = AmountTransObjectTypeEnum.Code.PLATFORMAUTOFACTORY;
            }
            else if (paramHead.SO_CustomerTypeName == CustomerTypeEnum.Name.YBQXSH)
            {
                newRejectAccountReceivableBill.ARB_PayObjectTypeName = AmountTransObjectTypeEnum.Name.GENERALAUTOFACTORY;
                newRejectAccountReceivableBill.ARB_PayObjectTypeCode = AmountTransObjectTypeEnum.Code.GENERALAUTOFACTORY;
            }
            else
            {
                newRejectAccountReceivableBill.ARB_PayObjectTypeName = AmountTransObjectTypeEnum.Name.REGULARCUSTOMER;
                newRejectAccountReceivableBill.ARB_PayObjectTypeCode = AmountTransObjectTypeEnum.Code.REGULARCUSTOMER;
            }
            newRejectAccountReceivableBill.ARB_PayObjectName      = paramHead.SO_CustomerName;
            newRejectAccountReceivableBill.ARB_PayObjectID        = paramHead.SO_CustomerID;
            newRejectAccountReceivableBill.ARB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.ZXZ;
            newRejectAccountReceivableBill.ARB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.ZXZ;
            newRejectAccountReceivableBill.ARB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH;
            newRejectAccountReceivableBill.ARB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH;
            newRejectAccountReceivableBill.ARB_IsValid            = true;
            newRejectAccountReceivableBill.ARB_CreatedBy          = LoginInfoDAX.UserName;
            newRejectAccountReceivableBill.ARB_CreatedTime        = BLLCom.GetCurStdDatetime();
            newRejectAccountReceivableBill.ARB_UpdatedBy          = LoginInfoDAX.UserName;
            newRejectAccountReceivableBill.ARB_UpdatedTime        = BLLCom.GetCurStdDatetime();
            #endregion

            //退货产生的应收单.[应收金额]
            decimal returnReceivableAmount = 0;

            foreach (var loopSalesOrderReturnDetail in paramDetailList)
            {
                #region 退货的[销售订单明细]

                //[销售订单明细]审核状态 和 单据状态与单头一致
                loopSalesOrderReturnDetail.WHERE_SOD_ID        = loopSalesOrderReturnDetail.SOD_ID;
                loopSalesOrderReturnDetail.WHERE_SOD_VersionNo = loopSalesOrderReturnDetail.SOD_VersionNo;
                loopSalesOrderReturnDetail.SOD_VersionNo++;
                loopSalesOrderReturnDetail.SOD_ApprovalStatusCode = updateSalesOrder.SO_ApprovalStatusCode;
                loopSalesOrderReturnDetail.SOD_ApprovalStatusName = updateSalesOrder.SO_ApprovalStatusName;
                loopSalesOrderReturnDetail.SOD_StatusCode         = updateSalesOrder.SO_StatusCode;
                loopSalesOrderReturnDetail.SOD_StatusName         = updateSalesOrder.SO_StatusName;
                loopSalesOrderReturnDetail.SOD_UpdatedBy          = LoginInfoDAX.UserName;
                loopSalesOrderReturnDetail.SOD_UpdatedTime        = BLLCom.GetCurStdDatetime();
                #endregion

                #region 退货的[应收单明细]
                //新增[来源类型]为[销售应收],[是否负向明细]为[true],金额为负的[应收单明细]
                MDLFM_AccountReceivableBillDetail newAccountReceivableBillDetail = new MDLFM_AccountReceivableBillDetail
                {
                    ARBD_ID              = Guid.NewGuid().ToString(),
                    ARBD_ARB_ID          = newRejectAccountReceivableBill.ARB_ID,
                    ARBD_IsMinusDetail   = true,
                    ARBD_SrcBillNo       = updateSalesOrder.SO_No,
                    ARBD_SrcBillDetailID = loopSalesOrderReturnDetail.SOD_ID,
                    ARBD_Org_ID          = newRejectAccountReceivableBill.ARB_Org_ID,
                    ARBD_Org_Name        = newRejectAccountReceivableBill.ARB_Org_Name,
                    //应收金额 = 销售数量(退货数量) * 单价
                    ARBD_AccountReceivableAmount = -Math.Round((loopSalesOrderReturnDetail.SOD_Qty ?? 0) * (loopSalesOrderReturnDetail.SOD_UnitPrice ?? 0), 2),
                    ARBD_ReceivedAmount          = 0,
                    ARBD_UnReceiveAmount         = -Math.Round((loopSalesOrderReturnDetail.SOD_Qty ?? 0) * (loopSalesOrderReturnDetail.SOD_UnitPrice ?? 0), 2),
                    ARBD_BusinessStatusCode      = newRejectAccountReceivableBill.ARB_BusinessStatusCode,
                    ARBD_BusinessStatusName      = newRejectAccountReceivableBill.ARB_BusinessStatusName,
                    ARBD_ApprovalStatusCode      = newRejectAccountReceivableBill.ARB_ApprovalStatusCode,
                    ARBD_ApprovalStatusName      = newRejectAccountReceivableBill.ARB_ApprovalStatusName,
                    ARBD_IsValid     = true,
                    ARBD_CreatedBy   = LoginInfoDAX.UserName,
                    ARBD_CreatedTime = BLLCom.GetCurStdDatetime(),
                    ARBD_UpdatedBy   = LoginInfoDAX.UserName,
                    ARBD_UpdatedTime = BLLCom.GetCurStdDatetime()
                };
                returnReceivableAmount += (newAccountReceivableBillDetail.ARBD_AccountReceivableAmount ?? 0);
                newRejectReceivableBillDetailList.Add(newAccountReceivableBillDetail);

                #endregion
            }
            //[应收单].[应收金额]
            newRejectAccountReceivableBill.ARB_AccountReceivableAmount = returnReceivableAmount;
            newRejectAccountReceivableBill.ARB_ReceivedAmount          = 0;
            newRejectAccountReceivableBill.ARB_UnReceiveAmount         = returnReceivableAmount;
            //[销售单].[总金额]
            updateSalesOrder.SO_TotalAmount = returnReceivableAmount;

            foreach (var loopReturnStockInDetail in paramReturnStockInDetailList)
            {
                #region 退货入库的[入库单明细]

                MDLPIS_StockInDetail newStockInDetail = new MDLPIS_StockInDetail();
                _bll.CopyModel(loopReturnStockInDetail, newStockInDetail);

                newStockInDetail.SID_ID          = Guid.NewGuid().ToString();
                newStockInDetail.SID_SIB_ID      = newReturnStockInBill.SIB_ID;
                newStockInDetail.SID_SIB_No      = newReturnStockInBill.SIB_No;
                newStockInDetail.SID_IsValid     = true;
                newStockInDetail.SID_CreatedBy   = LoginInfoDAX.UserName;
                newStockInDetail.SID_CreatedTime = BLLCom.GetCurStdDatetime();
                newStockInDetail.SID_UpdatedBy   = LoginInfoDAX.UserName;
                newStockInDetail.SID_UpdatedTime = BLLCom.GetCurStdDatetime();

                var curInDetailOfSalesDetail =
                    paramDetailList.FirstOrDefault(x => x.SOD_Barcode == newStockInDetail.SID_Barcode);
                if (curInDetailOfSalesDetail != null)
                {
                    //[入库单明细].[来源单据明细ID] 为 [销售退货单明细].[ID]
                    newStockInDetail.SID_SourceDetailID = curInDetailOfSalesDetail.SOD_ID;
                }

                newReturnStockInDetailList.Add(newStockInDetail);
                #endregion

                if (paramIsHasInventory)
                {
                    #region  进销存 并且 审核销售退货订单的场合,创建相关单据为已审核的场合,更新[库存],创建[库存异动日志]

                    //在[入库单明细]列表中第一次出现的配件[库存]信息
                    MDLPIS_Inventory inventoryExists = null;

                    foreach (var loopInventory in updateStockInInventoryList)
                    {
                        if (loopInventory.INV_Barcode == loopReturnStockInDetail.SID_Barcode &&
                            loopInventory.INV_BatchNo == loopReturnStockInDetail.SID_BatchNo)
                        {
                            inventoryExists = loopInventory;
                            break;
                        }
                    }
                    if (inventoryExists != null)
                    {
                        //[入库单明细]列表中已遍历过该配件,累加数量
                        inventoryExists.INV_Qty        += loopReturnStockInDetail.SID_Qty;
                        inventoryExists.INV_UpdatedBy   = LoginInfoDAX.UserName;
                        inventoryExists.INV_UpdatedTime = BLLCom.GetCurStdDatetime();
                        //生成[库存异动日志]
                        newStockInInventoryTransLogList.Add(GenerateStockInInventoryTransLog(newReturnStockInBill, loopReturnStockInDetail, inventoryExists, paramHead));
                    }
                    else
                    {
                        //[入库单明细]列表中第一次出现该配件
                        //查询该配件是否在[库存]中存在
                        MDLPIS_Inventory resultInventory = new MDLPIS_Inventory();
                        _bll.QueryForObject <MDLPIS_Inventory, MDLPIS_Inventory>(new MDLPIS_Inventory
                        {
                            WHERE_INV_Org_ID  = newReturnStockInBill.SIB_Org_ID,
                            WHERE_INV_Barcode = loopReturnStockInDetail.SID_Barcode,
                            WHERE_INV_BatchNo = loopReturnStockInDetail.SID_BatchNo,
                            WHERE_INV_WH_ID   = loopReturnStockInDetail.SID_WH_ID,
                            WHERE_INV_IsValid = true
                        }, resultInventory);

                        //[库存]中不存在该配件
                        if (string.IsNullOrEmpty(resultInventory.INV_ID))
                        {
                            //新增一个该配件的库存信息
                            MDLPIS_Inventory inventoryToInsert = new MDLPIS_Inventory
                            {
                                INV_Org_ID            = newReturnStockInBill.SIB_Org_ID,
                                INV_SUPP_ID           = loopReturnStockInDetail.SID_SUPP_ID,
                                INV_WH_ID             = loopReturnStockInDetail.SID_WH_ID,
                                INV_WHB_ID            = loopReturnStockInDetail.SID_WHB_ID,
                                INV_ThirdNo           = loopReturnStockInDetail.SID_ThirdNo,
                                INV_OEMNo             = loopReturnStockInDetail.SID_OEMNo,
                                INV_Barcode           = loopReturnStockInDetail.SID_Barcode,
                                INV_BatchNo           = loopReturnStockInDetail.SID_BatchNo,
                                INV_Name              = loopReturnStockInDetail.SID_Name,
                                INV_Specification     = loopReturnStockInDetail.SID_Specification,
                                INV_Qty               = loopReturnStockInDetail.SID_Qty,
                                INV_PurchaseUnitPrice = loopReturnStockInDetail.SID_UnitCostPrice,
                                INV_IsValid           = true,
                                INV_CreatedBy         = LoginInfoDAX.UserName,
                                INV_CreatedTime       = BLLCom.GetCurStdDatetime(),
                                INV_UpdatedBy         = LoginInfoDAX.UserName,
                                INV_UpdatedTime       = BLLCom.GetCurStdDatetime()
                            };
                            updateStockInInventoryList.Add(inventoryToInsert);

                            //生成[库存异动日志]
                            newStockInInventoryTransLogList.Add(GenerateStockInInventoryTransLog(newReturnStockInBill, loopReturnStockInDetail, inventoryToInsert, paramHead));
                        }
                        //[库存]中存在该配件
                        else
                        {
                            //更新[库存]中该配件的数量
                            resultInventory.INV_Qty            += loopReturnStockInDetail.SID_Qty;
                            resultInventory.INV_UpdatedBy       = LoginInfoDAX.UserName;
                            resultInventory.INV_UpdatedTime     = BLLCom.GetCurStdDatetime();
                            resultInventory.WHERE_INV_ID        = resultInventory.INV_ID;
                            resultInventory.WHERE_INV_VersionNo = resultInventory.INV_VersionNo;
                            updateStockInInventoryList.Add(resultInventory);

                            //生成[库存异动日志]
                            newStockInInventoryTransLogList.Add(GenerateStockInInventoryTransLog(newReturnStockInBill, loopReturnStockInDetail, resultInventory, paramHead));
                        }
                    }

                    #endregion
                }
            }
            #endregion

            #endregion

            #region 带事务的新增和更新

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 更新[销售订单]

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

                #region 保存[销售订单明细]

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

                #region 新增[应收单]
                if (!string.IsNullOrEmpty(newRejectAccountReceivableBill.ARB_ID))
                {
                    //销售退货时产生的负向的[销售应收]
                    bool insertAccountReceivableBillResult = _bll.Insert(newRejectAccountReceivableBill);
                    if (!insertAccountReceivableBillResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.FM_AccountReceivableBill });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 新增[应收单明细]

                //销售退货时产生的负向的[销售应收]
                if (newRejectReceivableBillDetailList.Count > 0)
                {
                    bool insertAccountReceivableBillDetailResult = _bll.InsertByList <MDLFM_AccountReceivableBillDetail, MDLFM_AccountReceivableBillDetail>(newRejectReceivableBillDetailList);
                    if (!insertAccountReceivableBillDetailResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.FM_AccountReceivableBillDetail });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 保存[库存]
                foreach (var loopInventory in updateStockInInventoryList)
                {
                    bool saveInventoryResult = _bll.Save(loopInventory);
                    if (!saveInventoryResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_Inventory });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 新增[库存异动日志]
                if (newStockInInventoryTransLogList.Count > 0)
                {
                    bool insertInventoryTransLogResult = _bll.InsertByList <MDLPIS_InventoryTransLog, MDLPIS_InventoryTransLog>(newStockInInventoryTransLogList);
                    if (!insertInventoryTransLogResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_InventoryTransLog });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 销售退货入库时生成[入库单]

                if (!string.IsNullOrEmpty(newReturnStockInBill.SIB_ID))
                {
                    bool insertStockInBillResult = _bll.Insert(newReturnStockInBill);
                    if (!insertStockInBillResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_StockInBill });
                        LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                        return(false);
                    }
                }
                #endregion

                #region 销售退货入库时生成[入库单明细]

                if (newReturnStockInDetailList.Count > 0)
                {
                    bool insertStockInDetailResult = _bll.InsertByList <MDLPIS_StockInDetail, MDLPIS_StockInDetail>(newReturnStockInDetailList);
                    if (!insertStockInDetailResult)
                    {
                        DBManager.RollBackTransaction(DBCONFIG.Coeus);
                        ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_StockInDetail });
                        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.APPROVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }
            #endregion

            //将最新数据回写给DetailDS
            _bll.CopyModel(updateSalesOrder, 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);
        }
Esempio n. 12
0
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramHead">UIModel</param>
        /// <param name="paramDetailList">明细List</param>
        /// <param name="paramPictureNameAndPath"></param>
        /// <returns></returns>
        public bool SaveDetailDS(LogisticsBillManagerUIModel paramHead, SkyCarBindingList <LogisticsBillDetailManagerUIModel, MDLSD_LogisticsBillDetail> paramDetailList,
                                 Dictionary <string, string> paramPictureNameAndPath)
        {
            var funcName = "SaveDetailDS";

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

            //服务端检查
            if (!ServerCheck(paramHead, paramDetailList))
            {
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                return(false);
            }

            #region 准备数据

            #region 单头

            var argsHead = paramHead.ToTBModelForSaveAndDelete <MDLSD_LogisticsBill>();
            //判断主键是否被赋值
            if (string.IsNullOrEmpty(paramHead.LB_ID))
            {
                argsHead.LB_ID = Guid.NewGuid().ToString();
                //物流单号
                argsHead.LB_No          = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.LB);
                argsHead.LB_CreatedBy   = LoginInfoDAX.UserName;
                argsHead.LB_CreatedTime = BLLCom.GetCurStdDatetime();
            }
            argsHead.LB_UpdatedBy   = LoginInfoDAX.UserName;
            argsHead.LB_UpdatedTime = BLLCom.GetCurStdDatetime();

            #endregion

            #region 明细
            //添加的明细
            if (paramDetailList != null && paramDetailList.InsertList != null && paramDetailList.InsertList.Count > 0)
            {
                foreach (var loopLogisticsBillDetail in paramDetailList.InsertList)
                {
                    loopLogisticsBillDetail.LBD_LB_ID = argsHead.LB_ID ?? argsHead.WHERE_LB_ID;
                    loopLogisticsBillDetail.LBD_LB_No = argsHead.LB_No;
                }
            }
            #endregion

            #region   图片

            foreach (var loopPicture in paramPictureNameAndPath)
            {
                if (string.IsNullOrEmpty(loopPicture.Key) ||
                    string.IsNullOrEmpty(loopPicture.Value))
                {
                    continue;
                }

                #region 将图片保存到本地以及上传文件服务器

                string fileNetUrl        = string.Empty;
                bool   savePictureResult = BLLCom.SaveFileByFileName(loopPicture.Value, loopPicture.Key, ref fileNetUrl);
                if (!savePictureResult)
                {
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + MsgParam.IMAGE });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }
                #endregion

                //截取上传图片返回值中的文件名称
                int fileNameStartIndex = fileNetUrl.IndexOf("FileName=", StringComparison.Ordinal) + 1;
                int fileNameEndIndex   = fileNameStartIndex + "FileName=".Length;
                int length             = fileNetUrl.Length;
                //文件名称
                string tempFileName = fileNetUrl.Substring(fileNameEndIndex - 1, length - (fileNameEndIndex - 1));

                //给各个图片赋值
                if (loopPicture.Key == argsHead.LB_AcceptPicPath1)
                {
                    argsHead.LB_AcceptPicPath1 = tempFileName;
                }
                else if (loopPicture.Key == argsHead.LB_AcceptPicPath2)
                {
                    argsHead.LB_AcceptPicPath2 = tempFileName;
                }
                else if (loopPicture.Key == argsHead.LB_ReceivedPicPath1)
                {
                    argsHead.LB_ReceivedPicPath1 = tempFileName;
                }
                else if (loopPicture.Key == argsHead.LB_ReceivedPicPath2)
                {
                    argsHead.LB_ReceivedPicPath2 = tempFileName;
                }
            }
            #endregion

            #region 物流订单异动日志

            //新增状态为 当前物流单状态 的[物流单异动日志]
            MDLSD_LogisticsBillTrans newLogisticsBillTrans = new MDLSD_LogisticsBillTrans
            {
                LBT_ID          = Guid.NewGuid().ToString(),
                LBT_Org_ID      = argsHead.LB_Org_ID,
                LBT_Org_Name    = argsHead.LB_Org_Name,
                LBT_LB_ID       = argsHead.LB_ID ?? argsHead.WHERE_LB_ID,
                LBT_LB_NO       = argsHead.LB_No,
                LBT_Time        = BLLCom.GetCurStdDatetime(),
                LBT_Status      = argsHead.LB_StatusName,
                LBT_IsValid     = true,
                LBT_CreatedBy   = LoginInfoDAX.UserName,
                LBT_CreatedTime = BLLCom.GetCurStdDatetime(),
                LBT_UpdatedBy   = LoginInfoDAX.UserName,
                LBT_UpdatedTime = BLLCom.GetCurStdDatetime()
            };

            #endregion

            #endregion

            #region 事务处理
            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存[物流单]

                //执行保存
                if (!_bll.Save(argsHead, argsHead.LB_ID))
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    foreach (var loopPicture in paramPictureNameAndPath)
                    {
                        if (string.IsNullOrEmpty(loopPicture.Key) ||
                            string.IsNullOrEmpty(loopPicture.Value))
                        {
                            continue;
                        }
                        //保存失败,删除本地以及文件服务器上的图片
                        var outMsg = string.Empty;
                        BLLCom.DeleteFileByFileName(loopPicture.Key, ref outMsg);
                    }

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.SD_LogisticsBill });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存[物流单明细]

                //执行保存
                if (!_bll.UnitySave(paramDetailList))
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    foreach (var loopPicture in paramPictureNameAndPath)
                    {
                        if (string.IsNullOrEmpty(loopPicture.Key) ||
                            string.IsNullOrEmpty(loopPicture.Value))
                        {
                            continue;
                        }
                        //保存失败,删除本地以及文件服务器上的图片
                        var outMsg = string.Empty;
                        BLLCom.DeleteFileByFileName(loopPicture.Key, ref outMsg);
                    }

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.SD_LogisticsBillDetail });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 新增[物流单日志]
                bool addLogisticsBillTransResult = _bll.Insert(newLogisticsBillTrans);
                if (!addLogisticsBillTransResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    foreach (var loopPicture in paramPictureNameAndPath)
                    {
                        if (string.IsNullOrEmpty(loopPicture.Key) ||
                            string.IsNullOrEmpty(loopPicture.Value))
                        {
                            continue;
                        }
                        //保存失败,删除本地以及文件服务器上的图片
                        var outMsg = string.Empty;
                        BLLCom.DeleteFileByFileName(loopPicture.Key, ref outMsg);
                    }

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.SD_LogisticsBillTrans });
                    return(false);
                }
                #endregion

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);

                foreach (var loopPicture in paramPictureNameAndPath)
                {
                    if (string.IsNullOrEmpty(loopPicture.Key) ||
                        string.IsNullOrEmpty(loopPicture.Value))
                    {
                        continue;
                    }
                    //保存失败,删除本地以及文件服务器上的图片
                    var outMsg = string.Empty;
                    BLLCom.DeleteFileByFileName(loopPicture.Key, ref outMsg);
                }

                //保存[物流单管理]信息发生异常
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.SAVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, MethodBase.GetCurrentMethod().ToString(),
                                            ex.Message, "", null);
                return(false);
            }
            #endregion

            //将最新数据回写给DetailDS argsLogisticsBill
            CopyModel(argsHead, paramHead);

            //更新明细版本号
            if (paramDetailList != null)
            {
                if (paramDetailList.InsertList != null)
                {
                    foreach (var loopInsertDetail in paramDetailList.InsertList)
                    {
                        //新增时版本号为1
                        loopInsertDetail.LBD_VersionNo = 1;
                    }
                }

                foreach (var loopUpdateDetail in paramDetailList.UpdateList)
                {
                    //更新时版本号加1
                    loopUpdateDetail.LBD_VersionNo = loopUpdateDetail.LBD_VersionNo + 1;
                }
            }

            foreach (var loopPicture in paramPictureNameAndPath)
            {
                if (string.IsNullOrEmpty(loopPicture.Key) ||
                    string.IsNullOrEmpty(loopPicture.Value))
                {
                    continue;
                }
                //保存成功,删除临时保存的图片
                if (File.Exists(loopPicture.Value))
                {
                    File.Delete(loopPicture.Value);
                }
            }
            return(true);
        }