Przeglądaj źródła

样品单、交接单变更逻辑更改

caozj 1 rok temu
rodzic
commit
b195781f51

+ 43 - 20
hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java

@@ -1,26 +1,32 @@
 package com.fjhx.sale.flow;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fjhx.area.utils.CustomizeAreaUtil;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.flow.core.FlowThreadLocalUtil;
+import com.fjhx.flow.enums.FlowStatusEnum;
 import com.fjhx.flow.enums.HandleTypeEnum;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.contract.po.ContractProject;
 import com.fjhx.sale.entity.contract.po.ContractShipment;
+import com.fjhx.sale.entity.purchase.dto.EhsdPurchaseDto;
+import com.fjhx.sale.entity.sample.po.Sample;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.contract.ContractProjectService;
 import com.fjhx.sale.service.contract.ContractService;
 import com.fjhx.sale.service.contract.ContractShipmentService;
+import com.ruoyi.common.annotation.LogicIgnore;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.ServiceException;
@@ -28,6 +34,7 @@ import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -39,6 +46,7 @@ import java.util.List;
  * @DATE:2023/4/3 17:38
  */
 @Component
+@DS(SourceConstant.SALE)
 public class ContractFlow extends FlowDelegate {
 
     @Autowired
@@ -110,13 +118,8 @@ public class ContractFlow extends FlowDelegate {
     }
 
     public Long start(ContractDto contract) {
-
-        long contractId = IdWorker.getId();
-
         // 赋值城市省份信息
         CustomizeAreaUtil.setAreaId(contract);
-
-        contract.setId(contractId);
         SysUser loginUser = SecurityUtils.getLoginUser().getUser();
         contract.setUserName(loginUser.getNickName());
         contract.setBuyCityId(contract.getCityId());
@@ -124,52 +127,72 @@ public class ContractFlow extends FlowDelegate {
         contract.setBuyProvinceId(contract.getProvinceId());
         contract.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
 //        contract.setRate(ExchangeRateUtil.getCnyToCodeRate(contract.getCurrency()));
-        contractService.save(contract);
+        contractService.saveOrUpdate(contract);
 
         // 保存合同产品
         List<ContractProduct> contractProductList = contract.getContractProductList();
         if (CollectionUtils.isNotEmpty(contractProductList)) {
             for (ContractProduct c : contractProductList) {
-                c.setId(IdWorker.getId());
-                c.setContractId(contractId);
+                c.setContractId(contract.getId());
 //                ObsFileUtil.saveFile(c.getFileList(), c.getId());
             }
-            contractProductService.saveBatch(contractProductList);
+            contractProductService.saveOrUpdateBatch(contractProductList);
         }
 
         // 保存收费项目
         List<ContractProject> contractProjectList = contract.getContractProjectList();
         if (CollectionUtils.isNotEmpty(contractProjectList)) {
             for (ContractProject c : contractProjectList) {
-                c.setId(IdWorker.getId());
-                c.setContractId(contractId);
+                c.setContractId(contract.getId());
             }
-            contractProjectService.saveBatch(contractProjectList);
+            contractProjectService.saveOrUpdateBatch(contractProjectList);
         }
 
         // 保存自定义出货
         List<ContractShipment> contractShipmentList = contract.getContractShipmentList();
         if (CollectionUtils.isNotEmpty(contractShipmentList)) {
             for (ContractShipment c : contractShipmentList) {
-                c.setId(IdWorker.getId());
-                c.setContractId(contractId);
+                c.setContractId(contract.getId());
             }
-            contractShipmentService.saveBatch(contractShipmentList);
+            contractShipmentService.saveOrUpdateBatch(contractShipmentList);
         }
 
         // 交接单附件列表
-        ObsFileUtil.saveFile(contract.getFileList(), contractId, 1);
+        ObsFileUtil.saveFile(contract.getFileList(), contract.getId(), 1);
 
         // 包装指示附件列表
-        ObsFileUtil.saveFile(contract.getPackageFileList(), contractId, 2);
+        ObsFileUtil.saveFile(contract.getPackageFileList(), contract.getId(), 2);
+
+        return contract.getId();
+    }
 
-        return contractId;
+    /**
+     * 重新发起
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     * @param submitData
+     */
+    @Override
+    @LogicIgnore(tableName = {""},alias = {""})
+    @Transactional(rollbackFor = Exception.class)
+    public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
+        //删除采购合同
+        ContractDto contractDto = submitData.toJavaObject(ContractDto.class);
+        if(ObjectUtils.isEmpty(contractDto)){
+            throw new ServiceException("合同数据不能为空");
+        }
+        start(contractDto);
     }
 
     /**
-     * 驳回方法
+     * 驳回
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
      */
-    public void reject() {
+    @Override
+    public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
         if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
             contractService.update(q -> q
                     .eq(Contract::getId, FlowThreadLocalUtil.getBusinessId())

+ 27 - 7
hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java

@@ -3,7 +3,9 @@ package com.fjhx.sale.flow;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.*;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.flow.core.FlowDelegate;
@@ -27,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -39,6 +42,7 @@ import java.util.stream.Collectors;
  * 合同变更流程
  */
 @Component
+@DS(SourceConstant.SALE)
 public class ContractUpdateFlow extends FlowDelegate {
 
     @Autowired
@@ -186,13 +190,21 @@ public class ContractUpdateFlow extends FlowDelegate {
         newContract.setStatus(FlowStatusEnum1.PASS.getKey());
         newContract.setApprovedDate(new Date());
         newContract.setUpId(temNewId);
+        newContract.setOldContractId(businessId);
         contractService.updateContract(newContract);
         //修改合同产品相关数据
-        contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,oldContractId).in(ContractProduct::getContractId,newContractProductIds));
+        if(CollectionUtils.isNotEmpty(newContractShipmentIds)){
+            contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,oldContractId).in(ContractProduct::getId,newContractProductIds));
+        }
         //修改合同收费相关数据
-        contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId,oldContractId).in(ContractProject::getContractId,newContractProjectIds));
+        if(CollectionUtils.isNotEmpty(newContractShipmentIds)){
+            contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId,oldContractId).in(ContractProject::getId,newContractProjectIds));
+        }
         //修改合同出货相关数据
