编码规则使用指南
一、编码规则使用
产品线调用
文件位置: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
接口功能:根据编码配置编码生成编码。
请求格式:
{
"encoderConfigCode": "编码配置编码",
"encoderCount": 1,
"map": {
"xxx": "xxx"
}
}
请求参数(EncoderByConfigDTO):
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
encoderConfigCode |
String | 是 | 编码配置的编码 |
encoderCount |
Integer | 否 | 生成数量,默认1 |
map |
Map<String, String> | 否 | 变量编码段值 |
响应格式:
{
"code": 200,
"message": "success",
"data": ["IQC202401010001"]
}
二、种子数据创建
概述
种子数据用于系统初始化时自动创建编码规则,避免手动配置。通过实现 SeedCoderRuleInitial<T> 接口来定义种子数据。
初始化种子数据接口

创建步骤
种子数据类
编码规则:
@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); // 截取长度
}});
}}