Prechádzať zdrojové kódy

销售合同变更问题处理

yzc 1 rok pred
rodič
commit
df62d12960

+ 92 - 66
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProduceOrderServiceImpl.java

@@ -14,7 +14,6 @@ import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.enums.ProductAvailableRecordType;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.MaterialBalanceBo;
-import com.fjhx.mes.entity.material.po.MaterialPreparation;
 import com.fjhx.mes.entity.production.dto.ProduceOrderSelectDto;
 import com.fjhx.mes.entity.production.dto.ProductionOrderDto;
 import com.fjhx.mes.entity.production.po.ProductionOrder;
@@ -58,6 +57,7 @@ import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
@@ -551,6 +551,40 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
         Contract contract = contractService.getById(contractId);
         Assert.notEmpty(contract, "查询不到合同信息!");
 
+        //============刷新生产任务明细关联的合同产品id=============
+        List<ProductionOrderDetail> tempProdTaskList = new ArrayList<>();
+
+        List<ProductionOrderDetail> prodTaskList = produceOrderDetailService.list(q -> q
+                .eq(ProductionOrderDetail::getProduceOrderId, orderDtoId)
+        );
+        for (ProductionOrderDetail prodTask : prodTaskList) {
+            Long tempOldId = prodTask.getContractDetailId();
+            //遍历出最新一版id
+            int recursion = 0;
+            while (ObjectUtil.isNotEmpty(tempOldId)) {
+                recursion++;
+                Long finalTempOldId = tempOldId;
+                ContractProduct cp = contractProductService.getOne(q -> q.eq(ContractProduct::getOldContractProductId, finalTempOldId));
+                if (ObjectUtil.isEmpty(cp)) {
+                    prodTask.setContractDetailId(tempOldId);
+                    break;
+                }
+                tempOldId = cp.getId();
+
+                //递归超过50次,报错防止死循环
+                if (recursion > 50) {
+                    throw new ServiceException("数据异常,请联系管理员!");
+                }
+            }
+
+            ProductionOrderDetail tempTask = new ProductionOrderDetail();
+            tempTask.setId(prodTask.getId());
+            tempTask.setContractDetailId(prodTask.getContractDetailId());
+            tempProdTaskList.add(tempTask);
+        }
+        produceOrderDetailService.updateBatchById(tempProdTaskList);
+        //===================================================
+
         //创建生产订单明细
         List<ProductionOrderDetail> productionOrderDetailList = new ArrayList<>();
         List<ContractProduct> contractProductList = contractProductService.list(q -> q.eq(ContractProduct::getContractId, contractId));
@@ -635,60 +669,60 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
         productionTaskProgressService.saveOrUpdateBatch(productionTaskProgressList);
     }
 
