AccountRequestFundsFlow.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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.utils.Assert;
  17. import com.fjhx.file.utils.ObsFileUtil;
  18. import com.fjhx.flow.core.FlowDelegate;
  19. import com.ruoyi.common.exception.ServiceException;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Component;
  22. import java.math.BigDecimal;
  23. import java.util.List;
  24. /**
  25. * 请款流程
  26. *
  27. * @Author:caozj
  28. * @DATE:2023/4/3 17:38
  29. */
  30. @DS(SourceConstant.ACCOUNT)
  31. @Component
  32. public class AccountRequestFundsFlow extends FlowDelegate {
  33. @Autowired
  34. private AccountPaymentService accountPaymentService;
  35. @Autowired
  36. private AccountRequestFundsService accountRequestFundsService;
  37. @Autowired
  38. private AccountRequestFundsDetailService accountRequestFundsDetailService;
  39. @Override
  40. public String getFlowKey() {
  41. return "account_request_funds_flow";
  42. }
  43. /**
  44. * 发起流程
  45. *
  46. * @param flowId 流程ID
  47. * @param submitData 请款表信息
  48. * @return
  49. */
  50. @Override
  51. public Long start(Long flowId, JSONObject submitData) {
  52. // 获取提交数据
  53. AccountRequestFundsDto accountRequestFundsDto = submitData.toJavaObject(AccountRequestFundsDto.class);
  54. // 添加请款表的信息
  55. accountRequestFundsDto.setStatus(AccountRequestFundsStatusEnum.UNDER_REVIEW.getKey());
  56. accountRequestFundsService.save(accountRequestFundsDto);
  57. // 添加请款详情表的信息
  58. List<AccountRequestFundsDetail> accountRequestFundsDetailList = accountRequestFundsDto.getAccountRequestFundsDetailList();
  59. if (CollectionUtils.isNotEmpty(accountRequestFundsDetailList)) {
  60. accountRequestFundsDetailList.forEach(item -> item.setAccountRequestFundsId(accountRequestFundsDto.getId()));
  61. accountRequestFundsDetailService.saveBatch(accountRequestFundsDetailList);
  62. }
  63. // 添加附件信息
  64. ObsFileUtil.saveFile(accountRequestFundsDto.getFileList(), accountRequestFundsDto.getId());
  65. return accountRequestFundsDto.getId();
  66. }
  67. /**
  68. * 结束流程
  69. *
  70. * @param flowId 流程ID
  71. * @param businessId 业务ID
  72. * @param submitData 请款表信息
  73. */
  74. @Override
  75. public void end(Long flowId, Long businessId, JSONObject submitData) {
  76. // 通过业务ID查询请款数据
  77. AccountRequestFunds accountRequestFunds = accountRequestFundsService.getById(businessId);
  78. if (ObjectUtils.isEmpty(accountRequestFunds)) {
  79. throw new ServiceException("请款表的数据不存在");
  80. }
  81. // 修改请款状态为审批通过
  82. accountRequestFunds.setStatus(AccountRequestFundsStatusEnum.PASS.getKey());
  83. // 修改核销状态以及预支单核销状态为已核销
  84. if ("3".equals(accountRequestFunds.getType())) {
  85. accountRequestFunds.setWriteOffStatus(1);
  86. // 修改预支单核销状态
  87. AccountRequestFunds advance = accountRequestFundsService.getById(accountRequestFunds.getAdvanceId());
  88. Assert.notEmpty(advance, "查询不到关联预支单信息");
  89. advance.setWriteOffStatus(1);
  90. accountRequestFundsService.updateById(advance);
  91. }
  92. accountRequestFundsService.updateById(accountRequestFunds);
  93. // 添加打款的数据
  94. addPayment(accountRequestFunds);
  95. }
  96. /**
  97. * 添加打款表的数据
  98. */
  99. private void addPayment(AccountRequestFunds accountRequestFunds) {
  100. AccountPaymentDto accountPayment = new AccountPaymentDto();
  101. accountPayment.setDepartmentId(accountRequestFunds.getDepartmentId());
  102. accountPayment.setCorporationId(accountRequestFunds.getCorporationId());
  103. accountPayment.setBusinessId(accountRequestFunds.getId());
  104. accountPayment.setPaymentTime(accountRequestFunds.getPaymentTime());
  105. accountPayment.setCurrency(accountRequestFunds.getCurrency());
  106. accountPayment.setStatus(PaymentStatusEnum.UNDER_REVIEW.getKey());
  107. accountPayment.setType(accountRequestFunds.getType());
  108. accountPayment.setPaymentRemark(accountRequestFunds.getPaymentRemarks());
  109. accountPayment.setPaymentMethod(accountRequestFunds.getPaymentMethod());
  110. accountPayment.setIncomeAmount(accountRequestFunds.getTotal());
  111. accountPayment.setName(accountRequestFunds.getName());
  112. accountPayment.setBusinessManagementId(accountRequestFunds.getAccountManagementId());
  113. accountPayment.setOpeningBank(accountRequestFunds.getOpeningBank());
  114. accountPayment.setAccountOpening(accountRequestFunds.getAccountOpening());
  115. accountPayment.setInterbankNumber(accountRequestFunds.getInterbankNumber());
  116. accountPayment.setDataUser(accountRequestFunds.getCreateUser());
  117. accountPayment.setApplyForTime(accountRequestFunds.getCreateTime());
  118. // 如果是核销 核销数据审批通过后,根据“核销总额 - 预支总额”生成“待打款”数据
  119. if ("3".equals(accountRequestFunds.getType())) {
  120. BigDecimal subtract = accountRequestFunds.getTotal().subtract(accountRequestFunds.getAdvanceAmounts());
  121. accountPayment.setAmount(subtract);
  122. if (subtract.compareTo(BigDecimal.ZERO) <= 0) {//不生成打款数据
  123. return;
  124. }
  125. } else {
  126. accountPayment.setAmount(accountRequestFunds.getTotal());
  127. }
  128. accountPaymentService.save(accountPayment);
  129. }
  130. }