-        contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId,oldContractId).in(ContractShipment::getContractId,newContractShipmentIds));
+        if(CollectionUtils.isNotEmpty(newContractShipmentIds)){
+            contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId,oldContractId).in(ContractShipment::getId,newContractShipmentIds));
+        }
+
         /**
          * 处理旧的合同---
          */
@@ -202,10 +214,18 @@ public class ContractUpdateFlow extends FlowDelegate {
         newContract.setUpId(temOldId);
         contractService.updateContract(oldContract);
         //修改合同产品相关数据
-        contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,businessId).in(ContractProduct::getContractId,oldContractProductIds));
-        //修改合同收费相关数据
-        contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId,businessId).in(ContractProject::getContractId,oldContractProjectIds));
+        if(CollectionUtils.isNotEmpty(oldContractProductIds)){
+            contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,businessId).in(ContractProduct::getId,oldContractProductIds));
+        }
+        //修改合同出货相关数据
+        if(CollectionUtils.isNotEmpty(oldContractProjectIds)){
+            //修改合同收费相关数据
+            contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId,businessId).in(ContractProject::getId,oldContractProjectIds));
+        }
         //修改合同出货相关数据
-        contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId,businessId).in(ContractShipment::getContractId,oldContractShipmentIds));
+        if(CollectionUtils.isNotEmpty(oldContractShipmentIds)){
+            //修改合同出货相关数据
+            contractShipmentService.update(Wrappers.<ContractShipment>update().lambda().set(ContractShipment::getContractId,businessId).in(ContractShipment::getId,oldContractShipmentIds));
+        }
     }
 }

