SampleFlow.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package com.fjhx.sale.flow;
  2. import cn.hutool.extra.spring.SpringUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.dynamic.datasource.annotation.DS;
  5. import com.baomidou.dynamic.datasource.annotation.DSTransactional;
  6. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  7. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  8. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  9. import com.fjhx.area.utils.CustomizeAreaUtil;
  10. import com.fjhx.common.constant.SourceConstant;
  11. import com.fjhx.common.enums.CodingRuleEnum;
  12. import com.fjhx.common.enums.FlowStatusEnum1;
  13. import com.fjhx.common.service.coding.CodingRuleService;
  14. import com.fjhx.file.utils.ObsFileUtil;
  15. import com.fjhx.flow.core.FlowDelegate;
  16. import com.fjhx.flow.core.FlowThreadLocalUtil;
  17. import com.fjhx.flow.enums.FlowStatusEnum;
  18. import com.fjhx.flow.enums.HandleTypeEnum;
  19. import com.fjhx.sale.entity.contract.po.Contract;
  20. import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
  21. import com.fjhx.sale.entity.sale.po.SaleQuotation;
  22. import com.fjhx.sale.entity.sample.dto.SampleDto;
  23. import com.fjhx.sale.entity.sample.po.Sample;
  24. import com.fjhx.sale.entity.sample.po.SampleProduct;
  25. import com.fjhx.sale.entity.sample.po.SampleProject;
  26. import com.fjhx.sale.entity.sample.po.SampleShipment;
  27. import com.fjhx.sale.service.sample.SampleProductService;
  28. import com.fjhx.sale.service.sample.SampleProjectService;
  29. import com.fjhx.sale.service.sample.SampleService;
  30. import com.fjhx.sale.service.sample.SampleShipmentService;
  31. import com.ruoyi.common.annotation.LogicIgnore;
  32. import com.ruoyi.common.core.domain.BasePo;
  33. import com.ruoyi.common.exception.ServiceException;
  34. import com.ruoyi.common.utils.SecurityUtils;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.stereotype.Component;
  37. import org.springframework.transaction.annotation.Transactional;
  38. import java.util.Date;
  39. import java.util.List;
  40. /**
  41. * 样品单流程
  42. * @Author:caozj
  43. * @DATE:2023/4/3 17:38
  44. */
  45. @Component
  46. @DS(SourceConstant.SALE)
  47. public class SampleFlow extends FlowDelegate {
  48. @Autowired
  49. private CodingRuleService codingRuleService;
  50. @Autowired
  51. private SampleService sampleService;
  52. @Autowired
  53. private SampleProductService sampleProductService;
  54. @Autowired
  55. private SampleProjectService sampleProjectService;
  56. @Autowired
  57. private SampleShipmentService sampleShipmentService;
  58. @Override
  59. public String getFlowKey() {
  60. return "sample_flow";
  61. }
  62. /**
  63. * 发起流程
  64. * @param flowId 流程ID
  65. * @param submitData 采购付款数据
  66. * @return
  67. */
  68. @Override
  69. @DSTransactional
  70. public Long start(Long flowId, JSONObject submitData) {
  71. SampleDto sample = submitData.toJavaObject(SampleDto.class);
  72. sample.setCode(codingRuleService.createCode(CodingRuleEnum.SAMPLE.getKey(),sample.getBuyCorporationId()));
  73. long id = start(sample);
  74. return id;
  75. }
  76. /**
  77. * 重新发起
  78. * @param flowId
  79. * @param businessId
  80. * @param flowStatus
  81. * @param submitData
  82. */
  83. @Override
  84. @LogicIgnore(tableName = {""},alias = {""})
  85. @Transactional(rollbackFor = Exception.class)
  86. public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
  87. //删除采购合同
  88. SampleDto sample = submitData.toJavaObject(SampleDto.class);
  89. if(ObjectUtils.isEmpty(sample)){
  90. throw new ServiceException("样品单数据不能为空");
  91. }
  92. start(sample);
  93. }
  94. /**
  95. * 驳回
  96. * @param flowId
  97. * @param businessId
  98. * @param flowStatus
  99. */
  100. @Override
  101. public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
  102. if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
  103. sampleService.update(q -> q
  104. .eq(Sample::getId, FlowThreadLocalUtil.getBusinessId())
  105. .set(Sample::getStatus, 20)//20为驳回
  106. .set(Sample::getUpdateTime, new Date())
  107. .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
  108. );
  109. }
  110. }
  111. public Long start(SampleDto sample){
  112. //赋值城市省份信息
  113. CustomizeAreaUtil.setAreaId(sample);
  114. sample.setBuyCityId(sample.getCityId());
  115. sample.setBuyCountryId(sample.getCountryId());
  116. sample.setBuyProvinceId(sample.getProvinceId());
  117. // sample.setCode(CodeEnum.SAMPLE_CODE.getCode());
  118. sample.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
  119. sample.setUserName(SecurityUtils.getUsername());
  120. sampleService.saveOrUpdate(sample);
  121. List<SampleProduct> sampleProductList = sample.getSampleProductList();
  122. if(CollectionUtils.isNotEmpty(sampleProductList)){//保存样品单产品
  123. for(SampleProduct c : sampleProductList){
  124. c.setId(IdWorker.getId());
  125. c.setSampleId(sample.getId());
  126. c.setExpendQuantity(c.getQuantity());
  127. ObsFileUtil.saveFile(c.getFileList(),c.getId());
  128. }
  129. sampleProductService.saveOrUpdateBatch(sampleProductList);
  130. }
  131. List<SampleProject> sampleProjectList = sample.getSampleProjectList();
  132. if(CollectionUtils.isNotEmpty(sampleProjectList)){//保存收费项目
  133. for(SampleProject c : sampleProjectList){
  134. c.setId(IdWorker.getId());
  135. c.setSampleId(sample.getId());
  136. }
  137. sampleProjectService.saveOrUpdateBatch(sampleProjectList);
  138. }
  139. List<SampleShipment> sampleShipmentList = sample.getSampleShipmentList();
  140. if(CollectionUtils.isNotEmpty(sampleShipmentList)){//保存自定义出货
  141. for(SampleShipment c : sampleShipmentList){
  142. c.setId(IdWorker.getId());
  143. c.setSampleId(sample.getId());
  144. }
  145. sampleShipmentService.saveOrUpdateBatch(sampleShipmentList);
  146. }
  147. //交接单附件
  148. ObsFileUtil.saveFile(sample.getFileList(),sample.getId(),1);
  149. //包装附件
  150. ObsFileUtil.saveFile(sample.getPackageFileList(),sample.getId(),2);
  151. return sample.getId();
  152. }
  153. /**
  154. * 结束流程
  155. * @param flowId 流程ID
  156. * @param businessId 业务ID
  157. * @param submitData 数据
  158. */
  159. @Override
  160. public void end(Long flowId, Long businessId, JSONObject submitData) {
  161. SampleService sampleService = SpringUtil.getBean(SampleService.class);
  162. //通过业务ID查询样品单数据
  163. Sample sample = sampleService.getById(businessId);
  164. if(ObjectUtils.isEmpty(sample)){
  165. throw new ServiceException("样品单不存在");
  166. }
  167. //修改样品单状态为审批通过
  168. sample.setStatus(FlowStatusEnum1.PASS.getKey());
  169. sample.setApprovedDate(new Date());
  170. sampleService.updateById(sample);
  171. }
  172. }