使用Expression,Func参数,实现统一单据号生成
创始人
2024-05-07 19:50:15
0

    一般一个业务系统里,单据都会有一个可读的单据号,比如单据日期(yyyyMMdd)+6位累加数字。可以系统内唯一,也可以模块内唯一。如果是SAAS系统,每个客户之间还要独立,比如A客户商品模块有流水号20220101000001,B客户商品模块也有20220101000001流水号。


    这篇文章主要是说明用Expression,Func参数,实现统一的单据号生成代码。所以不考虑高并发,分布式的情况。如果是高并发,分布式应该用缓存,预生成,单独部署服务去生成。


    生成单据号,需要知道当前是哪个模块,当前模块当前客户最近一条单据号,在上面累加。这里直接从数据库读最近一条记录。

需要解决的问题
一,系统内所有模块都可以用
    因为是从数据库读,公司用efcore。外部传入模块Entity,ef就知道查哪个表了。总之这里从外部传入能唯一标识哪个模块就行。

先创建一个表Blog,字段number,type,date.注意连接字符串(MyContext.cs里)我用了绝对路径,因为生成数据库时,当前目录是项目路径。运行起来后就是当前路径是bin路径。这个你改一下你自己的绝对路径就行。数据库都是自动生成的。
ef 迁移不熟的看这个官方说明,要做的就是

1,代码写好 
2 创建名为 InitialCreate 的迁移       dotnet ef migrations add InitialCreate
3创建数据库和架构                          dotnet ef database update

 流水号的逻辑,直接看代码​​​​​​​吧,看懂你就会了,其实没啥东西。


二,可以指定生成条件,比如入库,出库都记录到库存流转模块, 但入库和出库需要可以通过流水号辨别。
源码里把type字段理解成出库入库标识就行了,当条件传入就行了。


三,可以指定生成规则
把生成规则也当参数传入就行了,见TNumberCreater

四,可以一次性生成多个。 
这个没啥可说的,生成一个和生成N个的问题。注意哈,正常来说,生成N个流水号,那么这些流水号就被占用了,再请求流水号应该继续累计。但是我这里只是说用Expression,Func去解决公共生成流水号,不考虑并发,生成流水号也没有单独的服务。 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...