+ 57 - 6
hx-sale/src/main/java/com/fjhx/sale/flow/EhsdPurchaseFlow.java

@@ -13,6 +13,9 @@ import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.flow.core.FlowThreadLocalUtil;
+import com.fjhx.flow.enums.FlowStatusEnum;
+import com.fjhx.flow.enums.HandleTypeEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseDataResourceEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.subscribe.enums.SubscribeDetailStatusEnum;
@@ -29,10 +32,15 @@ import com.fjhx.sale.service.contract.ContractService;
 import com.fjhx.sale.service.purchase.*;
 import com.fjhx.sale.service.sample.SampleProductService;
 import com.fjhx.sale.service.sample.SampleService;
+import com.ruoyi.common.annotation.LogicIgnore;
+import com.ruoyi.common.annotation.TenantIgnore;
+import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
+import lombok.experimental.Delegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -136,14 +144,19 @@ public class EhsdPurchaseFlow extends FlowDelegate {
         purchase.setStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey());
         String nickName = SecurityUtils.getLoginUser().getUser().getNickName();
         purchase.setUserName(nickName);
-        purchaseService.save(purchase);
+        purchaseService.saveOrUpdate(purchase);
         List<EhsdPurchaseProduct> purchaseProductList = purchase.getPurchaseProductList();
         List<EhsdPurchaseProject> purchaseProjectList = purchase.getPurchaseProjectList();
         List<EhsdPurchaseArrival> purchaseArrivalList = purchase.getPurchaseArrivalList();
         List<EhsdPurchaseProductMountings> addMountingsList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(purchaseProductList)) {
             for (EhsdPurchaseProduct s : purchaseProductList) {//产品
-                long id = IdWorker.getId();
+                long id ;
+                if(ObjectUtils.isNotEmpty(s.getId())){
+                    id = s.getId();
+                }else{
+                    id = IdWorker.getId();
+                }
                 s.setId(id);
                 s.setPurchaseId(purchase.getId());
                 List<EhsdPurchaseProductMountings> purchaseProductMountingsList = s.getPurchaseProductMountingsList();
@@ -170,20 +183,20 @@ public class EhsdPurchaseFlow extends FlowDelegate {
                     }
                 }
             }
-            purchaseProductService.saveBatch(purchaseProductList);
-            purchaseProductMountingsService.saveBatch(addMountingsList);
+            purchaseProductService.saveOrUpdateBatch(purchaseProductList);
+            purchaseProductMountingsService.saveOrUpdateBatch(addMountingsList);
         }
         if (CollectionUtils.isNotEmpty(purchaseProjectList)) {//到货
             for (EhsdPurchaseProject s : purchaseProjectList) {
                 s.setPurchaseId(purchase.getId());
             }
-            purchaseProjectService.saveBatch(purchaseProjectList);
+            purchaseProjectService.saveOrUpdateBatch(purchaseProjectList);
         }
         if (CollectionUtils.isNotEmpty(purchaseArrivalList)) {//收费项目
             for (EhsdPurchaseArrival s : purchaseArrivalList) {
                 s.setPurchaseId(purchase.getId());
             }
-            purchaseArrivalService.saveBatch(purchaseArrivalList);
+            purchaseArrivalService.saveOrUpdateBatch(purchaseArrivalList);
         }
         return purchase;
     }
@@ -263,4 +276,42 @@ public class EhsdPurchaseFlow extends FlowDelegate {
         }
     }
 
