Example #1
0
        public ResultModel PaymentVirtualConfirm(UserModel user, Model.PaymentVirtual paymentVirtual)
        {
            ResultModel result = new ResultModel();

            try
            {
                DAL.PaymentDAL paymentDAL = new PaymentDAL();
                using (System.Transactions.TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    //验证虚拟付款
                    result = paymentvirtualDAL.Get(user, paymentVirtual.VirtualId);

                    if (result.ResultStatus != 0)
                        return result;

                    Model.PaymentVirtual resultObj = result.ReturnValue as Model.PaymentVirtual;
                    if (resultObj == null || resultObj.VirtualId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "虚拟付款不存在";
                        return result;
                    }

                    if (resultObj.DetailStatus != StatusEnum.已生效)
                    {
                        result.ResultStatus = -1;
                        result.Message = "虚拟付款状态不能进行确认";
                        return result;
                    }

                    //获取财务付款
                    result = paymentDAL.Get(user, resultObj.PaymentId);
                    if (result.ResultStatus != 0)
                        return result;

                    Model.Payment payment = result.ReturnValue as Model.Payment;
                    if (payment == null || payment.PaymentId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "付款不存在";
                        return result;
                    }

                    //更新虚拟付款
                    resultObj.ConfirmMemo = paymentVirtual.ConfirmMemo;
                    resultObj.DetailStatus = StatusEnum.已完成;

                    result = paymentvirtualDAL.Update(user,resultObj);
                    if (result.ResultStatus != 0)
                        return result;

                    //获取对应的付款申请
                    DAL.PayApplyDAL payApplyDAL = new PayApplyDAL();
                    result = payApplyDAL.Get(user, resultObj.PayApplyId);
                    if (result.ResultStatus != 0)
                        return result;

                    Model.PayApply payApply = result.ReturnValue as Model.PayApply;
                    if (payApply == null || payApply.PayApplyId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "付款申请不存在";
                        return result;
                    }

                    NFMT.Data.DAL.BankDAL outBankDAL = new Data.DAL.BankDAL();
                    NFMT.User.DAL.BlocDAL blocDAL = new User.DAL.BlocDAL();
                    DAL.FundsLogDAL fundsLogDAL = new FundsLogDAL();

                    //写付款资金流水,状态为已完成
                    Model.FundsLog fundsLog = new FundsLog();
                    fundsLog.CurrencyId = payment.CurrencyId;
                    fundsLog.FundsBala = payment.FundsBala;
                    fundsLog.FundsDesc = payment.Memo;
                    fundsLog.InAccountId = payment.PayBankAccountId;
                    fundsLog.InBankId = payment.PayBankId;
                    fundsLog.InBlocId = user.BlocId;
                    fundsLog.InCorpId = payment.PayCorp;
                    fundsLog.IsVirtualPay = false;
                    fundsLog.LogDate = DateTime.Now;
                    fundsLog.LogDirection = (int)NFMT.WareHouse.LogDirectionEnum.Out;
                    fundsLog.LogSource = "dbo.Fun_PaymentVirtual";
                    fundsLog.LogSourceBase = "NFMT";
                    fundsLog.LogStatus = StatusEnum.已完成;
                    fundsLog.LogType = (int)NFMT.WareHouse.LogTypeEnum.付款;
                    fundsLog.OpPerson = user.EmpId;
                    fundsLog.OutAccount = payment.ReceBankAccount;
                    fundsLog.OutAccountId = payment.ReceBankAccountId;
                    result = outBankDAL.Get(user, payment.ReceBankId);
                    if (result.ResultStatus != 0)
                        return result;
                    NFMT.Data.Model.Bank outBank = result.ReturnValue as NFMT.Data.Model.Bank;
                    if (outBank == null || outBank.BankId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "收款银行不存在";
                        return result;
                    }
                    fundsLog.OutBank = outBank.BankName;
                    fundsLog.OutBankId = payment.ReceBankId;

                    result = blocDAL.GetBlocByCorpId(user, payment.RecevableCorp);
                    if (result.ResultStatus == 0)
                    {
                        NFMT.User.Model.Bloc bloc = result.ReturnValue as NFMT.User.Model.Bloc;
                        if (bloc != null && bloc.BlocId > 0)
                            fundsLog.OutBlocId = bloc.BlocId;
                    }
                    fundsLog.OutCorpId = payment.RecevableCorp;
                    fundsLog.PayMode = payment.PayStyle;
                    fundsLog.SourceId = payment.PaymentId;

                    if (payApply.PayApplySource == (int)FundsStyleEnum.库存付款申请 || payApply.PayApplySource == (int)FundsStyleEnum.合约付款申请)
                    {
                        //加载合约明细
                        DAL.PaymentContractDetailDAL paymentContractDetailDAL = new PaymentContractDetailDAL();
                        result = paymentContractDetailDAL.GetByPaymentId(user, payment.PaymentId);
                        if (result.ResultStatus != 0)
                            return result;

                        Model.PaymentContractDetail paymentContractDetail = result.ReturnValue as Model.PaymentContractDetail;
                        if (paymentContractDetail == null || paymentContractDetail.DetailId <= 0)
                        {
                            result.ResultStatus = -1;
                            result.Message = "付款合约明细加载失败";
                            return result;
                        }

                        fundsLog.ContractId = paymentContractDetail.ContractId;
                        fundsLog.SubId = paymentContractDetail.ContractSubId;
                    }

                    result = fundsLogDAL.Insert(user, fundsLog);
                    if (result.ResultStatus != 0)
                        return result;

                    int fundsLogId = 0;
                    if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out fundsLogId) || fundsLogId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "付款流水新增失败";
                        return result;
                    }

                    //更新虚拟付款表的资金流水序号
                    resultObj.FundsLogId = fundsLogId;
                    resultObj.DetailStatus = StatusEnum.已完成;
                    result = this.paymentvirtualDAL.Update(user, resultObj);
                    if (result.ResultStatus != 0)
                        return result;

                    //反向分配一收款至对应公司

                    scope.Complete();
                }
            }
            catch (Exception ex)
            {
                result.ResultStatus = -1;
                result.Message = ex.Message;
            }

            return result;
        }
