業務流水號規則生成組件

????????對于很多業務系統都需要生成業務流水號,如果訂單號、購采單號等等;而這些業務流水號并不是簡單的一個增長數值,它們很多時候都有一些不同的規則來定義,如不同類型的字母或地區拼音簡寫等。為了更靈活生成這些有規則的業務流水號BeetleX提供對應的組件,接下來簡單介紹一下組件的使用。

????????首先需要通過Nuget引用BeetleX.BNR組件,然后通過以下方法即可以生業務流水號

for (int i = 0; i < 10; i++)
{var number = await BNRFactory.Default.Create("[CN:廣州][D:yyyyMMdd][N:[D:yyyyMMdd]/000000]");Console.WriteLine(number);
}

那個規則看上去好像很復雜,不過先看一下結果輸出是怎樣的

GZ20220520000008
GZ20220520000009
GZ20220520000010
GZ20220520000011
GZ20220520000012
GZ20220520000013
GZ20220520000014
GZ20220520000015
GZ20220520000016
GZ20220520000017

以上流水號規則是[廣州拼間首字母]+[年月日]+[基于年月日為標識的6位自增量]。

????????組件提供的規則是由表達式組成,規則可以根據需求定義多個表達式;表達式的編寫方式是[表達式函數:參數]。接下來介紹一下組件提供的基礎表達式

[CN:中文]

? ? ? ? 返回對應中文信息拼間首字線大寫

[N:標識/填充格式]

? ? ? ? 根據標識來生成對應自增量的數字

[D:日期格式]

? ? ? ? 根據日期輸出當前日期

[S:字符]

????????輸出一個指定的字符

有了上面的描述,接下來定義一個簡單的規則

[CN:廣州][D:yyyyMMdd]

相信對應回上面的表達式應該能知道結果了。

?自定義表達式

????????組件默認提供的表達式有限,但可以根據實際需求來制定一個表達式,可以通過查看一個默認的表達式相信更容易理解

/// <summary>/// {D:yyyyMMdd}/// </summary>[ParameterType("D")]public class DateParameterHandler : IParameterHandler{public Task Execute(StringBuilder sb, string value){sb.Append(DateTime.Now.ToString(value));return Task.CompletedTask;}public BNRFactory Factory{get;set;}}

以上是日期輸出的表達式。

使用Redis自增

????????組件雖然提供了一個自增量的表達式,但存在一個問題就是不同服務之間是無法同步的;通過借助于Reids的自增函數就能實現不同服務中生成唯一的自增數。雖然這個表達式組件集成了,但并沒有直接引入到默認表達式模塊中,需要使用者單獨引入

DefaultRedis.Instance.Host.AddWriteHost("localhost");
BNRFactory.Default.Register("redis", new RedisSequenceParameter(DefaultRedis.Instance));
var number = await BNRFactory.Default.Create("[CN:廣州][redis:[D:yyyy]/000000]");

根據需要注冊一個表達式名稱即可使用。這個Redis的自增表達式實現也非常簡單

public class RedisSequenceParameter : IParameterHandler{public RedisSequenceParameter(Redis.RedisDB db){mRedisDB = db;}private Redis.RedisDB mRedisDB;public?BNRFactory?Factory?{?get;?set;?}public async Task Execute(StringBuilder sb, string value){string[] properties = value.Split('/');StringBuilder key = new StringBuilder();string[] items = RuleAnalysis.Execute(properties[0]);foreach (string p in items){string[] sps = RuleAnalysis.GetProperties(p);IParameterHandler handler = null;if (Factory.Handlers.TryGetValue(sps[0], out handler)){await handler.Execute(key, sps[1]);}}var redisKey = key.ToString();var number = await mRedisDB.Incr(redisKey);sb.Append(number.ToString(properties[1]));}}

示例代碼:

https://github.com/beetlex-io/BeetleX-Samples/tree/master/BeetleX.BNR.App

BeetleX

開源跨平臺通訊框架(支持TLS)

提供HTTP,Websocket,Redis,RPC和服務網關開源組件

ec43cb6d39a7416501ef2a3b3080ce6e.png

https://beetlex-io.com

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287159.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android之奔潰提示com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap

1 問題 Android端獲取服務端的數據然后我直接把數據轉hashMap提示錯誤如下&#xff0c; com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap 2 解決辦法 直接轉Map集合即可 (t.data as Map<String, String>).forEach({if (KEEP_NAME.equals…

ArcGIS中國工具(ArcGISCTools)3.2 安裝教程(附安裝包下載)

ArcGIS中國工具,簡稱CTools,集成在ArcGIS 10.x系列版本中。本文在ArcGIS10.7的基礎之上,演示3.2版本安裝過程,并提供下載地址共大家學習和交流。 一、安裝過程

函數式編程工具:filter和reduce

# -*- coding: utf-8 -*- #python 27 #xiaodeng #函數式編程工具&#xff1a;filter和reduce#python內置函數中&#xff0c;map函數是用來進行函數式編程這類工具最簡單的內置函數代數#函數式編程含義&#xff1a; #一種編程范式&#xff0c;也就是如何編寫程序的方法論&#x…

阿里云ECS,搭建MySQL5.7數據庫環境

為什么80%的碼農都做不了架構師&#xff1f;>>> 配置mysql yum源 [rootiZbp1j6oiamq7t2otpryarZ ~]# cd /data/ [rootiZbp1j6oiamq7t2otpryarZ data]# ll total 0###################################下載mysql源安裝包# [rootiZbp1j6oiamq7t2otpryarZ data]# wge…

