jiangqs
2023-05-25 c203ff63489126a94d1be5dbfe32cadb69a70594
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/CodeFactoryUtil.java
@@ -2,11 +2,17 @@
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.redis.service.RedisService;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.poi.ss.usermodel.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.security.SecureRandom;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;
/**
 * @author jqs34
@@ -15,7 +21,18 @@
 * @date 2023年02月13日
 * @version: 1.0
 */
@Component
public class CodeFactoryUtil {
    //静态住入到自己的类中
    private static RedisService redisService;
    //将静态属性以入参(形参)的方式传入一个方法中,然后将此方法通过 @Autowired 注入到Spring容器中
    @Autowired
    public void setService(RedisService redisService) {
        CodeFactoryUtil.redisService = redisService;
    }
    /**
     * APP用户编码
@@ -28,9 +45,9 @@
    private static final String SHOP_PREFIX = "HRT_S";
    /**
     * 订单前缀
     * 商户订单前缀
     */
    private static final String ORDER_PREFIX = "BO";
    private static final String ORDER_PREFIX = "SC";
    /**
     * 退款订单前缀
@@ -41,7 +58,7 @@
     * 用户id和随机数总长度
     */
    private static final int maxLength = 4;
    private static final int MAX_LENGTH = 4;
    /**
     * 更具id进行加密+加随机数组成固定长度编码
@@ -61,44 +78,44 @@
     */
    public static String getShopNo(Long shopId) {
        String prefix = SHOP_PREFIX;
        return toFillZeroCode(prefix, maxLength, shopId);
        return toFillZeroCode(prefix, MAX_LENGTH, shopId);
    }
    /**
     * 获取会员编号
     * @param userId
     * @return
     */
    public static String getMemberNo(Long userId) {
        String prefix = APP_USER_PREFIX;
        return toFillZeroCode(prefix, maxLength, userId);
    public static String getShopOrderNo() {
        String orderNo;
        String timeTemp = DateFormatUtils.format(new Date(), "yyyyMMdd");
        String prefix = ORDER_PREFIX + timeTemp;
        String suffixNumber = getSuffixNumber(prefix);
        orderNo = prefix + suffixNumber;
        return orderNo;
    }
    /**
     * 获取订单编号
     *
     * @param userId
     * @return
     */
    public static String getOrderNo(Long userId) {
        String prefix = DateUtils.parseDateToStr( "yyyyMMddHHmmss",new Date());
        prefix = ORDER_PREFIX + prefix;
        return toFillZeroCode(prefix, maxLength, userId);
    private static String getSuffixNumber(String prefix){
        Integer suffixNumberInt;
        String suffixNumber = "0001";
        if(redisService.hasKey(prefix)){
            suffixNumberInt = redisService.getCacheObject(prefix);
            suffixNumber = toFillZeroSuffixNumber(suffixNumberInt);
            suffixNumberInt = suffixNumberInt + 1;
            redisService.setCacheObject(prefix, suffixNumberInt, 24L, TimeUnit.HOURS);
        }else{
            redisService.setCacheObject(prefix, 1, 24L, TimeUnit.HOURS);
        }
        return suffixNumber;
    }
    /**
     * 获取用户编号
     *
     * @param userId
     * @return
     */
    public static String getAppUserNo(Long userId) {
        return toFillZeroCode(APP_USER_PREFIX, 9, userId);
    private static String toFillZeroSuffixNumber(Integer suffixNumberInt){
        String suffixNumberStr = suffixNumberInt.toString();
        int length = suffixNumberStr.length();
        int fillLength = 4 - length;
        StringBuilder idsbs = new StringBuilder();
        for (int i = 0; i < fillLength; i++) {
            idsbs.append("0");
        }
        return idsbs.append(suffixNumberStr).toString();
    }
    /**
     * 0补位
     *