Bläddra i källkod

采购合同变更

yzc 1 år sedan
förälder
incheckning
ee064bd654

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/EhsdPurchase.java

@@ -241,6 +241,11 @@ public class EhsdPurchase extends BasePo {
     //-------------------------标准版采购独有字段结束------------------------------
 
     /**
+     * 原采购id
+     */
+    private Long oldPurchaseId;
+
+    /**
      * 采购到货列表
      */
     @TableField(exist = false)

+ 23 - 12
hx-sale/src/main/java/com/fjhx/sale/flow/EhsdPurchaseFlow.java

@@ -13,7 +13,6 @@ 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.enums.FlowStatusEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseDataResourceEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.subscribe.enums.SubscribeDetailStatusEnum;
@@ -96,34 +95,46 @@ public class EhsdPurchaseFlow extends FlowDelegate {
     @Override
     public Long start(Long flowId, JSONObject submitData) {
         EhsdPurchaseDto purchase = submitData.toJavaObject(EhsdPurchaseDto.class);
-        //赋值城市省份信息
-        CustomizeAreaUtil.setAreaId(purchase);
-        purchase.setSellCityId(purchase.getCityId());
-        purchase.setSellCountryId(purchase.getCountryId());
-        purchase.setSellProvinceId(purchase.getProvinceId());
+        purchase.setFlowId(flowId);
 
-        //手动创建
+        //手动创建 编号规则
         if (0 == purchase.getDataResource()) {
             purchase.setCode(codingRuleService.createCode(CodingRuleEnum.EHSD_PURCHASE.getKey(), null));
         }
-        //合同
+        //合同 编号规则
         if (1 == purchase.getDataResource()) {
             Contract contract = contractService.getById(purchase.getDataResourceId());
             Assert.notEmpty(contract, "查询不到合同信息,无法生成编号");
             long count = purchaseService.count(q -> q.eq(EhsdPurchase::getDataResourceId, contract.getId()));
             purchase.setCode(contract.getCode() + "-" + (count + 1));
         }
-        //样品单
+        //样品单 编号规则
         if (2 == purchase.getDataResource()) {
             Sample sample = sampleService.getById(purchase.getDataResourceId());
             Assert.notEmpty(sample, "查询不到样品单信息,无法生成编号");
             long count = purchaseService.count(q -> q.eq(EhsdPurchase::getDataResourceId, sample.getId()));
             purchase.setCode(sample.getCode() + "-" + (count + 1));
         }
-//        purchase.setCode(CodeEnum.PURCHASE.getCode());
+
+        //公共代码
+        purchase = connStart(purchase);
+
+        return purchase.getId();
+    }
+
+    /**
+     * 公共代码块
+     */
+    public EhsdPurchaseDto connStart(EhsdPurchaseDto purchase) {
+        //赋值城市省份信息
+        CustomizeAreaUtil.setAreaId(purchase);
+        purchase.setSellCityId(purchase.getCityId());
+        purchase.setSellCountryId(purchase.getCountryId());
+        purchase.setSellProvinceId(purchase.getProvinceId());
+
+
         purchase.setStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey());
         purchase.setUserName(SecurityUtils.getUsername());
-        purchase.setFlowId(flowId);
         purchaseService.save(purchase);
         List<EhsdPurchaseProduct> purchaseProductList = purchase.getPurchaseProductList();
         List<EhsdPurchaseProject> purchaseProjectList = purchase.getPurchaseProjectList();
@@ -173,7 +184,7 @@ public class EhsdPurchaseFlow extends FlowDelegate {
             }
             purchaseArrivalService.saveBatch(purchaseArrivalList);
         }
-        return purchase.getId();
+        return purchase;
     }
 
     /**

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

@@ -0,0 +1,178 @@
+package com.fjhx.sale.flow;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.sale.entity.purchase.dto.EhsdPurchaseDto;
+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.service.purchase.EhsdPurchaseArrivalService;
+import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
+import com.fjhx.sale.service.purchase.EhsdPurchaseProjectService;
+import com.fjhx.sale.service.purchase.EhsdPurchaseService;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * EHSD采购变更流程
+ */
+@Component
+public class EhsdPurchaseUpdateFlow extends FlowDelegate {
+    @Autowired
+    private EhsdPurchaseService ehsdPurchaseService;
+    @Autowired
+    private EhsdPurchaseFlow ehsdPurchaseFlow;
+    @Autowired
+    private EhsdPurchaseProductService ehsdPurchaseProductService;
+    @Autowired
+    private EhsdPurchaseProjectService ehsdPurchaseProjectService;
+    @Autowired
+    private EhsdPurchaseArrivalService ehsdPurchaseArrivalService;
+
+    @Override
+    public String getFlowKey() {
+        return "ehsd_purchase_update_flow";
+    }
+
+    /**
+     * 发起流程
+     */
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        EhsdPurchaseDto purchase = submitData.toJavaObject(EhsdPurchaseDto.class);
+        Assert.notEmpty(purchase.getId(), "采购合同id不能为空");
+
+        //赋值原合同id
+        purchase.setOldPurchaseId(purchase.getId());
+
+        //赋值流程id
+        purchase.setFlowId(flowId);
+
+        //变更 用原来合同号加后缀
+        EhsdPurchase oldPurchase = ehsdPurchaseService.getById(purchase.getOldPurchaseId());
+        Assert.notEmpty(oldPurchase, "查询不到原合同信息");
+        String code = oldPurchase.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("("));
+        }
+        purchase.setCode(code + "(" + index + ")");
+
+        //获取明细信息
+        List<EhsdPurchaseProduct> purchaseProductList = purchase.getPurchaseProductList();
+        List<EhsdPurchaseProject> purchaseProjectList = purchase.getPurchaseProjectList();
+        List<EhsdPurchaseArrival> purchaseArrivalList = purchase.getPurchaseArrivalList();
+
+        //清空采购合同的id
+        purchase.setId(null);
+        //清空采购明细的id 以及 配件id 方便后面重新发起
+        for (EhsdPurchaseProduct ehsdPurchaseProduct : purchaseProductList) {
+            ehsdPurchaseProduct.setId(null);
+            ehsdPurchaseProduct.getPurchaseProductMountingsList().forEach(item -> item.setId(null));
+        }
+        //清空其他费用的id方便后面重新发起
+        purchaseProjectList.forEach(item -> item.setId(null));
+        //清空到货要求的id方便后面重新发起
+        purchaseArrivalList.forEach(item -> item.setId(null));
+
+        //调用采购发起公共代码块
+        purchase = ehsdPurchaseFlow.connStart(purchase);
+
+        return purchase.getId();
+    }
+
+    /**
+     * 结束流程
+     */
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        //通过业务ID查询采购数据
+        EhsdPurchase purchase = ehsdPurchaseService.getById(businessId);
+        Assert.notEmpty(purchase, "采购单不存在,或已被删除");
+
+        //回滚旧合同的采购数量
+        EhsdPurchaseDto oldPurchase = submitData.toJavaObject(EhsdPurchaseDto.class);
+        List<EhsdPurchaseProduct> purchaseProductList = oldPurchase.getPurchaseProductList();
+
+
+        //调用采购发起流程的结束方法
+        ehsdPurchaseFlow.end(flowId, businessId, submitData);
+
+        Long oldPurchaseId = purchase.getOldPurchaseId();
+
+        //先将当前合同id 以及 当前合同关联数据的合同id 改为临时id
+        long tempId = IdWorker.getId();
+        ehsdPurchaseService.update(q -> q.eq(BaseIdPo::getId, businessId).set(BaseIdPo::getId, tempId));
+        ehsdPurchaseProductService.update(q -> q.eq(EhsdPurchaseProduct::getPurchaseId, businessId).set(EhsdPurchaseProduct::getPurchaseId, tempId));
+        ehsdPurchaseProjectService.update(q -> q.eq(EhsdPurchaseProject::getPurchaseId, businessId).set(EhsdPurchaseProject::getPurchaseId, tempId));
+        ehsdPurchaseArrivalService.update(q -> q.eq(EhsdPurchaseArrival::getPurchaseId, businessId).set(EhsdPurchaseArrival::getPurchaseId, tempId));
+
+
+        //将旧合同的id改为新合同id
+        ehsdPurchaseService.update(q -> q
+                .eq(BaseIdPo::getId, oldPurchaseId)
+                .set(BaseIdPo::getId, businessId)
+                .set(EhsdPurchase::getOldPurchaseId,oldPurchaseId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+        ehsdPurchaseProductService.update(q -> q
+                .eq(EhsdPurchaseProduct::getPurchaseId, oldPurchaseId)
+                .set(EhsdPurchaseProduct::getPurchaseId, businessId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+        ehsdPurchaseProjectService.update(q -> q
+                .eq(EhsdPurchaseProject::getPurchaseId, oldPurchaseId)
+                .set(EhsdPurchaseProject::getPurchaseId, businessId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+        ehsdPurchaseArrivalService.update(q -> q
+                .eq(EhsdPurchaseArrival::getPurchaseId, oldPurchaseId)
+                .set(EhsdPurchaseArrival::getPurchaseId, businessId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+        //将新合同id改为旧合同id
+        ehsdPurchaseService.update(q -> q
+                .eq(BaseIdPo::getId, tempId)
+                .set(BaseIdPo::getId, oldPurchaseId)
+                .set(EhsdPurchase::getOldPurchaseId,businessId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+        ehsdPurchaseProductService.update(q -> q
+                .eq(EhsdPurchaseProduct::getPurchaseId, tempId)
+                .set(EhsdPurchaseProduct::getPurchaseId, oldPurchaseId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+        ehsdPurchaseProjectService.update(q -> q
+                .eq(EhsdPurchaseProject::getPurchaseId, tempId)
+                .set(EhsdPurchaseProject::getPurchaseId, oldPurchaseId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+        ehsdPurchaseArrivalService.update(q -> q
+                .eq(EhsdPurchaseArrival::getPurchaseId, tempId)
+                .set(EhsdPurchaseArrival::getPurchaseId, oldPurchaseId)
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+    }
+
+}

+ 9 - 0
hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/EhsdPurchaseServiceImpl.java

@@ -104,9 +104,18 @@ public class EhsdPurchaseServiceImpl extends ServiceImpl<EhsdPurchaseMapper, Ehs
         }
         Page<EhsdPurchaseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<EhsdPurchaseVo> records = page.getRecords();
+        if(ObjectUtils.isEmpty(records)){
+            return page;
+        }
         //  赋值流程id
         flowExampleService.setFlowId(records, EhsdPurchaseVo::setFlowId);
 
+        //赋值以付款金额
+        List<Long> pids = records.stream().map(EhsdPurchaseVo::getId).collect(Collectors.toList());
+        List<PayDetailVo> payDetailVoList = payDetailService.getSumMoneyByPurchaseIds(pids);
+        Map<Long, BigDecimal> payMap = payDetailVoList.stream().collect(Collectors.toMap(PayDetailVo::getPurchaseId, PayDetailVo::getSumMoney));
+        records.forEach(item->item.setSumPayMoney(payMap.getOrDefault(item.getId(),BigDecimal.ZERO)));
+
         return page;
     }