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();
|
}
|
}
|