需求事这样的
1.订单id类似 2012041900001,2012041900002,2012041900003,2012041900004
2.不能重复
*3.在用户未下订单之前 订单编号要显示出来
大家有啥好的解决办法吗

解决方案 »

  1.   

    var bCode = "";
    var date = new Date();
    bCode =  date.getFullYear() + date.getMonth() + date.getDay() + date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds();
    document.getElementById("textField2").value = bCode;
    这样子、
      

  2.   


    不是这样的吧
    应该date.getFullYear() + date.getMonth() + date.getDay() 后面再加自动增长的Id吧
      

  3.   

    订单编号可以在加载页面前,在后台生成,查询订单表中是否存在当天的订单(可以用日期模糊查询),存在:抓取最新(大)的编号+1
    不存在生成一个当天日期+00001
    把订单编号设最好为long此方法简单 但不严谨
      

  4.   


    我刚开始页事这样想的 但是  订单编号是 要提前显示给用户的  这种做法有可能 不同的用户显示的订单编号事一样的(A用户获取的count是1 但是还没有提交订单 B又来获取了 count还是1  A和B用户的订单id就一样了)
      

  5.   

    日期+随机生成的5位数
    Random random = new Random();
    System.out.println(random.nextInt(89999) + 10000);也不是很严谨
      

  6.   

    内存中缓存一个Map<String, String>的对象。里面存储每天的订单。key为日期,value为当前第几个
    当天删除前一天的。先获取当前日期,例如:20120419,然后去map里面获取,如果没获取到则创建一个放到map里面。并用前一天的日期去获取,如果获取到了就remove。每次获取的时候+1就好了。其他就比较简单了。其实很多种方式,这只是一种实现而已
      

  7.   

    2012041900001 分为两部分,20120419 +   00001
    日期20120419 + 自动编号 00001
    注意,自动编号,要防止多线程并发访问安全的问题。
    所以,获取自动编号的时候,需要加锁
    给你的对象加锁。
    synchronized(obj){//代码
    }其他的没什么了。
      

  8.   

    没有那么复杂System.NanoTime() 
    再保险点就是存之前在查一遍
      

  9.   

    自定义前缀+日期+流水需要2张表一个是编号表一个是使用表编号表记录编码,也就是编号的格式使用表记录编号是否使用 使用过的编号例如MM20120419001 即使订单删除了 
    第二次显示的时候会是MM20120419002,不会是MM20120419001具体怎么做看楼主思路了,编号表肯定是有几个字段要注意第一 前缀, 第二 日期,  第三 流水
      

  10.   

    代码写好了 5.1加班擦擦的
    /**
     * 生成任务id号:两位年份两位月份两位日期+(当天任务总数+1),如果任务总数的长度不够8位,前面补零,如:12041900000001
     * 
     * @return
     */
    private Map<String, Long> taskIdMap = new HashMap<String, Long>();
    ReadWriteLock rwLock = new ReentrantReadWriteLock(); public String queryMatterId() {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
    Date date = new Date();
    String key = dateFormat.format(date);
    Long taskId;
    rwLock.readLock().lock();
    try {
    taskId = taskIdMap.get(key);
    } finally {
    rwLock.readLock().unlock();
    }
    rwLock.writeLock().lock();
    try {
    if (null == taskId) {
    taskIdMap.clear();
    // taskIdMap
    long id = buildTaskid(date);
    taskIdMap.put(key, id);
    taskId = id;
    } else {
    taskIdMap.put(key, taskId + 1);
    }
    } catch (Exception e) {
    throw new RuntimeException("生成任务id同步写锁坏了");
    } finally {
    rwLock.writeLock().unlock();
    } StringBuilder sb = new StringBuilder(key);
    return sb.append(fillZero(8, String.valueOf(taskId))).toString(); }
    /**
     * 补零
     * 
     * @param length 补零后的长度
     * @param source需要补零的长符串
     * @return
     */
    private String fillZero(int length, String source) {
    StringBuilder result = new StringBuilder(source);
    for (int i = result.length(); i < length; i++) {
    result.insert(0, '0');
    }
    return result.toString();
    }

    public java.util.List<MatterVO> query(MatterVO mattervo,int start, int end) throws DataAccessException {
         try{
         return sqlMapClient.getSqlMapClientTemplate().queryForList(mattervo.getClass().getSimpleName() + ".selectByProperties", mattervo,start,end);
         } catch (Exception e) {
    throw new DataAccessException(e);
    } finally {
    }
        }