.Net可扩展的单据编号生成器-SNF.CodeRule--SNF快速开发平台3.2
1.背景
在企业应用中单据编号的自定义是一个很常见的需求,如工号、业务单据编码等,能不能抽象一个通用的框架呢?
2.思路
这里的难点在于实现"解释器",比如将"前缀"是日期、年月、固定字符、部门代码等。而且“解释器”的“规则”允许动态增加。实施人员和用户可以自由改变单号的生成规则。
还要考虑并发问题,如一个单据同时多人访问编码是否唯一,如果不唯一那就有问题了。

3.具体实现类图

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

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

2.新增,编码规则:

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

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

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

5.保存成功后,调用时可以按编码规则的编码或者模块编码获取最大编号。
6.下面是SNF.CodeGenerator-代码生成器生成的多表页面,运行效果如下:

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

6.优点
1. 编码规则用户可以进行维护,方便快捷,简单方便,组合性强。
2. 可以用于业务单据的单号也可以单独调用使用。灵活。
3. 同时在调用时也可以选择获取的最大编号是否立即生效。
4. 还解决了easyui的技术问题:动态改变同列不同行采用的是不同控件处理。
5. 处理了并发问题,有效防止出现重复编码。
6. 代码生成器中增加了 “业务单号”,完全与单表和多表生成代码进行整合。

作者: 王春天 2015-11-23
作者Blog:http://www.cnblogs.com/spring_wang
出处: http://www.cnblogs.com/spring_wang/p/4988837.html
如果觉得还不错,欢迎转载。
本系列文章列表如下:
基于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之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者
.Net可扩展的单据编号生成器-SNF.CodeRule--SNF快速开发平台3.2的更多相关文章
- SNF开发平台WinForm之七-单据打印和使用说明-SNF快速开发平台3.3-Spring.Net.Framework
8.1运行效果: 8.2开发实现: 1. 先要创建.grf报表模版,指定数据列.存储位置:Reports\Template文件夹下 2. 之后在程序当中查出数据,之后把数据和打印模版 传入方法进行 ...
- 审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow--SNF快速开发平台3.1
下面我们就从什么都没有,结合审核流进行演示实例.从无到有如何快速完美的实现,然而如此简单.低调而奢华,简单而不凡. 从只有数据表通过SNF.CodeGenerator代码生成器快速生成单据并与审核流进 ...
- 审核流(2)流程设计-SNF.WorkFlow功能使用说明--SNF快速开发平台3.1
流程设计 图形化的流程设计,更方便.直观 1.打开“流程设计“程序,如上.点击”新建“如下: 2.红色部分为必填项,审批对象是选择要审批的程序菜单,单据名称是在审核流流转时用于提示的单据名称,还要选择 ...
- SNF开发平台WinForm之十四-站内发送系统信息-SNF快速开发平台3.3-Spring.Net.Framework
1运行效果: 2开发实现: .组装站内信息发送实体对象. SNFService SNFService = new SNFService(); if (this.ucUser.SelectedIds ! ...
- SNF开发平台WinForm之十三-单独从服务器上获取PDF文件进行显示-SNF快速开发平台3.3-Spring.Net.Framework
1运行效果: 2开发实现: 如果需要单独显示PDF文件时用下面代码去实现,指定url地址. 地址: . 获取附件管理的实体对象: List<KeyValuePair<string, obj ...
- SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework
1.调用前组装参数 2.调用发送信息服务脚本 .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.Mess ...
- SNF开发平台WinForm之十一-程序打包-SNF快速开发平台3.3-Spring.Net.Framework
原来我们用的是微软自带的打包工具去打包,但感觉好像也是第三方做的打包并且很是麻烦,还有时不成功报错.那综合考虑就找一个简单实用的打包工具吧,就找到了NSIS这个.具体打包步骤如下: 1.安装NSIS ...
- SNF开发平台WinForm之十-Excel导入-SNF快速开发平台3.3-Spring.Net.Framework
7.1运行效果: 2.Excel导入开发实现 2.1. 创建窗体,修改命名空间 新增的窗体命名“FrmImport表名”,这个导入窗口比较其它窗口会特殊一些,需要继承BaseFormImport父级窗 ...
- SNF开发平台WinForm之九-代码生成器使用说明-SNF快速开发平台3.3-Spring.Net.Framework
下面就具体的使用说明: 1.获取代码生成器的授权码(根据本机)-----还原数据库-------改config-----代码生成器 改代码生成器Config 2.登录代码生成器 3.查看是否连接成功 ...
随机推荐
- Linux 僵尸进程的筛选和查杀
一.筛选 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 二.查杀 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' ...
- python中的面相对象
1.常用术语 2.创建类 empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享.你可以在内部类或外部类使用 Employee.empCount 访问. 第一种方法__init__() ...
- FZU 2150 Fire Game(双起点)【BFS】
<题目链接> 题目大意: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一 ...
- 条件随机场之CRF++源码详解-训练
上篇的CRF++源码阅读中, 我们看到CRF++如何处理样本以及如何构造特征.本篇文章将继续探讨CRF++的源码,并且本篇文章将是整个系列的重点,会介绍条件随机场中如何构造无向图.前向后向算法.如何计 ...
- Easydarwin加FFMPEG实现HLS流视频点播
前言 最近有点迷茫,所以将自己用过的东西写个Demo记录一下,复习复习. 具体实现: Easydarwin 一个开源的好用的流媒体平台框架. FFMPEG 一个视频音频处理神器,就是用起来有点麻烦, ...
- 打开Word时出现“The setup controller has encountered a problem during install. Please ...”
找到C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office Setup Controller,将这个文件夹删除或改名,就不再出现提 ...
- Project_Lemon测评系统使用经验
Project_Lemon使用经验 如果您还没有安装Project_Lemon,那么请移步https://www.cnblogs.com/CreeperLKF/p/9201859.html去查阅安装教 ...
- BZOJ.4589.Hard Nim(FWT)
题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到 ...
- BZOJ.3450.(JoyOI1952) Easy(期望)
题目链接 /* 设f[i]为到i的期望得分,c[i]为到i的期望连续长度 则若s[i]=='x',f[i]=f[i-1], c[i]=0 s[i]=='0',f[i]=f[i-1]+2*c[i-1]+ ...
- 2016年3月10日Android实习日记
待解决问题: *1:内部ScrollView与外部手势事件滑动冲突问题. *2:Linearlayout+View+LinearLayout横向排列,这其中两个LinearLayout内部各有3个竖向 ...