利用redis创建订单号,redis创建订单号
该程序订单号有业务类型(飞机票业务是1或者火车票业务是2依次类推)+日期(四位数)+默认数字(100)+六位随机数总共14位的订单号
首先每天第一次都会生成key,并保存订单号,第二次获取订单号,会根据第一次生成的key获取订单号,并且加1,成为第二个订单号并保存,有序性。
@Override public Long createSerialNumber(String biz,String type) { try { if (StringUtils.isBlank(biz)) return null; return kvClient.lockForProcess2( biz, System.currentTimeMillis() + "", PayDistributeLockPrefix.LOCK_ORDER_TIME, new DistributeLockProcessor<Long>() { @Override public Long process() { String date = DateUtils.DateToString(null, DateStyle.MMDD); String key = type + biz + date;// key String start = biz + date; String v = kvClient.read(key, String.class); String s = null;// value if (null == v) {// 每天第一次生成 s = start + "100" + RandomStringUtils.random(6, false, true); kvClient.save(key, s, Integer.MAX_VALUE); return Long.valueOf(s); } else { v = v.substring( v.length() - 7, v.length()); Integer returnInt = Integer.valueOf(v); returnInt++; v = start + returnInt; kvClient.save(key, v, Integer.MAX_VALUE); return Long.valueOf(v); } } }); } catch (Exception e) { LOGGER.info("获取订单编号失败", e); Ensure.that(e).isNotNull("09000001"); } return null; }
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。