ContractFlow.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package com.fjhx.sale.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.IdWorker;
  6. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  7. import com.fjhx.area.utils.CustomizeAreaUtil;
  8. import com.fjhx.common.constant.SourceConstant;
  9. import com.fjhx.common.enums.CodingRuleEnum;
  10. import com.fjhx.common.enums.FlowStatusEnum1;
  11. import com.fjhx.common.service.coding.CodingRuleService;
  12. import com.fjhx.file.utils.ObsFileUtil;
  13. import com.fjhx.flow.core.FlowDelegate;
  14. import com.fjhx.flow.core.FlowThreadLocalUtil;
  15. import com.fjhx.flow.enums.FlowStatusEnum;
  16. import com.fjhx.flow.enums.HandleTypeEnum;
  17. import com.fjhx.sale.entity.contract.dto.ContractDto;
  18. import com.fjhx.sale.entity.contract.po.Contract;
  19. import com.fjhx.sale.entity.contract.po.ContractProduct;
  20. import com.fjhx.sale.entity.contract.po.ContractProject;
  21. import com.fjhx.sale.entity.contract.po.ContractShipment;
  22. import com.fjhx.sale.entity.purchase.dto.EhsdPurchaseDto;
  23. import com.fjhx.sale.entity.sample.po.Sample;
  24. import com.fjhx.sale.service.contract.ContractProductService;
  25. import com.fjhx.sale.service.contract.ContractProjectService;
  26. import com.fjhx.sale.service.contract.ContractService;
  27. import com.fjhx.sale.service.contract.ContractShipmentService;
  28. import com.ruoyi.common.annotation.LogicIgnore;
  29. import com.ruoyi.common.core.domain.BasePo;
  30. import com.ruoyi.common.core.domain.entity.SysUser;
  31. import com.ruoyi.common.exception.ServiceException;
  32. import com.ruoyi.common.utils.SecurityUtils;
  33. import com.ruoyi.common.utils.StringUtils;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.stereotype.Component;
  36. import org.springframework.transaction.annotation.Transactional;
  37. import java.util.Date;
  38. import java.util.List;
  39. /**
  40. * 外销合同流程
  41. *
  42. * @Author:caozj
  43. * @DATE:2023/4/3 17:38
  44. */
  45. @Component
  46. @DS(SourceConstant.SALE)
  47. public class ContractFlow extends FlowDelegate {
  48. @Autowired
  49. private CodingRuleService codingRuleService;
  50. @Autowired
  51. private ContractService contractService;
  52. @Autowired
  53. private ContractProductService contractProductService;
  54. @Autowired
  55. private ContractProjectService contractProjectService;
  56. @Autowired
  57. private ContractShipmentService contractShipmentService;
  58. @Override
  59. public String getFlowKey() {
  60. return "contract_flow";
  61. }
  62. /**
  63. * 发起流程
  64. *
  65. * @param flowId 流程ID
  66. * @param submitData 采购付款数据
  67. * @return 业务id
  68. */
  69. @Override
  70. public Long start(Long flowId, JSONObject submitData) {
  71. ContractDto contract = submitData.toJavaObject(ContractDto.class);
  72. if(StringUtils.isEmpty(contract.getCurrency())){
  73. throw new ServiceException("币种不能为空");
  74. }
  75. contract.setCode(codingRuleService.createCode(CodingRuleEnum.CONTRACT.getKey(), contract.getBuyCorporationId()));
  76. // 保存合同产品
  77. List<ContractProduct> contractProductList = contract.getContractProductList();
  78. // 赋值待处理数量
  79. if (CollectionUtils.isNotEmpty(contractProductList)) {
  80. contractProductList.forEach(item -> item.setExpendQuantity(item.getQuantity()));
  81. }
  82. return start(contract);
  83. }
  84. /**
  85. * 结束流程
  86. *
  87. * @param flowId 流程ID
  88. * @param businessId 业务ID
  89. * @param submitData 数据
  90. */
  91. @Override
  92. public void end(Long flowId, Long businessId, JSONObject submitData) {
  93. // 通过业务ID查询合同数据
  94. Contract contract = contractService.getById(businessId);
  95. if (ObjectUtils.isEmpty(contract)) {
  96. throw new ServiceException("合同不存在");
  97. }
  98. // 修改合同状态为审批通过
  99. contract.setStatus(FlowStatusEnum1.PASS.getKey());
  100. contract.setApprovedDate(new Date());
  101. contractService.updateById(contract);
  102. }
  103. public Long start(ContractDto contract) {
  104. // 赋值城市省份信息
  105. CustomizeAreaUtil.setAreaId(contract);
  106. SysUser loginUser = SecurityUtils.getLoginUser().getUser();
  107. contract.setUserName(loginUser.getNickName());
  108. contract.setBuyCityId(contract.getCityId());
  109. contract.setBuyCountryId(contract.getCountryId());
  110. contract.setBuyProvinceId(contract.getProvinceId());
  111. contract.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
  112. // contract.setRate(ExchangeRateUtil.getCnyToCodeRate(contract.getCurrency()));
  113. contractService.saveOrUpdate(contract);
  114. // 保存合同产品
  115. List<ContractProduct> contractProductList = contract.getContractProductList();
  116. if (CollectionUtils.isNotEmpty(contractProductList)) {
  117. for (ContractProduct c : contractProductList) {
  118. c.setContractId(contract.getId());
  119. }
  120. contractProductService.saveOrUpdateBatch(contractProductList);
  121. }
  122. // 保存收费项目
  123. List<ContractProject> contractProjectList = contract.getContractProjectList();
  124. if (CollectionUtils.isNotEmpty(contractProjectList)) {
  125. for (ContractProject c : contractProjectList) {
  126. c.setContractId(contract.getId());
  127. }
  128. contractProjectService.saveOrUpdateBatch(contractProjectList);
  129. }
  130. // 保存自定义出货
  131. List<ContractShipment> contractShipmentList = contract.getContractShipmentList();
  132. if (CollectionUtils.isNotEmpty(contractShipmentList)) {
  133. for (ContractShipment c : contractShipmentList) {
  134. c.setContractId(contract.getId());
  135. }
  136. contractShipmentService.saveOrUpdateBatch(contractShipmentList);
  137. }
  138. // 交接单附件列表
  139. ObsFileUtil.saveFile(contract.getFileList(), contract.getId(), 1);
  140. // 包装指示附件列表
  141. ObsFileUtil.saveFile(contract.getPackageFileList(), contract.getId(), 2);
  142. return contract.getId();
  143. }
  144. /**
  145. * 重新发起
  146. * @param flowId
  147. * @param businessId
  148. * @param flowStatus
  149. * @param submitData
  150. */
  151. @Override
  152. @LogicIgnore
  153. @Transactional(rollbackFor = Exception.class)
  154. public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
  155. //删除采购合同
  156. ContractDto contractDto = submitData.toJavaObject(ContractDto.class);
  157. if(ObjectUtils.isEmpty(contractDto)){
  158. throw new ServiceException("合同数据不能为空");
  159. }
  160. start(contractDto);
  161. }
  162. /**
  163. * 驳回
  164. * @param flowId
  165. * @param businessId
  166. * @param flowStatus
  167. */
  168. @Override
  169. public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
  170. contractService.update(q -> q
  171. .eq(Contract::getId, businessId)
  172. .set(Contract::getStatus, 20)//20为驳回
  173. .set(Contract::getUpdateTime, new Date())
  174. .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
  175. );
  176. }
  177. }