yangys
2024-04-01 c323e4ce593a886412bac2403a922ae2bf629655
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
package com.qianwen.smartman.modules.resource.builder.sms;
 
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qianwen.core.cache.utils.CacheUtil;
import com.qianwen.core.log.exception.ServiceException;
import com.qianwen.core.redis.cache.BladeRedis;
import com.qianwen.core.secure.utils.AuthUtil;
import com.qianwen.core.sms.SmsTemplate;
import com.qianwen.core.sms.enums.SmsEnum;
import com.qianwen.core.sms.enums.SmsStatusEnum;
import com.qianwen.core.sms.props.SmsProperties;
import com.qianwen.core.tool.constant.BladeConstant;
import com.qianwen.core.tool.utils.Func;
import com.qianwen.core.tool.utils.StringUtil;
import com.qianwen.core.tool.utils.WebUtil;
import com.qianwen.smartman.common.constant.ExtCacheConstant;
import com.qianwen.smartman.modules.resource.entity.Sms;
import com.qianwen.smartman.modules.resource.service.ISmsService;
 
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/resource/builder/sms/SmsBuilder.class */
public class SmsBuilder {
    public static final String SMS_CODE = "sms:code:";
    public static final String SMS_PARAM_KEY = "code";
    private final SmsProperties smsProperties;
    private final ISmsService smsService;
    private final BladeRedis bladeRedis;
    private final Map<String, SmsTemplate> templatePool = new ConcurrentHashMap();
    private final Map<String, Sms> smsPool = new ConcurrentHashMap();
 
    public SmsBuilder(SmsProperties smsProperties, ISmsService smsService, BladeRedis bladeRedis) {
        this.smsProperties = smsProperties;
        this.smsService = smsService;
        this.bladeRedis = bladeRedis;
    }
 
    public SmsTemplate template() {
        return template("");
    }
 
    public SmsTemplate template(String code) {
        SmsTemplate template;
        String tenantId = AuthUtil.getTenantId();
        Sms sms = getSms(tenantId, code);
        Sms smsCached = this.smsPool.get(tenantId);
        SmsTemplate template2 = this.templatePool.get(tenantId);
        if (!Func.hasEmpty(new Object[]{template2, smsCached}) && sms.getTemplateId().equals(smsCached.getTemplateId()) && sms.getAccessKey().equals(smsCached.getAccessKey())) {
            return template2;
        }
        synchronized (SmsBuilder.class) {
            template = this.templatePool.get(tenantId);
            if (Func.hasEmpty(new Object[]{template, smsCached}) || !sms.getTemplateId().equals(smsCached.getTemplateId()) || !sms.getAccessKey().equals(smsCached.getAccessKey())) {
                if (sms.getCategory().intValue() == SmsEnum.YUNPIAN.getCategory()) {
                    template = YunpianSmsBuilder.template(sms, this.bladeRedis);
                } else if (sms.getCategory().intValue() == SmsEnum.QINIU.getCategory()) {
                    template = QiniuSmsBuilder.template(sms, this.bladeRedis);
                } else if (sms.getCategory().intValue() == SmsEnum.ALI.getCategory()) {
                    template = AliSmsBuilder.template(sms, this.bladeRedis);
                } else if (sms.getCategory().intValue() == SmsEnum.TENCENT.getCategory()) {
                    template = TencentSmsBuilder.template(sms, this.bladeRedis);
                }
                this.templatePool.put(tenantId, template);
                this.smsPool.put(tenantId, sms);
            }
        }
        return template;
    }
 
    public Sms getSms(String tenantId, String code) {
        String key = tenantId;
        LambdaQueryWrapper<Sms> lqw = Wrappers.<Sms>query().lambda().eq(Sms::getTenantId, tenantId);
        /*
        LambdaQueryWrapper<Sms> lqw = (LambdaQueryWrapper) Wrappers.query().lambda().eq((v0) -> {
            return v0.getTenantId();
        }, tenantId);*/
        String smsCode = StringUtil.isBlank(code) ? WebUtil.getParameter("code") : code;
        if (StringUtil.isNotBlank(smsCode)) {
            key = key.concat("-").concat(smsCode);
            lqw.eq((v0) -> {
                return v0.getSmsCode();
            }, smsCode);
        } else {
            lqw.eq((v0) -> {
                return v0.getStatus();
            }, Integer.valueOf(SmsStatusEnum.ENABLE.getNum()));
        }
        Sms sms = (Sms) CacheUtil.get("blade:resource", SMS_CODE, key, () -> {
            Sms s = this.smsService.getOne(lqw);
            if (Func.isEmpty(s)) {
                Sms defaultSms = new Sms();
                defaultSms.setId(BladeConstant.TOP_PARENT_ID);
                defaultSms.setTemplateId(this.smsProperties.getTemplateId());
                defaultSms.setRegionId(this.smsProperties.getRegionId());
                defaultSms.setCategory(Integer.valueOf(SmsEnum.of(this.smsProperties.getName()).getCategory()));
                defaultSms.setAccessKey(this.smsProperties.getAccessKey());
                defaultSms.setSecretKey(this.smsProperties.getSecretKey());
                defaultSms.setSignName(this.smsProperties.getSignName());
                return defaultSms;
            }
            return s;
        }, ExtCacheConstant.TENANT_MODE);
        if (sms == null || sms.getId() == null) {
            throw new ServiceException("未获取到对应的短信配置");
        }
        return sms;
    }
}