/// <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); }); }
/// <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); }