jiangqs
2023-05-25 c203ff63489126a94d1be5dbfe32cadb69a70594
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.ruoyi.shop.util;
 
 
 
import com.ruoyi.common.core.utils.DateUtils;
 
import java.security.SecureRandom;
import java.util.Date;
import java.util.Random;
 
/**
 * @author jqs34
 * @ClassName CodeFactoryUtil
 * @description: TODO
 * @date 2023年02月13日
 * @version: 1.0
 */
public class CodeFactoryUtil {
 
    /**
     * APP用户编码
     */
    private static final String APP_USER_PREFIX = "HRT_M";
 
    /**
     * 商户编号
     */
    private static final String SHOP_PREFIX = "HRT_S";
 
    /**
     * 订单前缀
     */
    private static final String ORDER_PREFIX = "BO";
 
    /**
     * 退款订单前缀
     */
    private static final String ORDER_REFUND_PREFIX = "RO";
 
    /**
     * 用户id和随机数总长度
     */
 
    private static final int MAX_LENGTH = 4;
 
    /**
     * 更具id进行加密+加随机数组成固定长度编码
     */
 
    public static void main(String[] args) {
        Long orderId = 1L;
        String userNo = getShopNo(orderId);
        System.out.println(userNo);
    }
 
    /**
     * 获取商户编号
     *
     * @param shopId
     * @return
     */
    public static String getShopNo(Long shopId) {
        String prefix = SHOP_PREFIX;
        return toFillZeroCode(prefix, MAX_LENGTH, shopId);
    }
 
    /**
     * 获取会员编号
     * @param userId
     * @return
     */
    public static String getMemberNo(Long userId) {
        String prefix = APP_USER_PREFIX;
        return toFillZeroCode(prefix, MAX_LENGTH, userId);
    }
 
    /**
     * 获取订单编号
     *
     * @param userId
     * @return
     */
    public static String getOrderNo(Long userId) {
 
        String prefix = DateUtils.parseDateToStr( "yyyyMMddHHmmss",new Date());
        prefix = ORDER_PREFIX + prefix;
        return toFillZeroCode(prefix, MAX_LENGTH, userId);
    }
 
 
 
    /**
     * 获取用户编号
     *
     * @param userId
     * @return
     */
    public static String getAppUserNo(Long userId) {
        return toFillZeroCode(APP_USER_PREFIX, 9, userId);
    }
 
    /**
     * 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();
    }
}