罗展丰
Published on 2026-05-19 / 63 Visits
0
0

编码规则使用指南

编码规则使用指南

一、编码规则使用

产品线调用

文件位置:com.sie.imom.sys.api.encoder.EncoderApi

方法:EncoderApi.getEncoder

接口功能:对外API网关编码生成接口,供其他产品线调用。

请求格式

{
  "encoderConfigCode": "编码配置编码",
  "encoderCount": 1,
  "map": {
    "xxx": "xxx"
  }
}

请求参数EncoderByConfigDTO):

参数 类型 必填 说明
encoderConfigCode String 编码配置的编码
encoderCount Integer 生成数量,默认1
map Map<String, String> 变量编码段值

响应格式

{
  "code": 200,
  "message": "success",
  "data": ["IQC202401010001"]
}

接口调用

url: /sys/v1/encoder/generate

文件位置EncoderController.java

接口功能:根据编码配置编码生成编码。

请求格式

{
  "encoderConfigCode": "编码配置编码",
  "encoderCount": 1,
  "map": {
    "xxx": "xxx"
  }
}

请求参数EncoderByConfigDTO):

参数 类型 必填 说明
encoderConfigCode String 编码配置的编码
encoderCount Integer 生成数量,默认1
map Map<String, String> 变量编码段值

响应格式

{
  "code": 200,
  "message": "success",
  "data": ["IQC202401010001"]
}

二、种子数据创建

概述

种子数据用于系统初始化时自动创建编码规则,避免手动配置。通过实现 SeedCoderRuleInitial<T> 接口来定义种子数据。

初始化种子数据接口

image-jBqx.png

创建步骤

种子数据类

编码规则:

@Component
public class EncoderRuleQmsApproval implements SeedCoderRuleInitial<EncoderRuleSeedDTO> {

    @Override
    public List<EncoderRuleSeedDTO> getSeedData() {
        return List.of(
                new EncoderRuleSeedDTO() {{
                    setCode("qmsApprovalCode");
                    setName("不合格");
                    setDetails(List.of(
                            new EncoderRuleDetailSeedDTO() {{
                                setSegment(EncoderSegmentEnum.FIXCHAR.getCode());
                                setSegmentConfig(new FixCharConfigDTO() {{
                                    setFixChar("Ap");
                                }});
                            }},
                            new EncoderRuleDetailSeedDTO() {{
                                setSegment(EncoderSegmentEnum.DATECODE.getCode());
                                setSegmentConfig(new DateCodeConfigDTO() {{
                                    setDateFormat(DateFormatEnum.yyyyMMdd.getCode());
                                    setIsSequenceKey(false);
                                }});
                            }},
                            new EncoderRuleDetailSeedDTO() {{
                                setSegment(EncoderSegmentEnum.SEQUENCE.getCode());
                                setSegmentConfig(new SequenceConfigDTO() {{
                                    setMinValueDecimal(1);
                                    setMaxValueDecimal(9999);
                                    setInterval(1);
                                }});
                            }}));
                }}
        );
    }
}

编码配置:

@Component
public class EncoderRuleConfigQms implements SeedCoderRuleInitial<EncoderRuleConfigSeedDTO> {

    @Override
    public List<EncoderRuleConfigSeedDTO> getSeedData() {
        return List.of(
                new EncoderRuleConfigSeedDTO() {{
                    setCode("qmsIqcConfig");
                    setName("来料检");
                    setEncoderRuleCode("qmsIqcCode");
                    setType(EncoderRuleConfigTypeEnum.QMS.getCode());
                }},
                new EncoderRuleConfigSeedDTO() {{
                    setCode("qmsOqcConfig");
                    setName("出货检");
                    setEncoderRuleCode("qmsOqcCode");
                    setType(EncoderRuleConfigTypeEnum.QMS.getCode());
                }},
                new EncoderRuleConfigSeedDTO() {{
                    setCode("qmsApprovalConfig");
                    setName("不合格");
                    setEncoderRuleCode("qmsApprovalCode");
                    setType(EncoderRuleConfigTypeEnum.QMS.getCode());
                }}
        );
    }
}

