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