From 02a1ae81eba7b48223052fb833859f0a65dd7d21 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 19 十月 2026 17:31:08 +0800
Subject: [PATCH] feat(mes): 实现袋码大批量生成异步任务功能

---
 yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/BagBusinessCodeTest.java |   45 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/BagBusinessCodeTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/BagBusinessCodeTest.java
index 514b59a..98d92f2 100644
--- a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/BagBusinessCodeTest.java
+++ b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/BagBusinessCodeTest.java
@@ -8,10 +8,13 @@
 import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.batch.MesProBatchDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.pallet.MesProPalletDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.pro.bagcode.MesProBagCodeGenerateTaskMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.pro.bagcode.MesProBagCodeMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.pro.bagcode.MesProBagCodeReplaceMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.pro.batch.MesProBatchMapper;
 import cn.iocoder.yudao.module.mes.dal.redis.MesCodeRedisDAO;
+import cn.iocoder.yudao.module.mes.framework.bagcode.MesProBagCodeGenerateProperties;
 import cn.iocoder.yudao.module.mes.framework.qrcode.MesProQrLabelBuilder;
 import cn.iocoder.yudao.module.mes.framework.qrcode.QrCodeImageUtils;
 import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
@@ -20,6 +23,7 @@
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.springframework.test.util.ReflectionTestUtils;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -35,6 +39,9 @@
     private final MesProBatchMapper batches = mock(MesProBatchMapper.class);
     private final MesProBagCodeReplaceMapper replacements = mock(MesProBagCodeReplaceMapper.class);
     private final MdmUnitMeasureApi units = mock(MdmUnitMeasureApi.class);
+    private final MesProBagCodeChunkWriter writer = mock(MesProBagCodeChunkWriter.class);
+    private final MesProBagCodeBatchGenerator generator = new MesProBagCodeBatchGenerator();
+    private final MesProBagCodeGenerateProperties properties = new MesProBagCodeGenerateProperties();
 
     @BeforeEach void setup() {
         ReflectionTestUtils.setField(service, "bagCodeMapper", bags);
@@ -43,9 +50,39 @@
         ReflectionTestUtils.setField(service, "batchMapper", batches);
         ReflectionTestUtils.setField(service, "replaceMapper", replacements);
         ReflectionTestUtils.setField(service, "unitMeasureApi", units);
+        ReflectionTestUtils.setField(service, "batchGenerator", generator);
+        ReflectionTestUtils.setField(service, "generateProperties", properties);
+        ReflectionTestUtils.setField(service, "generateCleaner", mock(MesProBagCodeGenerateCleaner.class));
+        ReflectionTestUtils.setField(service, "generateTaskService", mock(MesProBagCodeGenerateTaskService.class));
+        // 鍒嗘鎵ц鍣ㄤ娇鐢ㄧ湡瀹炲疄鐜帮紝浠呮妸浜嬪姟鍐欏叆鍣ㄤ笌 Redis 鍙栫爜鏇挎崲涓� mock
+        ReflectionTestUtils.setField(generator, "bagCodeMapper", bags);
+        ReflectionTestUtils.setField(generator, "taskMapper", mock(MesProBagCodeGenerateTaskMapper.class));
+        ReflectionTestUtils.setField(generator, "codeRedisDao", codes);
+        ReflectionTestUtils.setField(generator, "chunkWriter", writer);
+        ReflectionTestUtils.setField(generator, "properties", properties);
+        doAnswer(invocation -> {
+            bags.insertBatch(invocation.getArgument(0));
+            return null;
+        }).when(writer).insertBagCodes(anyList());
+        doAnswer(invocation -> {
+            List<MesProPalletDO> pallets = invocation.getArgument(0);
+            for (int i = 0; i < pallets.size(); i++) {
+                pallets.get(i).setId((long) (i + 1));
+            }
+            return null;
+        }).when(writer).insertPallets(anyList());
+
         when(items.validateItemExists(1L)).thenReturn(new MesMdmItemDO().setId(1L).setUnitMeasureId(2L));
         AtomicLong sequence = new AtomicLong(1000000000000000L);
         when(codes.generate()).thenAnswer(invocation -> String.valueOf(sequence.incrementAndGet()));
+        when(codes.generateBatch(anyInt())).thenAnswer(invocation -> {
+            int count = invocation.getArgument(0);
+            List<String> codes = new ArrayList<>(count);
+            for (int i = 0; i < count; i++) {
+                codes.add(String.valueOf(sequence.incrementAndGet()));
+            }
+            return codes;
+        });
         when(codes.allocateBagNoStart(anyInt(), any())).thenReturn(1);
     }
 
@@ -65,13 +102,11 @@
     }
 
     @Test @SuppressWarnings({"unchecked", "rawtypes"}) void automaticPalletCarriesVariety() {
-        var pallets=mock(cn.iocoder.yudao.module.mes.dal.mysql.pro.pallet.MesProPalletMapper.class);
-        ReflectionTestUtils.setField(service,"palletMapper",pallets);
-        when(units.getUnitMeasure(2L)).thenReturn(CommonResult.success(new MdmUnitMeasureRespDTO().setType("2鍗冨厠")));
+        when(units.getUnitMeasure(2L)).thenReturn(CommonResult.success(new MdmUnitMeasureRespDTO().setType("48琚�")));
         var req=new MesProBagCodeGenerateReqVO();req.setItemId(1L);req.setPalletCount(1);
         service.generateBagCodes(req);
-        ArgumentCaptor<Collection<cn.iocoder.yudao.module.mes.dal.dataobject.pro.pallet.MesProPalletDO>> saved=ArgumentCaptor.forClass((Class)Collection.class);
-        verify(pallets).insertBatch(saved.capture());assertEquals(1L,saved.getValue().iterator().next().getItemId());
+        ArgumentCaptor<List<MesProPalletDO>> saved=ArgumentCaptor.forClass((Class)List.class);
+        verify(writer).insertPallets(saved.capture());assertEquals(1L,saved.getValue().iterator().next().getItemId());
     }
 
     @Test void replacementIssuesNewPairInsteadOfReusingOldBusinessCode() {

--
Gitblit v1.9.3