1.背景
在企业应用中单据编号的自定义是一个很常见的需求,如工号、业务单据编码等,能不能抽象一个通用的框架呢?
2.思路
这里的难点在于实现"解释器",比如将"前缀"是日期、年月、固定字符、部门代码等。而且“解释器”的“规则”允许动态增加。实施人员和用户可以自由改变单号的生成规则。
还要考虑并发问题,如一个单据同时多人访问编码是否唯一,如果不唯一那就有问题了。
3.具体实现类图
4.界面使用效果
这个编码规则的维护页面可是耗费了我不少的精力,除了编码规则的技术实现还要考虑这样一个技术难题,就是表格级联,是什么意思呢就是当一个编码生成规则有很多段的时候,不同的段的信息是不一样的,如果一个段是日期,那么编码段值就是年月日或者只有年月等可以选择,而如果编码段是自定义那就是那么就是固定字符需要用户手动输入,而且是必须项,还有很多种,很种段类开对应的段值都是不一样的,所以需要动态改变同列不同行采用的是不同控件处理。
首先要先维护编码规则信息,之后是程序调用生成编码。编码生成已经集成到最新的代码生成器中。可以完美的结合快速代码生成器进行使用。那么我们就一起来体验一下吧。
1.打开编码规则程序:
2.新增,编码规则:
3.输入编码规则编码和选择模块,再增加编码规则段。规则编码段有自定义、日期、流水号、部门、公司、用户编码等。
规则讲解:
- 编码段,可以是用户自定义、日期、流水码、公司等等。
- 编码段值,与编码段是一对,在编码段不同时意义不同。
- 流水号可以不是最后一个编码段,可以是中间的段。但一个业务单据的编码规则只能有一个流水码段。
- 长度、补位,只有流水码需要补位其它都是定长。流水号不够长度时是否补位,如果补位补位的字符是什么。
- 初始值,流水码从哪个值做为第一个编码出现。
- 步长,当获取最大编码时流水码下一个编码是什么这也是关键值,默认步长是1。
- 流水依据段,是查当前最大编码是否依据这个编码段。这也是这个编码生成的一个特点,也是为什么流水码可以不是最后一个的关键。
4.维护完成后 生效保存。
5.保存成功后,调用时可以按编码规则的编码或者模块编码获取最大编号。
6.下面是
5.高并发测试结果
同时起了100个线程,和每个线程获取单据号100次。最终测试结果是可以保证唯一性的,如下:
6.优点
1. 编码规则用户可以进行维护,方便快捷,简单方便,组合性强。
2. 可以用于业务单据的单号也可以单独调用使用。灵活。
3. 同时在调用时也可以选择获取的最大编号是否立即生效。
4. 还解决了easyui的技术问题:动态改变同列不同行采用的是不同控件处理。
5. 处理了并发问题,有效防止出现重复编码。
6. 代码生成器中增加了 “业务单号”,完全与单表和多表生成代码进行整合。
作者: 王春天 2015-11-23 作者Blog:出处:
如果觉得还不错,欢迎转载。
本系列文章列表如下:
基于SNF-快速开发平台框架的系列文章: