利用redis创建订单号

来源:互联网 发布:c语言入门那本书好 编辑:程序博客网 时间:2024/06/04 22:12
该程序订单号有业务类型(飞机票业务是1或者火车票业务是2依次类推)+日期(四位数)+默认数字(100)+六位随机数总共14位的订单号
首先每天第一次都会生成key,并保存订单号,第二次获取订单号,会根据第一次生成的key获取订单号,并且加1,成为第二个订单号并保存,有序性。
@Overridepublic 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;}
原创粉丝点击