+    /**
+     * 重新发起
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     * @param submitData
+     */
+    @Override
+    @LogicIgnore(tableName = {""},alias = {""})
+    @Transactional(rollbackFor = Exception.class)
+    public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
+        //删除采购合同
+        EhsdPurchaseDto purchase = submitData.toJavaObject(EhsdPurchaseDto.class);
+        if(ObjectUtils.isEmpty(purchase)){
+            throw new ServiceException("采购数据不能为空");
+        }
+        purchase.setFlowId(flowId);
+        connStart(purchase);
+    }
+
+    /**
+     * 驳回
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     */
+    @Override
+    public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
+            sampleService.update(q -> q
+                    .eq(Sample::getId, FlowThreadLocalUtil.getBusinessId())
+                    .set(Sample::getStatus, 20)//20为驳回
+                    .set(Sample::getUpdateTime, new Date())
+                    .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+            );
+        }
+    }
+
 }

+ 48 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/EhsdPurchaseUpdateFlow.java

@@ -1,11 +1,16 @@
 package com.fjhx.sale.flow;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.flow.core.FlowThreadLocalUtil;
+import com.fjhx.flow.enums.FlowStatusEnum;
+import com.fjhx.flow.enums.HandleTypeEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseDataResourceEnum;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.purchase.dto.EhsdPurchaseDto;
@@ -13,6 +18,7 @@ import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchaseArrival;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProduct;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProject;
+import com.fjhx.sale.entity.sample.po.Sample;
 import com.fjhx.sale.entity.sample.po.SampleProduct;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseArrivalService;
@@ -20,11 +26,14 @@ import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseProjectService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseService;
 import com.fjhx.sale.service.sample.SampleProductService;
+import com.ruoyi.common.annotation.LogicIgnore;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -35,6 +44,7 @@ import java.util.regex.Pattern;
  * EHSD采购变更流程
  */
 @Component
+@DS(SourceConstant.SALE)
 public class EhsdPurchaseUpdateFlow extends FlowDelegate {
     @Autowired
     private EhsdPurchaseService ehsdPurchaseService;
@@ -110,6 +120,44 @@ public class EhsdPurchaseUpdateFlow extends FlowDelegate {
     }
 
     /**
+     * 重新发起
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     * @param submitData
+     */
+    @Override
+    @LogicIgnore(tableName = {""},alias = {""})
+    @Transactional(rollbackFor = Exception.class)
+    public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
+        //删除采购合同
+        EhsdPurchaseDto purchase = submitData.toJavaObject(EhsdPurchaseDto.class);
+        if(ObjectUtils.isEmpty(purchase)){
+            throw new ServiceException("采购数据不能为空");
+        }
+        purchase.setFlowId(flowId);
+        ehsdPurchaseFlow.connStart(purchase);
+    }
+
+    /**
+     * 驳回
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     */
+    @Override
+    public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
+            ehsdPurchaseService.update(q -> q
+                    .eq(EhsdPurchase::getId, FlowThreadLocalUtil.getBusinessId())
+                    .set(EhsdPurchase::getStatus, 20)//20为驳回
+                    .set(EhsdPurchase::getUpdateTime, new Date())
+                    .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+            );
+        }
+    }
+
+    /**
      * 结束流程
      */
     @Override

+ 58 - 8
hx-sale/src/main/java/com/fjhx/sale/flow/SaleQuotationFlow.java

@@ -14,6 +14,8 @@ import com.fjhx.flow.core.FlowThreadLocalUtil;
 import com.fjhx.flow.enums.FlowStatusEnum;
 import com.fjhx.flow.enums.HandleTypeEnum;
 import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.purchase.dto.EhsdPurchaseDto;
+import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
 import com.fjhx.sale.entity.quotation.po.QuotationPay;
 import com.fjhx.sale.entity.quotation.po.QuotationProduct;
 import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
@@ -22,11 +24,13 @@ import com.fjhx.sale.enums.SaleQuotationEnum;
 import com.fjhx.sale.service.quotation.QuotationPayService;
 import com.fjhx.sale.service.quotation.QuotationProductService;
 import com.fjhx.sale.service.sale.SaleQuotationService;
