ソースを参照

运行记录1209-运行记录工单查询优化

yuanchao 2 日 前
コミット
668af62e9f

+ 54 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/IotOpeationFillController.java

@@ -414,11 +414,11 @@ public class IotOpeationFillController {
             }
         }
 
-        IotOpeationFillRespVO fill = new IotOpeationFillRespVO();
+       /* IotOpeationFillRespVO fill = new IotOpeationFillRespVO();
 
-        /**
+        *//**
          * 遍历主表数据,拿到id,根据id查询子表获取子表设备名称+设备编码
-         */
+         *//*
         for (IotOpeationFillOrderDO orderDO : fillList.getList()) {
             fill.setOrderId(orderDO.getId());
             fill.setDeptId(orderDO.getDeptId());
@@ -435,7 +435,58 @@ public class IotOpeationFillController {
                 orderDO.setFillDev(devList.getFillDev());
                 orderDO.setUnFillDev(devList.getUnFillDev());
             }
+        }*/
+
+
+        // 收集所有订单ID和部门ID的映射关系
+        Map<Long, Long> orderDeptMap = fillList.getList().stream()
+                .collect(Collectors.toMap(IotOpeationFillOrderDO::getId, IotOpeationFillOrderDO::getDeptId));
+
+        // 准备查询参数
+        IotOpeationFillRespVO fill = new IotOpeationFillRespVO();
+
+        // 2. 批量查询所有fill数据
+        List<IotOpeationFillDO> allFillList = new ArrayList<>();
+        for (Map.Entry<Long, Long> entry : orderDeptMap.entrySet()) {
+            fill.setOrderId(entry.getKey());
+            fill.setDeptId(entry.getValue());
+            allFillList.addAll(iotOpeationFillService.fillListByDeptId(fill));
+        }
+
+        // 3. 批量查询所有dev数据
+        Map<Long, IotOpeationFillDO> devMap = new HashMap<>();
+        for (Long orderId : orderDeptMap.keySet()) {
+            fill.setOrderId(orderId);
+            devMap.put(orderId, iotOpeationFillService.devListByOrderId(fill));
         }
+
+        // 4. 将fill数据按订单ID分组
+        Map<Long, List<IotOpeationFillDO>> fillMap = allFillList.stream()
+                .collect(Collectors.groupingBy(IotOpeationFillDO::getOrderId)); // 假设IotOpeationFillDO有getOrderId方法
+
+        // 5. 遍历处理结果
+        for (IotOpeationFillOrderDO orderDO : fillList.getList()) {
+            Long orderId = orderDO.getId();
+            List<IotOpeationFillDO> dList = fillMap.getOrDefault(orderId, Collections.emptyList());
+
+            if (!dList.isEmpty()) {
+                StringJoiner joiner = new StringJoiner(", ");
+                for (IotOpeationFillDO fillDO : dList) {
+                    joiner.add(fillDO.getDeviceCode() + "/" + fillDO.getDeviceName());
+                }
+                orderDO.setFillList(joiner.toString());
+
+                IotOpeationFillDO devList = devMap.get(orderId);
+                if (devList != null) {
+                    orderDO.setAllDev(devList.getAllDev());
+                    orderDO.setFillDev(devList.getFillDev());
+                    orderDO.setUnFillDev(devList.getUnFillDev());
+                }
+            }
+        }
+
+
+
         return success(BeanUtils.toBean(fillList, IotOpeationFillOrderDO.class));
     }