详解配置编码段

固定字符段 (FIXCHAR)
new EncoderRuleDetailSeedDTO() {{
    setSegment(EncoderSegmentEnum.FIXCHAR.getCode());
    setSegmentConfig(new FixCharConfigDTO() {{
        setFixChar("IQC");  // 固定字符内容
    }});
}}
日期段 (DATECODE)
new EncoderRuleDetailSeedDTO() {{
    setSegment(EncoderSegmentEnum.DATECODE.getCode());
    setSegmentConfig(new DateCodeConfigDTO() {{
        setDateFormat(DateFormatEnum.yyyyMMdd.getCode());  // 日期格式
        setIsSequenceKey(false);
    }});
}}

DateFormatEnum 枚举值

枚举 说明 示例
yyyyMMddHHmmss 年月日时分秒 20240101120000
yyMMddHHmmss 简写年月日时分秒 240101120000
yyyyMMdd 年月日 20240101
yyMMdd 简写年月日 240101
yyyyMM 年月 202401
yyMM 简写年月 2401
HHmmss 时分秒 120000
yyyyww 年周 202401
yyww 简写年周 2401
流水号段 (SEQUENCE)
new EncoderRuleDetailSeedDTO() {{
    setSegment(EncoderSegmentEnum.SEQUENCE.getCode());
    setSegmentConfig(new SequenceConfigDTO() {{
        setMinValueDecimal(1);                                    // 最小值
        setMaxValueDecimal(9999);                                 // 最大值
        setInterval(1);                                           // 步长
        setBaseRule(NumeralSystemEnum.DECIMAL.getCode());           // 进制
        setResetIdentityType(ResetIdentityTypeEnum.DAILY.getCode()); // 重置类型
        setSequenceDirect(SequenceDirectEnum.INCREASE.getCode());   // 增减方向
    }});
}}

SequenceConfigDTO 参数说明

参数 类型 必填 默认值 说明
minValueDecimal int 最小值(十进制),如 1
maxValueDecimal int 最大值(十进制),如 9999
interval int 1 间隔量,默认 1 ,每次递增/递减的步长
baseRule String 十进制 进制规则,默认 十进制,通过 NumeralSystemEnum 设置
resetIdentityType String 每日 周期重置模式,默认 每日,通过 ResetIdentityTypeEnum 设置
sequenceDirect String 增量 增减方向,默认 增量,通过 SequenceDirectEnum 设置
targetLength int 目标长度,自动根据 minValueDecimal 长度计算

ResetIdentityTypeEnum 枚举值

枚举 说明
DAILY 每日重置
MONTHLY 每月重置
YEARLY 每年重置

SequenceDirectEnum 枚举值

枚举 说明
INCREASE 递增
DECREASE 递减

NumeralSystemEnum 枚举值

枚举 说明 字符集
DECIMAL 十进制 0-9
HEXADECIMAL 十六进制 0-9A-F

ResetIdentityTypeEnum 枚举值

枚举 说明 重置时机
DAILY 每日重置 每天零点
MONTHLY 每月重置 每月1号零点
YEARLY 每年重置 每年1月1号零点

SequenceDirectEnum 枚举值

枚举 说明 示例
INCREASE 递增 1, 2, 3, 4...
DECREASE 递减 9999, 9998, 9997...
雪花算法段 (SNOW)
new EncoderRuleDetailSeedDTO() {{
    setSegment(EncoderSegmentEnum.SNOW.getCode());
    // snow段不需要额外配置
}}
自定义段 (CUSTOM)
new EncoderRuleDetailSeedDTO() {{
    setSegment(EncoderSegmentEnum.CUSTOM.getCode());
    setSegmentConfig(new CustomConfigDTO() {{
        setName("orderNo");        // 字段名,与map中的key对应
        setStartIndex(1);          // 起始位置
        setLength(7);              // 截取长度
    }});
}}


Comment