Parcourir la source

下发订单生成物料合并

yzc il y a 1 an
Parent
commit
d297831f80

+ 34 - 13
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProduceOrderServiceImpl.java

@@ -2,12 +2,14 @@ package com.fjhx.mes.service.production.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 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.entity.InOutBo;
 import com.fjhx.common.enums.InOutType;
+import com.fjhx.common.enums.PushBusinessTypeEnum;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.entity.product.po.ProductStockInfo;
@@ -39,18 +41,22 @@ import com.fjhx.sale.entity.contract.po.ContractProductBom;
 import com.fjhx.sale.service.contract.ContractProductBomService;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.socket.core.PushTypeEnum;
+import com.fjhx.socket.core.WebSocketPush;
 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;
 import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 
@@ -221,6 +227,15 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
 
         //创建生产任务
         createOrderDetails(produceOrderDto);
+
+        //消息推送:给归属公司的 子公司总经理
+        String title = String.format("您有新的生产订单,订单号【%s】,请及时跟进。", produceOrderDto.getCode());
+        JSONObject msg = new JSONObject();
+        msg.put("business_id", produceOrderDto.getId());
+        List<Long> generalManagerIds = UserUtil.getUserIdsByRoleKey("subsidiary_gm", companyId);
+        for (Long generalManagerId : generalManagerIds) {
+            WebSocketPush.byUser(PushTypeEnum.MESSAGE, generalManagerId, title, PushBusinessTypeEnum.CONTRACT_PRODUCTION_TAG_UPDATE.getType(), msg.toString());
+        }
     }
 
     /**
@@ -285,8 +300,8 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
         List<Long> cpIds = contractProductList.stream().map(ContractProduct::getId).collect(Collectors.toList());
         Map<Long, List<ContractProductBom>> cpBMap = contractProductBomService.mapKGroup(ContractProductBom::getContractProductId, q -> q.in(ContractProductBom::getContractProductId, cpIds));
 
-        //待采购列表
-        List<SubscribeDetail> subscribeDetailList = new ArrayList<>();
+        //待采购列表<物料id,申购明细>相同物料直接合并
+        Map<Long, SubscribeDetail> subscribeDetailMap = new ConcurrentHashMap<>();
 
         for (ContractProduct contractProduct : contractProductList) {
             //获取物料列表,以及原材料
@@ -337,23 +352,29 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
 
                 //需要采购的数量大于0生成待采购数据
                 if (requiredQuantity.compareTo(BigDecimal.ZERO) > 0) {
-                    SubscribeDetail subscribeDetail = new SubscribeDetail();
-                    subscribeDetail.setProductId(materialId);
-                    subscribeDetail.setCount(requiredQuantity);
-                    subscribeDetail.setStatus(15);//待采购
-                    subscribeDetail.setContractId(contractId);
-                    subscribeDetail.setContractDetailId(contractProduct.getId());
-                    subscribeDetail.setDataType(1);
-                    subscribeDetail.setCompanyId(companyId);
-
-                    subscribeDetailList.add(subscribeDetail);
+                    SubscribeDetail subscribeDetail = subscribeDetailMap.get(materialId);
+                    if (ObjectUtil.isEmpty(subscribeDetail)) {
+                        subscribeDetail = new SubscribeDetail();
+                        subscribeDetail.setProductId(materialId);
+                        subscribeDetail.setCount(BigDecimal.ZERO);
+                        subscribeDetail.setStatus(15);//待采购
+                        subscribeDetail.setContractId(contractId);
+                        subscribeDetail.setDataType(1);
+                        subscribeDetail.setCompanyId(companyId);
+                    }
+                    //合并待采购数量
+                    BigDecimal count = subscribeDetail.getCount();
+                    subscribeDetail.setCount(count.add(requiredQuantity));
+
+                    //添加到Map里
+                    subscribeDetailMap.put(materialId, subscribeDetail);
                 }
 
             }
 
         }
         //保存待采购明细
-        subscribeDetailService.saveBatch(subscribeDetailList);
+        subscribeDetailService.saveBatch(subscribeDetailMap.values());
 
     }
 

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

@@ -2727,7 +2727,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             }
         }
         String collect = arr.stream().collect(Collectors.joining(","));
-        //消息推送 给归属公司的 子公司总经理
+        //消息推送给归属公司的 子公司总经理
         String title = String.format("合同【%s】发生生产标签变更,变更如下:%s", contract.getCode(), collect);
         JSONObject msg = new JSONObject();
         msg.put("business_id", dto.getId());

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/service/sale/impl/SaleQuotationServiceImpl.java

@@ -216,7 +216,7 @@ public class SaleQuotationServiceImpl extends ServiceImpl<SaleQuotationMapper, S
         saleQuotationDto.setQuotationStatus(0);//报价状态未报价
         saveOrEdit(saleQuotationDto);
 
-        //消息推送 给归属公司的 子公司总经理
+        //消息推送给归属公司的 子公司总经理
         JSONObject msg = new JSONObject();
         msg.put("business_id", saleQuotationDto.getId());
         List<Long> generalManagerIds = UserUtil.getUserIdsByRoleKey("subsidiary_gm", saleQuotationDto.getCompanyId());