mirror of https://gitee.com/stylefeng/roses
【7.1.6】【file】【theme】更新主题文件转url
parent
1a55b4db8b
commit
d24c624464
|
@ -65,4 +65,14 @@ public interface FileInfoApi {
|
|||
*/
|
||||
String getFileAuthUrl(Long fileId, String token);
|
||||
|
||||
/**
|
||||
* 获取文件的下载地址(不带鉴权的),生成外网地址
|
||||
*
|
||||
* @param fileId 文件id
|
||||
* @return 外部系统可以直接访问的url
|
||||
* @author fengshuonan
|
||||
* @date 2020/10/26 10:40
|
||||
*/
|
||||
String getFileUnAuthUrl(Long fileId);
|
||||
|
||||
}
|
||||
|
|
|
@ -449,6 +449,22 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFileUnAuthUrl(Long fileId) {
|
||||
// 获取文件的基本信息
|
||||
SysFileInfoRequest sysFileInfoRequest = new SysFileInfoRequest();
|
||||
sysFileInfoRequest.setFileId(fileId);
|
||||
SysFileInfo sysFileInfo = querySysFileInfo(sysFileInfoRequest);
|
||||
|
||||
// 如果是数据库存储,则返回previewUrl
|
||||
if (sysFileInfo.getFileLocation().equals(FileLocationEnum.DB.getCode())) {
|
||||
return this.sysFileStorageService.getFileUnAuthUrl(String.valueOf(fileId));
|
||||
} else {
|
||||
// 返回第三方存储文件url
|
||||
return fileOperatorApi.getFileUnAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 渲染被预览的文件到servlet的response流中
|
||||
*
|
||||
|
|
|
@ -3,7 +3,7 @@ package cn.stylefeng.roses.kernel.system.modular.theme.controller;
|
|||
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.theme.SysThemeRequest;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.pojo.DefaultTheme;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeService;
|
||||
|
@ -30,7 +30,7 @@ public class SysThemeApiController {
|
|||
* @author fengshuonan
|
||||
* @date 2022/1/10 18:29
|
||||
*/
|
||||
@PostResource(name = "获取当前Guns管理系统的主题数据", path = "/theme/currentThemeInfo", requiredPermission = false, requiredLogin = false)
|
||||
@GetResource(name = "获取当前Guns管理系统的主题数据", path = "/theme/currentThemeInfo", requiredPermission = false, requiredLogin = false)
|
||||
public ResponseData currentThemeInfo(SysThemeRequest sysThemeParam) {
|
||||
DefaultTheme defaultTheme = sysThemeService.currentThemeInfo(sysThemeParam);
|
||||
return new SuccessResponseData(defaultTheme);
|
||||
|
|
|
@ -22,6 +22,7 @@ import cn.stylefeng.roses.kernel.system.api.pojo.theme.SysThemeRequest;
|
|||
import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysTheme;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplate;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplateField;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplateRel;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.enums.FieldTypeEnum;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.factory.DefaultThemeFactory;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.mapper.SysThemeMapper;
|
||||
|
@ -29,6 +30,7 @@ import cn.stylefeng.roses.kernel.system.modular.theme.pojo.AntdvFileInfo;
|
|||
import cn.stylefeng.roses.kernel.system.modular.theme.pojo.DefaultTheme;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeService;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateFieldService;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateRelService;
|
||||
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
@ -40,6 +42,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -71,6 +75,9 @@ public class SysThemeServiceImpl extends ServiceImpl<SysThemeMapper, SysTheme> i
|
|||
@Resource(name = "themeCacheApi")
|
||||
private CacheOperatorApi<DefaultTheme> themeCacheApi;
|
||||
|
||||
@Resource
|
||||
private SysThemeTemplateRelService sysThemeTemplateRelService;
|
||||
|
||||
@Override
|
||||
public void add(SysThemeRequest sysThemeRequest) {
|
||||
// 查询模板状态
|
||||
|
@ -239,13 +246,10 @@ public class SysThemeServiceImpl extends ServiceImpl<SysThemeMapper, SysTheme> i
|
|||
}
|
||||
|
||||
// 查询系统中激活的主题
|
||||
DefaultTheme result = null;
|
||||
try {
|
||||
result = this.querySystemTheme();
|
||||
} catch (Exception e) {
|
||||
log.error("获取当前系统主题出错", e);
|
||||
return DefaultThemeFactory.getSystemDefaultTheme();
|
||||
}
|
||||
DefaultTheme result = this.querySystemTheme();
|
||||
|
||||
// 将主题信息中的文件id,拼接为文件url的形式
|
||||
this.parseFileUrls(result);
|
||||
|
||||
// 缓存系统中激活的主题
|
||||
themeCacheApi.put(SystemConstants.THEME_GUNS_PLATFORM, result);
|
||||
|
@ -274,19 +278,15 @@ public class SysThemeServiceImpl extends ServiceImpl<SysThemeMapper, SysTheme> i
|
|||
* @date 2022/1/11 9:44
|
||||
*/
|
||||
private DefaultTheme querySystemTheme() {
|
||||
|
||||
// 查询编码为GUNS_PLATFORM的主题模板id
|
||||
LambdaQueryWrapper<SysThemeTemplate> sysThemeTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysThemeTemplateLambdaQueryWrapper.eq(SysThemeTemplate::getTemplateCode, SystemConstants.THEME_GUNS_PLATFORM);
|
||||
SysThemeTemplate sysThemeTemplate = this.sysThemeTemplateService.getOne(sysThemeTemplateLambdaQueryWrapper, false);
|
||||
if (sysThemeTemplate == null) {
|
||||
log.error("当前系统主题模板编码GUNS_PLATFORM不存在,请检查数据库数据是否正常!");
|
||||
Long defaultTemplateId = getDefaultTemplateId();
|
||||
if (defaultTemplateId == null) {
|
||||
return DefaultThemeFactory.getSystemDefaultTheme();
|
||||
}
|
||||
|
||||
// 查找改模板激活的主题,如果没有就返回默认主题
|
||||
LambdaQueryWrapper<SysTheme> sysThemeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysThemeLambdaQueryWrapper.eq(SysTheme::getTemplateId, sysThemeTemplate.getTemplateId());
|
||||
sysThemeLambdaQueryWrapper.eq(SysTheme::getTemplateId, defaultTemplateId);
|
||||
sysThemeLambdaQueryWrapper.eq(SysTheme::getStatusFlag, YesOrNotEnum.Y.getCode());
|
||||
sysThemeLambdaQueryWrapper.orderByDesc(BaseEntity::getCreateTime);
|
||||
SysTheme sysTheme = this.getOne(sysThemeLambdaQueryWrapper, false);
|
||||
|
@ -297,13 +297,102 @@ public class SysThemeServiceImpl extends ServiceImpl<SysThemeMapper, SysTheme> i
|
|||
|
||||
// 解析主题中的json字符串
|
||||
String themeValue = sysTheme.getThemeValue();
|
||||
if (StrUtil.isBlank(themeValue)) {
|
||||
if (StrUtil.isNotBlank(themeValue)) {
|
||||
JSONObject jsonObject = JSONObject.parseObject(themeValue);
|
||||
return DefaultThemeFactory.parseDefaultTheme(jsonObject);
|
||||
} else {
|
||||
return DefaultThemeFactory.getSystemDefaultTheme();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将属性中所有是文件类型的文件id转化为文件url
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2022/1/11 11:12
|
||||
*/
|
||||
private DefaultTheme parseFileUrls(DefaultTheme theme) {
|
||||
// 查询编码为GUNS_PLATFORM的主题模板id
|
||||
Long defaultTemplateId = getDefaultTemplateId();
|
||||
if (defaultTemplateId == null) {
|
||||
return theme;
|
||||
}
|
||||
|
||||
// 获取主题模板中所有是文件的字段
|
||||
LambdaQueryWrapper<SysThemeTemplateRel> sysThemeTemplateRelLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysThemeTemplateRelLambdaQueryWrapper.eq(SysThemeTemplateRel::getTemplateId, defaultTemplateId);
|
||||
List<SysThemeTemplateRel> relList = this.sysThemeTemplateRelService.list(sysThemeTemplateRelLambdaQueryWrapper);
|
||||
|
||||
if (ObjectUtil.isEmpty(relList)) {
|
||||
return theme;
|
||||
}
|
||||
|
||||
// 所有是文件类型的字段编码
|
||||
List<String> fieldCodes = relList.stream().map(SysThemeTemplateRel::getFieldCode).collect(Collectors.toList());
|
||||
|
||||
// 查询字段中是文件的字段列表
|
||||
LambdaQueryWrapper<SysThemeTemplateField> sysThemeTemplateFieldLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysThemeTemplateFieldLambdaQueryWrapper.in(SysThemeTemplateField::getFieldCode, fieldCodes);
|
||||
sysThemeTemplateFieldLambdaQueryWrapper.eq(SysThemeTemplateField::getFieldType, FieldTypeEnum.FILE.getCode());
|
||||
sysThemeTemplateFieldLambdaQueryWrapper.select(SysThemeTemplateField::getFieldCode);
|
||||
List<SysThemeTemplateField> fieldInfoList = this.sysThemeTemplateFieldService.list(sysThemeTemplateFieldLambdaQueryWrapper);
|
||||
|
||||
if (ObjectUtil.isEmpty(fieldInfoList)) {
|
||||
return theme;
|
||||
}
|
||||
|
||||
// 所有文件类型的字段名
|
||||
List<String> needToParse = fieldInfoList.stream().map(SysThemeTemplateField::getFieldCode).map(StrUtil::toCamelCase).collect(Collectors.toList());
|
||||
|
||||
// 其他属性
|
||||
Map<String, String> otherConfigs = theme.getOtherConfigs();
|
||||
|
||||
for (String fieldName : needToParse) {
|
||||
PropertyDescriptor propertyDescriptor = null;
|
||||
try {
|
||||
propertyDescriptor = new PropertyDescriptor(fieldName, DefaultTheme.class);
|
||||
Method readMethod = propertyDescriptor.getReadMethod();
|
||||
String fieldValue = (String) readMethod.invoke(theme);
|
||||
if (!StrUtil.isEmpty(fieldValue)) {
|
||||
// 将文件id转化为文件url
|
||||
String fileUnAuthUrl = fileInfoApi.getFileUnAuthUrl(Long.valueOf(fieldValue));
|
||||
Method writeMethod = propertyDescriptor.getWriteMethod();
|
||||
writeMethod.invoke(theme, fileUnAuthUrl);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("解析主题的文件id为url时出错", e);
|
||||
}
|
||||
|
||||
// 判断其他属性有没有需要转化的
|
||||
for (Map.Entry<String, String> otherItem : otherConfigs.entrySet()) {
|
||||
if (fieldName.equals(otherItem.getKey())) {
|
||||
String otherFileId = otherItem.getValue();
|
||||
// 将文件id转化为文件url
|
||||
String fileUnAuthUrl = fileInfoApi.getFileUnAuthUrl(Long.valueOf(otherFileId));
|
||||
otherConfigs.put(otherItem.getKey(), fileUnAuthUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return theme;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取默认系统的模板id
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2022/1/11 11:35
|
||||
*/
|
||||
private Long getDefaultTemplateId() {
|
||||
// 查询编码为GUNS_PLATFORM的主题模板id
|
||||
LambdaQueryWrapper<SysThemeTemplate> sysThemeTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysThemeTemplateLambdaQueryWrapper.eq(SysThemeTemplate::getTemplateCode, SystemConstants.THEME_GUNS_PLATFORM);
|
||||
SysThemeTemplate sysThemeTemplate = this.sysThemeTemplateService.getOne(sysThemeTemplateLambdaQueryWrapper, false);
|
||||
if (sysThemeTemplate == null) {
|
||||
log.error("当前系统主题模板编码GUNS_PLATFORM不存在,请检查数据库数据是否正常!");
|
||||
return null;
|
||||
}
|
||||
return sysThemeTemplate.getTemplateId();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue