V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
guoyu4126
V2EX  ›  程序员

怎样设计订单号,对客户展示更友好,也便于技术开发?

  •  
  •   guoyu4126 · 2018-05-14 22:18:51 +08:00 · 5044 次点击
    这是一个创建于 2413 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的订单号设计为 6 位数字。 想重新设计一下订单号

    1、对客户展示友好 2、尽量以全数字为主

    21 条回复    2018-05-15 18:28:50 +08:00
    3dwelcome
        1
    3dwelcome  
       2018-05-14 22:33:11 +08:00 via Android
    改成三位数字订单号,技术层面订单号加上用户的手机号当前缀,就不会冲突了。
    jimzhong
        2
    jimzhong  
       2018-05-14 22:37:03 +08:00
    @3dwelcome 如果客户有超过 1000 个订单就冲突了吧。建议加上年和月。
    loading
        3
    loading  
       2018-05-14 22:37:07 +08:00 via iPhone
    旁边给二维码就行
    yhxx
        4
    yhxx  
       2018-05-14 22:46:13 +08:00
    对客户展示友好是指什么?
    普通公司应该遇不到淘宝那种超出 int 上限的情况吧
    redtea
        5
    redtea  
       2018-05-14 22:49:17 +08:00
    参考淘宝,时间戳+6 位用户 ID。不过我还是没有想明白怎么防止用户 ID 尾号相同的用户在同一时间提交生成相同订单号。
    EarthChild
        6
    EarthChild  
       2018-05-14 22:57:40 +08:00
    @redtea #5 那就让那个人给你付款吧!
    woscaizi
        7
    woscaizi  
       2018-05-14 23:02:50 +08:00 via iPhone
    @redtea 淘宝订单号是单独的系统来生成的吧,这个系统有逻辑可以避免生成重复订单号。打完这句话我发现这简直是句废话。
    jowuIM
        8
    jowuIM  
       2018-05-14 23:04:11 +08:00
    @redtea 应该加上地域的 ID, 电话号段的分配本来就带地域的.
    Raymon111111
        9
    Raymon111111  
       2018-05-14 23:07:00 +08:00
    "对用户友好" 有例子吗? 啥意思
    FYK
        10
    FYK  
       2018-05-14 23:07:06 +08:00
    订单号这个东西超级复杂啊。可以搜一下:
    https://www.zhihu.com/question/19805896
    yangqi
        11
    yangqi  
       2018-05-14 23:07:37 +08:00
    订单号对客户友好?这本来就是个假命题,客户谁关心订单号的格式?自己开发方便安全就可以了
    sujin190
        12
    sujin190  
       2018-05-14 23:16:47 +08:00
    其实时间年月日时分秒对人是很容易记的了,每个人都自然对时间自然有理解,管理上也很友好,本身就是时序的,后面加上全局计数器、随机数或者用户 id 都行,都可以在短时间多机快速生成很多订单好
    有做法也可以年月日时分秒+1 字节机器 ID+2 字节进程 ID+1 字节进程内计数器,四字节转 10 个数字,一般就可以快速生成订单号了吧
    soli
        13
    soli  
       2018-05-14 23:42:58 +08:00
    楼上正解。
    airyland
        14
    airyland  
       2018-05-14 23:57:05 +08:00
    10 位左右的数字对用户就算友好了,加上日期并没有变得多么易读有用。对用户友好其实是方便用户复制、查看、念给电话客服,所以在排版上格式化下,四位一组就可以了,比如 2345 3446 345。另外订单界面加上复制功能。
    imydou
        15
    imydou  
       2018-05-15 06:50:25 +08:00
    @3dwelcome #1 不利于更换手机号
    echoZero
        16
    echoZero  
       2018-05-15 08:43:32 +08:00 via iPhone
    从用户角度:订单号需要短 方便用户联系客服
    从运营角度:不能连续,防止别人抓取。
    从技术角度:不能重复,能包含 sharding key,易于拓展,还要容量足够大。
    opengps
        17
    opengps  
       2018-05-15 09:16:49 +08:00
    @3dwelcome 别用手机号,容易涉及隐私保护问题,如果需要关联到用户,换成用户的 uuid

    订单号设计,可以直接体现下单时间,yyMMddxxxx,x 可以是可变长度,前面订单日期固定 6 位即可,xx 递增或者随机增长打乱接口被采集可能
    vencent00
        18
    vencent00  
       2018-05-15 09:19:01 +08:00
    @redtea 用种子表生成订单号
    opengps
        19
    opengps  
       2018-05-15 09:21:42 +08:00
    另外订单表单独用一个时间列做聚集索引,不建议订单号做主键,这样有利于将来表太大,分割表分区或者冷数据迁移
    qY3209HZitEb5Zty
        20
    qY3209HZitEb5Zty  
       2018-05-15 09:53:46 +08:00
    年月日+时间戳+随机数+用户 id 后 4 位
    fcten
        21
    fcten  
       2018-05-15 18:28:50 +08:00
    用户友好的意思是越短越好?那这和技术开发是互斥的,因为要保证不重复不连续一定需要足够的长度。
    可以参考 Twitter 的 snowflake 算法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2660 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:08 · PVG 18:08 · LAX 02:08 · JFK 05:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.