package com.ruoyi.common.security.utils; import com.ruoyi.common.redis.service.RedisService; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.stereotype.Component; import java.security.SecureRandom; import java.util.Date; import java.util.Random; import java.util.concurrent.TimeUnit; /** * @author jqs34 * @ClassName CodeFactoryUtil * @description: TODO * @date 2023年02月13日 * @version: 1.0 */ @Component public class CodeFactoryUtil { private static RedisService redisService = null; private static RedisService getRedisService() { if (redisService == null) { redisService = ApplicationContextUtil.getBean(RedisService.class); } return redisService; } /** * APP用户编码 */ private static final String APP_USER_PREFIX = "HRT_M"; /** * 商户编号 */ private static final String SHOP_PREFIX = "HRT_S"; /** * 商品编号 */ private static final String GOODS_PREFIX = "HRT_G"; /** * 商户订单前缀 */ private static final String ORDER_PREFIX = "SC"; /** * 活动订单前缀 */ private static final String ACTIVITY_ORDER_PREFIX = "MS"; /** * 店铺创建订单前缀 */ private static final String SHOP_ORDER_PREFIX = "CJ"; /** * 积分商城订单前缀 */ private static final String INTEGRAL_ORDER_PREFIX = "JF"; /** * 直播订单前缀 */ private static final String LIVE_ORDER_PREFIX = "ZB"; /** * 拼团订单前缀 */ private static final String GROUP_ORDER_PREFIX = "PT"; /** * 砍价订单前缀 */ private static final String CUT_ORDER_PREFIX = "KJ"; /** * 采购订单前缀 */ private static final String PURCHASE_ORDER_PREFIX = "CG"; /** * 入库订单前缀 */ private static final String IN_ORDER_PREFIX = "RK"; /** * 出库订单前缀 */ private static final String OUT_ORDER_PREFIX = "CK"; /** * 退款订单前缀 */ private static final String ORDER_REFUND_PREFIX = "RO"; /** * 用户id和随机数总长度 */ /** * 用户id和随机数总长度 */ private static final int SHOP_LENGTH = 5; private static final int MEMBER_LENGTH = 6; private static final int ORDER_LENGTH = 4; /** * 更具id进行加密+加随机数组成固定长度编码 */ public static void main(String[] args) { System.out.printf("getShopNo()"+getShopNo()); } /** * 获取商户编号 * @return */ public static String getShopNo() { String shopNo; String prefix = SHOP_PREFIX; String suffixNumber = getNoSuffixNumber(prefix); shopNo = prefix + suffixNumber; return shopNo; } /** * 获取会员编号 * @param userId * @return */ public static String getMemberNo(Long userId) { String prefix = APP_USER_PREFIX; return toFillZeroCode(prefix, MEMBER_LENGTH, userId); } /** * @description 获取商品编号 * @author jqs * @date 2023/6/13 14:48 * @param * @return String */ public static String getGoodsNo() { String goodsNo; String prefix = GOODS_PREFIX; String suffixNumber = getNoSuffixNumber(prefix); goodsNo = prefix + suffixNumber; return goodsNo; } private static String getNoSuffixNumber(String prefix){ Integer suffixNumberInt; String suffixNumber = "00001"; if(getRedisService().hasKey(prefix)){ suffixNumberInt = getRedisService().getCacheObject(prefix); suffixNumber = toFillZeroSuffixNumber(suffixNumberInt,SHOP_LENGTH); suffixNumberInt = suffixNumberInt + 1; getRedisService().setCacheObject(prefix, suffixNumberInt); }else{ getRedisService().setCacheObject(prefix, 1); } return suffixNumber; } /** * @description 获取商城订单编号 * @author jqs * @date 2023/6/13 14:48 * @param * @return String */ public static String getShopOrderNo() { String orderNo; String timeTemp = DateFormatUtils.format(new Date(), "yyyyMMdd"); String prefix = ORDER_PREFIX + timeTemp; String suffixNumber = getOrderSuffixNumber(prefix); orderNo = prefix + suffixNumber; return orderNo; } private static String getOrderSuffixNumber(String prefix){ Integer suffixNumberInt; String suffixNumber = "0001"; if(getRedisService().hasKey(prefix)){ suffixNumberInt = getRedisService().getCacheObject(prefix); suffixNumberInt = suffixNumberInt + 1; suffixNumber = toFillZeroSuffixNumber(suffixNumberInt,ORDER_LENGTH); getRedisService().setCacheObject(prefix, suffixNumberInt, 24L, TimeUnit.HOURS); }else{ getRedisService().setCacheObject(prefix, 1, 24L, TimeUnit.HOURS); } return suffixNumber; } private static String toFillZeroSuffixNumber(Integer suffixNumberInt,Integer maxLength){ String suffixNumberStr = suffixNumberInt.toString(); int length = suffixNumberStr.length(); int fillLength = maxLength - length; StringBuilder idsbs = new StringBuilder(); for (int i = 0; i < fillLength; i++) { idsbs.append("0"); } return idsbs.append(suffixNumberStr).toString(); } /** * 0补位 * * @param prefix * @param totalLength * @param id * @return */ private static String toFillZeroCode(String prefix, int totalLength, Long id) { String idStr = id.toString(); int length = idStr.length(); int fillLength = totalLength - length; StringBuilder idsbs = new StringBuilder(prefix); for (int i = 0; i < fillLength; i++) { idsbs.append("0"); } return idsbs.append(idStr).toString(); } /** * 随机6位数生成 */ public static String getRandStr(int num) { // 默认6位 num = num != 0 ? num : 6; Random r = new SecureRandom(); StringBuffer str = new StringBuffer(); int i = 0; while (i < num) { str.append(r.nextInt(10)); i++; } return str.toString(); } }