package com.qianwen.smartman.modules.resource.builder.oss;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import java.lang.invoke.SerializedLambda;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
import com.qianwen.smartman.common.constant.ExtCacheConstant;
|
import com.qianwen.core.cache.utils.CacheUtil;
|
import com.qianwen.core.log.exception.ServiceException;
|
import com.qianwen.core.oss.OssTemplate;
|
import com.qianwen.core.oss.enums.OssEnum;
|
import com.qianwen.core.oss.enums.OssStatusEnum;
|
import com.qianwen.core.oss.props.OssProperties;
|
import com.qianwen.core.oss.rule.BladeOssRule;
|
import com.qianwen.core.oss.rule.OssRule;
|
import com.qianwen.core.redis.cache.BladeRedis;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.core.tool.utils.SpringUtil;
|
import com.qianwen.core.tool.utils.StringUtil;
|
import com.qianwen.core.tool.utils.WebUtil;
|
import com.qianwen.smartman.modules.resource.entity.Oss;
|
import com.qianwen.smartman.modules.resource.enums.BucketEnum;
|
import com.qianwen.smartman.modules.resource.service.IOssService;
|
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/resource/builder/oss/OssBuilder.class */
|
public class OssBuilder {
|
public static final String OSS_CODE = "oss:code:";
|
public static final String OSS_PARAM_KEY = "code";
|
public static final String OSS_RULE = "oss:rule:";
|
private static BladeRedis bladeRedis;
|
private final OssProperties ossProperties;
|
private final IOssService ossService;
|
private final Map<String, OssTemplate> templatePool = new ConcurrentHashMap();
|
private final Map<String, Oss> ossPool = new ConcurrentHashMap();
|
|
private static /* synthetic */ Object $deserializeLambda$(SerializedLambda lambda) {
|
String implMethodName = lambda.getImplMethodName();
|
boolean z = true;
|
switch (implMethodName.hashCode()) {
|
case -128783002:
|
if (implMethodName.equals("getOssCode")) {
|
z = false;
|
break;
|
}
|
break;
|
case 771206363:
|
if (implMethodName.equals("getTenantId")) {
|
z = true;
|
break;
|
}
|
break;
|
case 803533544:
|
if (implMethodName.equals("getStatus")) {
|
z = true;
|
break;
|
}
|
break;
|
}
|
switch (z) {
|
case false:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/resource/entity/Oss") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getOssCode();
|
};
|
}
|
break;
|
case true:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/core/tenant/mp/TenantEntity") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getTenantId();
|
};
|
}
|
break;
|
case true:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/core/mp/base/BaseEntity") && lambda.getImplMethodSignature().equals("()Ljava/lang/Integer;")) {
|
return (v0) -> {
|
return v0.getStatus();
|
};
|
}
|
break;
|
}
|
throw new IllegalArgumentException("Invalid lambda deserialization");
|
}
|
|
public OssBuilder(OssProperties ossProperties, IOssService ossService) {
|
this.ossProperties = ossProperties;
|
this.ossService = ossService;
|
}
|
|
private static BladeRedis getBladeRedis() {
|
if (bladeRedis == null) {
|
bladeRedis = (BladeRedis) SpringUtil.getBean(BladeRedis.class);
|
}
|
return bladeRedis;
|
}
|
|
public OssTemplate template() {
|
return template("");
|
}
|
|
public OssTemplate template(String code) {
|
OssTemplate template;
|
OssRule ossRule;
|
Oss oss = getOss("000000", code);
|
Oss ossCached = this.ossPool.get("000000");
|
OssTemplate template2 = this.templatePool.get("000000");
|
if (!Func.hasEmpty(new Object[]{template2, ossCached}) && oss.getEndpoint().equals(ossCached.getEndpoint()) && oss.getAccessKey().equals(ossCached.getAccessKey())) {
|
return template2;
|
}
|
synchronized (OssBuilder.class) {
|
template = this.templatePool.get("000000");
|
if (Func.hasEmpty(new Object[]{template, ossCached}) || !oss.getEndpoint().equals(ossCached.getEndpoint()) || !oss.getAccessKey().equals(ossCached.getAccessKey())) {
|
if (oss.getEndpoint().equals(this.ossProperties.getEndpoint()) && oss.getAccessKey().equals(this.ossProperties.getAccessKey()) && this.ossProperties.getTenantMode().booleanValue()) {
|
ossRule = new BladeOssRule(Boolean.TRUE);
|
} else {
|
ossRule = new BladeOssRule(Boolean.FALSE);
|
}
|
template = getOssTemplate(oss, template, ossRule);
|
this.templatePool.put("000000", template);
|
this.ossPool.put("000000", oss);
|
}
|
}
|
return template;
|
}
|
|
public OssTemplate systemTemplate() {
|
return getTemplate(BucketEnum.SYSTEM);
|
}
|
|
public OssTemplate tempTemplate() {
|
return getTemplate(BucketEnum.TEMP);
|
}
|
|
public OssTemplate visualTemplate() {
|
OssTemplate template = getTemplate(BucketEnum.VISUAL);
|
if (!template.bucketExists(BucketEnum.VISUAL.getName())) {
|
template.makeBucket(BucketEnum.VISUAL.getName());
|
}
|
return template;
|
}
|
|
public OssTemplate getTemplate(BucketEnum bucketEnum) {
|
OssTemplate template;
|
Oss oss = getOss("000000", "");
|
oss.setBucketName(bucketEnum.getName());
|
Oss ossCached = this.ossPool.get("000000");
|
OssTemplate template2 = this.templatePool.get("000000" + bucketEnum.getName());
|
if (!Func.hasEmpty(new Object[]{template2, ossCached}) && oss.getEndpoint().equals(ossCached.getEndpoint()) && oss.getAccessKey().equals(ossCached.getAccessKey())) {
|
return template2;
|
}
|
synchronized (OssBuilder.class) {
|
template = this.templatePool.get("000000" + bucketEnum.getName());
|
if (Func.hasEmpty(new Object[]{template, ossCached}) || !oss.getEndpoint().equals(ossCached.getEndpoint()) || !oss.getAccessKey().equals(ossCached.getAccessKey())) {
|
OssRule ossRule = getOssRule(bucketEnum);
|
template = getOssTemplate(oss, template, ossRule);
|
this.templatePool.put("000000" + bucketEnum.getName(), template);
|
this.ossPool.put("000000", oss);
|
}
|
}
|
return template;
|
}
|
|
private OssRule getOssRule(BucketEnum bucketEnum) {
|
OssRule ossRule = null;
|
if (bucketEnum.getName() == BucketEnum.SYSTEM.getName()) {
|
ossRule = new SystemOssRule();
|
} else if (bucketEnum.getName() == BucketEnum.TEMP.getName()) {
|
ossRule = new TempOssRule();
|
} else if (bucketEnum.getName() == BucketEnum.VISUAL.getName()) {
|
ossRule = new VisualOssRule();
|
}
|
return ossRule;
|
}
|
|
public OssTemplate getOssTemplate(Oss oss, OssTemplate template, OssRule ossRule) {
|
if (oss.getCategory().intValue() == OssEnum.MINIO.getCategory()) {
|
template = MinioOssBuilder.template(oss, ossRule);
|
} else if (oss.getCategory().intValue() == OssEnum.QINIU.getCategory()) {
|
template = QiniuOssBuilder.template(oss, ossRule);
|
} else if (oss.getCategory().intValue() == OssEnum.ALI.getCategory()) {
|
template = AliOssBuilder.template(oss, ossRule);
|
} else if (oss.getCategory().intValue() == OssEnum.TENCENT.getCategory()) {
|
template = TencentOssBuilder.template(oss, ossRule);
|
}
|
return template;
|
}
|
|
public Oss getOss(String tenantId, String code) {
|
String key = Func.isBlank(tenantId) ? "000000" : tenantId;
|
Wrapper wrapper = (LambdaQueryWrapper) Wrappers.query().lambda().eq((v0) -> {
|
return v0.getTenantId();
|
}, tenantId);
|
String ossCode = StringUtil.isBlank(code) ? WebUtil.getParameter("code") : code;
|
if (StringUtil.isNotBlank(ossCode)) {
|
key = key.concat("-").concat(ossCode);
|
wrapper.eq((v0) -> {
|
return v0.getOssCode();
|
}, ossCode);
|
} else {
|
wrapper.eq((v0) -> {
|
return v0.getStatus();
|
}, Integer.valueOf(OssStatusEnum.ENABLE.getNum()));
|
}
|
Oss oss = (Oss) CacheUtil.get("blade:resource", OSS_CODE, key, ExtCacheConstant.TENANT_MODE);
|
if (Func.isEmpty(oss)) {
|
oss = (Oss) this.ossService.getOne(wrapper);
|
String redisKey = "blade:resource".concat("::").concat(OSS_CODE).concat(tenantId);
|
getBladeRedis().setEx(redisKey, oss, ExtCacheConstant.FIVE_MINUTES_EXPIRE_TIME);
|
}
|
if (oss == null || oss.getId() == null) {
|
throw new ServiceException("未获取到对应的对象存储配置");
|
}
|
return oss;
|
}
|
}
|