From 35f74c2abd95e6913180fbccd864915486eecc48 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 28 四月 2026 10:18:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New_pro' into dev_New_pro
---
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java | 103 +++++++++++++++++++++++++++++++++++++--------------
1 files changed, 74 insertions(+), 29 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
index bb56608..31affd2 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -15,6 +15,8 @@
import com.ruoyi.common.constant.StorageAttachmentConstants;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.production.bean.dto.ProductionOrderDto;
+import com.ruoyi.production.bean.vo.ProductionBomStructureVo;
+import com.ruoyi.production.bean.vo.ProductionOrderPickVo;
import com.ruoyi.production.bean.vo.ProductionOrderVo;
import com.ruoyi.production.bean.vo.ProductionPlanVo;
import com.ruoyi.production.enums.ProductOrderStatusEnum;
@@ -23,6 +25,8 @@
import com.ruoyi.production.service.ProductionOrderService;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.StockInventory;
import com.ruoyi.technology.mapper.*;
import com.ruoyi.technology.pojo.*;
import lombok.RequiredArgsConstructor;
@@ -50,6 +54,7 @@
private final ProductionOrderPickMapper productionOrderPickMapper;
private final ProductionOrderPickRecordMapper productionOrderPickRecordMapper;
private final ProductionPlanMapper productionPlanMapper;
+ private final StockInventoryMapper stockInventoryMapper;
private final StorageAttachmentMapper storageAttachmentMapper;
private final StorageBlobMapper storageBlobMapper;
private final SalesLedgerMapper salesLedgerMapper;
@@ -112,11 +117,7 @@
|| productionOrderRoutingMapper.selectCount(Wrappers.<ProductionOrderRouting>lambdaQuery()
.eq(ProductionOrderRouting::getProductionOrderId, productionOrder.getId())) == 0);
if (needSync) {
- // 宸ヨ壓銆佷骇鍝佹垨鏁伴噺鍙樺寲鍚庯紝璁㈠崟蹇収蹇呴』鍜屽綋鍓嶄笅鍗曟暟鎹噸鏂板榻愩��
syncProductionOrderSnapshot(productionOrder.getId());
- } else {
- // 鏈噸寤哄揩鐓ф椂锛屼篃瑕佺‘淇濆鏂欎富鍗曞拰璁㈠崟鏁伴噺淇濇寔鍚屾銆�
- upsertOrderPick(productionOrder);
}
return true;
}
@@ -274,8 +275,6 @@
syncedParamCount++;
}
}
-
- upsertOrderPick(productionOrder);
return syncedParamCount;
}
@@ -551,29 +550,6 @@
return issuedQuantity.compareTo(requiredQuantity) < 0 ? 1 : 2;
}
- private void upsertOrderPick(ProductionOrder productionOrder) {
- if (productionOrder == null || productionOrder.getId() == null) {
- return;
- }
- // 璁㈠崟涓嬭揪鍚庤嚜鍔ㄧ敓鎴愪竴寮犲鏂欎富鍗曪紝鍚庣画棰嗘枡璁板綍閮芥寕鍦ㄨ繖寮犲崟涓娿��
- ProductionOrderPick orderPick = productionOrderPickMapper.selectOne(
- Wrappers.<ProductionOrderPick>lambdaQuery()
- .eq(ProductionOrderPick::getProductionOrderId, productionOrder.getId())
- .last("limit 1"));
- if (orderPick == null) {
- orderPick = new ProductionOrderPick();
- orderPick.setProductionOrderId(productionOrder.getId());
- }
- orderPick.setProductModelId(productionOrder.getProductModelId() == null ? null : Math.toIntExact(productionOrder.getProductModelId()));
- orderPick.setQuantity(defaultDecimal(productionOrder.getQuantity()));
- orderPick.setRemark("涓嬪崟鑷姩鐢熸垚");
- if (orderPick.getId() == null) {
- productionOrderPickMapper.insert(orderPick);
- } else {
- productionOrderPickMapper.updateById(orderPick);
- }
- }
-
private List<Long> parsePlanIds(String productionPlanIds) {
if (productionPlanIds == null || productionPlanIds.trim().isEmpty()) {
return new ArrayList<>();
@@ -677,4 +653,73 @@
vo.setDownloadURL(fileUtil.buildSignedDownloadUrl(vo));
return vo;
}
+
+ @Override
+ public List<ProductionOrderPickVo> pick(Long productionOrderId) {
+ if (productionOrderId == null) {
+ return Collections.emptyList();
+ }
+
+ ProductionOrderBom orderBom = productionOrderBomMapper.selectOne(
+ Wrappers.<ProductionOrderBom>lambdaQuery()
+ .eq(ProductionOrderBom::getProductionOrderId, productionOrderId)
+ .orderByDesc(ProductionOrderBom::getId)
+ .last("limit 1"));
+ if (orderBom == null || orderBom.getId() == null) {
+ return Collections.emptyList();
+ }
+
+ List<ProductionBomStructureVo> bomStructureList = productionBomStructureMapper.pickByBomId(orderBom.getId());
+ if (bomStructureList == null || bomStructureList.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ List<Long> productModelIds = bomStructureList.stream()
+ .map(ProductionBomStructureVo::getProductModelId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+ Map<Long, BigDecimal> stockQuantityMap = new HashMap<>();
+ Map<Long, LinkedHashSet<String>> stockBatchNoMap = new HashMap<>();
+ if (!productModelIds.isEmpty()) {
+ List<StockInventory> stockList = stockInventoryMapper.selectList(
+ Wrappers.<StockInventory>lambdaQuery()
+ .in(StockInventory::getProductModelId, productModelIds));
+ for (StockInventory stockItem : stockList) {
+ if (stockItem == null || stockItem.getProductModelId() == null) {
+ continue;
+ }
+ Long productModelId = stockItem.getProductModelId();
+ stockQuantityMap.merge(productModelId, defaultDecimal(stockItem.getQualitity()), BigDecimal::add);
+ String batchNo = stockItem.getBatchNo();
+ if (batchNo != null && !batchNo.trim().isEmpty()) {
+ stockBatchNoMap.computeIfAbsent(productModelId, key -> new LinkedHashSet<>()).add(batchNo);
+ }
+ }
+ }
+
+ List<ProductionOrderPickVo> result = new ArrayList<>(bomStructureList.size());
+ for (ProductionBomStructureVo structure : bomStructureList) {
+ if (structure == null || structure.getProductModelId() == null) {
+ continue;
+ }
+ Long productModelId = structure.getProductModelId();
+ ProductionOrderPickVo vo = new ProductionOrderPickVo();
+ vo.setProductModelId(productModelId);
+ vo.setOperationName(structure.getOperationName());
+ vo.setTechnologyOperationId(structure.getTechnologyOperationId());
+ vo.setProductName(structure.getProductName());
+ vo.setModel(structure.getModel());
+ vo.setDemandedQuantity(defaultDecimal(structure.getDemandedQuantity()));
+ vo.setUnit(structure.getUnit());
+ List<String> batchNoList = stockBatchNoMap.get(productModelId) == null
+ ? Collections.emptyList()
+ : new ArrayList<>(stockBatchNoMap.get(productModelId));
+ vo.setBatchNoList(batchNoList);
+ vo.setStockQuantity(stockQuantityMap.getOrDefault(productModelId, BigDecimal.ZERO));
+ vo.setBom(true);
+ result.add(vo);
+ }
+ return result;
+ }
}
--
Gitblit v1.9.3