+import com.ruoyi.common.annotation.LogicIgnore;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -43,6 +47,12 @@ public class SaleQuotationFlow extends FlowDelegate {
     @Autowired
     private SaleQuotationService saleQuotationService;
 
+    @Autowired
+    private QuotationPayService quotationPayService;
+
+    @Autowired
+    private QuotationProductService quotationProductService;
+
     @Override
     public String getFlowKey() {
         return "sale_quotation_flow";
@@ -56,18 +66,24 @@ public class SaleQuotationFlow extends FlowDelegate {
      */
     @Override
     public Long start(Long flowId, JSONObject submitData) {
-        SaleQuotationService saleQuotationService = SpringUtil.getBean(SaleQuotationService.class);
-        QuotationPayService quotationPayService = SpringUtil.getBean(QuotationPayService.class);
-        QuotationProductService quotationProductService = SpringUtil.getBean(QuotationProductService.class);
         SaleQuotationDto saleQuotation = submitData.toJavaObject(SaleQuotationDto.class);
+
+        //添加报价编码
+        saleQuotation.setCode(codingRuleService.createCode(CodingRuleEnum.SALE_QUOTATION.getKey(),saleQuotation.getBuyCorporationId()));
+//        saleQuotation.setCode(CodeEnum.SALE_QUOTATION.getCode());
+        return connStart(saleQuotation);
+    }
+
+    /**
+     * 添加/修改报价单   公众代码
+     * @param saleQuotation
+     */
+    public Long connStart(SaleQuotationDto saleQuotation){
         //赋值城市省份信息
         CustomizeAreaUtil.setAreaId(saleQuotation);
         saleQuotation.setBuyCityId(saleQuotation.getCityId());
         saleQuotation.setBuyCountryId(saleQuotation.getCountryId());
         saleQuotation.setBuyProvinceId(saleQuotation.getProvinceId());
-        //添加报价编码
-        saleQuotation.setCode(codingRuleService.createCode(CodingRuleEnum.SALE_QUOTATION.getKey(),saleQuotation.getBuyCorporationId()));
-//        saleQuotation.setCode(CodeEnum.SALE_QUOTATION.getCode());
         //添加报价状态
         saleQuotation.setStatus(SaleQuotationEnum.UNDER_REVIEW.getKey());
         //添加报价单信息
@@ -79,14 +95,48 @@ public class SaleQuotationFlow extends FlowDelegate {
         }
         List<QuotationPay> quotationPayList = saleQuotation.getQuotationPayList();
         if(CollectionUtils.isNotEmpty(quotationPayList)){//保存报价项目信息
-           quotationPayList.forEach(quotationPay -> quotationPay.setSaleQuotationId(saleQuotation.getId()));
+            quotationPayList.forEach(quotationPay -> quotationPay.setSaleQuotationId(saleQuotation.getId()));
             quotationPayService.saveBatch(quotationPayList);
         }
-
         return saleQuotation.getId();
     }
+    /**
+     * 重新发起
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     * @param submitData
+     */
+    @Override
+    @LogicIgnore(tableName = {""},alias = {""})
+    @Transactional(rollbackFor = Exception.class)
+    public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
+        //删除采购合同
+        SaleQuotationDto saleQuotationDto = submitData.toJavaObject(SaleQuotationDto.class);
+        if(ObjectUtils.isEmpty(saleQuotationDto)){
+            throw new ServiceException("报价单数据不能为空");
+        }
+        connStart(saleQuotationDto);
+    }
 
     /**
+     * 驳回
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     */
+    @Override
+    public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
+            saleQuotationService.update(q -> q
+                    .eq(SaleQuotation::getId, FlowThreadLocalUtil.getBusinessId())
+                    .set(SaleQuotation::getStatus, 20)//20为驳回
+                    .set(SaleQuotation::getUpdateTime, new Date())
+                    .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+            );
+        }
+    }
+    /**
      * 结束流程
      * @param flowId 流程ID
      * @param businessId 业务ID

+ 47 - 23
hx-sale/src/main/java/com/fjhx/sale/flow/SampleFlow.java

@@ -15,8 +15,11 @@ import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.flow.core.FlowThreadLocalUtil;
+import com.fjhx.flow.enums.FlowStatusEnum;
 import com.fjhx.flow.enums.HandleTypeEnum;
 import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
+import com.fjhx.sale.entity.sale.po.SaleQuotation;
 import com.fjhx.sale.entity.sample.dto.SampleDto;
 import com.fjhx.sale.entity.sample.po.Sample;
 import com.fjhx.sale.entity.sample.po.SampleProduct;
@@ -26,11 +29,13 @@ import com.fjhx.sale.service.sample.SampleProductService;
 import com.fjhx.sale.service.sample.SampleProjectService;
 import com.fjhx.sale.service.sample.SampleService;
 import com.fjhx.sale.service.sample.SampleShipmentService;
+import com.ruoyi.common.annotation.LogicIgnore;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -75,17 +80,49 @@ public class SampleFlow extends FlowDelegate {
     @Override
     @DSTransactional
     public Long start(Long flowId, JSONObject submitData) {
-//        SampleService sampleService = SpringUtil.getBean(SampleService.class);
-//        SampleProductService sampleProductService = SpringUtil.getBean(SampleProductService.class);
-//        SampleProjectService sampleProjectService = SpringUtil.getBean(SampleProjectService.class);
-//        SampleShipmentService sampleShipmentService = SpringUtil.getBean(SampleShipmentService.class);
-//        Sample sample = submitData.toJavaObject(Sample.class);
-
         SampleDto sample = submitData.toJavaObject(SampleDto.class);
         sample.setCode(codingRuleService.createCode(CodingRuleEnum.SAMPLE.getKey(),sample.getBuyCorporationId()));
         long id = start(sample,0);
         return id;
     }
+
+    /**
+     * 重新发起
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     * @param submitData
+     */
+    @Override
+    @LogicIgnore(tableName = {""},alias = {""})
+    @Transactional(rollbackFor = Exception.class)
+    public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
+        //删除采购合同
+        SampleDto sample = submitData.toJavaObject(SampleDto.class);
+        if(ObjectUtils.isEmpty(sample)){
+            throw new ServiceException("样品单数据不能为空");
+        }
+        start(sample,0);
+    }
+
+    /**
+     * 驳回
+     * @param flowId
+     * @param businessId
+     * @param flowStatus
+     */
+    @Override
+    public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
+            sampleService.update(q -> q
+                    .eq(Sample::getId, FlowThreadLocalUtil.getBusinessId())
+                    .set(Sample::getStatus, 20)//20为驳回
+                    .set(Sample::getUpdateTime, new Date())
+                    .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+            );
+        }
+    }
+
     public Long start(SampleDto sample,int type){
         //赋值城市省份信息
         CustomizeAreaUtil.setAreaId(sample);
@@ -96,7 +133,7 @@ public class SampleFlow extends FlowDelegate {
         sample.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
         sample.setUserName(SecurityUtils.getUsername());
 
-        sampleService.save(sample);
+        sampleService.saveOrUpdate(sample);
         List<SampleProduct> sampleProductList = sample.getSampleProductList();
         if(CollectionUtils.isNotEmpty(sampleProductList)){//保存样品单产品
             for(SampleProduct c : sampleProductList){
@@ -105,7 +142,7 @@ public class SampleFlow extends FlowDelegate {
                 c.setExpendQuantity(c.getQuantity());
                 ObsFileUtil.saveFile(c.getFileList(),c.getId());
             }
-            sampleProductService.saveBatch(sampleProductList);
+            sampleProductService.saveOrUpdateBatch(sampleProductList);
         }
         List<SampleProject> sampleProjectList = sample.getSampleProjectList();
         if(CollectionUtils.isNotEmpty(sampleProjectList)){//保存收费项目
@@ -113,7 +150,7 @@ public class SampleFlow extends FlowDelegate {
                 c.setId(IdWorker.getId());
                 c.setSampleId(sample.getId());
             }
-            sampleProjectService.saveBatch(sampleProjectList);
+            sampleProjectService.saveOrUpdateBatch(sampleProjectList);
         }
         List<SampleShipment> sampleShipmentList = sample.getSampleShipmentList();
         if(CollectionUtils.isNotEmpty(sampleShipmentList)){//保存自定义出货
@@ -121,7 +158,7 @@ public class SampleFlow extends FlowDelegate {
                 c.setId(IdWorker.getId());
                 c.setSampleId(sample.getId());
             }
-            sampleShipmentService.saveBatch(sampleShipmentList);
+            sampleShipmentService.saveOrUpdateBatch(sampleShipmentList);
         }
         //交接单附件
         ObsFileUtil.saveFile(sample.getFileList(),sample.getId(),1);
@@ -150,18 +187,5 @@ public class SampleFlow extends FlowDelegate {
         sampleService.updateById(sample);
     }
 
-    /**
-     * 驳回方法
-     */
-    public void reject() {
-        if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
-            sampleService.update(q -> q
-                    .eq(Sample::getId, FlowThreadLocalUtil.getBusinessId())
-                    .set(Sample::getStatus, 20)//20为驳回
-                    .set(Sample::getUpdateTime, new Date())
-                    .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
-            );
-        }
-    }
 
 }

+ 32 - 19
hx-sale/src/main/java/com/fjhx/sale/flow/SampleUpdateFlow.java

@@ -2,7 +2,9 @@ package com.fjhx.sale.flow;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.*;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.sale.entity.sample.dto.SampleDto;
@@ -18,9 +20,7 @@ import com.ruoyi.common.exception.ServiceException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -29,6 +29,7 @@ import java.util.stream.Collectors;
  * 样品单变更流程
  */
 @Component
+@DS(SourceConstant.SALE)
 public class SampleUpdateFlow extends FlowDelegate {
 
     @Autowired
@@ -156,14 +157,6 @@ public class SampleUpdateFlow extends FlowDelegate {
         //替换新旧数据ID为临时ID
         sampleService.updateSample(temOldUpSample);
         sampleService.updateSample(temNewUpSample);
-        /**
-         * 处理新样品单---
-         */
-        newSample.setId(oldSampleId);//id赋值为旧样品单的id
-        newSample.setStatus(FlowStatusEnum1.PASS.getKey());
-        newSample.setApprovedDate(new Date());
-        newSample.setUpId(temNewId);
-        sampleService.updateSample(newSample);
         //查询新数据产品、收费、出货
         List<Long> newSampleProductIds = sampleProductService.list(Wrappers.<SampleProduct>query().lambda().select(SampleProduct::getId).eq(SampleProduct::getSampleId,businessId)).stream().map(SampleProduct::getId).collect(Collectors.toList());
         List<Long> newSampleProjectIds = sampleProjectService.list(Wrappers.<SampleProject>query().lambda().select(SampleProject::getId).eq(SampleProject::getSampleId,businessId)).stream().map(SampleProject::getId).collect(Collectors.toList());
@@ -175,13 +168,27 @@ public class SampleUpdateFlow extends FlowDelegate {
         List<Long> oldSampleProjectIds = sampleProjectService.list(Wrappers.<SampleProject>query().lambda().select(SampleProject::getId).eq(SampleProject::getSampleId,oldSampleId)).stream().map(SampleProject::getId).collect(Collectors.toList());
         List<Long> oldSampleShipmentIds = sampleShipmentService.list(Wrappers.<SampleShipment>query().lambda().select(SampleShipment::getId).eq(SampleShipment::getSampleId,oldSampleId)).stream().map(SampleShipment::getId).collect(Collectors.toList());
 
-
+        /**
+         * 处理新样品单---
+         */
+        newSample.setId(oldSampleId);//id赋值为旧样品单的id
+        newSample.setStatus(FlowStatusEnum1.PASS.getKey());
+        newSample.setApprovedDate(new Date());
+        newSample.setUpId(temNewId);
+        newSample.setOldSampleId(businessId);
+        sampleService.updateSample(newSample);
         //修改样品单产品相关数据
-        sampleProductService.update(Wrappers.<SampleProduct>update().lambda().set(SampleProduct::getSampleId,oldSampleId).in(SampleProduct::getId,newSampleProductIds));
+        if(CollectionUtils.isNotEmpty(newSampleProductIds)){
+            sampleProductService.update(Wrappers.<SampleProduct>update().lambda().set(SampleProduct::getSampleId,oldSampleId).in(SampleProduct::getId,newSampleProductIds));
+        }
         //修改样品单收费相关数据
-        sampleProjectService.update(Wrappers.<SampleProject>update().lambda().set(SampleProject::getSampleId,oldSampleId).eq(SampleProject::getId,newSampleProjectIds));
+        if(CollectionUtils.isNotEmpty(newSampleProjectIds)){
+            sampleProjectService.update(Wrappers.<SampleProject>update().lambda().set(SampleProject::getSampleId,oldSampleId).in(SampleProject::getId,newSampleProjectIds));
+        }
         //修改样品单出货相关数据
-        sampleShipmentService.update(Wrappers.<SampleShipment>update().lambda().set(SampleShipment::getSampleId,oldSampleId).eq(SampleShipment::getId,newSampleShipmentIds));
+        if(CollectionUtils.isNotEmpty(newSampleShipmentIds)){
+            sampleShipmentService.update(Wrappers.<SampleShipment>update().lambda().set(SampleShipment::getSampleId,oldSampleId).in(SampleShipment::getId,newSampleShipmentIds));
+        }
         /**
          * 处理旧的样品单---
          */
@@ -189,13 +196,19 @@ public class SampleUpdateFlow extends FlowDelegate {
         oldSample.setStatus(FlowStatusEnum1.UPDATE.getKey());
         oldSample.setIsChange("1");
         oldSample.setUpId(temOldId);
-        oldSample.setOldSampleId(oldSampleId);
         sampleService.updateSample(oldSample);
         //修改样品单产品相关数据
-        sampleProductService.update(Wrappers.<SampleProduct>update().lambda().set(SampleProduct::getSampleId,businessId).in(SampleProduct::getId,oldSampleProductIds));
+        if(CollectionUtils.isNotEmpty(oldSampleProductIds)){
+            sampleProductService.update(Wrappers.<SampleProduct>update().lambda().set(SampleProduct::getSampleId,businessId).in(SampleProduct::getId,oldSampleProductIds));
+        }
         //修改样品单收费相关数据
-        sampleProjectService.update(Wrappers.<SampleProject>update().lambda().set(SampleProject::getSampleId,businessId).in(SampleProject::getId,oldSampleProjectIds));
+        if(CollectionUtils.isNotEmpty(oldSampleProjectIds)){
+            sampleProjectService.update(Wrappers.<SampleProject>update().lambda().set(SampleProject::getSampleId,businessId).in(SampleProject::getId,oldSampleProjectIds));
+        }
         //修改样品单出货相关数据
-        sampleShipmentService.update(Wrappers.<SampleShipment>update().lambda().set(SampleShipment::getSampleId,businessId).in(SampleShipment::getId,oldSampleShipmentIds));
+        if(CollectionUtils.isNotEmpty(oldSampleShipmentIds)){
+            sampleShipmentService.update(Wrappers.<SampleShipment>update().lambda().set(SampleShipment::getSampleId,businessId).in(SampleShipment::getId,oldSampleShipmentIds));
+        }
+
     }
 }

+ 1 - 1
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -284,7 +284,7 @@
     </select>
 
     <update id="updateContract" parameterType="com.fjhx.sale.entity.contract.po.Contract">
-        update contract
+        update contract 123123
         <set>
             <if test="id != null and id != '' ">id = #{id},</if>
             <if test="status != null and status != ''">status = #{status},</if>