云
7 小时以前 02a1ae81eba7b48223052fb833859f0a65dd7d21
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() {