|
@ -6,6 +6,7 @@ import com.qs.serve.common.util.Assert; |
|
|
import com.qs.serve.common.util.AuthContextUtils; |
|
|
import com.qs.serve.common.util.AuthContextUtils; |
|
|
import com.qs.serve.modules.bms.entity.BmsSupplier; |
|
|
import com.qs.serve.modules.bms.entity.BmsSupplier; |
|
|
import com.qs.serve.modules.bms.service.BmsSupplierService; |
|
|
import com.qs.serve.modules.bms.service.BmsSupplierService; |
|
|
|
|
|
import com.qs.serve.modules.pay.common.PaymentType; |
|
|
import com.qs.serve.modules.pay.entity.PayPaymentItem; |
|
|
import com.qs.serve.modules.pay.entity.PayPaymentItem; |
|
|
import com.qs.serve.modules.pay.entity.bo.PayPaymentBo; |
|
|
import com.qs.serve.modules.pay.entity.bo.PayPaymentBo; |
|
|
import com.qs.serve.modules.pay.entity.dto.PayPaymentAmountDto; |
|
|
import com.qs.serve.modules.pay.entity.dto.PayPaymentAmountDto; |
|
@ -18,6 +19,7 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; |
|
|
import com.qs.serve.modules.vtb.service.VtbVerificationSubjectService; |
|
|
import com.qs.serve.modules.vtb.service.VtbVerificationSubjectService; |
|
|
import lombok.AllArgsConstructor; |
|
|
import lombok.AllArgsConstructor; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
|
import org.jetbrains.annotations.NotNull; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
import com.qs.serve.modules.pay.entity.PayPayment; |
|
|
import com.qs.serve.modules.pay.entity.PayPayment; |
|
|
import com.qs.serve.modules.pay.service.PayPaymentService; |
|
|
import com.qs.serve.modules.pay.service.PayPaymentService; |
|
@ -49,6 +51,10 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme |
|
|
@Override |
|
|
@Override |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
public PayPayment payment(PayPaymentBo paymentBo) { |
|
|
public PayPayment payment(PayPaymentBo paymentBo) { |
|
|
|
|
|
String payType = paymentBo.getPayType(); |
|
|
|
|
|
if(!payType.equals(PaymentType.PAYMENT)&&!payType.equals(PaymentType.UN_PAYMENT)){ |
|
|
|
|
|
Assert.throwEx("param err P1 "); |
|
|
|
|
|
} |
|
|
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); |
|
|
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); |
|
|
PayPaymentAmountDto amountDto = this.getSupplierBalance(paymentBo.getSupplierId()); |
|
|
PayPaymentAmountDto amountDto = this.getSupplierBalance(paymentBo.getSupplierId()); |
|
|
BigDecimal allowAmount = amountDto.getTotalAmount().subtract(amountDto.getHasPayment()); |
|
|
BigDecimal allowAmount = amountDto.getTotalAmount().subtract(amountDto.getHasPayment()); |
|
@ -64,6 +70,52 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme |
|
|
List<PayPaymentItem> paymentItemList = new ArrayList<>(); |
|
|
List<PayPaymentItem> paymentItemList = new ArrayList<>(); |
|
|
List<VtbVerificationSubject> verificationSubjectUpdateList = new ArrayList<>(); |
|
|
List<VtbVerificationSubject> verificationSubjectUpdateList = new ArrayList<>(); |
|
|
for (VtbVerificationSubject verificationSubject : verificationSubjectList) { |
|
|
for (VtbVerificationSubject verificationSubject : verificationSubjectList) { |
|
|
|
|
|
currentBalance = this.buildPaymentItems(paymentBo, currentBalance, paymentItemList, verificationSubjectUpdateList, verificationSubject); |
|
|
|
|
|
if(currentBalance.compareTo(BigDecimal.ZERO)==0){ |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
PayPayment payPayment = new PayPayment(); |
|
|
|
|
|
payPayment.setPayType(payType); |
|
|
|
|
|
payPayment.setSupplierId(paymentBo.getSupplierId()); |
|
|
|
|
|
payPayment.setSupplierCode(supplier.getCode()); |
|
|
|
|
|
payPayment.setSupplierName(supplier.getName()); |
|
|
|
|
|
payPayment.setPayAmount(paymentBo.getPayAmount()); |
|
|
|
|
|
payPayment.setUserId(sysUser.getId()); |
|
|
|
|
|
payPayment.setUserCode(sysUser.getCode()); |
|
|
|
|
|
payPayment.setUserName(sysUser.getName()); |
|
|
|
|
|
payPayment.setRemark(paymentBo.getRemark()); |
|
|
|
|
|
payPayment.setPayTime(LocalDateTime.now()); |
|
|
|
|
|
payPayment.setErpCode(paymentBo.getErpCode()); |
|
|
|
|
|
this.save(payPayment); |
|
|
|
|
|
List<Long> actIds = paymentItemList.stream().map(PayPaymentItem::getActivityId).distinct().collect(Collectors.toList()); |
|
|
|
|
|
//关联活动编码
|
|
|
|
|
|
List<TbsActivity> activityList = activityService.listByIds(actIds); |
|
|
|
|
|
for (PayPaymentItem paymentItem : paymentItemList) { |
|
|
|
|
|
for (TbsActivity activity : activityList) { |
|
|
|
|
|
if(activity.getId().equals(paymentItem.getActivityId())){ |
|
|
|
|
|
paymentItem.setActivityCode(activity.getActivityCode()); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
paymentItem.setPaymentId(payPayment.getId()); |
|
|
|
|
|
} |
|
|
|
|
|
verificationSubjectService.updateBatchById(verificationSubjectUpdateList); |
|
|
|
|
|
paymentItemService.saveBatch(paymentItemList); |
|
|
|
|
|
return payPayment; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 构建支付明细 |
|
|
|
|
|
* @param paymentBo |
|
|
|
|
|
* @param currentBalance |
|
|
|
|
|
* @param paymentItemList |
|
|
|
|
|
* @param verificationSubjectUpdateList |
|
|
|
|
|
* @param verificationSubject |
|
|
|
|
|
* @return currentBalance 本次支付余额 |
|
|
|
|
|
*/ |
|
|
|
|
|
@NotNull |
|
|
|
|
|
private BigDecimal buildPaymentItems(PayPaymentBo paymentBo, BigDecimal currentBalance, List<PayPaymentItem> paymentItemList, List<VtbVerificationSubject> verificationSubjectUpdateList, VtbVerificationSubject verificationSubject) { |
|
|
//统计历史支付金额
|
|
|
//统计历史支付金额
|
|
|
BigDecimal hisPayAmount = BigDecimal.ZERO; |
|
|
BigDecimal hisPayAmount = BigDecimal.ZERO; |
|
|
List<PayPaymentItem> payPaymentItems = paymentItemService.listByVerSubjectId(verificationSubject.getId()); |
|
|
List<PayPaymentItem> payPaymentItems = paymentItemService.listByVerSubjectId(verificationSubject.getId()); |
|
@ -82,6 +134,7 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme |
|
|
currentBalance = BigDecimal.ZERO; |
|
|
currentBalance = BigDecimal.ZERO; |
|
|
} |
|
|
} |
|
|
PayPaymentItem paymentItem = new PayPaymentItem(); |
|
|
PayPaymentItem paymentItem = new PayPaymentItem(); |
|
|
|
|
|
paymentItem.setPayType(paymentBo.getPayType()); |
|
|
paymentItem.setSupplierId(paymentBo.getSupplierId()); |
|
|
paymentItem.setSupplierId(paymentBo.getSupplierId()); |
|
|
paymentItem.setItemPayAmount(currentItemPay); |
|
|
paymentItem.setItemPayAmount(currentItemPay); |
|
|
paymentItem.setVerificationId(verificationSubject.getVerificationId()); |
|
|
paymentItem.setVerificationId(verificationSubject.getVerificationId()); |
|
@ -101,41 +154,16 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme |
|
|
subjectParam.setPayFinishedFlag(1); |
|
|
subjectParam.setPayFinishedFlag(1); |
|
|
} |
|
|
} |
|
|
verificationSubjectUpdateList.add(subjectParam); |
|
|
verificationSubjectUpdateList.add(subjectParam); |
|
|
if(currentBalance.compareTo(BigDecimal.ZERO)==0){ |
|
|
return currentBalance; |
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
PayPayment payPayment = new PayPayment(); |
|
|
|
|
|
payPayment.setSupplierId(paymentBo.getSupplierId()); |
|
|
|
|
|
payPayment.setSupplierCode(supplier.getCode()); |
|
|
|
|
|
payPayment.setSupplierName(supplier.getName()); |
|
|
|
|
|
payPayment.setPayAmount(paymentBo.getPayAmount()); |
|
|
|
|
|
payPayment.setUserId(sysUser.getId()); |
|
|
|
|
|
payPayment.setUserCode(sysUser.getCode()); |
|
|
|
|
|
payPayment.setUserName(sysUser.getName()); |
|
|
|
|
|
payPayment.setRemark(paymentBo.getRemark()); |
|
|
|
|
|
payPayment.setPayTime(LocalDateTime.now()); |
|
|
|
|
|
this.save(payPayment); |
|
|
|
|
|
List<Long> actIds = paymentItemList.stream().map(PayPaymentItem::getActivityId).distinct().collect(Collectors.toList()); |
|
|
|
|
|
//关联活动编码
|
|
|
|
|
|
List<TbsActivity> activityList = activityService.listByIds(actIds); |
|
|
|
|
|
for (PayPaymentItem paymentItem : paymentItemList) { |
|
|
|
|
|
for (TbsActivity activity : activityList) { |
|
|
|
|
|
if(activity.getId().equals(paymentItem.getActivityId())){ |
|
|
|
|
|
paymentItem.setActivityCode(activity.getActivityCode()); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
paymentItem.setPaymentId(payPayment.getId()); |
|
|
|
|
|
} |
|
|
|
|
|
verificationSubjectService.updateBatchById(verificationSubjectUpdateList); |
|
|
|
|
|
paymentItemService.saveBatch(paymentItemList); |
|
|
|
|
|
return payPayment; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
public void cancel(Long id) { |
|
|
public void cancel(Long id) { |
|
|
|
|
|
PayPayment dbPay = this.getById(id); |
|
|
|
|
|
if(dbPay.getCancelFlag().equals(1)){ |
|
|
|
|
|
Assert.throwEx("已取消,请勿重复提交"); |
|
|
|
|
|
} |
|
|
List<PayPaymentItem> paymentItemList = paymentItemService.listByPaymentId(id); |
|
|
List<PayPaymentItem> paymentItemList = paymentItemService.listByPaymentId(id); |
|
|
List<Long> paymentItemIds = paymentItemList.stream().map(PayPaymentItem::getId) |
|
|
List<Long> paymentItemIds = paymentItemList.stream().map(PayPaymentItem::getId) |
|
|
.distinct().collect(Collectors.toList()); |
|
|
.distinct().collect(Collectors.toList()); |
|
@ -174,12 +202,12 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme |
|
|
lqw.eq(VtbVerificationSubject::getEffectiveFlag,1); |
|
|
lqw.eq(VtbVerificationSubject::getEffectiveFlag,1); |
|
|
List<VtbVerificationSubject> vtbVerificationSubjectList = verificationSubjectService.list(lqw); |
|
|
List<VtbVerificationSubject> vtbVerificationSubjectList = verificationSubjectService.list(lqw); |
|
|
BigDecimal totalAmount = BigDecimal.ZERO; |
|
|
BigDecimal totalAmount = BigDecimal.ZERO; |
|
|
BigDecimal payAmount = BigDecimal.ZERO; |
|
|
BigDecimal hasAmount = BigDecimal.ZERO; |
|
|
for (VtbVerificationSubject verificationSubject : vtbVerificationSubjectList) { |
|
|
for (VtbVerificationSubject verificationSubject : vtbVerificationSubjectList) { |
|
|
totalAmount = totalAmount.add(verificationSubject.getUsedAmount()); |
|
|
totalAmount = totalAmount.add(verificationSubject.getUsedAmount()); |
|
|
payAmount = payAmount.add(verificationSubject.getPayAmount()); |
|
|
hasAmount = hasAmount.add(verificationSubject.getPayAmount()); |
|
|
} |
|
|
} |
|
|
PayPaymentAmountDto amountDto = new PayPaymentAmountDto(totalAmount,payAmount,vtbVerificationSubjectList); |
|
|
PayPaymentAmountDto amountDto = new PayPaymentAmountDto(totalAmount,hasAmount,vtbVerificationSubjectList); |
|
|
return amountDto; |
|
|
return amountDto; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|