Example #2
0
        public ResultModel Audit(UserModel user, NFMT.WorkFlow.Model.DataSource dataSource, bool isPass)
        {
            ResultModel result = new ResultModel();

            try
            {
                DAL.PayApplyDAL payApplyDAL = new PayApplyDAL();
                NFMT.User.DAL.BlocDAL blocDAL = new User.DAL.BlocDAL();
                DAL.FundsLogDAL fundsLogDAL = new FundsLogDAL();
                NFMT.Data.DAL.BankDAL outBankDAL = new Data.DAL.BankDAL();
                DAL.PaymentVirtualDAL paymentVirtualDAL = new PaymentVirtualDAL();

                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    result = this.paymentDAL.Get(NFMT.Common.DefaultValue.SysUser, dataSource.RowId);
                    if (result.ResultStatus != 0)
                        return result;

                    Model.Payment payment = result.ReturnValue as Model.Payment;
                    if (payment == null || payment.PaymentId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "付款不存在";
                        return result;
                    }

                    //审核,修改数据状态
                    result = this.paymentDAL.Audit(user, payment, isPass);
                    if (result.ResultStatus != 0)
                        return result;

                    //获取虚拟付款
                    result = paymentVirtualDAL.GetByPaymentId(user, payment.PaymentId, StatusEnum.已录入);
                    if (result.ResultStatus == 0)
                    {
                        Model.PaymentVirtual paymentVirtual = result.ReturnValue as Model.PaymentVirtual;
                        if (paymentVirtual != null && paymentVirtual.VirtualId > 0)
                        {
                            //审核虚拟付款
                            result = paymentVirtualDAL.Audit(user, paymentVirtual, isPass);
                            if (result.ResultStatus != 0)
                                return result;
                        }
                    }

                    //审核通过
                    if (isPass)
                    {
                        //获取对方的付款申请
                        result = payApplyDAL.Get(user, payment.PayApplyId);
                        if (result.ResultStatus != 0)
                            return result;

                        Model.PayApply payApply = result.ReturnValue as Model.PayApply;
                        if (payApply == null || payApply.PayApplyId <= 0)
                        {
                            result.ResultStatus = -1;
                            result.Message = "付款申请不存在";
                            return result;
                        }

                        // 流水操作:写入 流水类型:付款 流水状态:已生效 【仅写入实际付款】
                        Model.FundsLog fundsLog = new FundsLog();
                        fundsLog.CurrencyId = payment.CurrencyId;
                        fundsLog.FundsBala = payment.FundsBala;
                        fundsLog.FundsDesc = payment.Memo;
                        fundsLog.InAccountId = payment.PayBankAccountId;
                        fundsLog.InBankId = payment.PayBankId;
                        fundsLog.InBlocId = user.BlocId;
                        fundsLog.InCorpId = payment.PayCorp;
                        fundsLog.IsVirtualPay = false;
                        fundsLog.LogDate = DateTime.Now;
                        fundsLog.LogDirection = (int)NFMT.WareHouse.LogDirectionEnum.Out;
                        fundsLog.LogSource = "dbo.Fun_Payment";
                        fundsLog.LogSourceBase = "NFMT";
                        fundsLog.LogStatus = StatusEnum.已生效;
                        fundsLog.LogType = (int)NFMT.WareHouse.LogTypeEnum.付款;
                        fundsLog.OpPerson = user.EmpId;
                        fundsLog.OutAccount = payment.ReceBankAccount;
                        fundsLog.OutAccountId = payment.ReceBankAccountId;
                        result = outBankDAL.Get(user, payment.ReceBankId);
                        if (result.ResultStatus != 0)
                            return result;
                        NFMT.Data.Model.Bank outBank = result.ReturnValue as NFMT.Data.Model.Bank;
                        if (outBank == null || outBank.BankId <= 0)
                        {
                            result.ResultStatus = -1;
                            result.Message = "收款银行不存在";
                            return result;
                        }
                        fundsLog.OutBank = outBank.BankName;
                        fundsLog.OutBankId = payment.ReceBankId;

                        result = blocDAL.GetBlocByCorpId(user, payment.RecevableCorp);
                        if (result.ResultStatus == 0)
                        {
                            NFMT.User.Model.Bloc bloc = result.ReturnValue as NFMT.User.Model.Bloc;
                            if (bloc != null && bloc.BlocId > 0)
                                fundsLog.OutBlocId = bloc.BlocId;
                        }
                        fundsLog.OutCorpId = payment.RecevableCorp;
                        fundsLog.PayMode = payment.PayStyle;
                        fundsLog.SourceId = payment.PaymentId;

                        if (payApply.PayApplySource == (int)FundsStyleEnum.库存付款申请 || payApply.PayApplySource == (int)FundsStyleEnum.合约付款申请)
                        {
                            //加载合约明细
                            DAL.PaymentContractDetailDAL paymentContractDetailDAL = new PaymentContractDetailDAL();
                            result = paymentContractDetailDAL.GetByPaymentId(user, payment.PaymentId);
                            if (result.ResultStatus != 0)
                                return result;

                            Model.PaymentContractDetail paymentContractDetail = result.ReturnValue as Model.PaymentContractDetail;
                            if (paymentContractDetail == null || paymentContractDetail.DetailId <= 0)
                            {
                                result.ResultStatus = -1;
                                result.Message = "付款合约明细加载失败";
                                return result;
                            }

                            fundsLog.ContractId = paymentContractDetail.ContractId;
                            fundsLog.SubId = paymentContractDetail.ContractSubId;
                        }

                        result = fundsLogDAL.Insert(user, fundsLog);
                        if (result.ResultStatus != 0)
                            return result;

                        int fundsLogId = 0;
                        if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out fundsLogId) || fundsLogId <= 0)
                        {
                            result.ResultStatus = -1;
                            result.Message = "付款流水新增失败";
                            return result;
                        }

                        //更新付款表的资金流水序号
                        payment.FundsLogId = fundsLogId;
                        payment.PaymentStatus = StatusEnum.已生效;
                        result = this.paymentDAL.Update(user, payment);
                        if (result.ResultStatus != 0)
                            return result;
                    }

                    scope.Complete();
                }
            }
            catch (Exception ex)
            {
                result.ResultStatus = -1;
                result.Message = ex.Message;
                return result;
            }

            return result;
        }