云
2026-10-27 ffca46b39d25439a06a27cafda2ec523a3fb67cf
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImplTest.java
@@ -3,6 +3,9 @@
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchGenerateReqVO;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemconsume.MesWmItemConsumeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemconsume.MesWmItemConsumeDetailDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productproduce.MesWmProductProduceDO;
@@ -30,6 +33,8 @@
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_BATCH_REEL_MISMATCH;
/**
 * {@link MesWmBatchServiceImpl} 的单元测试
@@ -38,6 +43,13 @@
 */
@Import(MesWmBatchServiceImpl.class)
public class MesWmBatchServiceImplTest extends BaseDbUnitTest {
    @MockitoBean
    private cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService mdmItemService;
    @MockitoBean
    private cn.iocoder.yudao.module.mdm.api.item.MdmItemBatchConfigApi mdmBatchConfigApi;
    @MockitoBean
    private cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi customerApi;
    @Resource
    private MesWmBatchServiceImpl batchService;
@@ -67,6 +79,48 @@
    @MockitoBean
    private MesWmBarcodeService barcodeService;
    @Test
    public void testNonBatchManagedItemUsesDistinctTraceBatchesForReels() {
        when(mdmItemService.validateItemExists(10L)).thenReturn(new MesMdmItemDO().setId(10L)
                .setName("产品").setIsBatchManaged(false));
        when(autoCodeRecordService.generateAutoCode(anyString())).thenReturn("TRACE-1", "TRACE-2");
        MesWmBatchGenerateReqVO first = new MesWmBatchGenerateReqVO().setItemId(10L)
                .setWorkOrderId(20L).setReelNo("PAN-1");
        MesWmBatchGenerateReqVO second = new MesWmBatchGenerateReqVO().setItemId(10L)
                .setWorkOrderId(20L).setReelNo("PAN-2");
        MesWmBatchDO a = batchService.getOrGenerateBatchCode(first);
        MesWmBatchDO b = batchService.getOrGenerateBatchCode(second);
        assertNotNull(a.getId());
        assertNotEquals(a.getId(), b.getId());
        assertEquals(a.getId(), batchService.getOrGenerateBatchCode(first).getId());
        assertEquals("PAN-2", batchMapper.selectById(b.getId()).getReelNo());
        assertNull(batchService.getOrGenerateBatchCode(new MesWmBatchGenerateReqVO().setItemId(10L)));
    }
    @Test
    public void testExistingBatchCannotBeRelabeledWithDifferentReel() {
        when(mdmItemService.validateItemExists(10L)).thenReturn(new MesMdmItemDO().setId(10L)
                .setName("产品").setIsBatchManaged(false));
        batchMapper.insert(new MesWmBatchDO().setCode("EXISTING").setItemId(10L).setReelNo("PAN-1"));
        MesWmBatchGenerateReqVO request = new MesWmBatchGenerateReqVO().setItemId(10L)
                .setBatchCode("EXISTING").setReelNo("PAN-2");
        ServiceException ex = assertThrows(ServiceException.class, () -> batchService.getOrGenerateBatchCode(request));
        assertEquals(WM_BATCH_REEL_MISMATCH.getCode(), ex.getCode());
    }
    @Test
    public void testExistingReelBatchCannotBeReassignedToAnotherOrder() {
        when(mdmItemService.validateItemExists(10L)).thenReturn(new MesMdmItemDO().setId(10L)
                .setName("产品").setIsBatchManaged(false));
        batchMapper.insert(new MesWmBatchDO().setCode("EXISTING").setItemId(10L)
                .setReelNo("PAN-1").setWorkOrderId(20L));
        MesWmBatchGenerateReqVO request = new MesWmBatchGenerateReqVO().setItemId(10L)
                .setBatchCode("EXISTING").setReelNo("PAN-1").setWorkOrderId(21L);
        ServiceException ex = assertThrows(ServiceException.class, () -> batchService.getOrGenerateBatchCode(request));
        assertEquals(WM_BATCH_REEL_MISMATCH.getCode(), ex.getCode());
    }
    // ==================== 向前追溯 ====================
    @Test