From abf1c0a35d85d38239ff5d2ed746a4e4b797c9d1 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 20 八月 2026 14:05:02 +0800
Subject: [PATCH] feat 功能修正

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java
index 5ac1e11..1fed457 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskLineServiceImpl.java
@@ -7,6 +7,8 @@
 import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLinePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineSaveReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineImportExcelVO;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.line.MesWmStockTakingTaskLineImportRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO;
@@ -35,7 +37,7 @@
 /**
  * MES 鐩樼偣浠诲姟琛� Service 瀹炵幇绫�
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Service
 @Validated
@@ -50,6 +52,8 @@
     private MesWmMaterialStockService materialStockService;
     @Resource
     private MesWmStockTakingTaskService stockTakingTaskService;
+    @Resource
+    private cn.iocoder.yudao.module.mdm.api.item.MdmItemApi mdmItemApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -230,4 +234,58 @@
         return param != null ? param.getValueId() : null;
     }
 
+    @Override
+    public MesWmStockTakingTaskLineImportRespVO importTakingQuantity(Long taskId,
+                                                                    List<MesWmStockTakingTaskLineImportExcelVO> list) {
+        MesWmStockTakingTaskLineImportRespVO respVO = new MesWmStockTakingTaskLineImportRespVO();
+        respVO.setSuccessCount(0);
+        respVO.setFailureCount(0);
+        respVO.setFailureMessages(new java.util.ArrayList<>());
+        if (CollUtil.isEmpty(list)) {
+            return respVO;
+        }
+        // 1. 鑾峰彇鐩樼偣浠诲姟琛�
+        List<MesWmStockTakingTaskLineDO> lines = stockTakingTaskLineMapper.selectListByTaskId(taskId);
+        if (CollUtil.isEmpty(lines)) {
+            throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS);
+        }
+        // 2. 鏋勫缓 鐗╂枡缂栫爜 -> 鐗╂枡ID 鏄犲皠
+        java.util.Set<Long> itemIds = lines.stream().map(MesWmStockTakingTaskLineDO::getItemId)
+                .filter(Objects::nonNull).collect(java.util.stream.Collectors.toSet());
+        java.util.Map<Long, cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO> itemMap =
+                mdmItemApi.getItemMap(itemIds);
+        java.util.Map<String, Long> codeToItemIdMap = new java.util.HashMap<>();
+        itemMap.values().forEach(item -> {
+            if (item.getCode() != null) {
+                codeToItemIdMap.put(item.getCode(), item.getId());
+            }
+        });
+        // 3. 閫愯鍖归厤骞跺啓鍏ュ疄鐩樻暟閲�
+        for (MesWmStockTakingTaskLineImportExcelVO row : list) {
+            Long itemId = codeToItemIdMap.get(row.getItemCode());
+            if (itemId == null) {
+                respVO.setFailureCount(respVO.getFailureCount() + 1);
+                respVO.getFailureMessages().add("鐗╂枡缂栫爜涓嶅瓨鍦�: " + row.getItemCode());
+                continue;
+            }
+            MesWmStockTakingTaskLineDO matched = lines.stream()
+                    .filter(line -> Objects.equals(line.getItemId(), itemId)
+                            && Objects.equals(line.getBatchCode(), row.getBatchCode()))
+                    .findFirst().orElse(null);
+            if (matched == null) {
+                respVO.setFailureCount(respVO.getFailureCount() + 1);
+                respVO.getFailureMessages().add("鏈壘鍒板搴旂洏鐐硅: 鐗╂枡=" + row.getItemCode() + " 鎵规=" + row.getBatchCode());
+                continue;
+            }
+            if (row.getTakingQuantity() == null) {
+                respVO.setFailureCount(respVO.getFailureCount() + 1);
+                respVO.getFailureMessages().add("瀹炵洏鏁伴噺涓虹┖: 鐗╂枡=" + row.getItemCode());
+                continue;
+            }
+            updateStockTakingTaskLineTakingQuantity(matched.getId(), row.getTakingQuantity());
+            respVO.setSuccessCount(respVO.getSuccessCount() + 1);
+        }
+        return respVO;
+    }
+
 }

--
Gitblit v1.9.3