• 订单流水号的生成


      最近在做项目过程中,经常会遇到生成订单流水号唯一性的应用,也有不少同事也请教我对唯一性的 "流水号"的问题,根据个人所见,一般生成的规则都是根据日期来进行操作,我目前在做的一个项目:”报告卡“上的编码就是根据 ”yyyyMMdd+四位数字(累加)“的格式生成,一般对这一类的操作最好是在存储过程中生成。

      下面,我们来简单的举两种方法来生成订单流水号的唯一性:

    (1)通过存储过程方式生成(以Oracle为例)

    Create Or Replace Procedure MyProcedure

    {

    CV_1 OUT NVARCHAR2

    }

    AS

    BEGIN

    DECLARE

    V_CURRENTCODE NVARCHAR2(100)

    BEGIN

    SELECT MAX([编码字段名]) INTO V_CURRENTCODE FROM [表名];

    IF substr(V_CURRENTCODE,8) = to_char(sysdate,'yyyymmdd') THEN

    SELECT

    CAST(

    CAST(nvl(Max(substr([编码字段名] , 0 ,8)),0) AS nvarchar2(30)) || CAST(nvl(Max(substr([编码字段名] , 9 ,4)),0) AS nvarchar2(30))

    AS INT)+1

    AS [编码字段名]

    INTO CV_1

    FROM [表名]

    dbms_output.put_line(CV_1);

    ELSE

    SELECT DISTINCT(to_char(sysdate,'yyyymmdd')|| '0001') as [编码字段名] into CV_1 from dual ;

    dbms_output.put_line(CV_1);

    END IF;

    END;

    至于调用存储过程我这里就不举例子了,微软有专门提供访问数据层中存在调用 ”存储过程“的方法。

    (2)通过程序代码方式生成

    /// <summary>
    /// 生成流水号
    /// </summary>
    public class OrderHelper
    {
    /// <summary>
    /// 帮助类
    /// </summary>
    private OrderHelper() { }

    /// <summary>
    /// 生成订单编号
    /// 生成规则yyyyMMdd+四位数字
    /// </summary>
    /// <returns></returns>
    public static string GetOrderCode(string code)
    {
    if (string.IsNullOrWhiteSpace(code)) return string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMdd"), "0001");
    if (code.TrimEnd().Length <= 11 || code.TrimEnd().Length >= 13) return "当前编码规则不正确!";
    if (code.Substring(0, 8) == DateTime.Now.ToString("yyyyMMdd").TrimEnd())
    {
    if (Convert.ToInt32(code.Substring(9, 4)) >= 9999) return "当前编码规则已最大值,联系管理员扩大存储容量!";
    return string.Format("{0}{1}", code.Substring(0, 8), (Convert.ToInt32(code.Substring(9, 4)) + 1).ToString());
    }
    else
    return string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMdd"), "0001");
    }

    }

    只需调用静态方法即可返回编码。

    本文章是新注册用户的第一篇文章,有不足之处,请留言赐教。。。

    A Young idler  ~  an old beggar!

  • 相关阅读:
    电容降压的工作原理与计算
    B站开源ijkplayer 等多个项目
    Kindle支持哪些格式
    PPM格式解析
    YUV RGB播放器 打开, 显示RGB数据
    How to print 如何输出 int64_t,uint64_t的值 in C
    FileSeek文件内容搜索工具下载
    对android录制的NV21视频数据进行旋转(90,180,270)与剪切
    Adobe Flash Media Server安装
    Linux使用du和df查看磁盘和文件夹占用空间
  • 原文地址:https://www.cnblogs.com/YangJianhui/p/9147839.html
Copyright © 2020-2023  润新知