| | |
| | | */ |
| | | public String generate(String prefix) { |
| | | // 全系统共用同一自增序列,保证编码「16 位纯数字」且全系统唯一 |
| | | Long no = stringRedisTemplate.opsForValue().increment(BizNoUtils.GLOBAL_SEQ_KEY); |
| | | return BizNoUtils.format(no); |
| | | // 随机生成 16 位纯数字编码,并用 Redis 集合查重,保证全系统唯一(不使用自增/顺序) |
| | | for (int i = 0; i < BizNoUtils.MAX_RETRY; i++) { |
| | | String code = BizNoUtils.randomCode(); |
| | | Long added = stringRedisTemplate.opsForSet().add(BizNoUtils.USED_SET_KEY, code); |
| | | if (added != null && added > 0) { |
| | | return code; |
| | | } |
| | | } |
| | | throw new IllegalStateException("生成唯一业务编码失败,请重试"); |
| | | } |
| | | |
| | | } |