日期:2014-05-20  浏览次数:20915 次

java怎么自动生成订单号
订单号要求前面 “字母+年月日+4位流水号” 每天生成的订单号最后4位流水号都得从1开始,要怎么实现?

------解决方案--------------------
这个难吗? new Date();转换成你要的格式,然后再拼接上你的流水号!ok!
------解决方案--------------------
这个不难,难的是不能重复。

字母+年月日+4位流水号

字母的话,建议直接给成商品类别(商品类别应该会有英文缩写,写这个就好了)。

年月日不知道你要换算成毫秒的还是类似于20120306这样?System.currentTimeMillis()获取毫秒数,要20120306这样,new Date();之后用simpleDateFormat格式话即可。

四位流水号,不能重复,也不容易。建议从数据库查询出最后那笔订单号,截取后四位,判断,如果不是同一天,则直接给0001即可,否则累加。

这三个组成的应该不会重复。


------解决方案--------------------
你确定9999个流水号够用吗?这个比较重要,其他的都是小问题。
流水号可以缓存起来,可以以Map<日期,当前流水号值>这种方式,如果通过今天的日期获取不到,那么则把昨天的remove掉,并且重新往里面写入今天的流水号。但是要注意获取流水号方法的同步(如果是多线程的话)。
------解决方案--------------------
写一个函数,java里调用函数,唯一性的话直接用sequence保证,假如跨数据库就在价格表示


------解决方案--------------------
补充:错别字较多哈

写个编码生成规则的CRUD 。
再写个数据库函数,读取编码生成规则,依据编码生成规则生成需要的编码。
主要就是单独弄一个ORACLE里面是sequence去控制流水号,再加上日期以及其他标识符去保证唯一性
编码规则的字段样例如下:

*业务前缀 *单据编码 *序列名称
*日期格式化模式 (格式化范例:YYYY表示年,YYYYMM标识年月,YYYYMMDD标识年月日) 
*标识位置 NO-无前后缀PR-前缀SU-后缀 *重置日期类型 YYYY-年YYYYMM-月YYYYMMDD-日 *流水号位数

------解决方案--------------------
字母+年月日+4位流水号数据库应该有 一张表记录使用过的单据号 必须要考虑并发问题。
------解决方案--------------------
并发问题直接抛到数据库端
------解决方案--------------------
并发问题直接抛到数据库端
------解决方案--------------------
1 自动流水号 生成:写一个 utils专门生成订单。 
a 生成这个号的时候是 sync 的
b 流水号第二天清零 : 可以考虑用 timerTask ,如果你要求的很严格,就用Quartz.注意同步。