-    /**
-     * 创建生产备料
-     */
-    private synchronized void createMaterialPreparation(ProductionOrder productionOrder) {
-        Long contractId = productionOrder.getContractId();
-        Long companyId = productionOrder.getCompanyId();
-        //创建生产备料
-        List<ProductionOrderDetail> productionOrderDetailList = produceOrderDetailService.list(q -> q
-                .eq(ProductionOrderDetail::getProduceOrderId, productionOrder.getId())
-        );
-        //获取合同产品ids
-        List<Long> cpIds = productionOrderDetailList.stream()
-                .map(ProductionOrderDetail::getContractDetailId).collect(Collectors.toList());
-        Map<Long, List<ContractProductBom>> cpBMap = contractProductBomService.mapKGroup(ContractProductBom::getContractProductId,
-                q -> q.in(ContractProductBom::getContractProductId, cpIds)
-        );
-
-        //获取产品id
-        for (ProductionOrderDetail productionOrderDetail : productionOrderDetailList) {
-            productionOrderDetail.setProduceStatus(1);
-            //创建备料
-            List<ContractProductBom> contractProductBomList = cpBMap.get(productionOrderDetail.getContractDetailId());
-
-            List<MaterialPreparation> materialPreparationList = new ArrayList<>();
-            for (ContractProductBom bomDetail : contractProductBomList) {
-                BigDecimal multiply = bomDetail.getQuantity().multiply(productionOrderDetail.getQuantity());
-
-                MaterialPreparation materialPreparation = materialPreparationService.getOne(q -> q
-                        .eq(MaterialPreparation::getProductionOrderDetailId, productionOrderDetail.getId())
-                        .eq(MaterialPreparation::getMaterialId, bomDetail.getMaterialId())
-                );
-
-                if (ObjectUtil.isEmpty(materialPreparation)) {
-                    materialPreparation = new MaterialPreparation();
-                    materialPreparation.setStatus(0);
-                } else {
-                    if (materialPreparation.getQuantity().compareTo(multiply) != 0 && materialPreparation.getStatus() == 1) {
-                        materialPreparation.setStatus(0);
-                    }
-                }
-                materialPreparation.setContractId(contractId);
-                materialPreparation.setContractDetailId(productionOrderDetail.getContractDetailId());
-                materialPreparation.setProductionOrderId(productionOrder.getId());
-                materialPreparation.setProductionOrderDetailId(productionOrderDetail.getId());
-                materialPreparation.setMaterialId(bomDetail.getMaterialId());
-                materialPreparation.setQuantity(multiply);
-                materialPreparation.setCompanyId(companyId);
-                materialPreparationList.add(materialPreparation);
-            }
-            materialPreparationService.saveOrUpdateBatch(materialPreparationList);
-        }
-
-        produceOrderDetailService.updateBatchById(productionOrderDetailList);
-    }
+//    /**
+//     * 创建生产备料
+//     */
+//    private synchronized void createMaterialPreparation(ProductionOrder productionOrder) {
+//        Long contractId = productionOrder.getContractId();
+//        Long companyId = productionOrder.getCompanyId();
+//        //创建生产备料
+//        List<ProductionOrderDetail> productionOrderDetailList = produceOrderDetailService.list(q -> q
+//                .eq(ProductionOrderDetail::getProduceOrderId, productionOrder.getId())
+//        );
+//        //获取合同产品ids
+//        List<Long> cpIds = productionOrderDetailList.stream()
+//                .map(ProductionOrderDetail::getContractDetailId).collect(Collectors.toList());
+//        Map<Long, List<ContractProductBom>> cpBMap = contractProductBomService.mapKGroup(ContractProductBom::getContractProductId,
+//                q -> q.in(ContractProductBom::getContractProductId, cpIds)
+//        );
+//
+//        //获取产品id
+//        for (ProductionOrderDetail productionOrderDetail : productionOrderDetailList) {
+//            productionOrderDetail.setProduceStatus(1);
+//            //创建备料
+//            List<ContractProductBom> contractProductBomList = cpBMap.get(productionOrderDetail.getContractDetailId());
+//
+//            List<MaterialPreparation> materialPreparationList = new ArrayList<>();
+//            for (ContractProductBom bomDetail : contractProductBomList) {
+//                BigDecimal multiply = bomDetail.getQuantity().multiply(productionOrderDetail.getQuantity());
+//
+//                MaterialPreparation materialPreparation = materialPreparationService.getOne(q -> q
+//                        .eq(MaterialPreparation::getProductionOrderDetailId, productionOrderDetail.getId())
+//                        .eq(MaterialPreparation::getMaterialId, bomDetail.getMaterialId())
+//                );
+//
+//                if (ObjectUtil.isEmpty(materialPreparation)) {
+//                    materialPreparation = new MaterialPreparation();
+//                    materialPreparation.setStatus(0);
+//                } else {
+//                    if (materialPreparation.getQuantity().compareTo(multiply) != 0 && materialPreparation.getStatus() == 1) {
+//                        materialPreparation.setStatus(0);
+//                    }
+//                }
+//                materialPreparation.setContractId(contractId);
+//                materialPreparation.setContractDetailId(productionOrderDetail.getContractDetailId());
+//                materialPreparation.setProductionOrderId(productionOrder.getId());
+//                materialPreparation.setProductionOrderDetailId(productionOrderDetail.getId());
+//                materialPreparation.setMaterialId(bomDetail.getMaterialId());
+//                materialPreparation.setQuantity(multiply);
+//                materialPreparation.setCompanyId(companyId);
+//                materialPreparationList.add(materialPreparation);
+//            }
+//            materialPreparationService.saveOrUpdateBatch(materialPreparationList);
+//        }
+//
+//        produceOrderDetailService.updateBatchById(productionOrderDetailList);
+//    }
 
     @DSTransactional
     @Override
