1.背景
在企业应用中单据编号的自定义是一个很常见的需求,如工号、业务单据编码等,能不能抽象一个通用的框架呢?
2.思路
这里的难点在于实现"解释器",比如将"前缀"是日期、年月、固定字符、部门代码等。而且“解释器”的“规则”允许动态增加。实施人员和用户可以自由改变单号的生成规则。
还要考虑并发问题,如一个单据同时多人访问编码是否唯一,如果不唯一那就有问题了。
3.具体实现类图
4.界面使用效果
这个编码规则的维护页面可是耗费了我不少的精力,除了编码规则的技术实现还要考虑这样一个技术难题,就是表格级联,是什么意思呢就是当一个编码生成规则有很多段的时候,不同的段的信息是不一样的,如果一个段是日期,那么编码段值就是年月日或者只有年月等可以选择,而如果编码段是自定义那就是那么就是固定字符需要用户手动输入,而且是必须项,还有很多种,很种段类开对应的段值都是不一样的,所以需要动态改变同列不同行采用的是不同控件处理。
首先要先维护编码规则信息,之后是程序调用生成编码。编码生成已经集成到最新的代码生成器中。可以完美的结合快速代码生成器进行使用。那么我们就一起来体验一下吧。
1.打开编码规则程序:
2.新增,编码规则:
3.输入编码规则编码和选择模块,再增加编码规则段。规则编码段有自定义、日期、流水号、部门、公司、用户编码等。
规则讲解:
- 编码段,可以是用户自定义、日期、流水码、公司等等。
- 编码段值,与编码段是一对,在编码段不同时意义不同。
- 流水号可以不是最后一个编码段,可以是中间的段。但一个业务单据的编码规则只能有一个流水码段。
- 长度、补位,只有流水码需要补位其它都是定长。流水号不够长度时是否补位,如果补位补位的字符是什么。
- 初始值,流水码从哪个值做为第一个编码出现。
- 步长,当获取最大编码时流水码下一个编码是什么这也是关键值,默认步长是1。
- 流水依据段,是查当前最大编码是否依据这个编码段。这也是这个编码生成的一个特点,也是为什么流水码可以不是最后一个的关键。
4.维护完成后 生效保存。
5.保存成功后,调用时可以按编码规则的编码或者模块编码获取最大编号。
6.下面是SNF.CodeGenerator-代码生成器生成的多表页面,运行效果如下:
5.高并发测试结果
同时起了100个线程,和每个线程获取单据号100次。最终测试结果是可以保证唯一性的,如下:
6.优点
1. 编码规则用户可以进行维护,方便快捷,简单方便,组合性强。
2. 可以用于业务单据的单号也可以单独调用使用。灵活。
3. 同时在调用时也可以选择获取的最大编号是否立即生效。
4. 还解决了easyui的技术问题:动态改变同列不同行采用的是不同控件处理。
5. 处理了并发问题,有效防止出现重复编码。
6. 代码生成器中增加了 “业务单号”,完全与单表和多表生成代码进行整合。
如果觉得还不错,欢迎转载。
本系列文章列表如下:
基于SNF-快速开发平台框架的系列文章:
SNF快速开发平台3.2之--.Net可扩展的单据编号生成器-SNF.CodeRule
SNF快速开发平台3.1之--审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow
SNF快速开发平台3.1之--审核流(2)流程设计-SNF.WorkFlow功能使用说明
SNF快速开发平台3.1之--审核流(1)SNF.WorkFlow审核流简介
SNF快速开发平台3.0之--完美的代码生成器SNF.CodeGenerator-快速开发者的利器
基于MVC4+EasyUI的Web开发框架--Spring.Net.FrameworkV3.0总体介绍
SNF快速开发平台3.0之--文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)
SNF快速开发平台3.0之--asp.net mvc4 强大的导出和不需要上传文件的批量导入EXCEL
SNF快速开发平台3.0之MVC通用控件库展示-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
SNF快速开发平台3.0之BS页面展示和九大优点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI +Knockout
SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
SNF快速开发平台3.0之-CS页面-Asp.net+Spring.Net.Framework
SNF快速开发平台3.0之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者
作者: 王春天
QQ群:322581894 关于作者: 大连天翼信息科技有限公司 技术总监。 SNF快速开发平台 创始人。应用平台架构师、IT规划咨询专家、业务流程设计专家。 专注于快速开发平台的开发、代码生成器。同时专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,精通DotNet系列技术Vue、.NetCore、MVC、Webapi、C#、WinForm等,DB(SqlServer、Oracle等)技术,移动端开发。熟悉Java、VB及PB开发语言。在面向对象、面向服务以及数据库领域有一定的造诣。现从事项目实施、开发、架构等工作。并从事用友软件产品U8、U9、PLM 客开工作。 如有问题或建议,请多多赐教! 本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。