wuhuacong(伍华聪)的专栏

wuhuacong(伍华聪)的专栏

在我们很多应用系统中,往往都需要根据实际情况生成一些编码规则,如订单号、入库单号、出库单号、退货单号等等,我们有时候根据规则自行增加一个函数来生成处理,不过我们仔细观察后,发现它们的编码规则有很大的共通性,因此可以考虑使用一些通用的业务编码规则生成,从而在系统中统一维护即可,本篇随笔介绍如何在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