Python——通過斐波那契數列來理解生成器

一、生成器&#xff08;generator&#xff09; 先來看看一個簡單的菲波那切數列&#xff0c;出第一個和第二個外&#xff0c;任意一個數都是由前兩個數相加得到的。如&#xff1a;0,1,1,2,3,5,8,13...... 輸入斐波那契數列前N個數&#xff1a; def fab(max): n, a, b 0, 0, 1 …

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(9)集萬家之長不死 python

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

公司c語言面試題目,c語言面試最必考的十道試題,求職必看!!!

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓6、free()函數問&#xff1a;下面的程序會在用戶輸入’freeze’的時候出問題&#xff0c;而’zebra’則不會&#xff0c;為什么?#include int main(int argc, char *argv[]) {char *ptr (char*)malloc(10);if(NULL ptr){printf(…

Android之解決TabLayout里面每個Tab項的間距和修改指示線的長度(非反射)和修改選中字體大小

1 問題 1)由于TabLayout設置了可滑動Tab參數 app:tabMode="scrollable" 導致每個Tab之間的間距很大,但是UI設計圖里面的字體之間的間距很小,我們改怎么解決? 2)修改TabLayout指示線的長度(非反射) 3)修改選中的字體大小并且加粗 2 解決辦法 問題1解決辦法…

【重磅】ArcGIS 10.8手把手經典圖文安裝教程(附安裝包全套裝下載,親測可用)

ArcMap時代的最后一版軟件,未來官方對ArcMap的支持將僅限于提供補丁,更新和新環境支持,換句話說ArcMap10.8.X將會是最終版本,以后不會再有ArcMap10.9了,官方建議所有人在完成工作流程后立即遷移到ArcGIS Pro。 時間真快,ArcGIS 10.7剛裝完沒幾天,作為GISer的我,有的開始…

聊聊 C# 中的 Visitor 模式

前言 Visitor模式在日常工作中出場比較少&#xff0c;如果統計大家不熟悉的模式&#xff0c;那么它榜上有名的可能性非常大。使用頻率少&#xff0c;再加上很多文章提到Visitor模式都著重于它克服語言單分派的特點上面&#xff0c;而對何時應該使用這個模式及這個模式是怎么一…

AcWing 889. 滿足條件的01序列(卡特蘭數應用)

滿足條件的01序列 假設長度為n個序列要求滿足題意1的前綴0的個數不能超過1的個數 將問題抽象為從(0, 0)到(n, n) 向上走一個代表這一步對應序列中的值是1&#xff0c;向右走代表序列中的值是0 要想滿足1的前綴0的數量大于1的數量就需要滿足所有路過的途徑在y x這個函數個下面…

添加ASP.NET網站資源文件夾

ASP.NET應用程序包含7個默認文件夾&#xff0c;分別為Bin、APP_Code、App_GlobalResources、App_LocalResources、App_WebReferences、App_Browsers和“主題”文件夾。每個文件夾都存放ASP.NET應用程序的不同類型的資源。 方法 說明Bin  包含程序所需的所有已編譯程序集&#…

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(8)我們開始做一個數字小游戲吧

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

Microsoft SQL Server 2019開發版安裝配置教程

一、安裝cn_sql_server_2019_developer_x64 雙擊setup.exe進行安轉。 點擊【安裝】。 點擊【全新SQL Server獨立按住啊或向現有安裝添加功能】。 點擊【下一步】。

Git提示Please move or remove them before you switch branches.

1 問題 git checkout V1 提示錯誤如下 error: The following untracked working tree files would be overwritten by checkout:flutter_module/pubspec.lock Please move or remove them before you switch branches. Aborting2 解決辦法 git clean -df ../flutter_module…

c語言創建新指針,如何用c語言創建一個指針

您總是可以將指針強制轉換為整數&#xff0c;即整數大小比系統中使用的字節指針大3位。然后在向左移動3位后移動指針。然后將位信息存儲在最低有效3位上。然后可以用正常算術遞增該整數“位指針”。像這樣的東西&#xff1a;#include #define bitptr long long#define create_b…

請查收最新的 EF Core 7.0 更新

關注我們作者&#xff1a;Jeremy Likness排版&#xff1a;Rani近期.NET 數據團隊宣布了 EF Core 7.0 (EF7)的第四個預覽版。除了bug修復和更大功能的基礎工作外&#xff0c;此預覽版還包括以確保轉換器和比較器由類型映射處理&#xff0c;并支持將轉換器與值生成器一起使用。請…

【CC精品教程】ContextCapture 4.4.12(CC,Smart 3D)簡體中文版安裝教程(附安裝包下載)

ContextCapture 4.4.12簡體中文版是一款功能強大的三維建模軟件,用戶只需使用自己拍攝的普通照片,就能快速創建細節豐富的三維實景模型,并在項目的整個生命周期內為設計、施工和運營決策提供精確的現實環境背景。 目 錄 一、安裝過程 1. 安裝主程序cncpc040412333en_updt1…

《看聊天記錄都學不會C#?太菜了吧》(4)C# 中的尚方寶劍 “先斬后奏”

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

Android之解決多語言適配部分TextView內容左對齊和內容一行不排滿就到第二行問題

1 問題 1、多語言適配部分TextView內容左對齊 2、內容一行不排滿就到第二行問題 2 解決辦法 問題1、在TextView里面加入下面參數 android:gravity="center" 問題2、 import android.content.Context; import android.graphics.Paint; import android.text.TextUti…