jiangqs
2023-08-06 beeda8df0023376dbb2021148a021731dc4aedb0
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/CodeFactoryUtil.java
@@ -5,7 +5,6 @@
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.security.SecureRandom;
import java.util.Date;
import java.util.Random;
@@ -21,14 +20,13 @@
@Component
public class CodeFactoryUtil {
    private static RedisService redisService = null;
    //静态住入到自己的类中
    private static RedisService redisService;
    //将静态属性以入参(形参)的方式传入一个方法中,然后将此方法通过 @Resource 注入到Spring容器中
    @Resource
    public void setService(RedisService redisService) {
        CodeFactoryUtil.redisService = redisService;
    private static RedisService getRedisService() {
        if (redisService == null) {
            redisService = ApplicationContextUtil.getBean(RedisService.class);
        }
        return redisService;
    }
    /**
@@ -40,6 +38,13 @@
     * 商户编号
     */
    private static final String SHOP_PREFIX = "HRT_S";
    /**
     * 商品编号
     */
    private static final String GOODS_PREFIX = "HRT_G";
    /**
     * 商户订单前缀
@@ -56,6 +61,41 @@
     */
    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";
    /**
     * 退款订单前缀
@@ -70,7 +110,7 @@
     * 用户id和随机数总长度
     */
    private static final int SHOP_LENGTH = 4;
    private static final int SHOP_LENGTH = 5;
    private static final int MEMBER_LENGTH = 6;
@@ -80,19 +120,20 @@
     * 更具id进行加密+加随机数组成固定长度编码
     */
    /*public static void main(String[] args) {
    }*/
    public static void main(String[] args) {
        System.out.printf("getShopNo()"+getShopNo());
    }
    /**
     * 获取商户编号
     *
     * @param shopId
     * @return
     */
    public static String getShopNo(Long shopId) {
    public static String getShopNo() {
        String shopNo;
        String prefix = SHOP_PREFIX;
        return toFillZeroCode(prefix, SHOP_LENGTH, shopId);
        String suffixNumber = getNoSuffixNumber(prefix);
        shopNo = prefix + suffixNumber;
        return shopNo;
    }
    /**
@@ -105,33 +146,73 @@
        return toFillZeroCode(prefix, MEMBER_LENGTH, 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;
    /**
     * @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 getSuffixNumber(String prefix){
    private static String getNoSuffixNumber(String prefix){
        Integer suffixNumberInt;
        String suffixNumber = "0001";
        if(redisService.hasKey(prefix)){
            suffixNumberInt = redisService.getCacheObject(prefix);
            suffixNumber = toFillZeroSuffixNumber(suffixNumberInt);
        String suffixNumber = "00001";
        if(getRedisService().hasKey(prefix)){
            suffixNumberInt = getRedisService().getCacheObject(prefix);
            suffixNumber = toFillZeroSuffixNumber(suffixNumberInt,SHOP_LENGTH);
            suffixNumberInt = suffixNumberInt + 1;
            redisService.setCacheObject(prefix, suffixNumberInt, 24L, TimeUnit.HOURS);
            getRedisService().setCacheObject(prefix, suffixNumberInt);
        }else{
            redisService.setCacheObject(prefix, 1, 24L, TimeUnit.HOURS);
            getRedisService().setCacheObject(prefix, 1);
        }
        return suffixNumber;
    }
    private static String toFillZeroSuffixNumber(Integer suffixNumberInt){
    /**
     * @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);
            suffixNumber = toFillZeroSuffixNumber(suffixNumberInt,ORDER_LENGTH);
            suffixNumberInt = suffixNumberInt + 1;
            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 = 4 - length;
        int fillLength = maxLength - length;
        StringBuilder idsbs = new StringBuilder();
        for (int i = 0; i < fillLength; i++) {
            idsbs.append("0");