diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/id/IdUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/id/IdUtils.java index 081ef193b..d0d1af6ac 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/id/IdUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/id/IdUtils.java @@ -4,6 +4,8 @@ import com.google.common.collect.Sets; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.RandomUtil; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Set; /** @@ -48,6 +50,28 @@ public class IdUtils { return UUID.fastUUID().toString(true); } + /** + * 通过UUID生成16位唯一订单号 + */ + public static String get16UUID(){ + // 1.开头两位,标识业务代码或机器代码(可变参数) + String machineId = "89"; + // 2.中间四位整数,标识日期 + SimpleDateFormat sdf = new SimpleDateFormat("MMdd"); + String dayTime = sdf.format(new Date()); + // 3.生成uuid的hashCode值 + int hashCode = UUID.randomUUID().toString().hashCode(); + // 4.可能为负数 + if(hashCode < 0){ + hashCode = -hashCode; + } + // 5.算法处理: 0-代表前面补充0; 10-代表长度为10; d-代表参数为正数型 + String value = machineId + dayTime + String.format("%010d", hashCode); + System.out.println(value); + return value; + } + + /** * 生成交易流水号 * @param pileSn 桩编号 例如:32010600019236 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java index 628377642..94ca118fc 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java @@ -2,6 +2,7 @@ package com.jsowell.pile.service.impl; import com.github.pagehelper.PageHelper; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * 会员基础信息Service业务层处理 @@ -186,7 +188,7 @@ public class MemberBasicInfoServiceImpl implements IMemberBasicInfoService { log.warn("根据会员id:{}, 目标运营商id:{}, 查询会员信息为空, 新建会员钱包", memberId, dto.getTargetMerchantId()); // 如果查询到钱包为空,就新建一个该运营商的钱包 walletInfo = MemberWalletInfo.builder() - .walletCode(IdUtils.fastSimpleUUID()) + .walletCode(IdUtils.get16UUID()) .memberId(memberId) .merchantId(dto.getTargetMerchantId()) .giftBalance(BigDecimal.ZERO) @@ -275,6 +277,16 @@ public class MemberBasicInfoServiceImpl implements IMemberBasicInfoService { return i; } + public static void main(String[] args) { + Set set = Sets.newHashSet(); + for (int i = 0; i < 1000000; i++) { + String s = IdUtils.get16UUID(); + System.out.println(s); + set.add(s); + } + System.out.println("set size:" + set.size()); + } + @Override public MemberVO queryMemberInfoByMemberId(String memberId) { if (StringUtils.isBlank(memberId)) {