编码规则
业务系统中经常需要根据某种编码规则自动生成业务编码,比如自动生成订单号、卡号等。
内置CodeRule
- 在模型中为字段增加code标签
- 代码生成时会自动在meta中为字段增加biz:codeRule=”对象名@属性名”这样的配置。在派生的meta中可以覆盖这个编码规则名。
- 引入nop-sys-dao模块,在nop_sys_code_rule表中增加对应记录,配置编码模板
- 在保存或者修改实体的时候会触发meta中的autoExpr(根据biz:codeRule配置自动生成)
编码模板
ICodeRule接口支持定义一组变量模式,然后解析编码模板,替换其中的变量生成编码字符串。
编码模板中通过{@type:options}这种形式来表示变量,例如 D{@year}{@month}{@seq:5}表示
- 前缀为D
- 4位的年份
- 2位的月份
- 5位的顺序递增的顺序号,如果达到最大值则开始回绕
name | pattern | description |
---|---|---|
year | {@year} | 年份 |
month | {@month} | 月份,固定两位数字 |
dayOfMonth | {@dayOfMonth} | 月内的日期,1到31 |
hour | {@hour} | 小时,固定两位数字 |
minute | {@minute} | 分钟,固定两位数字 |
second | {@second} | 秒,固定两位数字 |
randNumber | {@randNumber:3} | 随机数,通过options声明生成几位的随机数字 |
seq | {@seq:3} | 根据顺序号递增,取固定3位数字 |
prop | {@prop:entity.type,3} | 表示从上下文对象的哪个属性中获取变量值,可以通过一个可选的长度字段来固定返回的字符串长度 |
举例
配置NopSysCodeRule的【编码模式codePattern】为 D{@year}{@month}{@seq:5}
则可能生成 D20240912345,其中09对应于9月份,12345是长度为5的顺序生成的序列号。
在NopSysCodeRule对象的【序列号名称seqName】字段中配置{@seq:5}
这个模式所用到的序列号对象名称,它对应于NopSysSequence中的配置项。
注册扩展变量
可以在beans.xml中定义扩展的编码规则变量。约定bean的名称为 nopCodeRuleVariable_xxx