|
@@ -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());
|
|
|
|
|
|
}
|
|
|
|