From d24c62446470e5dcd4264f533c60aa50a6033642 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Tue, 11 Jan 2022 13:31:25 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.1.6=E3=80=91=E3=80=90file=E3=80=91?= =?UTF-8?q?=E3=80=90theme=E3=80=91=E6=9B=B4=E6=96=B0=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=BD=ACurl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roses/kernel/file/api/FileInfoApi.java | 10 ++ .../service/impl/SysFileInfoServiceImpl.java | 16 +++ .../controller/SysThemeApiController.java | 4 +- .../service/impl/SysThemeServiceImpl.java | 119 +++++++++++++++--- 4 files changed, 132 insertions(+), 17 deletions(-) diff --git a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java index ccd4349d4..ec83ce067 100644 --- a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java +++ b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java @@ -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); + } diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java index 0eb8a3815..af6650af2 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java @@ -449,6 +449,22 @@ public class SysFileInfoServiceImpl extends ServiceImpl i @Resource(name = "themeCacheApi") private CacheOperatorApi themeCacheApi; + @Resource + private SysThemeTemplateRelService sysThemeTemplateRelService; + @Override public void add(SysThemeRequest sysThemeRequest) { // 查询模板状态 @@ -239,13 +246,10 @@ public class SysThemeServiceImpl extends ServiceImpl 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 i * @date 2022/1/11 9:44 */ private DefaultTheme querySystemTheme() { - // 查询编码为GUNS_PLATFORM的主题模板id - LambdaQueryWrapper 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 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 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 sysThemeTemplateRelLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysThemeTemplateRelLambdaQueryWrapper.eq(SysThemeTemplateRel::getTemplateId, defaultTemplateId); + List relList = this.sysThemeTemplateRelService.list(sysThemeTemplateRelLambdaQueryWrapper); + + if (ObjectUtil.isEmpty(relList)) { + return theme; + } + + // 所有是文件类型的字段编码 + List fieldCodes = relList.stream().map(SysThemeTemplateRel::getFieldCode).collect(Collectors.toList()); + + // 查询字段中是文件的字段列表 + LambdaQueryWrapper sysThemeTemplateFieldLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysThemeTemplateFieldLambdaQueryWrapper.in(SysThemeTemplateField::getFieldCode, fieldCodes); + sysThemeTemplateFieldLambdaQueryWrapper.eq(SysThemeTemplateField::getFieldType, FieldTypeEnum.FILE.getCode()); + sysThemeTemplateFieldLambdaQueryWrapper.select(SysThemeTemplateField::getFieldCode); + List fieldInfoList = this.sysThemeTemplateFieldService.list(sysThemeTemplateFieldLambdaQueryWrapper); + + if (ObjectUtil.isEmpty(fieldInfoList)) { + return theme; + } + + // 所有文件类型的字段名 + List needToParse = fieldInfoList.stream().map(SysThemeTemplateField::getFieldCode).map(StrUtil::toCamelCase).collect(Collectors.toList()); + + // 其他属性 + Map 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 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 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(); } }