正在加载文档...
文档内容较大,正在处理中,请稍候
正在加载文档...
文档内容较大,正在处理中,请稍候
自动编码模块提供了统一的编码生成和管理功能,支持多种编码类型的规则配置,包括日期格式化、序列号处理、已删除编码重用等特性。
编码服务系统采用三层架构:
codeRules 集中管理所有编码类型的规则配置CodeService 提供统一的编码生成和检查接口codeGenerator.js 负责编码生成的具体逻辑src/services/codeService.js:编码服务主类,提供对外接口src/utils/codeGenerator.js:编码生成底层实现,包含日期格式化和序列号处理config/base/code.js:编码规则配置文件(通过 config/index.js 暴露为 config.code)const CodeService = require("../src/services/codeService");
// 生成新编码
const newCode = await CodeService.generateCode("USER_CODE");
console.log("生成的编码:", newCode);// 生成唯一编码(会自动检查编码唯一性,可配置是否重用已删除的编码)
const uniqueCode = await CodeService.generateUniqueCode("DEPARTMENT_CODE");
console.log("生成的唯一编码:", uniqueCode);// 检查编码是否已存在
const exists = await CodeService.checkCodeExists("ROLE_CODE", "R202305200001");
console.log("编码是否存在:", exists);// 批量生成10个用户编码
const codes = await CodeService.batchGenerateCode("USER_CODE", 10);
console.log("批量生成的编码:", codes);// 在应用启动时初始化序列号表
await CodeService.initSequenceTable();
console.log("序列号表初始化完成");在 config/base/code.js 中配置编码规则(通过 config/index.js 暴露为 config.code):
const codeRules = {
USER_CODE: {
prefix: "U", // 编码前缀
pattern: "YYYYMMDD", // 日期格式
sequenceLength: 4, // 序列号长度
table: "user", // 对应的数据表
field: "code", // 对应的字段
autoComplete: false, // 是否启用已删除编码补全功能(可选,默认false)
},
};
module.exports = codeRules;编码服务支持配置化的已删除编码重用功能。通过显式配置,可以在生成新编码时优先查找并重用已删除的编码,实现编码的高效利用。注意:此功能默认是关闭的,需要显式配置启用。
默认行为:系统默认不会重用已删除编码,直接生成全新编码
启用方式:在 config/base/code.js 对应编码类型中显式设置 autoComplete: true
重用流程:
autoComplete: true 时,系统会在 forceGenerateCode 函数中调用 findDeletedCodeToReuseis_delete = 1)的记录is_delete 状态更新为 0,使其可重用数据筛选:
U20230520%)编码规则中与自动补全功能相关的配置项:
autoComplete:是否启用已删除编码自动补全功能(布尔值,默认为false)table:必须配置,指定要查找已删除记录的数据表field:必须配置,指定要查找的编码字段名默认配置(不启用自动补全):
const codeRules = {
USER_CODE: {
prefix: "U",
pattern: "YYYYMMDD",
sequenceLength: 4,
table: "user",
field: "code",
// autoComplete默认为false,无需显式声明
},
};启用自动补全:
const codeRules = {
USER_CODE: {
prefix: "U",
pattern: "YYYYMMDD",
sequenceLength: 4,
table: "user",
field: "code",
autoComplete: true, // 显式启用自动补全功能
},
};所有方法都可能抛出异常,请确保使用 try/catch 捕获并处理:
try {
const code = await CodeService.generateUniqueCode("USER_CODE");
// 使用生成的编码
} catch (error) {
console.error("编码生成失败:", error.message);
// 处理错误
}sequence_counter 表进行原子操作,避免并发冲突(底层使用 LAST_INSERT_ID)sequence_counter 表(包含 code_type 唯一键、current_value、update_time)initSequenceTable 方法初始化序列号表generateUniqueCode 方法autoComplete: trueis_delete 字段,用于标记记录是否被删除is_delete = 1autoComplete: trueis_delete 字段is_delete = 1系统提供了针对自动补全功能的测试脚本,验证不同配置下的行为是否符合预期:
// 运行测试脚本
test / test_auto_complete.js;测试验证了以下场景:
autoComplete: false 时自动补全功能关闭autoComplete: true 时自动补全功能启用