博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net可扩展的单据编号生成器-SNF.CodeRule--SNF快速开发平台3.2
阅读量:5008 次
发布时间:2019-06-12

本文共 1288 字,大约阅读时间需要 4 分钟。

1.背景

在企业应用中单据编号的自定义是一个很常见的需求,如工号、业务单据编码等,能不能抽象一个通用的框架呢?

2.思路

这里的难点在于实现"解释器",比如将"前缀"是日期、年月、固定字符、部门代码等。而且“解释器”的“规则”允许动态增加。实施人员和用户可以自由改变单号的生成规则。

还要考虑并发问题,如一个单据同时多人访问编码是否唯一,如果不唯一那就有问题了。

 

3.具体实现类图

4.界面使用效果

         这个编码规则的维护页面可是耗费了我不少的精力,除了编码规则的技术实现还要考虑这样一个技术难题,就是表格级联,是什么意思呢就是当一个编码生成规则有很多段的时候,不同的段的信息是不一样的,如果一个段是日期,那么编码段值就是年月日或者只有年月等可以选择,而如果编码段是自定义那就是那么就是固定字符需要用户手动输入,而且是必须项,还有很多种,很种段类开对应的段值都是不一样的,所以需要动态改变同列不同行采用的是不同控件处理。

 

首先要先维护编码规则信息,之后是程序调用生成编码。编码生成已经集成到最新的代码生成器中。可以完美的结合快速代码生成器进行使用。那么我们就一起来体验一下吧。

1.打开编码规则程序:

2.新增,编码规则:

3.输入编码规则编码和选择模块,再增加编码规则段。规则编码段有自定义、日期、流水号、部门、公司、用户编码等。

规则讲解:

  1. 编码段,可以是用户自定义、日期、流水码、公司等等。
  2. 编码段值,与编码段是一对,在编码段不同时意义不同。
  3. 流水号可以不是最后一个编码段,可以是中间的段。但一个业务单据的编码规则只能有一个流水码段。
  4. 长度、补位,只有流水码需要补位其它都是定长。流水号不够长度时是否补位,如果补位补位的字符是什么。
  5. 初始值,流水码从哪个值做为第一个编码出现。
  6. 步长,当获取最大编码时流水码下一个编码是什么这也是关键值,默认步长是1。
  7. 流水依据段,是查当前最大编码是否依据这个编码段。这也是这个编码生成的一个特点,也是为什么流水码可以不是最后一个的关键。

4.维护完成后 生效保存。

5.保存成功后,调用时可以按编码规则的编码或者模块编码获取最大编号。

6.下面是

5.高并发测试结果

同时起了100个线程,和每个线程获取单据号100次。最终测试结果是可以保证唯一性的,如下:

6.优点

  1. 编码规则用户可以进行维护,方便快捷,简单方便,组合性强。

  2. 可以用于业务单据的单号也可以单独调用使用。灵活。

  3. 同时在调用时也可以选择获取的最大编号是否立即生效。

  4. 还解决了easyui的技术问题:动态改变同列不同行采用的是不同控件处理。

  5. 处理了并发问题,有效防止出现重复编码。

  6. 代码生成器中增加了 “业务单号”,完全与单表和多表生成代码进行整合。

  

作者: 王春天 2015-11-23 作者Blog:出处:

  如果觉得还不错,欢迎转载。

本系列文章列表如下:

基于SNF-快速开发平台框架的系列文章:

 

转载于:https://www.cnblogs.com/spring_wang/p/4988837.html

你可能感兴趣的文章
【NOIP 模拟赛】改造二叉树 最长上升子序列
查看>>
【BZOJ 4556】[Tjoi2016&Heoi2016]字符串 SAM+二分+主席树
查看>>
带参数的方法
查看>>
高精度阶乘
查看>>
冲刺6
查看>>
第二次实训作业
查看>>
【转】让学习体系化,造福一大波上进青年
查看>>
Git使用二:git与svn的区别与工作流程
查看>>
python接口自动化(五)--接口测试用例和接口测试报告模板(详解)
查看>>
SpringMvc之java文件下载
查看>>
jsp关闭或刷新浏览器(解决浏览器不兼容),请求后台onbeforeunload、onunload
查看>>
关于Java基础
查看>>
python setDaemon
查看>>
开放api接口签名验证
查看>>
javascript基本概念
查看>>
css3 属性——calc()
查看>>
【Restful】三分钟彻底了解Restful最佳实践
查看>>
异步编程的方法
查看>>
IPv6攻击测试开源工具包-THC IPV6
查看>>
VS添加节点
查看>>