@@ -717,24 +751,16 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
             WebSocketPush.byUser(PushTypeEnum.MESSAGE, productionOrder.getCreateUser(), title, PushBusinessTypeEnum.PRODUCTION_ORDER_REJECT.getType(), msg.toString());
         } else {
             if (produceOrderDetailService.count(q -> q.eq(ProductionOrderDetail::getProduceOrderId, dto.getId())) > 0) {
-                //创建待采购
-                createMaterialWaitPurchase(productionOrder);
-            } else {
                 //修改待采购
                 updateMaterialWaitPurchase(productionOrder.getContractId());
+            } else {
+                //创建待采购
+                createMaterialWaitPurchase(productionOrder);
             }
 
             //创建生产任务
             createOrderDetails(productionOrder);
 
-//            //投产
-//            if (ObjectUtil.isNotEmpty(productionOrder.getProduceTime())) {
-//                throw new ServiceException("该订单已投产,请勿重复投产!!");
-//            }
-
-            //生成待备料
-            createMaterialPreparation(productionOrder);
-
             //生成待出库
             createStockWait(productionOrder);
 

+ 5 - 1
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionReportingServiceImpl.java

@@ -225,13 +225,17 @@ public class ProductionReportingServiceImpl extends ServiceImpl<ProductionReport
             }
             produceOrderDetailService.updateById(productionOrderDetail);
 
+            ProductionOrder productionOrder = produceOrderService.getById(productionOrderDetail.getProduceOrderId());
+
             //添加一条完工入库类型的待入库数据
             StockWait stockWait = new StockWait();
             stockWait.setType(1);
             stockWait.setBusinessType(JournalType.COMPLETION_IN.getDetailType());
-            stockWait.setBusinessId(productionOrderDetail.getId());
+            stockWait.setBusinessId(productionOrder.getId());
+            stockWait.setBusinessCode(productionOrder.getCode());
             stockWait.setStatus(0);
             stockWait.setCompanyId(SecurityUtils.getCompanyId());
+            stockWait.setProdOrderId(productionOrder.getId());
             stockWaitService.save(stockWait);
             StockWaitDetails stockWaitDetails = new StockWaitDetails();
             stockWaitDetails.setStockWaitId(stockWait.getId());

+ 2 - 3
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
-import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
@@ -119,8 +118,8 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
 
         wrapper.orderByDesc("t2", SubscribeDetail::getCreateTime);
 
