liyong
4 天以前 d62a74c14a4002c0f401c94976fba8cc77cda6e1
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/md/autocode/MesMdAutoCodeRecordServiceImplTest.java
@@ -99,6 +99,42 @@
    }
    @Test
    public void testGenerateAutoCode_retryWhenResultExists() {
        // 准备参数
        String ruleCode = "DV_MACHINERY_CODE";
        MesMdAutoCodeRuleDO rule = new MesMdAutoCodeRuleDO().setId(5L).setCode(ruleCode).setPadded(false);
        MesMdAutoCodePartDO part1 = new MesMdAutoCodePartDO().setType(MesMdAutoCodePartTypeEnum.FIXED_CHAR.getType())
                .setFixCharacter("M").setLength(1).setSort(1);
        MesMdAutoCodePartDO part2 = new MesMdAutoCodePartDO().setType(MesMdAutoCodePartTypeEnum.SERIAL_NUMBER.getType())
                .setSerialStartNo(1).setSerialStep(1).setLength(5).setSort(2).setCycleFlag(false);
        // mock
        when(ruleService.getAutoCodeRuleByCode(ruleCode)).thenReturn(rule);
        when(partService.getAutoCodePartListByRuleId(5L)).thenReturn(Arrays.asList(part1, part2));
        when(fixedCharStrategy.generate(eq(part1), any(MesMdAutoCodeContext.class))).thenReturn("M");
        long[] serialNoRef = {0L};
        when(serialNumberStrategy.generate(eq(part2), any(MesMdAutoCodeContext.class))).thenAnswer(invocation -> {
            MesMdAutoCodeContext context = invocation.getArgument(1);
            long serialNo = ++serialNoRef[0];
            context.setSerialNo(serialNo);
            return String.format("%05d", serialNo);
        });
        when(recordMapper.selectByResult("M00001")).thenReturn(new MesMdAutoCodeRecordDO());
        when(recordMapper.selectByResult("M00002")).thenReturn(new MesMdAutoCodeRecordDO());
        when(recordMapper.selectByResult("M00003")).thenReturn(null);
        // 调用
        String result = recordService.generateAutoCode(ruleCode, null);
        // 断言
        assertEquals("M00003", result);
        ArgumentCaptor<MesMdAutoCodeRecordDO> captor = ArgumentCaptor.forClass(MesMdAutoCodeRecordDO.class);
        verify(recordMapper).insert(captor.capture());
        MesMdAutoCodeRecordDO record = captor.getValue();
        assertEquals(5L, record.getRuleId());
        assertEquals("M00003", record.getResult());
        assertEquals(3L, record.getSerialNo());
    }
    @Test
    public void testGenerateAutoCode_withInputChar() {
        // 准备参数
        String ruleCode = "CLIENT_CODE";