2 u010653640 u010653640 于 2017.09.18 08:11 提问

java提交订单时如何生成18位流水号

求一个思路,不用uuid。还有其他方法吗,生成订单的不重复的流水号

12个回答

zy841958835
zy841958835   Ds   Rxr 2017.09.18 08:24

201709180000000101
日期+userid+顺序号

u013743232
u013743232   2017.09.18 08:34

唯一不会重复的就是时间,那么我觉得我们就要把算法中增加当前时间

taoleialskdjfhg
taoleialskdjfhg 回复J2EE_鹫: 并发
2 个月之前 回复
Smile__xtj
Smile__xtj   2017.09.18 08:29

insert into t_trading(trading_code) values(CONCAT('DD',DATE_FORMAT(now(),'%Y%m%d'),LPAD(LAST_INSERT_ID()+1,20,'0')))

u012843361
u012843361   2017.09.18 08:40

可以参考数据库的UUID的取法,如果有并发时间一样会重复

huang931027
huang931027   2017.09.18 08:46

数据库建一个SEQ,每次去得到这个序列号,然后用bigdecimal转成18位

ChibiMarukoChan
ChibiMarukoChan   2017.09.18 09:03

订单号常见的几种方式:
1.利用数据库主键值产生一个自增长的订单号(订单号即数据表的主键)
2.日期+自增长数字的订单号(比如:2012040110235662)
3.产生随机的订单号(65865325365966)
4.字母+数字字符串式,字母有包含特别意义,C02356652

r562253897
r562253897   2017.09.18 10:03

一般流水号,都是有一定要求的,如可代表时间,可描述先后顺序,因此最佳解决方案是:时间+序列;
这里时间好解决,就是simpledateformat 的使用。问题就在序列这块,需要使用到数据库,或者说是写硬盘,其中写硬盘效率低且难维护。因此建议还是数据库序列吧。

orangeTop
orangeTop   2017.09.18 10:35

登录的主机ip地址+当前时间+每天的顺序号

hlh1039690326
hlh1039690326   2017.09.18 17:15

软件包 java.util.concurrent.atomic下提供了相关的类,可以用来生成顺序号

qq_22956867
qq_22956867   2017.09.18 17:35

参考如下代码的 编程思路 自己改改 就出来了,要开启事务,避免生成重复值

  /**
     * 获取固定长度自增值  每次获取 自动加1
     * @param var   一维key
     * @param var2  二维key 默认0
     * @param length 自增值长度
     * @return
     */
    public static int getIncrementValue(String var, String var2, int length) {
        var2 = var2 == null ? "0" : var2;
        TransactionDao db = new TransactionDao(DbCode.ROOGO);
        Integer val = null;
        try {
            db.update(" UPDATE `tab_sysconfig` SET `value` = (value + 1)  WHERE var = ? and var2 = ? ", var, var2);
            String v = db.getUnique("SELECT `value` FROM tab_sysconfig WHERE var = ? and var2 = ? ", var, var2);
            if (v != null && v.length() == length)
                val = Integer.valueOf(v);
        } finally {
            try {
                db.commit();
            } finally {
                db.close();
            }
        }
        if (val == null) {
            val = new Double(Math.pow(10, length - 1)).intValue() + 1;
            setValue(var, var2, String.valueOf(val));
        }
        return val.intValue();
    }
共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片