コード例 #1
0
        /// <summary>
        /// 确认
        /// </summary>
        /// <param name="model"></param>
        public void ToConfirmPayment(PaymentConAbaViewModel model)
        {
            #region valid
            var user = this.ValidIsBranch(model.Sys_LoginUserID);

            if (string.IsNullOrWhiteSpace(model.SerialNumber))
                throw new DataValidationException(string.Format(BusinessResourceMessage.PleaseInput, "银行流水号"));
            else
                if (!model.SerialNumber.ValidateLen(100))
                    throw new DataValidationException("银行流水号长度在1-100个字符");

            var single = this._paymentRepository.GetModelTracking().Include(c => c.Special).Where(c => c.ID == model.ID).SingleOrDefault();
            if (single == null)
                throw new BusinessException("付款信息不存在");
            if (single.Status == PaymentStatus.Discard)
                throw new BusinessException("付款信息已被废弃");
            if (single.Status == PaymentStatus.HasPayment)
                throw new BusinessException("付款信息已被确认");
            #endregion

            //如果付款金额加上付款手续费大于余额减掉毛利就不能付款
            var special = this._specialMainRepository.GetModelTracking().Include(c => c.SpecialCapital).Include(c => c.Branch).Where(c => c.ID == single.Special.ID).SingleOrDefault();
            var payMoney = single.Money + single.CounterFee;
            var balance = special.SpecialCapital.Balance - special.SpecialCapital.Profit;
            //也需要加上未审核的付款申请总金额
            //var notAuditMoney = this._paymentRepository.GetModel(c => c.SpecialId == single.Special.ID && c.Status == PaymentStatus.WaitVerify).Sum(c => c.Money + c.CounterFee);
            //if ((payMoney + notAuditMoney) > balance)
            var notAuditMoney = this._paymentRepository.GetModel(c => c.SpecialId == single.SpecialId && c.Status == PaymentStatus.WaitVerify).ToList();
            var waitMoney = 0M;
            if (notAuditMoney != null && notAuditMoney.Count() > 0)
            {
                waitMoney = notAuditMoney.Sum(c => c.Money + c.CounterFee);
            }
            if (waitMoney > balance)
                throw new BusinessException("专线余额不足,无法付款");

            ////需检查专线欠票情况,如果当前时间-最早的一次请款时间>专线欠票周期 就不允许请款
            //if (!this.ApplyBeforeValidateDebts(single.Special.ID))
            //    throw new BusinessException("专线已欠票,无法付款");

            single.SerialNumber = model.SerialNumber;
            single.Remark = model.Remark;
            single.Status = PaymentStatus.HasPayment;
            single.AuditTime = DateTime.Now;
            single.AuditId = user.ID;
            single.AuditName = user.Name;

            TransactionScopeNoMsdtc.UsingTransactionNoMsdtc(this._db, () =>
            {
                //增加资金池已付款(不要忘了付款手续费)
                special.SpecialCapital.Payment = special.SpecialCapital.Payment + payMoney;
                //减余额
                special.SpecialCapital.Balance = special.SpecialCapital.Balance - payMoney;

                //查找机构下的'付款手续费'扣款类型ID
                var deduction = this._deductionRepository.GetModel().Where(c => c.BranchId == special.Branch.ID && c.Name == BusinessConst.PAYMENTFEENAME && c.Status).SingleOrDefault();
                if (deduction == null)
                    throw new BusinessException("未设置'付款手续费'扣款类型");

                //增加一条付款手续费的扣款记录
                Debit debit = new Debit()
                {
                    TypeId = deduction.ID,
                    PaymentId = single.ID,
                    SpecialId = single.Special.ID,
                    Money = single.CounterFee,
                    Remark = single.Remark,
                    DebitorId = user.ID,
                    DebitorName = user.Name,
                    Time = DateTime.Now
                };

                this._paymentRepository.Update(single);
                this._specialMainRepository.Update(special);
                this._debitRepository.Insert(debit);
            });
        }
コード例 #2
0
        /// <summary>
        /// 添加扣款
        /// </summary>
        /// <param name="contractview"></param>
        /// <returns></returns>
        public void AddDebit(DebitAddModel contractview)
        {
            Special mSpecial = _specialRepository.GetModelTracking().Where(o => o.ID == contractview.SpecialId)
                .Include(o=>o.SpecialCapital)
                .FirstOrDefault();
            if (mSpecial == null)
                throw new BusinessException(string.Format(BusinessResourceMessage.ItemNotFound, "专线信息"));
            if (mSpecial.Status == SpecialStatus.AccountCancellation)
                throw new BusinessException(string.Format(BusinessResourceMessage.Abnormal, "专线状态"));
            Deduction mDeduction = _deductionRepository.GetModel().Where(o => o.ID == contractview.TypeId && o.Status == true).FirstOrDefault();
            if (mDeduction == null)
                throw new BusinessException(string.Format(BusinessResourceMessage.Abnormal, "扣款类型"));
            //if (mSpecial.SpecialCapital.Balance < (decimal)contractview.Money)
            //	throw new BusinessException(string.Format(BusinessResourceMessage.ItemComparison, "扣款金额","专线余额"));

            //付款发票
            Debit mDebit = new Debit();
            mDebit.SpecialId = contractview.SpecialId;
            mDebit.TypeId = contractview.TypeId;
            mDebit.Money = contractview.Money.Value;
            mDebit.Remark = contractview.Remark;
            mDebit.Time = contractview.Time.Value;
            mDebit.DebitorId = contractview.OperatorID;
            mDebit.DebitorName = contractview.OperatorName;
            //mDebit.CreateTime = contractview.OptionTime;
            _debitRepository.Insert(mDebit);

            mSpecial.SpecialCapital.Balance -= (decimal)contractview.Money;

            _specialRepository.Update(mSpecial);
        }