-        //过滤作废的数据
-        wrapper.ne("t2", SubscribeDetail::getStatus, FlowStatusEnum1.CANCELLATION.getKey());
+//        //过滤作废的数据
+//        wrapper.ne("t2", SubscribeDetail::getStatus, FlowStatusEnum1.CANCELLATION.getKey());
 
         //如果是待采购页面
         if (ObjectUtil.equals(dto.getIsWaitPurchase(), 1)) {

+ 34 - 23
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProduct.java

@@ -77,13 +77,41 @@ public class ContractProduct extends BasePo {
      */
     private String tradeMethod;
 
-
     /**
      * 生产源文件地址
      */
     private String prodFilePath;
 
     /**
+     * 产品长
+     */
+    private BigDecimal productLength;
+    /**
+     * 产品宽
+     */
+    private BigDecimal productWidth;
+    /**
+     * 产品高
+     */
+    private BigDecimal productHeight;
+
+    /**
+     * 报价单商品表id
+     */
+    private Long quotationProductId;
+
+    /**
+     * 出厂价
+     */
+    private BigDecimal factoryPrice;
+
+    /**
+     * 上一版本合同产品id
+     */
+    private Long oldContractProductId;
+
+    //==========================================================================================================
+    /**
      * 附件列表
      */
     @TableField(exist = false)
@@ -125,27 +153,10 @@ public class ContractProduct extends BasePo {
     @TableField(exist = false)
     private String productUnit;
 
-    /**
-     * 产品长
-     */
-    private BigDecimal productLength;
-    /**
-     * 产品宽
-     */
-    private BigDecimal productWidth;
-	/**
-	 * 产品高
-	 */
-	private BigDecimal productHeight;
-
-	/**
-	 * 报价单商品表id
-	 */
-	private Long quotationProductId;
-
-	/**
-	 * 出场价
-	 */
-	private BigDecimal factoryPrice;
+    @TableField(exist = false)
+    private String productClassifyName;
+
+    @TableField(exist = false)
+    private Long productClassifyId;
 
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProductBom.java

@@ -90,4 +90,9 @@ public class ContractProductBom extends BasePo {
      */
     private Long quotationProductBomId;
 
+    /**
+     * 原BOMId
+     */
+    private Long oldContractProductBomId;
+
 }

+ 6 - 14
hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java

@@ -11,9 +11,7 @@ import com.fjhx.common.utils.Utils;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.flow.enums.FlowStatusEnum;
-import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
-import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractProductDto;
 import com.fjhx.sale.entity.contract.po.Contract;
@@ -21,7 +19,6 @@ 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.mapper.contract.ContractMapper;
-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.ContractProjectService;
@@ -45,10 +42,8 @@ public class ContractUpdateFlow extends FlowDelegate {
 
     @Autowired
     private ContractFlow contractFlow;
-
     @Autowired
     private ContractService contractService;
-
     @Autowired
     private ContractProductService contractProductService;
     @Autowired
@@ -56,12 +51,6 @@ public class ContractUpdateFlow extends FlowDelegate {
     @Autowired
     private ContractProjectService contractProjectService;
     @Autowired
-    private ProductInfoService productInfoService;
-    @Autowired
-    private EhsdPurchaseProductMapper ehsdPurchaseProductMapper;
-    @Autowired
-    private SubscribeDetailService subscribeDetailService;
-    @Autowired
     private ContractMapper contractMapper;
 
     @Override
@@ -111,14 +100,18 @@ public class ContractUpdateFlow extends FlowDelegate {
 
         //清空bomId
         for (ContractProductDto contractProductDto : contractProductList) {
+            contractProductDto.setOldContractProductId(contractProductDto.getId());
             contractProductDto.setId(null);
 
             List<ContractProductBom> contractProductBomList = contractProductDto.getContractProductBomList();
             contractProductBomList = ObjectUtils.isEmpty(contractProductBomList) ? new ArrayList<>() : contractProductBomList;
-            contractProductBomList.forEach(item -> item.setId(null));
+            for (ContractProductBom contractProductBom : contractProductBomList) {
+                contractProductBom.setOldContractProductBomId(contractProductBom.getId());
+                contractProductBom.setId(null);
+            }
         }
 
-        //清空id
+        //清空收费项目id
         contractProjectList.forEach(item -> item.setId(null));
 
 
@@ -233,7 +226,6 @@ public class ContractUpdateFlow extends FlowDelegate {
             contractProjectService.update(Wrappers.<ContractProject>update().lambda().set(ContractProject::getContractId, businessId).in(ContractProject::getId, oldContractProjectIds));
         }
         ObsFileUtil.exchangeBusinessId(oldContractId, businessId);
-
     }
 
     /**

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -14,6 +14,7 @@ import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -28,6 +29,7 @@ import java.util.Map;
  * @author
  * @since 2023-04-17
  */
+@Mapper
 public interface ContractMapper extends BaseMapper<Contract> {
 
     /**

+ 13 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -1249,6 +1249,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             cp.setContractProductBomList(cpbMap.get(cp.getId()));
         }
 
+
         productInfoService.attributeAssign(contractProductVos, ContractProduct::getProductId, (item, product) -> {
             item.setProductCnName(product.getName());
             item.setProductCode(product.getCustomCode());
@@ -1258,7 +1259,19 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             item.setProductWidth(product.getWidth());
             item.setProductHeight(product.getHeight());
             item.setProductColor(product.getColor());
+
+
+            item.setProductNetWeight(product.getNetWeight());
+            item.setProductFrontalTexture(product.getFrontalTexture());
+            item.setProductReverseTexture(product.getReverseTexture());
+            item.setProductClassifyId(product.getProductClassifyId());
         });
+
+        //赋值产品分类
+        productClassifyService.attributeAssign(contractProductVos, ContractProduct::getProductClassifyId, (item, productClassify) -> {
+            item.setProductClassifyName(productClassify.getName());
+        });
+
         //重新赋值待采购数量
         List<EhsdPurchaseProduct> purchaseProducts = ehsdPurchaseProductService.getPurchaseProductByContractProductIds(contractProductIds);
         if (ObjectUtil.isNotEmpty(purchaseProducts)) {

+ 1 - 0
hx-wms/src/main/resources/mapper/stock/StockWaitMapper.xml

@@ -36,6 +36,7 @@
                sw.update_user,
                sw.update_time,
                sw.company_id,
+               sw.contract_id,
                p.purchase_user_id                                                as purchaseUserId,
                p.warehouse_id                                                    as warehouseId,
                (SELECT w.keeper_id FROM warehouse w WHERE p.warehouse_id = w.id) as inOutUserId,