系统编码

统一编码规则,在服务需要获取编码的时候,根据规则生成编码 支持版本:2.5.1

规则说明
规则类型类型说明
常数 固定的常量,不可变,例如一个字符串;
流水号每次按照固定的步长增长,可以指定有几位,不足的位置可以选择字符补齐,也可以选择重置时间,在,例如按照周,月,日重新将流水号的值从初始值开始计算。例如现在的流水号初始值是1,步长为1,需要4位,补齐的字符是0,重置类型是日,最后会生成一个流水号0001,下次就是0002,第二天这个流水号会自动从0001开始;
日期可以输入一个格式化字符串。例如yyyyMMdd,最后返回20230425;
业务号在生成编码的时候动态传入一个属性值,可以选择是否筛选。在选择是的时候,可以传入一个正则过滤出属性值中自己想要的部分。
汉字首字母用于传入的属性值如果是有汉字,并且想要提取其中汉字的首字母. 选择大小写用于最终返回的字符串是否是大写还是小写。例如传入属性值: 物料,最后返回值为wl;

1 配置编码规则

点击"系统工具"菜单-->选择"编码规则管理"-->选择"编码规则"页面
规则分类说明:
    系统规则:  hipermatic平台自用规则,不可以删除,可以修改;
    自定义规则:  用于开发新的模块,可以删除,可以修改;
使用以下步骤管理编码规则:
1. 规则分类的管理
点击规则分类 新增 创建新的分类,输入分组名称,点击保存,新增规则分类
分组名称通常是服务的名称,用于管理服务下存在的多个编码规则
点击修改按钮完成规则分类名称的修改
点击删除按钮完成规则分类的删除
2. 编码规则管理
选中规则分类,在右侧页面点击新增规则按钮,新增规则
填入规则编码,规则名称,选择规则分类,是否启用,点击保存按钮新增一条编码规则
是否启用,用于控制编码规则是否生效。在不启用的状态下才能对具体规则进行修改,防止修改正在使用的编码规则导致程序出错
点击新增规则段新增一个规则段
可以把一个编码看成一个个片段,每个片段有自己的类型,最终这些片段组成一个编码
新增页面弹框会选择规则类型,输入规则的配置,点击右下角保存按钮保存规则段
修改,上下移,删除功能
上下移功能用于重新对规则段列表排序,修改是对规则类型修改,删除用于删除规则段
点击测试,用于测试创建的规则是否按照预期生成编码
  如果规则里存在业务号,汉字这些规则,还会输入,对应的属性值,如下图所示

2 代码编写

1. 引入pom依赖文件
<dependency>
    <groupId>com.hvisions</groupId>
    <artifactId>hvisions-common-springboot-starter</artifactId>
    <version>3.5.3</version>
</dependency>
2. 示例代码
以下方法用于返回物料编码,只需要注入SerialCodeUtils,然后调用需要的方法就会根据配置返回一个编码
@Service
public class CodeDemoServiceImpl implements CodeDemoService {
    /**
    * 注入编码生成依赖
    */
    private final SerialCodeUtils serialCodeUtils;

    @Autowired
    public CodeDemoServiceImpl(SerialCodeUtils serialCodeUtils) {
        this.serialCodeUtils = serialCodeUtils;
    }

    @Override
    public String getMaterialCode() {
       // 此处传入的参数是编码规则的名称
        return serialCodeUtils.generateCode("material");
    }
}
SerialCodeUtils. generateCode()方法有以下的重载类,方法说明如下:
public class SerialCodeUtils {

    ...
    //用于传入规则编码生成规则,适用于没有业务号和汉字场景
    public String generateCode(String ruleCode) {
        return this.generateCode(ruleCode, Collections.emptyMap(), true);
    }

    //bean的作用是传入一个类,然后会去这个类中查找 1.规则配置中的业务号或者汉字 对应的属性值
    //例如: 在规则配置一个名为code的属性,那么就会去bean中找code这个属性对应的值,没有就是空
    public String generateCode(String ruleCode, Object bean) {
        return this.generateCode(ruleCode, BeanUtil.beanToMap(bean, new String[0]), true);
    }

    //businessAttr的作用是传入一个类,然后会去这个类中查找 1.规则配置中的业务号或者汉字 对应的属性值
    //例如: 在规则配置一个名为code的属性,那么就会去map中找code这个属性对应的值,没有就是空,与bean查找功能类似
    public String generateCode(String ruleCode, Map<String, Object> businessAttr) {
        return this.generateCode(ruleCode, businessAttr, true);
    }
    
    //测试方法,测试编码是否有效,注意: 这个方法不会对流水号自增
    public String generateTestCode(String ruleCode, Map<String, Object> businessAttr) {
        return this.generateCode(ruleCode, businessAttr, false);
    }

    ...
}
2023-10-12
0