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);
|
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流中
|
* 渲染被预览的文件到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.ResponseData;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
|
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.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.api.pojo.theme.SysThemeRequest;
|
||||||
import cn.stylefeng.roses.kernel.system.modular.theme.pojo.DefaultTheme;
|
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.SysThemeService;
|
||||||
|
@ -30,7 +30,7 @@ public class SysThemeApiController {
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2022/1/10 18:29
|
* @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) {
|
public ResponseData currentThemeInfo(SysThemeRequest sysThemeParam) {
|
||||||
DefaultTheme defaultTheme = sysThemeService.currentThemeInfo(sysThemeParam);
|
DefaultTheme defaultTheme = sysThemeService.currentThemeInfo(sysThemeParam);
|
||||||
return new SuccessResponseData(defaultTheme);
|
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.SysTheme;
|
||||||
import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplate;
|
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.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.enums.FieldTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.system.modular.theme.factory.DefaultThemeFactory;
|
import cn.stylefeng.roses.kernel.system.modular.theme.factory.DefaultThemeFactory;
|
||||||
import cn.stylefeng.roses.kernel.system.modular.theme.mapper.SysThemeMapper;
|
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.pojo.DefaultTheme;
|
||||||
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeService;
|
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.SysThemeTemplateFieldService;
|
||||||
|
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateRelService;
|
||||||
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateService;
|
import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateService;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
@ -40,6 +42,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.beans.PropertyDescriptor;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -71,6 +75,9 @@ public class SysThemeServiceImpl extends ServiceImpl<SysThemeMapper, SysTheme> i
|
||||||
@Resource(name = "themeCacheApi")
|
@Resource(name = "themeCacheApi")
|
||||||
private CacheOperatorApi<DefaultTheme> themeCacheApi;
|
private CacheOperatorApi<DefaultTheme> themeCacheApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysThemeTemplateRelService sysThemeTemplateRelService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(SysThemeRequest sysThemeRequest) {
|
public void add(SysThemeRequest sysThemeRequest) {
|
||||||
// 查询模板状态
|
// 查询模板状态
|
||||||
|
@ -239,13 +246,10 @@ public class SysThemeServiceImpl extends ServiceImpl<SysThemeMapper, SysTheme> i
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询系统中激活的主题
|
// 查询系统中激活的主题
|
||||||
DefaultTheme result = null;
|
DefaultTheme result = this.querySystemTheme();
|
||||||
try {
|
|
||||||
result = this.querySystemTheme();
|
// 将主题信息中的文件id,拼接为文件url的形式
|
||||||
} catch (Exception e) {
|
this.parseFileUrls(result);
|
||||||
log.error("获取当前系统主题出错", e);
|
|
||||||
return DefaultThemeFactory.getSystemDefaultTheme();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 缓存系统中激活的主题
|
// 缓存系统中激活的主题
|
||||||
themeCacheApi.put(SystemConstants.THEME_GUNS_PLATFORM, 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
|
* @date 2022/1/11 9:44
|
||||||
*/
|
*/
|
||||||
private DefaultTheme querySystemTheme() {
|
private DefaultTheme querySystemTheme() {
|
||||||
|
|
||||||
// 查询编码为GUNS_PLATFORM的主题模板id
|
// 查询编码为GUNS_PLATFORM的主题模板id
|
||||||
LambdaQueryWrapper<SysThemeTemplate> sysThemeTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
Long defaultTemplateId = getDefaultTemplateId();
|
||||||
sysThemeTemplateLambdaQueryWrapper.eq(SysThemeTemplate::getTemplateCode, SystemConstants.THEME_GUNS_PLATFORM);
|
if (defaultTemplateId == null) {
|
||||||
SysThemeTemplate sysThemeTemplate = this.sysThemeTemplateService.getOne(sysThemeTemplateLambdaQueryWrapper, false);
|
|
||||||
if (sysThemeTemplate == null) {
|
|
||||||
log.error("当前系统主题模板编码GUNS_PLATFORM不存在,请检查数据库数据是否正常!");
|
|
||||||
return DefaultThemeFactory.getSystemDefaultTheme();
|
return DefaultThemeFactory.getSystemDefaultTheme();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找改模板激活的主题,如果没有就返回默认主题
|
// 查找改模板激活的主题,如果没有就返回默认主题
|
||||||
LambdaQueryWrapper<SysTheme> sysThemeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysTheme> sysThemeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
sysThemeLambdaQueryWrapper.eq(SysTheme::getTemplateId, sysThemeTemplate.getTemplateId());
|
sysThemeLambdaQueryWrapper.eq(SysTheme::getTemplateId, defaultTemplateId);
|
||||||
sysThemeLambdaQueryWrapper.eq(SysTheme::getStatusFlag, YesOrNotEnum.Y.getCode());
|
sysThemeLambdaQueryWrapper.eq(SysTheme::getStatusFlag, YesOrNotEnum.Y.getCode());
|
||||||
sysThemeLambdaQueryWrapper.orderByDesc(BaseEntity::getCreateTime);
|
sysThemeLambdaQueryWrapper.orderByDesc(BaseEntity::getCreateTime);
|
||||||
SysTheme sysTheme = this.getOne(sysThemeLambdaQueryWrapper, false);
|
SysTheme sysTheme = this.getOne(sysThemeLambdaQueryWrapper, false);
|
||||||
|
@ -297,13 +297,102 @@ public class SysThemeServiceImpl extends ServiceImpl<SysThemeMapper, SysTheme> i
|
||||||
|
|
||||||
// 解析主题中的json字符串
|
// 解析主题中的json字符串
|
||||||
String themeValue = sysTheme.getThemeValue();
|
String themeValue = sysTheme.getThemeValue();
|
||||||
if (StrUtil.isBlank(themeValue)) {
|
if (StrUtil.isNotBlank(themeValue)) {
|
||||||
JSONObject jsonObject = JSONObject.parseObject(themeValue);
|
JSONObject jsonObject = JSONObject.parseObject(themeValue);
|
||||||
return DefaultThemeFactory.parseDefaultTheme(jsonObject);
|
return DefaultThemeFactory.parseDefaultTheme(jsonObject);
|
||||||
} else {
|
} else {
|
||||||
return DefaultThemeFactory.getSystemDefaultTheme();
|
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