AccountRequestFundsFlow.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package com.fjhx.account.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.dto.AccountPaymentDto;
  7. import com.fjhx.account.entity.account.dto.AccountRequestFundsDto;
  8. import com.fjhx.account.entity.account.enums.AccountRequestFundsStatusEnum;
  9. import com.fjhx.account.entity.account.enums.PaymentStatusEnum;
  10. import com.fjhx.account.entity.account.po.AccountRequestFunds;
  11. import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
  12. import com.fjhx.account.service.account.AccountPaymentService;
  13. import com.fjhx.account.service.account.AccountRequestFundsDetailService;
  14. import com.fjhx.account.service.account.AccountRequestFundsService;
  15. import com.fjhx.common.constant.SourceConstant;
  16. import com.fjhx.common.enums.FlowStatusEnum1;
  17. import com.fjhx.common.utils.Assert;
  18. import com.fjhx.file.utils.ObsFileUtil;
  19. import com.fjhx.flow.core.FlowDelegate;
  20. import com.fjhx.flow.enums.FlowStatusEnum;
  21. import com.ruoyi.common.core.domain.BasePo;
  22. import com.ruoyi.common.exception.ServiceException;
  23. import com.ruoyi.common.utils.SecurityUtils;
  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. /**
  30. * 请款流程
  31. *
  32. * @Author:caozj
  33. * @DATE:2023/4/3 17:38
  34. */
  35. @DS(SourceConstant.ACCOUNT)
  36. @Component
  37. public class AccountRequestFundsFlow extends FlowDelegate {
  38. @Autowired
  39. private AccountPaymentService accountPaymentService;
  40. @Autowired
  41. private AccountRequestFundsService accountRequestFundsService;
  42. @Autowired
  43. private AccountRequestFundsDetailService accountRequestFundsDetailService;
  44. @Override
  45. public String getFlowKey() {
  46. return "account_request_funds_flow";
  47. }
  48. /**
  49. * 发起流程
  50. *
  51. * @param flowId 流程ID
  52. * @param submitData 请款表信息
  53. * @return
  54. */
  55. @Override
  56. public Long start(Long flowId, JSONObject submitData) {
  57. // 获取提交数据
  58. AccountRequestFundsDto accountRequestFundsDto = submitData.toJavaObject(AccountRequestFundsDto.class);
  59. accountRequestFundsDto = commStart(accountRequestFundsDto, 0);
  60. return accountRequestFundsDto.getId();
  61. }
  62. /**
  63. * 结束流程
  64. *
  65. * @param flowId 流程ID
  66. * @param businessId 业务ID
  67. * @param submitData 请款表信息
  68. */
  69. @Override
  70. public void end(Long flowId, Long businessId, JSONObject submitData) {
  71. // 通过业务ID查询请款数据
  72. AccountRequestFunds accountRequestFunds = accountRequestFundsService.getById(businessId);
  73. if (ObjectUtils.isEmpty(accountRequestFunds)) {
  74. throw new ServiceException("请款表的数据不存在");
  75. }
  76. // 修改请款状态为审批通过
  77. accountRequestFunds.setStatus(AccountRequestFundsStatusEnum.PASS.getKey());
  78. // 修改核销状态以及预支单核销状态为已核销
  79. if ("3".equals(accountRequestFunds.getType())) {
  80. accountRequestFunds.setWriteOffStatus(1);
  81. // 修改预支单核销状态
  82. AccountRequestFunds advance = accountRequestFundsService.getById(accountRequestFunds.getAdvanceId());
  83. Assert.notEmpty(advance, "查询不到关联预支单信息");
  84. advance.setWriteOffStatus(1);
  85. accountRequestFundsService.updateById(advance);
  86. }
  87. accountRequestFundsService.updateById(accountRequestFunds);
  88. // 添加打款的数据
  89. addPayment(accountRequestFunds);
  90. }
  91. @Override
  92. public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
  93. super.relaunch(flowId, businessId, flowStatus, submitData);
  94. // 获取提交数据
  95. AccountRequestFundsDto accountRequestFundsDto = submitData.toJavaObject(AccountRequestFundsDto.class);
  96. commStart(accountRequestFundsDto, 1);
  97. }
  98. @Override
  99. public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
  100. super.reject(flowId, businessId, flowStatus);
  101. accountRequestFundsService.update(q -> q
  102. .eq(AccountRequestFunds::getId, businessId)
  103. .set(AccountRequestFunds::getStatus, FlowStatusEnum1.REJECT.getKey())//20为驳回
  104. .set(BasePo::getUpdateTime, new Date())
  105. .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
  106. );
  107. }
  108. @Override
  109. public void cancellation(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
  110. super.cancellation(flowId, businessId, flowStatus);
  111. accountRequestFundsService.update(q -> q
  112. .eq(AccountRequestFunds::getId, businessId)
  113. .set(AccountRequestFunds::getStatus, FlowStatusEnum1.CANCELLATION.getKey())
  114. .set(BasePo::getUpdateTime, new Date())
  115. .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
  116. );
  117. }
  118. /**
  119. * 开始公共代码抽取
  120. *
  121. * @param opType 操作类型 0直接发起 1重新发起
  122. */
  123. private AccountRequestFundsDto commStart(AccountRequestFundsDto accountRequestFundsDto, Integer opType) {
  124. if (opType == 1) {
  125. Assert.notEmpty(accountRequestFundsDto.getId(), "请款id不能为空");
  126. }
  127. // 添加请款表的信息
  128. accountRequestFundsDto.setStatus(AccountRequestFundsStatusEnum.UNDER_REVIEW.getKey());
  129. accountRequestFundsService.saveOrUpdate(accountRequestFundsDto);
  130. // 添加请款详情表的信息
  131. List<AccountRequestFundsDetail> accountRequestFundsDetailList = accountRequestFundsDto.getAccountRequestFundsDetailList();
  132. if (CollectionUtils.isNotEmpty(accountRequestFundsDetailList)) {
  133. if (opType == 1) {
  134. //先删除被删除的产品
  135. accountRequestFundsDetailService.editLinked(accountRequestFundsDetailList, AccountRequestFundsDetail::getContractId, accountRequestFundsDto.getId());
  136. }
  137. accountRequestFundsDetailList.forEach(item -> item.setAccountRequestFundsId(accountRequestFundsDto.getId()));
  138. accountRequestFundsDetailService.saveOrUpdateBatch(accountRequestFundsDetailList);
  139. }
  140. if (opType == 1) {
  141. // 编辑附件信息
  142. ObsFileUtil.editFile(accountRequestFundsDto.getFileList(), accountRequestFundsDto.getId());
  143. } else {
  144. // 添加附件信息
  145. ObsFileUtil.saveFile(accountRequestFundsDto.getFileList(), accountRequestFundsDto.getId());
  146. }
  147. return accountRequestFundsDto;
  148. }
  149. /**
  150. * 添加打款表的数据
  151. */
  152. private void addPayment(AccountRequestFunds accountRequestFunds) {
  153. AccountPaymentDto accountPayment = new AccountPaymentDto();
  154. accountPayment.setDepartmentId(accountRequestFunds.getDepartmentId());
  155. accountPayment.setCorporationId(accountRequestFunds.getCorporationId());
  156. accountPayment.setBusinessId(accountRequestFunds.getId());
  157. accountPayment.setPaymentTime(accountRequestFunds.getPaymentTime());
  158. accountPayment.setCurrency(accountRequestFunds.getCurrency());
  159. accountPayment.setStatus(PaymentStatusEnum.UNDER_REVIEW.getKey());
  160. accountPayment.setType(accountRequestFunds.getType());
  161. accountPayment.setPaymentRemark(accountRequestFunds.getPaymentRemarks());
  162. accountPayment.setPaymentMethod(accountRequestFunds.getPaymentMethod());
  163. accountPayment.setIncomeAmount(accountRequestFunds.getTotal());
  164. accountPayment.setName(accountRequestFunds.getName());
  165. accountPayment.setBusinessManagementId(accountRequestFunds.getAccountManagementId());
  166. accountPayment.setOpeningBank(accountRequestFunds.getOpeningBank());
  167. accountPayment.setAccountOpening(accountRequestFunds.getAccountOpening());
  168. accountPayment.setInterbankNumber(accountRequestFunds.getInterbankNumber());
  169. accountPayment.setDataUser(accountRequestFunds.getCreateUser());
  170. accountPayment.setApplyForTime(accountRequestFunds.getCreateTime());
  171. // 如果是核销 核销数据审批通过后,根据“核销总额 - 预支总额”生成“待打款”数据
  172. if ("3".equals(accountRequestFunds.getType())) {
  173. BigDecimal subtract = accountRequestFunds.getTotal().subtract(accountRequestFunds.getAdvanceAmounts());
  174. accountPayment.setAmount(subtract);
  175. if (subtract.compareTo(BigDecimal.ZERO) <= 0) {//不生成打款数据
  176. return;
  177. }
  178. } else {
  179. accountPayment.setAmount(accountRequestFunds.getTotal());
  180. }
  181. accountPaymentService.save(accountPayment);
  182. }
  183. }