From 0989ec1e6b465141f99ed67e40fa2a0b928dce94 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 29 四月 2026 16:54:51 +0800
Subject: [PATCH] feat(production): 新增生产核算和生产工单功能模块 - 添加生产核算控制器、服务接口及实现类 - 实现生产核算分页查询和工人生产工资信息查询功能 - 添加生产工单控制器、服务接口及实现类 - 实现生产工单的增删改查和状态统计功能 - 集成工单流转卡下载和二维码生成功能 - 添加工单相关的数据传输对象和值对象 - 实现工单与用户关联的分配功能 - 完善工单附件图片处理和展示功能
---
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java | 49 ++++++++++++++++++++++++++++++-------------------
1 files changed, 30 insertions(+), 19 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 31affd2..f994bb6 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -242,7 +242,7 @@
productionOrderRoutingOperationMapper.insert(targetOperation);
ProductionOperationTask task = new ProductionOperationTask();
- task.setTechnologyRoutingOperationId(targetOperation.getId());
+ task.setProductionOrderRoutingOperationId(targetOperation.getId());
task.setProductionOrderId(productionOrder.getId());
task.setPlanQuantity(defaultDecimal(productionOrder.getQuantity()));
task.setCompleteQuantity(BigDecimal.ZERO);
@@ -450,6 +450,12 @@
if (productionPlans.size() != planIds.size()) {
throw new ServiceException("閮ㄥ垎鐢熶骇璁″垝涓嶅瓨鍦�");
}
+ Map<Long, ProductionPlan> planMap = productionPlans.stream()
+ .collect(Collectors.toMap(ProductionPlan::getId, item -> item, (left, right) -> left));
+ ProductionPlan mainPlan = planMap.get(planIds.get(0));
+ if (mainPlan == null) {
+ throw new ServiceException("涓荤敓浜ц鍒掍笉瀛樺湪");
+ }
Set<Long> productModelIds = productionPlans.stream()
.map(ProductionPlan::getProductModelId)
.collect(Collectors.toSet());
@@ -459,7 +465,7 @@
if (productionPlans.stream().anyMatch(item -> item.getStatus() != null && item.getStatus() == 2)) {
throw new ServiceException("鎵�閫夌敓浜ц鍒掑凡涓嬪彂");
}
- ProductionPlan firstPlan = productionPlans.get(0);
+ ProductionPlan firstPlan = mainPlan;
if (productionOrder.getProductModelId() == null) {
productionOrder.setProductModelId(firstPlan.getProductModelId());
} else if (!Objects.equals(productionOrder.getProductModelId(), firstPlan.getProductModelId())) {
@@ -698,28 +704,33 @@
}
}
- List<ProductionOrderPickVo> result = new ArrayList<>(bomStructureList.size());
+ Map<String, ProductionOrderPickVo> mergedPickMap = new LinkedHashMap<>();
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);
+ String mergeKey = String.valueOf(structure.getTechnologyOperationId()) + "#" + productModelId;
+ ProductionOrderPickVo vo = mergedPickMap.get(mergeKey);
+ if (vo == null) {
+ vo = new ProductionOrderPickVo();
+ vo.setProductModelId(productModelId);
+ vo.setOperationName(structure.getOperationName());
+ vo.setTechnologyOperationId(structure.getTechnologyOperationId());
+ vo.setProductName(structure.getProductName());
+ vo.setModel(structure.getModel());
+ vo.setDemandedQuantity(BigDecimal.ZERO);
+ 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);
+ mergedPickMap.put(mergeKey, vo);
+ }
+ vo.setDemandedQuantity(defaultDecimal(vo.getDemandedQuantity()).add(defaultDecimal(structure.getDemandedQuantity())));
}
- return result;
+ return new ArrayList<>(mergedPickMap.values());
}
}
--
Gitblit v1.9.3