Переглянути джерело

销售合同 代码整理

yzc 1 рік тому
батько
коміт
5372a8c9e4

+ 66 - 92
hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java

@@ -2,7 +2,6 @@ package com.fjhx.sale.flow;
 
 import com.alibaba.fastjson.JSONObject;
 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.enums.CodingRuleEnum;
@@ -33,8 +32,6 @@ import org.springframework.stereotype.Component;
 
 import java.util.Date;
 import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * 外销合同流程
@@ -78,6 +75,10 @@ public class ContractFlow extends FlowDelegate {
         if (StringUtils.isEmpty(contract.getCurrency())) {
             throw new ServiceException("币种不能为空");
         }
+
+        //赋值合同号
+        contract.setCode(codingRuleService.createCode(CodingRuleEnum.CONTRACT.getKey(), contract.getBuyCorporationId()));
+
         // 保存合同产品
         List<ContractProduct> contractProductList = contract.getContractProductList();
 
@@ -126,75 +127,101 @@ public class ContractFlow extends FlowDelegate {
     }
 
     public Long start(ContractDto contract) {
+        ContractDto contractDto = commStart(contract, 0);
+
+        return contractDto.getId();
+    }
+
+    /**
+     * 开始公共代码抽取
+     *
+     * @param opType 操作类型 0直接发起 1重新发起
+     */
+    private ContractDto commStart(ContractDto contract, Integer opType) {
 
-        long contractId = IdWorker.getId();
+//        long contractId = IdWorker.getId();
 
         // 赋值城市省份信息
         CustomizeAreaUtil.setAreaId(contract);
 
-        contract.setId(contractId);
-
-        //如果是变更 用用来合同号加后缀
-        if (ObjectUtils.isNotEmpty(contract.getOldContractId())) {
-            Contract oldContract = contractService.getById(contract.getOldContractId());
-            Assert.notEmpty(oldContract, "查询不到原合同信息");
-            String code = oldContract.getCode();
-            Matcher matcher = Pattern.compile(".*\\((.*?)\\)$").matcher(code);
-            int index = 2;
-            if (matcher.find()) {
-                index = (Integer.parseInt(matcher.group(1)) + 1);
-                code = code.substring(0, code.lastIndexOf("("));
-            }
-            contract.setCode(code + "(" + index + ")");
-        } else {
-            contract.setCode(codingRuleService.createCode(CodingRuleEnum.CONTRACT.getKey(), contract.getBuyCorporationId()));
-        }
+//        contract.setId(contractId);
+
         contract.setUserName(SecurityUtils.getUsername());
         contract.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
         contract.setBuyCityId(contract.getCityId());
         contract.setBuyCountryId(contract.getCountryId());
         contract.setBuyProvinceId(contract.getProvinceId());
         contract.setRate(ExchangeRateUtil.getCnyToCodeRate(contract.getCurrency()));
-        contractService.save(contract);
+        contractService.saveOrUpdate(contract);
 
         // 保存合同产品
         List<ContractProduct> contractProductList = contract.getContractProductList();
         if (CollectionUtils.isNotEmpty(contractProductList)) {
+
+            if (opType == 1) {
+                //先删除被删除的产品
+                contractProductService.editLinked(contractProductList, ContractProduct::getContractId, contract.getId());
+            }
             for (ContractProduct c : contractProductList) {
-                c.setId(IdWorker.getId());
-                c.setContractId(contractId);
-                ObsFileUtil.saveFile(c.getFileList(), c.getId());
+//                c.setId(IdWorker.getId());
+                c.setContractId(contract.getId());
+                if (opType == 1) {
+                    ObsFileUtil.editFile(c.getFileList(), c.getId());
+                } else {
+                    ObsFileUtil.saveFile(c.getFileList(), c.getId());
+                }
             }
-            contractProductService.saveBatch(contractProductList);
+            contractProductService.saveOrUpdateBatch(contractProductList);
         }
 
         // 保存收费项目
         List<ContractProject> contractProjectList = contract.getContractProjectList();
         if (CollectionUtils.isNotEmpty(contractProjectList)) {
+            if (opType == 1) {
+                //先删除被删除的产品
+                contractProjectService.editLinked(contractProjectList, ContractProject::getContractId, contract.getId());
+            }
+
             for (ContractProject c : contractProjectList) {
-                c.setId(IdWorker.getId());
-                c.setContractId(contractId);
+//                c.setId(IdWorker.getId());
+                c.setContractId(contract.getId());
             }
-            contractProjectService.saveBatch(contractProjectList);
+            contractProjectService.saveOrUpdateBatch(contractProjectList);
         }
 
         // 保存自定义出货
         List<ContractShipment> contractShipmentList = contract.getContractShipmentList();
         if (CollectionUtils.isNotEmpty(contractShipmentList)) {
+            if (opType == 1) {
+                //先删除被删除的产品
+                contractShipmentService.editLinked(contractShipmentList, ContractShipment::getContractId, contract.getId());
+            }
             for (ContractShipment c : contractShipmentList) {
-                c.setId(IdWorker.getId());
-                c.setContractId(contractId);
+//                c.setId(IdWorker.getId());
+                c.setContractId(contract.getId());
             }
-            contractShipmentService.saveBatch(contractShipmentList);
+            contractShipmentService.saveOrUpdateBatch(contractShipmentList);
         }
 
-        // 交接单附件列表
-        ObsFileUtil.saveFile(contract.getFileList(), contractId, 1);
+        if (opType == 1) {
+            //重新发起编辑
+
+            // 交接单附件列表
+            ObsFileUtil.editFile(contract.getFileList(), contract.getId(), 1);
+
+            // 包装指示附件列表
+            ObsFileUtil.editFile(contract.getPackageFileList(), contract.getId(), 2);
+        } else {
+            //普通提交新增
+
+            // 交接单附件列表
+            ObsFileUtil.saveFile(contract.getFileList(), contract.getId(), 1);
 
-        // 包装指示附件列表
-        ObsFileUtil.saveFile(contract.getPackageFileList(), contractId, 2);
+            // 包装指示附件列表
+            ObsFileUtil.saveFile(contract.getPackageFileList(), contract.getId(), 2);
+        }
 
-        return contractId;
+        return contract;
     }
 
     /**
@@ -221,61 +248,8 @@ public class ContractFlow extends FlowDelegate {
             contractProductList.forEach(item -> item.setExpendQuantity(item.getQuantity()));
         }
 
-        //-----
-        // 赋值城市省份信息
-        CustomizeAreaUtil.setAreaId(contract);
-
-        contract.setId(contractId);
-//        contract.setCode(codingRuleService.createCode(CodingRuleEnum.CONTRACT.getKey(), contract.getBuyCorporationId()));
-        contract.setUserName(SecurityUtils.getUsername());
-        contract.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
-        contract.setBuyCityId(contract.getCityId());
-        contract.setBuyCountryId(contract.getCountryId());
-        contract.setBuyProvinceId(contract.getProvinceId());
-        contract.setRate(ExchangeRateUtil.getCnyToCodeRate(contract.getCurrency()));
-        contractService.updateById(contract);
-
-        // 保存合同产品
-        if (CollectionUtils.isNotEmpty(contractProductList)) {
-            //先删除被删除的产品
-            contractProductService.editLinked(contractProductList, ContractProduct::getContractId, contractId);
-
-            for (ContractProduct c : contractProductList) {
-                c.setContractId(contractId);
-                ObsFileUtil.editFile(c.getFileList(), c.getId());
-            }
-            contractProductService.saveOrUpdateBatch(contractProductList);
-        }
-
-        // 保存收费项目
-        List<ContractProject> contractProjectList = contract.getContractProjectList();
-        if (CollectionUtils.isNotEmpty(contractProjectList)) {
-            //先删除被删除的产品
-            contractProjectService.editLinked(contractProjectList, ContractProject::getContractId, contractId);
-
-            for (ContractProject c : contractProjectList) {
-                c.setContractId(contractId);
-            }
-            contractProjectService.saveOrUpdateBatch(contractProjectList);
-        }
-
-        // 保存自定义出货
-        List<ContractShipment> contractShipmentList = contract.getContractShipmentList();
-        if (CollectionUtils.isNotEmpty(contractShipmentList)) {
-            //先删除被删除的产品
-            contractShipmentService.editLinked(contractShipmentList, ContractShipment::getContractId, contractId);
-
-            for (ContractShipment c : contractShipmentList) {
-                c.setContractId(contractId);
-            }
-            contractShipmentService.saveOrUpdateBatch(contractShipmentList);
-        }
-
-        // 交接单附件列表
-        ObsFileUtil.editFile(contract.getFileList(), contractId, 1);
-
-        // 包装指示附件列表
-        ObsFileUtil.editFile(contract.getPackageFileList(), contractId, 2);
+        //调用公共代码
+        commStart(contract, 1);
     }
 
     /**

+ 36 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java

@@ -10,6 +10,8 @@ import com.fjhx.flow.enums.FlowStatusEnum;
 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.service.contract.ContractProductService;
 import com.fjhx.sale.service.contract.ContractService;
 import com.ruoyi.common.core.domain.BaseIdPo;
@@ -24,6 +26,8 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -58,9 +62,41 @@ public class ContractUpdateFlow extends FlowDelegate {
 
         ContractDto contract = submitData.toJavaObject(ContractDto.class);
 
+        Assert.notEmpty(contract.getOldContractId(), "原合同id不能为空");
+
+        //变更 用原来合同号加后缀
+        Contract oldContract = contractService.getById(contract.getOldContractId());
+        Assert.notEmpty(oldContract, "查询不到原合同信息");
+        String code = oldContract.getCode();
+        Matcher matcher = Pattern.compile(".*\\((.*?)\\)$").matcher(code);
+        int index = 2;
+        if (matcher.find()) {
+            index = (Integer.parseInt(matcher.group(1)) + 1);
+            code = code.substring(0, code.lastIndexOf("("));
+        }
+        contract.setCode(code + "(" + index + ")");
+
         //变更合同提前操作数据
         contract = opDate(contract);
 
+        //清空id 方便后面生成新合同
+        contract.setId(null);
+        // 清空合同产品id
+        List<ContractProduct> contractProductList = contract.getContractProductList();
+        if (CollectionUtils.isNotEmpty(contractProductList)) {
+            contractProductList.forEach(item -> item.setId(null));
+        }
+        // 清空收费项目id
+        List<ContractProject> contractProjectList = contract.getContractProjectList();
+        if (CollectionUtils.isNotEmpty(contractProjectList)) {
+            contractProjectList.forEach(item -> item.setId(null));
+        }
+        // 清空自定义出货id
+        List<ContractShipment> contractShipmentList = contract.getContractShipmentList();
+        if (CollectionUtils.isNotEmpty(contractShipmentList)) {
+            contractShipmentList.forEach(item -> item.setId(null));
+        }
+
         return contractFlow.start(contract);
     }