|
@@ -3,28 +3,43 @@ package com.fjhx.sale.flow;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
+import com.fjhx.common.entity.AvailableStockBo;
|
|
import com.fjhx.common.enums.FlowStatusEnum1;
|
|
import com.fjhx.common.enums.FlowStatusEnum1;
|
|
import com.fjhx.common.utils.Assert;
|
|
import com.fjhx.common.utils.Assert;
|
|
import com.fjhx.common.utils.Utils;
|
|
import com.fjhx.common.utils.Utils;
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
import com.fjhx.flow.core.FlowDelegate;
|
|
import com.fjhx.flow.core.FlowDelegate;
|
|
import com.fjhx.flow.enums.FlowStatusEnum;
|
|
import com.fjhx.flow.enums.FlowStatusEnum;
|
|
|
|
+import com.fjhx.item.enums.ProductAvailableRecordType;
|
|
|
|
+import com.fjhx.item.service.product.ProductInfoService;
|
|
|
|
+import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
|
|
|
|
+import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
|
|
|
|
+import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
|
|
+import com.fjhx.sale.entity.contract.dto.ContractProductDto;
|
|
import com.fjhx.sale.entity.contract.po.Contract;
|
|
import com.fjhx.sale.entity.contract.po.Contract;
|
|
import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
|
|
+import com.fjhx.sale.entity.contract.po.ContractProductBom;
|
|
import com.fjhx.sale.entity.contract.po.ContractProject;
|
|
import com.fjhx.sale.entity.contract.po.ContractProject;
|
|
|
|
+import com.fjhx.sale.entity.contract.vo.ContractProductBomVo;
|
|
|
|
+import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProduct;
|
|
|
|
+import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
|
|
|
|
+import com.fjhx.sale.mapper.purchase.EhsdPurchaseProductMapper;
|
|
|
|
+import com.fjhx.sale.service.contract.ContractProductBomService;
|
|
import com.fjhx.sale.service.contract.ContractProductService;
|
|
import com.fjhx.sale.service.contract.ContractProductService;
|
|
import com.fjhx.sale.service.contract.ContractProjectService;
|
|
import com.fjhx.sale.service.contract.ContractProjectService;
|
|
import com.fjhx.sale.service.contract.ContractService;
|
|
import com.fjhx.sale.service.contract.ContractService;
|
|
|
|
+import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
|
|
import com.ruoyi.common.core.domain.BasePo;
|
|
import com.ruoyi.common.core.domain.BasePo;
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
|
-import java.util.List;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -41,9 +56,18 @@ public class ContractUpdateFlow extends FlowDelegate {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private ContractProductService contractProductService;
|
|
private ContractProductService contractProductService;
|
|
-
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private ContractProductBomService contractProductBomService;
|
|
@Autowired
|
|
@Autowired
|
|
private ContractProjectService contractProjectService;
|
|
private ContractProjectService contractProjectService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private EhsdPurchaseProductService ehsdPurchaseProductService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private EhsdPurchaseProductMapper ehsdPurchaseProductMapper;
|
|
|
|
+ @Autowired
|
|
|
|
+ private SubscribeDetailService subscribeDetailService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public String getFlowKey() {
|
|
public String getFlowKey() {
|
|
@@ -56,8 +80,11 @@ public class ContractUpdateFlow extends FlowDelegate {
|
|
@Override
|
|
@Override
|
|
public Long start(Long flowId, JSONObject submitData) {
|
|
public Long start(Long flowId, JSONObject submitData) {
|
|
ContractDto contract = submitData.toJavaObject(ContractDto.class);
|
|
ContractDto contract = submitData.toJavaObject(ContractDto.class);
|
|
- //清理ID字段防止误传
|
|
|
|
|
|
+ Assert.notEmpty(contract.getId(), "原销售订单id不能为空");
|
|
|
|
+ //赋值原采购id 并 清空id
|
|
|
|
+ contract.setOldContractId(contract.getId());
|
|
contract.setId(null);
|
|
contract.setId(null);
|
|
|
|
+
|
|
//赋值流程id
|
|
//赋值流程id
|
|
contract.setFlowId(flowId);
|
|
contract.setFlowId(flowId);
|
|
|
|
|
|
@@ -79,8 +106,29 @@ public class ContractUpdateFlow extends FlowDelegate {
|
|
contract.setCode(Utils.getNewCode(oldContract.getCode()));
|
|
contract.setCode(Utils.getNewCode(oldContract.getCode()));
|
|
contract.setIsShow(1);//隐藏当前数据
|
|
contract.setIsShow(1);//隐藏当前数据
|
|
|
|
|
|
|
|
+ //清理明细id
|
|
|
|
+ List<ContractProductDto> contractProductList = contract.getContractProductList();
|
|
|
|
+ List<ContractProject> contractProjectList = contract.getContractProjectList();
|
|
|
|
+
|
|
|
|
+ //防止空指针
|
|
|
|
+ contractProductList = ObjectUtils.isEmpty(contractProductList) ? new ArrayList<>() : contractProductList;
|
|
|
|
+ contractProjectList = ObjectUtils.isEmpty(contractProjectList) ? new ArrayList<>() : contractProjectList;
|
|
|
|
+
|
|
|
|
+ //清空bomId
|
|
|
|
+ for (ContractProductDto contractProductDto : contractProductList) {
|
|
|
|
+ List<ContractProductBom> contractProductBomList = contractProductDto.getContractProductBomList();
|
|
|
|
+ contractProductBomList = ObjectUtils.isEmpty(contractProductBomList) ? new ArrayList<>() : contractProductBomList;
|
|
|
|
+ contractProductBomList.forEach(item -> item.setId(null));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //清空id
|
|
|
|
+ contractProductList.forEach(item -> item.setId(null));
|
|
|
|
+ contractProjectList.forEach(item -> item.setId(null));
|
|
|
|
+
|
|
|
|
+
|
|
//调用合同发起通用代码
|
|
//调用合同发起通用代码
|
|
- return contractFlow.start(contract);
|
|
|
|
|
|
+ Long start = contractFlow.start(contract);
|
|
|
|
+ return start;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -88,11 +136,31 @@ public class ContractUpdateFlow extends FlowDelegate {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void end(Long flowId, Long businessId, JSONObject submitData) {
|
|
public void end(Long flowId, Long businessId, JSONObject submitData) {
|
|
|
|
+
|
|
// 通过业务ID查询合同数据
|
|
// 通过业务ID查询合同数据
|
|
Contract newContract = contractService.getById(businessId);
|
|
Contract newContract = contractService.getById(businessId);
|
|
Long oldContractId = newContract.getOldContractId();
|
|
Long oldContractId = newContract.getOldContractId();
|
|
|
|
+
|
|
|
|
+
|
|
Contract oldContract = contractService.getById(oldContractId);
|
|
Contract oldContract = contractService.getById(oldContractId);
|
|
|
|
|
|
|
|
+ //修改采购状态为审批通过
|
|
|
|
+ newContract.setStatus(PurchaseStatusEnum.PASS.getKey());
|
|
|
|
+ newContract.setApprovedDate(new Date());
|
|
|
|
+ contractService.updateById(newContract);
|
|
|
|
+
|
|
|
|
+ //原合同改为 已变更
|
|
|
|
+ oldContract.setStatus(FlowStatusEnum1.UPDATE.getKey());
|
|
|
|
+ contractService.updateById(oldContract);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //----------修改可用库存---------
|
|
|
|
+ if (Objects.equals(1, oldContract.getOrderDistributeStatus())) {
|
|
|
|
+
|
|
|
|
+ editAvailableStock(oldContract, oldContractId, businessId);
|
|
|
|
+ }
|
|
|
|
+ //-----------------
|
|
|
|
+
|
|
//替换新数据ID为临时ID
|
|
//替换新数据ID为临时ID
|
|
long temNewId = IdWorker.getId();
|
|
long temNewId = IdWorker.getId();
|
|
Contract temNewUpContract = new Contract();
|
|
Contract temNewUpContract = new Contract();
|
|
@@ -155,6 +223,111 @@ public class ContractUpdateFlow extends FlowDelegate {
|
|
contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId, businessId).in(ContractProject::getId, oldContractProjectIds));
|
|
contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId, businessId).in(ContractProject::getId, oldContractProjectIds));
|
|
}
|
|
}
|
|
ObsFileUtil.exchangeBusinessId(oldContractId, businessId);
|
|
ObsFileUtil.exchangeBusinessId(oldContractId, businessId);
|
|
|
|
+
|
|
|
|
+ throw new ServiceException("111111111111111111");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ void editAvailableStock(Contract oldContract, Long oldContractId, Long businessId) {
|
|
|
|
+ //---------------------------------------------------------------
|
|
|
|
+ List<ContractProductBomVo> oldProductBomListSum = contractProductBomService.getContractProductBomQuantitySum(oldContractId);
|
|
|
|
+
|
|
|
|
+ //获取新合同物料数量Map
|
|
|
|
+ List<ContractProductBomVo> contractProductBomQuantitySum = contractProductBomService.getContractProductBomQuantitySum(businessId);
|
|
|
|
+ Map<Long, BigDecimal> newQuantityMap = contractProductBomQuantitySum.stream().collect(Collectors.toMap(ContractProductBom::getMaterialId, ContractProductBom::getQuantity));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ List<AvailableStockBo> availableStockBoList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ //获取原合同已采购数量
|
|
|
|
+ List<EhsdPurchaseProductVo> purchaseQuantitySumByContractId = ehsdPurchaseProductMapper.getPurchaseQuantitySumByContractId(oldContractId);
|
|
|
|
+ Map<Long, BigDecimal> collect = purchaseQuantitySumByContractId.stream().collect(Collectors.toMap(EhsdPurchaseProduct::getProductId, EhsdPurchaseProduct::getQuantity));
|
|
|
|
+
|
|
|
|
+ //旧数据处理
|
|
|
|
+ for (ContractProductBomVo oldContractProductBom : oldProductBomListSum) {
|
|
|
|
+ Long materialId = oldContractProductBom.getMaterialId();
|
|
|
|
+
|
|
|
|
+ //新数量
|
|
|
|
+ BigDecimal newQuantity = newQuantityMap.get(materialId);
|
|
|
|
+ //已采购数量
|
|
|
|
+ BigDecimal purchaseQuantity = collect.getOrDefault(materialId, BigDecimal.ZERO);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //生成操作可用库存的实体
|
|
|
|
+ AvailableStockBo availableStockBo = new AvailableStockBo();
|
|
|
|
+ availableStockBo.setProductId(materialId);
|
|
|
|
+ availableStockBo.setQuantity(oldContractProductBom.getQuantity());
|
|
|
|
+ availableStockBo.setNewQuantity(newQuantity);
|
|
|
|
+ availableStockBo.setInStockQuantity(purchaseQuantity);
|
|
|
|
+
|
|
|
|
+ availableStockBoList.add(availableStockBo);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //操作待采购数据
|
|
|
|
+ SubscribeDetail subscribeDetail = subscribeDetailService.getOne(q -> q.eq(SubscribeDetail::getContractId, oldContractId)
|
|
|
|
+ .eq(SubscribeDetail::getProductId, materialId)
|
|
|
|
+ );
|
|
|
|
+ if (ObjectUtils.isEmpty(newQuantity)) {
|
|
|
|
+ //原数据被删,检查已采购数量
|
|
|
|
+ if (ObjectUtils.isEmpty(purchaseQuantity)) {
|
|
|
|
+ subscribeDetailService.removeById(subscribeDetail);
|
|
|
|
+ } else {
|
|
|
|
+ subscribeDetailService.update(q -> q
|
|
|
|
+ .eq(SubscribeDetail::getContractId, oldContractId)
|
|
|
|
+ .eq(SubscribeDetail::getProductId, materialId)
|
|
|
|
+ .set(SubscribeDetail::getCount, BigDecimal.ZERO)
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ subscribeDetail.setCount(newQuantity);
|
|
|
|
+
|
|
|
|
+ //计算状态
|
|
|
|
+ int status = purchaseQuantity.compareTo(newQuantity) >= 0 ? 20 : 30;
|
|
|
|
+ if (purchaseQuantity.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
+ status = 15;
|
|
|
|
+ }
|
|
|
|
+ subscribeDetail.setStatus(status);
|
|
|
|
+ subscribeDetailService.updateById(subscribeDetail);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //新添加的数据处理
|
|
|
|
+ Map<Long, BigDecimal> oldQuantityMap = oldProductBomListSum.stream().collect(Collectors.toMap(ContractProductBom::getMaterialId, ContractProductBom::getQuantity));
|
|
|
|
+ for (ContractProductBomVo newPurchaseProduct : contractProductBomQuantitySum) {
|
|
|
|
+ Long materialId = newPurchaseProduct.getMaterialId();
|
|
|
|
+
|
|
|
|
+ BigDecimal bigDecimal = oldQuantityMap.get(materialId);
|
|
|
|
+ //忽略掉变更前有的物料
|
|
|
|
+ if (ObjectUtils.isNotEmpty(bigDecimal)) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //生成操作可用库存的实体
|
|
|
|
+ AvailableStockBo availableStockBo = new AvailableStockBo();
|
|
|
|
+ availableStockBo.setProductId(materialId);
|
|
|
|
+ availableStockBo.setQuantity(null);
|
|
|
|
+ availableStockBo.setNewQuantity(newPurchaseProduct.getQuantity());
|
|
|
|
+ availableStockBo.setInStockQuantity(null);
|
|
|
|
+ availableStockBoList.add(availableStockBo);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //生成待采购
|
|
|
|
+ SubscribeDetail subscribeDetail = new SubscribeDetail();
|
|
|
|
+ subscribeDetail.setProductId(materialId);
|
|
|
|
+ subscribeDetail.setCount(newPurchaseProduct.getQuantity());
|
|
|
|
+ subscribeDetail.setStatus(15);//待采购
|
|
|
|
+ subscribeDetail.setContractId(oldContractId);
|
|
|
|
+ subscribeDetail.setDataType(1);
|
|
|
|
+ subscribeDetail.setCompanyId(oldContract.getCompanyId());
|
|
|
|
+
|
|
|
|
+ subscribeDetailService.save(subscribeDetail);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //修改可用库存
|
|
|
|
+ productInfoService.editAvailableQuantity(availableStockBoList, businessId, ProductAvailableRecordType.SALE_UPDATE, oldContract.getCompanyId());
|
|
|
|
+
|
|
|
|
+ //---------------------------------------------------------------
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|