跳至主要內容

编码生成器

Mr.Hope大约 5 分钟

编码生成器

编码生成器基础概念

在分布式环境下,单据生成指定格式的编码是一项常见需求。Oinone提供了简易的编码生成能力,可以帮助开发者在分布式环境中轻松实现这一功能。

编码生成器属性与使用

编码详解

定义

  1. 配置规则:
    • 在模型或字段上可以配置编码自动生成规则。
    • 当进行数据存储时,如果配置了编码自动生成规则的字段值为空,则系统将根据规则自动生成编码。
  2. 序列生成器:
  • 编码自动生成功能是通过序列生成器来支持的。
  • 序列生成器可以配置以下参数:
    • 初始序列:生成编码时的起始序列号。
    • 步长:序列递增的步长。
    • 日期格式:用于组成编码的日期格式。
    • 长度:生成的编码的长度。
  1. 组合配置:
  • 可以在序列生成器生成的序列编码基础上进行组合配置功能编码,生成最终的编码。

通过这种方式,系统可以灵活地根据配置规则和序列生成器生成各种类型的编码,以满足业务需求。这种自动生成编码的功能可以简化数据录入过程,提高数据的标识性和管理性。

属性解释

@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:

  1. 方法一:默认添加Code字段:
  • 当你继承CodeMode时,系统会自动为你的模型添加一个名为Code的字段,无需额外操作。
  • 这种方法适用于不需要定制Code字段的情况,使用默认设置即可满足需求。
  1. 方法二:重写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