编码生成器
大约 5 分钟
编码生成器
编码生成器基础概念
在分布式环境下,单据生成指定格式的编码是一项常见需求。Oinone提供了简易的编码生成能力,可以帮助开发者在分布式环境中轻松实现这一功能。
编码生成器属性与使用
编码详解
定义
- 配置规则:
- 在模型或字段上可以配置编码自动生成规则。
- 当进行数据存储时,如果配置了编码自动生成规则的字段值为空,则系统将根据规则自动生成编码。
- 序列生成器:
- 编码自动生成功能是通过序列生成器来支持的。
- 序列生成器可以配置以下参数:
- 初始序列:生成编码时的起始序列号。
- 步长:序列递增的步长。
- 日期格式:用于组成编码的日期格式。
- 长度:生成的编码的长度。
- 组合配置:
- 可以在序列生成器生成的序列编码基础上进行组合配置功能编码,生成最终的编码。
通过这种方式,系统可以灵活地根据配置规则和序列生成器生成各种类型的编码,以满足业务需求。这种自动生成编码的功能可以简化数据录入过程,提高数据的标识性和管理性。
属性解释
@Model.Code 模型编码
@Model.Code(sequence = "DATE_ORDERLY_SEQ",
prefix = "P",
size=6,
step=1,
initial = 10000,
format = "yyyyMMdd"
)
这段代码定义了一个名为Code的注解,它具有以下属性:
sequence
: 定义序列的名称或标识符,用于生成模型编码。可选项包括:SEQ
: 自增流水号(不连续)ORDERLY_SEQ
: 自增强有序流水号(连续)DATE_SEQ
: 日期+自增流水号(不连续)DATE_ORDERLY_SEQ
: 日期+强有序流水号(连续)DATE
: 日期UUID
: 随机32位字符串,包含数字和小写英文字母
prefix
: 编码的前缀,可以是任何字符串。suffix
: 编码的后缀,可以是任何字符串。size
: 编码的长度,默认为16个字符。step
: 编码生成的步长,默认为1。 (包含流水号有效)isRandomStep
: 是否使用随机步长,默认为false。initial
: 序列的初始值,默认为1000L。 (包含流水号有效)format
: 编码的格式,可以是任何格式字符串。 (包含日期有效)source
: 编码的来源,可以是手动指定或系统自动生成。zeroingPeriod
: 重置编码计数的时间周期,默认为YEAR。
@Field.Sequence 字段编码
@Field.Sequence(sequence = "DATE_ORDERLY_SEQ",
prefix = "C",
size=6,
step=1,
initial = 10000,
format = "yyyyMMdd")
这段代码定义了一个名为Sequence的注解,用于配置编码生成的相关参数。具体属性包括: 以下是对每个参数的说明:
sequence
: 定义序列的名称或标识符,用于生成编码。可选项包括:SEQ
: 自增流水号(不连续)ORDERLY_SEQ
: 自增强有序流水号(连续)DATE_SEQ
: 日期+自增流水号(不连续)DATE_ORDERLY_SEQ
: 日期+强有序流水号(连续)DATE
: 日期UUID
: 随机32位字符串,包含数字和小写英文字母
prefix
: 编码的前缀,可以是任何字符串。suffix
: 编码的后缀,可以是任何字符串。size
: 编码的长度,默认为16个字符。step
: 编码生成的步长,默认为1。(包含流水号有效)isRandomStep
: 是否使用随机步长,默认为false。initial
: 序列的初始值,默认为1000L。(包含流水号有效)format
: 编码的格式,可以是任何格式字符串。 (包含日期有效)source
: 编码的来源,可以是手动指定或系统自动生成。zeroingPeriod
: 重置编码计数的时间周期,默认为YEAR。
模型序列生成器(举例)
Step1 为PetShop增加一个@Model.Code注解,并增加一个店铺编码(Code)字段
这里提供了两种方法来使用和定制CodeMode:
- 方法一:默认添加Code字段:
- 当你继承CodeMode时,系统会自动为你的模型添加一个名为Code的字段,无需额外操作。
- 这种方法适用于不需要定制Code字段的情况,使用默认设置即可满足需求。
- 方法二:重写Code字段:
- 如果你希望定制Code字段,例如修改注释或添加其他属性,可以在继承CodeMode的子类中重写Code字段。
- 通过重写字段,你可以更灵活地定制Code字段的属性和行为,包括注释、类型、默认值等。
根据你的需求和偏好,选择适合的方法来使用和定制CodeMode即可。
package pro.shushi.pamirs.demo.api.model;
...//import
@Model.model(PetShop.MODEL_MODEL)
@Model(displayName = "宠物店铺",summary="宠物店铺",labelFields = {"shopName"})
@Model.Code(sequence = "DATE_ORDERLY_SEQ",prefix = "P",size=6,step=1,initial = 10000,format = "yyyyMMdd")
public class PetShop extends CodeModel {
public static final String MODEL_MODEL="demo.PetShop";
@Field(displayName = "店铺编码")
private String code;
}
生成的结果展示:
P20240201010000
字段序列生成器
字段编码生成器,在对应的字段上增加,并使用Field.Sequence注解即可
Step1 为PetShop增加一个字段codeTwo并增加@Field.Sequence注解
package pro.shushi.pamirs.demo.api.model;
...//import
@Model.model(PetShop.MODEL_MODEL)
@Model(displayName = "宠物店铺",summary="宠物店铺",labelFields = {"shopName"})
@Model.Code(sequence = "DATE_ORDERLY_SEQ",prefix = "P",size=6,step=1,initial = 10000,format = "yyyyMMdd")
public class PetShop extends CodeModel {
public static final String MODEL_MODEL="demo.PetShop";
@Field(displayName = "店铺编码")
private String code;
@Field(displayName = "店铺编码2")
@Field.Sequence(sequence = "DATE_ORDERLY_SEQ",prefix = "C",size=6,step=1,initial = 10000,format = "yyyyMMdd")
private String codeTwo;
}
生成的结果展示:
C20240201010000
其他类型编码
@Field(displayName = "SEQ")
@Field.Sequence(sequence = "SEQ", prefix = "C", size = 6, step = 1, initial = 10000)
private String testSeq;
执行结果:C010000
@Field(displayName = "ORDERLY_SEQ")
@Field.Sequence(sequence = "ORDERLY_SEQ", prefix = "C", size = 6, step = 1, initial = 10000)
private String testOrderlySeq;
执行结果:C010000
@Field(displayName = "DATE_SEQ")
@Field.Sequence(sequence = "DATE_SEQ", prefix = "C", size = 6, initial = 10000, format = "yyyyMMdd")
private String testDateSeq;
执行结果:C20240202010000
@Field(displayName = "DATE")
@Field.Sequence(sequence = "DATE", prefix = "C", size = 6, initial = 10000, format = "yyyyMMdd")
private String testDate;
执行结果:C20240202
@Field(displayName = "UUID")
@Field.Sequence(sequence = "UUID", prefix = "C", size = 6, initial = 10000)
private String testUUID;
执行结果: C0c306d471a1c495eb25adcab21e8764e