# 订单和流水号的区别

  • 订单号:是订单的唯一编号,经常用来做检索,所以应当是数字类型的主键
  • 流水号:一般是打印在购物单据上的字符串,便于阅读,但是不用做查询

来看看一个流水号的规则

image-20200607173145363

品类编号:如果一个订单中有多个品类,你可以取最贵的那一个;上图是一个 28 位的流水号。

至于流水号的组成规则,根据自身的业务需求来制定;

下面是用 java 代码生成的一个示例

 @Test
    public void fun1() {
        String orderCode = createOrderCode("S", "123456", "10001", "200520");
        // S123456100012005204676137770
        System.out.println(orderCode);
    }

    public static String createOrderCode(String type,
                                         String organizationId,
                                         String spgId,
                                         String date) {
        StringBuilder builder = new StringBuilder();
        builder.append(type);
        builder.append(organizationId);
        builder.append(spgId);
        builder.append(date);
       // 主要是这个生成随机数的 API。 jdk8 中的方式
        String random = ThreadLocalRandom.current()
                .ints(0, 9)
                .limit(10)
                .mapToObj(Integer::toString)
                .collect(Collectors.joining(""));
        builder.append(random);
        return builder.toString();
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25