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

解决方案 »

  1.   

    这个难吗? new Date();转换成你要的格式,然后再拼接上你的流水号!ok!
      

  2.   

    这个不难,难的是不能重复。字母+年月日+4位流水号字母的话,建议直接给成商品类别(商品类别应该会有英文缩写,写这个就好了)。年月日不知道你要换算成毫秒的还是类似于20120306这样?System.currentTimeMillis()获取毫秒数,要20120306这样,new Date();之后用simpleDateFormat格式话即可。四位流水号,不能重复,也不容易。建议从数据库查询出最后那笔订单号,截取后四位,判断,如果不是同一天,则直接给0001即可,否则累加。这三个组成的应该不会重复。
      

  3.   

    你确定9999个流水号够用吗?这个比较重要,其他的都是小问题。
    流水号可以缓存起来,可以以Map<日期,当前流水号值>这种方式,如果通过今天的日期获取不到,那么则把昨天的remove掉,并且重新往里面写入今天的流水号。但是要注意获取流水号方法的同步(如果是多线程的话)。
      

  4.   

    写一个函数,java里调用函数,唯一性的话直接用sequence保证,假如跨数据库就在价格表示
      

  5.   

    补充:错别字较多哈写个编码生成规则的CRUD 。
    再写个数据库函数,读取编码生成规则,依据编码生成规则生成需要的编码。
    主要就是单独弄一个ORACLE里面是sequence去控制流水号,再加上日期以及其他标识符去保证唯一性
    编码规则的字段样例如下:*业务前缀  *单据编码  *序列名称  
    *日期格式化模式 (格式化范例:YYYY表示年,YYYYMM标识年月,YYYYMMDD标识年月日) 
    *标识位置 NO-无前后缀PR-前缀SU-后缀 *重置日期类型 YYYY-年YYYYMM-月YYYYMMDD-日 *流水号位数  
      

  6.   

    1 自动流水号 生成:写一个 utils专门生成订单。 
         a 生成这个号的时候是 sync 的
         b 流水号第二天清零 : 可以考虑用 timerTask ,如果你要求的很严格,就用Quartz.注意同步。