PayFlow.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package com.fjhx.purchase.flow;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.dynamic.datasource.annotation.DS;
  4. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  5. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  6. import com.fjhx.account.entity.account.enums.PaymentStatusEnum;
  7. import com.fjhx.account.entity.account.enums.PaymentTypeEnum;
  8. import com.fjhx.account.entity.account.po.AccountPayment;
  9. import com.fjhx.account.service.account.AccountPaymentService;
  10. import com.fjhx.common.constant.SourceConstant;
  11. import com.fjhx.file.utils.ObsFileUtil;
  12. import com.fjhx.flow.core.FlowDelegate;
  13. import com.fjhx.purchase.entity.pay.enums.PayStatusEnum;
  14. import com.fjhx.purchase.entity.pay.po.Pay;
  15. import com.fjhx.purchase.entity.pay.po.PayDetail;
  16. import com.fjhx.purchase.entity.purchase.po.Purchase;
  17. import com.fjhx.purchase.service.pay.PayDetailService;
  18. import com.fjhx.purchase.service.pay.PayService;
  19. import com.fjhx.purchase.service.purchase.PurchaseService;
  20. import com.ruoyi.common.core.domain.entity.SysUser;
  21. import com.ruoyi.common.exception.ServiceException;
  22. import com.ruoyi.common.utils.wrapper.IWrapper;
  23. import com.ruoyi.system.service.ISysUserService;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Component;
  26. import java.math.BigDecimal;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.Objects;
  31. import java.util.stream.Collectors;
  32. /**
  33. * 采购付款流程
  34. *
  35. * @Author:caozj
  36. * @DATE:2023/4/3 17:38
  37. */
  38. @DS(SourceConstant.PURCHASE)
  39. @Component
  40. public class PayFlow extends FlowDelegate {
  41. @Autowired
  42. private PayService payService;
  43. @Autowired
  44. private AccountPaymentService accountPaymentService;
  45. @Autowired
  46. private PayDetailService payDetailService;
  47. @Autowired
  48. private PurchaseService purchaseService;
  49. @Autowired
  50. private ISysUserService userService;
  51. @Override
  52. public String getFlowKey() {
  53. return "pay_flow";
  54. }
  55. /**
  56. * 发起流程
  57. * @param flowId 流程ID
  58. * @param submitData 采购付款数据
  59. * @return
  60. */
  61. @Override
  62. public Long start(Long flowId, JSONObject submitData) {
  63. Pay pay = submitData.toJavaObject(Pay.class);
  64. pay.setStatus(PayStatusEnum.UNDER_REVIEW.getKey());
  65. pay.setCurrency("CNY");//默认币种人民币
  66. payService.save(pay);
  67. List<PayDetail> payDetailList = pay.getPayDetailList();
  68. if (CollectionUtils.isNotEmpty(payDetailList)) {
  69. payDetailList.forEach(item -> item.setPayId(pay.getId()));
  70. payDetailService.saveBatch(payDetailList);
  71. }
  72. ObsFileUtil.saveFile(pay.getFileList(), pay.getId());
  73. return pay.getId();
  74. }
  75. /**
  76. * 结束流程
  77. * @param flowId 流程ID
  78. * @param businessId 业务ID
  79. * @param submitData 数据
  80. */
  81. @Override
  82. public void end(Long flowId, Long businessId, JSONObject submitData) {
  83. // 通过业务ID查询申购数据
  84. Pay pay = payService.getById(businessId);
  85. if (ObjectUtils.isEmpty(pay)) {
  86. throw new ServiceException("采购付款单不存在");
  87. }
  88. // 修改采购状态为审批通过
  89. pay.setStatus(PayStatusEnum.PASS.getKey());
  90. pay.setApprovedDate(new Date());
  91. payService.updateById(pay);
  92. // 添加一条付款流水
  93. AccountPayment payment = new AccountPayment();
  94. payment.setAccountManagementId(pay.getAccountManagementId());
  95. payment.setBusinessId(pay.getId());
  96. payment.setCurrency(pay.getCurrency());
  97. SysUser sysUser = userService.getOne(IWrapper.<SysUser>getWrapper().eq(SysUser::getUserId, pay.getCreateUser()));
  98. if (ObjectUtils.isNotEmpty(sysUser)) {
  99. payment.setDepartmentId(sysUser.getDeptId());
  100. }
  101. // todo 暂时写死人民币
  102. payment.setPaymentRemark(pay.getRemark());
  103. payment.setType(PaymentTypeEnum.REJECT.getKey());
  104. payment.setStatus(PaymentStatusEnum.UNDER_REVIEW.getKey());
  105. payment.setCorporationId(pay.getCorporationId());
  106. payment.setAmount(pay.getAmount());
  107. payment.setIncomeAmount(pay.getAmount());
  108. payment.setName(pay.getName());
  109. payment.setDataUser(pay.getCreateUser());
  110. payment.setBusinessManagementId(pay.getAccountManagementId());
  111. payment.setOpeningBank(pay.getOpeningBank());
  112. payment.setBusinessCurrency(pay.getCurrency());
  113. payment.setAccountOpening(pay.getAccountOpening());
  114. payment.setInterbankNumber(pay.getInterbankNumber());
  115. payment.setPaymentMethod(pay.getPayType());
  116. payment.setApplyForTime(pay.getCreateTime());//申请时间
  117. accountPaymentService.save(payment);
  118. // 修改合同付款状态
  119. updatePurchasePayStatus(businessId);
  120. }
  121. /**
  122. * 修改合同付款状态
  123. *
  124. * @param payId 付款id
  125. */
  126. private void updatePurchasePayStatus(Long payId) {
  127. // 获取支付明细
  128. List<PayDetail> list = payDetailService.list(q -> q.eq(PayDetail::getPayId, payId));
  129. // 获取合同id
  130. List<Long> purchaseIdList = list.stream().map(PayDetail::getPurchaseId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
  131. if (purchaseIdList.size() == 0) {
  132. return;
  133. }
  134. // 通过合同id获取指定合同所有付款记录
  135. Map<Long, BigDecimal> map = payDetailService.getPayMoneyCountByPurchaseId(purchaseIdList);
  136. // 获取合同列表
  137. List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
  138. for (Purchase purchase : purchaseList) {
  139. Integer payStatus = purchase.getPayStatus();
  140. // 已经是已付款,跳过
  141. if (Objects.equals(20, payStatus)) {
  142. continue;
  143. }
  144. // 获取合同付款金额
  145. BigDecimal payMoney = map.getOrDefault(purchase.getId(), BigDecimal.ZERO);
  146. // 获取合同金额
  147. BigDecimal amount = purchase.getAmount();
  148. // 合同付款金额大于等于合同金额,已付款
  149. if (payMoney.compareTo(amount) >= 0) {
  150. purchase.setPayStatus(20);
  151. }
  152. // 否则进行中
  153. else {
  154. purchase.setPayStatus(10);
  155. }
  156. }
  157. // 修改合同付款状态
  158. purchaseService.updateBatchById(purchaseList);
  159. }
  160. }