在我们很多应用系统中,往往都需要根据实际情况生成一些编码规则,如订单号、入库单号、出库单号、退货单号等等,我们有时候根据规则自行增加一个函数来生成处理,不过我们仔细观察后,发现它们的编码规则有很大的共通性,因此可以考虑使用一些通用的业务编码规则生成,从而在系统中统一维护即可,本篇随笔介绍如何在WInform界面中实现通用的业务编码规则生成。
1、常见单号的业务编码规则
刚才我们提到一些编码规则,如订单号、入库单号、出库单号、退货单号等等,它们都是有大同小异的规则,有前缀、有日期的编码、有一些流水号,还有一些特殊的规则处理,往往就是这些,需要协调好流水号的增加处理即可。
例如,原来在我的CRM业务模块中,增加了一个函数,用来生成订单号的,如下所示。
/// <summary> /// 生成单据号码,编码为XS-{userId}-{yyyyMMdd}-流水号 /// </summary> /// <returns></returns> public async Task<string> GetOrderNo() { string prefix = string.Format("XS-{0}-{1}", CurrentApiUser.Id, DateTime.Now.ToString("yyyyMMdd")); //获取当天的记录数量+1 DateTime currentDate = DateTime.Now.ToString("yyyy-MM-dd").ToDateTime(); //当前日期 //计算条件数量+1 int count = this.EntityDb.Count(s => s.OrderDate >= currentDate && s.OrderDate <= currentDate.AddDays(1)) + 1; //循环检索,直到不重复的编号 string number = string.Format("{0}-{1}", prefix, count); while (true) { var result = await CheckNumberExist(number); if (result) { //存在增加1再判断 number = string.Format("{0}-{1}", prefix, count++); } else { break; } } return number; }
12-04 19:20