谈谈订单号和流水号的关系

订单号和流水号是不同的。
首先订单号是订单唯一的编号,而且电商平台的各种子系统也是根据订单来统计业务完成的情况,订单编号经常用来被查询,所以数据类型必须是数字,而且是全局唯一,那肯定就得主键字段了。

然后流水号是打印在一般是打印在购物单据上面的,里面一般包含了订单的相关信息,方便人员阅读,比如说有的工作人员看一眼单子就知道是线上还是线下,在哪家零售店买的,或者哪家仓库给你发的货,因为流水号是一个很长的字符串,所以注定合格字段不适合用来当主键,我们设计订单表时候是那订单号作为主键的,流水号只不过是个普通的字段,也没有设计索引,下面我们来看一个具体的流水号规则,看下图:

在这里插入图片描述

  • 第一位代表的是线上还是线下,如果是线上购物就是E,如果是线下购物那么这个字符就是S,当然这个可以随意的规定,没有人去限制你。
  • 第二部分是零售店或者仓库编号,你要结合前面的标志位,比如说S代表的是线下,所以S后面的字符就是零售店的编号
  • 第三部分就是商品的品类编号,因为我们在品类表中设计的编号是5位字符的,所以这里我就用5位字符来表示订单的品类编号。如果订单中购买的商品很多,品类还不相同怎么办?也没有关系你把其中最贵的商品的品类作为流水的品类就好了呀,流水号只是一个标示的字符串而已,没有什么大不了的
  • 第四部分是购物日期,年月日加起来是6个字符
  • 第五部分是随机数,10位字符,这是用程序动态生成的

这五个部分加在一起,一共是28个流水号,这是我们记的流水号规则,当然了同学们也可以根据实际的业务自己设计流水号。接下来模拟生成下流水号

public class Demo1{
	public static String createOrder(String type,String organizationId,String spId,String date){
		StringBuffer buffer=new StringBuffer();
		buffer.append(type);
		buffer.append(organizationId);
		buffer.append(spgId);
		buffer.append(date);
		//java里挺好的新的生成随机数的方法
		ThreadLocaleRandom.current().ints(0,9).limit(10).forEach((one)->{
			buffer.append(one);
		});
		return buffer.toString();
	}
	public static void main(String [] args){
		String code=createOrderCode("S","000012","11002","20180514");
		System.out.println(code);
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值