From 22b57a30be7f73e13585ae4bd4925f0c66846ba9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 11 六月 2026 14:52:57 +0800
Subject: [PATCH] feat(production): 优化工单查询接口按订单维度分组并新增订单明细查询

---
 src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
index 6e9457d..f6092a5 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
@@ -23,9 +23,11 @@
 import com.ruoyi.production.bean.dto.ProductionOperationTaskDto;
 import com.ruoyi.production.bean.vo.ProductionOperationTaskVo;
 import com.ruoyi.production.mapper.ProductionOrderMapper;
+import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
 import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
 import com.ruoyi.production.pojo.ProductionOrder;
 import com.ruoyi.production.pojo.ProductionOperationTask;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
 import com.ruoyi.production.service.ProductionOperationTaskService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
@@ -48,6 +50,7 @@
 
     private final SysUserMapper sysUserMapper;
     private final ProductionOrderMapper productionOrderMapper;
+    private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
 
     private final FileUtil fileUtil;
 
@@ -58,10 +61,22 @@
 
     @Override
     public IPage<ProductionOperationTaskVo> pageProductionOperationTask(Page<ProductionOperationTaskDto> page, ProductionOperationTaskDto dto) {
-        // 鍒嗛〉鏌ヨ鐢熶骇宸ュ簭浠诲姟
+        // 鍒嗛〉鏌ヨ锛堟寜鐢熶骇璁㈠崟缁村害鍒嗙粍锛�
         Page<ProductionOperationTaskVo> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
         IPage<ProductionOperationTaskVo> result = baseMapper.pageProductionOperationTask(voPage, dto);
+        fillOperationTypes(result.getRecords());
         fillUserNames(result.getRecords());
+        return result;
+    }
+
+    @Override
+    public List<ProductionOperationTaskVo> listByOrderId(Long orderId) {
+        // 鏍规嵁鐢熶骇璁㈠崟ID鏌ヨ宸ュ崟鍒楄〃
+        if (orderId == null) {
+            return Collections.emptyList();
+        }
+        List<ProductionOperationTaskVo> result = baseMapper.listByOrderId(orderId);
+        fillUserNames(result);
         return result;
     }
 
@@ -69,6 +84,7 @@
     public List<ProductionOperationTaskVo> listProductionOperationTask(ProductionOperationTaskDto dto) {
         // 鏌ヨ宸ュ簭浠诲姟鍒楄〃
         List<ProductionOperationTaskVo> result = BeanUtil.copyToList(this.list(buildQueryWrapper(dto)), ProductionOperationTaskVo.class);
+        fillOperationTypes(result);
         fillUserNames(result);
         return result;
     }
@@ -81,6 +97,7 @@
             return null;
         }
         ProductionOperationTaskVo vo = BeanUtil.copyProperties(item, ProductionOperationTaskVo.class);
+        fillOperationTypes(Collections.singletonList(vo));
         if (item.getProductionOrderId() != null) {
             ProductionOrder productionOrder = productionOrderMapper.selectById(item.getProductionOrderId());
             if (productionOrder != null) {
@@ -370,6 +387,38 @@
     @Override
     public List<ProductionOperationTaskVo> getOperation(ProductionOperationTaskDto dto) {
         // 鏌ヨ宸ュ簭浠诲姟鍒楄〃
-        return baseMapper.getOperation(dto);
+        List<ProductionOperationTaskVo> result = baseMapper.getOperation(dto);
+        fillOperationTypes(result);
+        return result;
+    }
+
+    private void fillOperationTypes(List<ProductionOperationTaskVo> voList) {
+        // 鍥炲~宸ュ簭绫诲瀷锛�0 璁℃椂 / 1 璁′欢锛�
+        if (voList == null || voList.isEmpty()) {
+            return;
+        }
+        Set<Long> operationIds = voList.stream()
+                .filter(Objects::nonNull)
+                .map(ProductionOperationTaskVo::getProductionOrderRoutingOperationId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toCollection(LinkedHashSet::new));
+        if (operationIds.isEmpty()) {
+            return;
+        }
+        Map<Long, Integer> typeByOperationId = productionOrderRoutingOperationMapper
+                .selectBatchIds(new ArrayList<>(operationIds))
+                .stream()
+                .filter(Objects::nonNull)
+                .collect(Collectors.toMap(
+                        ProductionOrderRoutingOperation::getId,
+                        ProductionOrderRoutingOperation::getType,
+                        (left, right) -> left
+                ));
+        for (ProductionOperationTaskVo vo : voList) {
+            if (vo == null || vo.getType() != null || vo.getProductionOrderRoutingOperationId() == null) {
+                continue;
+            }
+            vo.setType(typeByOperationId.get(vo.getProductionOrderRoutingOperationId()));
+        }
     }
 }

--
Gitblit v1.9.3