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