From 1673395ad8850d815835be79abcaf68a78aeb414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 26 Aug 2024 15:40:01 +0800 Subject: [PATCH 01/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20excel?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=20=E9=80=82=E9=85=8D=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/system/listener/SysUserImportListener.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java index 9cd144d9..70ef4cc6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java @@ -80,7 +80,11 @@ public class SysUserImportListener extends AnalysisEventListener Date: Mon, 26 Aug 2024 15:42:24 +0800 Subject: [PATCH 02/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20excel?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=20=E9=80=82=E9=85=8D=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/system/listener/SysUserImportListener.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java index 70ef4cc6..13ec6fd9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java @@ -5,8 +5,12 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.digest.BCrypt; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.excel.core.ExcelListener; import org.dromara.common.excel.core.ExcelResult; @@ -16,7 +20,6 @@ import org.dromara.system.domain.vo.SysUserImportVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysConfigService; import org.dromara.system.service.ISysUserService; -import lombok.extern.slf4j.Slf4j; import java.util.List; From 0ebfcf1edd3a9ef8f75c6cf22538428fbf03a13c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 26 Aug 2024 18:02:10 +0800 Subject: [PATCH 03/64] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E7=A7=9F=E6=88=B7=E5=AD=97=E5=85=B8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/SysTenantController.java | 14 +++ .../system/service/ISysTenantService.java | 5 + .../service/impl/SysTenantServiceImpl.java | 92 ++++++++++++++++++- 3 files changed, 107 insertions(+), 4 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java index 8c1d7e52..da3bf18c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java @@ -177,4 +177,18 @@ public class SysTenantController extends BaseController { return toAjax(TenantHelper.ignore(() -> tenantService.syncTenantPackage(tenantId, packageId))); } + /** + * 同步租户字典 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @Log(title = "同步租户字典", businessType = BusinessType.INSERT) + @GetMapping("/syncTenantDict") + public R syncTenantDict() { + if (!TenantHelper.isEnable()) { + return R.fail("当前未开启租户模式"); + } + tenantService.syncTenantDict(); + return R.ok("同步租户字典成功"); + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java index d12ed95f..f6978290 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java @@ -79,4 +79,9 @@ public interface ISysTenantService { * 同步租户套餐 */ Boolean syncTenantPackage(String tenantId, Long packageId); + + /** + * 同步租户字典 + */ + void syncTenantDict(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index d30750db..65380f22 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.system.service.impl; import cn.dev33.satoken.secure.BCrypt; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; @@ -14,9 +15,13 @@ import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.redis.utils.CacheUtils; +import org.dromara.common.tenant.core.TenantEntity; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.*; import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.vo.SysTenantVo; @@ -27,10 +32,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 租户Service业务层处理 @@ -369,4 +371,86 @@ public class SysTenantServiceImpl implements ISysTenantService { } return true; } + + /** + * 同步租户字典 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void syncTenantDict() { + // 查询超管 所有字典数据 + List dictTypeList = new ArrayList<>(); + List dictDataList = new ArrayList<>(); + TenantHelper.ignore(() -> { + dictTypeList.addAll(dictTypeMapper.selectList()); + dictDataList.addAll(dictDataMapper.selectList()); + }); + Map> typeMap = StreamUtils.groupByKey(dictTypeList, TenantEntity::getTenantId); + Map>> typeDataMap = StreamUtils.groupBy2Key( + dictDataList, TenantEntity::getTenantId, SysDictData::getDictType); + // 管理租户字典数据 + List defaultTypeMap = typeMap.get(TenantConstants.DEFAULT_TENANT_ID); + Map> defaultTypeDataMap = typeDataMap.get(TenantConstants.DEFAULT_TENANT_ID); + + // 获取所有租户编号 + List tenantIds = baseMapper.selectObjs( + new LambdaQueryWrapper().select(SysTenant::getTenantId) + .eq(SysTenant::getStatus, TenantConstants.NORMAL), x -> {return Convert.toStr(x);}); + List saveTypeList = new ArrayList<>(); + List saveDataList = new ArrayList<>(); + Set set = new HashSet<>(); + for (String tenantId : tenantIds) { + if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { + continue; + } + for (SysDictType dictType : defaultTypeMap) { + List typeList = StreamUtils.toList(typeMap.get(tenantId), SysDictType::getDictType); + List dataList = defaultTypeDataMap.get(dictType.getDictType()); + if (typeList.contains(dictType.getDictType())) { + List dataListTenant = typeDataMap.get(tenantId).get(dictType.getDictType()); + Map map = StreamUtils.toIdentityMap(dataListTenant, SysDictData::getDictValue); + for (SysDictData dictData : dataList) { + if (!map.containsKey(dictData.getDictValue())) { + // 设置字典编码为 null + dictData.setDictCode(null); + dictData.setTenantId(tenantId); + dictData.setCreateTime(null); + dictData.setUpdateTime(null); + set.add(tenantId); + saveDataList.add(dictData); + } + } + } else { + dictType.setDictId(null); + dictType.setTenantId(tenantId); + dictType.setCreateTime(null); + dictType.setUpdateTime(null); + set.add(tenantId); + saveTypeList.add(dictType); + if (CollUtil.isNotEmpty(dataList)) { + // 筛选出 dictType 对应的 data + for (SysDictData dictData : dataList) { + // 设置字典编码为 null + dictData.setDictCode(null); + dictData.setTenantId(tenantId); + dictData.setCreateTime(null); + dictData.setUpdateTime(null); + set.add(tenantId); + } + saveDataList.addAll(dataList); + } + } + } + } + if (CollUtil.isNotEmpty(saveTypeList)) { + dictTypeMapper.insertBatch(saveTypeList); + } + if (CollUtil.isNotEmpty(saveDataList)) { + dictDataMapper.insertBatch(saveDataList); + } + for (String tenantId : set) { + TenantHelper.dynamic(tenantId, () -> CacheUtils.clear(CacheNames.SYS_DICT)); + } + } + } From f497b33e88619658bb24f1ff6b06b2791617745e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 29 Aug 2024 10:38:19 +0800 Subject: [PATCH 04/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E8=A1=A8=E5=90=8D=E5=88=A4=E6=96=AD?= =?UTF-8?q?=20=E4=BD=BF=E7=94=A8=E5=BC=80=E5=A4=B4=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E8=AF=AF=E5=88=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/gen/service/GenTableServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java index b7ecc23f..dfa7e845 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java @@ -149,11 +149,11 @@ public class GenTableServiceImpl implements IGenTableService { boolean commentMatches = true; // 进行表名称的模糊查询 if (StringUtils.isNotBlank(tableName)) { - nameMatches = StringUtils.containsIgnoreCase(x.getName(), tableName); + nameMatches = StringUtils.startsWithIgnoreCase(x.getName(), tableName); } // 进行表描述的模糊查询 if (StringUtils.isNotBlank(tableComment)) { - commentMatches = StringUtils.containsIgnoreCase(x.getComment(), tableComment); + commentMatches = StringUtils.startsWithIgnoreCase(x.getComment(), tableComment); } // 同时匹配名称和描述 return nameMatches && commentMatches; From a35b32ef4df6248d0434a9591ad4b755f92e6eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 29 Aug 2024 10:40:47 +0800 Subject: [PATCH 05/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E8=A1=A8=E5=90=8D=E5=88=A4=E6=96=AD?= =?UTF-8?q?=20=E4=BD=BF=E7=94=A8=E5=BC=80=E5=A4=B4=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E8=AF=AF=E5=88=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/gen/service/GenTableServiceImpl.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java index dfa7e845..7638707b 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java @@ -137,7 +137,7 @@ public class GenTableServiceImpl implements IGenTableService { } // 过滤并转换表格数据 List tables = tablesMap.values().stream() - .filter(x -> !StringUtils.containsAnyIgnoreCase(x.getName(), TABLE_IGNORE)) + .filter(x -> !startWithAnyIgnoreCase(x.getName(), TABLE_IGNORE)) .filter(x -> { if (CollUtil.isEmpty(tableNames)) { return true; @@ -149,11 +149,11 @@ public class GenTableServiceImpl implements IGenTableService { boolean commentMatches = true; // 进行表名称的模糊查询 if (StringUtils.isNotBlank(tableName)) { - nameMatches = StringUtils.startsWithIgnoreCase(x.getName(), tableName); + nameMatches = StringUtils.containsIgnoreCase(x.getName(), tableName); } // 进行表描述的模糊查询 if (StringUtils.isNotBlank(tableComment)) { - commentMatches = StringUtils.startsWithIgnoreCase(x.getComment(), tableComment); + commentMatches = StringUtils.containsIgnoreCase(x.getComment(), tableComment); } // 同时匹配名称和描述 return nameMatches && commentMatches; @@ -174,6 +174,16 @@ public class GenTableServiceImpl implements IGenTableService { return TableDataInfo.build(page); } + public static boolean startWithAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) { + // 判断是否是以指定字符串开头 + for (CharSequence searchCharSequence : searchCharSequences) { + if (StringUtils.startsWithIgnoreCase(cs, searchCharSequence)) { + return true; + } + } + return false; + } + /** * 查询据库列表 * From 05ad9bc907cbb376978673efb0714816c0b6435d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 29 Aug 2024 10:53:38 +0800 Subject: [PATCH 06/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20oss?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=9B=B4=E6=8E=A5=E4=BB=8E=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=A4=B4=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/common/oss/core/OssClient.java | 8 ++++---- .../dromara/resource/service/impl/SysOssServiceImpl.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index 5e300da2..bde26ae1 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -340,8 +340,8 @@ public class OssClient { * @return UploadResult 包含上传后的文件信息 * @throws OssException 如果上传失败,抛出自定义异常 */ - public UploadResult uploadSuffix(byte[] data, String suffix) { - return upload(new ByteArrayInputStream(data), getPath(properties.getPrefix(), suffix), Long.valueOf(data.length), FileUtils.getMimeType(suffix)); + public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) { + return upload(new ByteArrayInputStream(data), getPath(properties.getPrefix(), suffix), Long.valueOf(data.length), contentType); } /** @@ -353,8 +353,8 @@ public class OssClient { * @return UploadResult 包含上传后的文件信息 * @throws OssException 如果上传失败,抛出自定义异常 */ - public UploadResult uploadSuffix(InputStream inputStream, String suffix, Long length) { - return upload(inputStream, getPath(properties.getPrefix(), suffix), length, FileUtils.getMimeType(suffix)); + public UploadResult uploadSuffix(InputStream inputStream, String suffix, Long length, String contentType) { + return upload(inputStream, getPath(properties.getPrefix(), suffix), length, contentType); } /** diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java index a05f2a33..dda73e3c 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java @@ -173,7 +173,7 @@ public class SysOssServiceImpl implements ISysOssService { OssClient storage = OssFactory.instance(); UploadResult uploadResult; try { - uploadResult = storage.uploadSuffix(file.getBytes(), suffix); + uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); } catch (IOException e) { throw new ServiceException(e.getMessage()); } From 3542bb92aac1434f08d2fa2aed2f233f7dbb369f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 29 Aug 2024 10:54:23 +0800 Subject: [PATCH 07/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20oss?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=9B=B4=E6=8E=A5=E4=BB=8E=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=A4=B4=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java index 61d0371d..dcdc9bd4 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java @@ -42,7 +42,7 @@ public class RemoteFileServiceImpl implements RemoteFileService { try { String suffix = StringUtils.substring(originalFilename, originalFilename.lastIndexOf("."), originalFilename.length()); OssClient storage = OssFactory.instance(); - UploadResult uploadResult = storage.uploadSuffix(file, suffix); + UploadResult uploadResult = storage.uploadSuffix(file, suffix, contentType); // 保存文件信息 SysOssBo oss = new SysOssBo(); oss.setUrl(uploadResult.getUrl()); From d5ef554e5e3b4062f464d59a2c99a32db3812c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 29 Aug 2024 14:12:58 +0800 Subject: [PATCH 08/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20RegexUtils#?= =?UTF-8?q?extractFromString=20=E6=96=B9=E6=B3=95=E6=9C=AA=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E8=BF=94=E5=9B=9Enull=E4=B8=8D=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/common/core/utils/regex/RegexUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexUtils.java index b8b12d43..6dde1299 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexUtils.java @@ -21,7 +21,8 @@ public final class RegexUtils extends ReUtil { */ public static String extractFromString(String input, String regex, String defaultInput) { try { - return ReUtil.get(regex, input, 1); + String str = ReUtil.get(regex, input, 1); + return str == null ? defaultInput : str; } catch (Exception e) { return defaultInput; } From 9cd76401259a451d9728ec9229b4ba6c38e0a8e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 29 Aug 2024 20:52:44 +0800 Subject: [PATCH 09/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E4=BE=9D=E8=B5=96=E5=AF=BC=E8=87=B4=E7=9A=84=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ------ ruoyi-common/ruoyi-common-excel/pom.xml | 5 ----- 2 files changed, 11 deletions(-) diff --git a/pom.xml b/pom.xml index 9c4bdf90..0d12c806 100644 --- a/pom.xml +++ b/pom.xml @@ -369,12 +369,6 @@ ${undertow.version} - - commons-compress - org.apache.commons - 1.26.2 - - com.alibaba fastjson diff --git a/ruoyi-common/ruoyi-common-excel/pom.xml b/ruoyi-common/ruoyi-common-excel/pom.xml index 14b9410b..dd4a5eeb 100644 --- a/ruoyi-common/ruoyi-common-excel/pom.xml +++ b/ruoyi-common/ruoyi-common-excel/pom.xml @@ -25,11 +25,6 @@ com.alibaba easyexcel - - commons-compress - org.apache.commons - 1.26.2 - From 9ad8bff4fff37f330519993b838cda2c2fe3c4d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 31 Aug 2024 23:31:10 +0800 Subject: [PATCH 10/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=A4=9A=E4=BD=99=E7=9A=84=E5=BC=95=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/vo.java.vm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/vo.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/vo.java.vm index c896afbe..5591f977 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/vo.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/vo.java.vm @@ -58,7 +58,7 @@ public class ${ClassName}Vo implements Serializable { * ${column.columnComment}Url */ @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "${column.javaField}") - private String ${column.javaField}Url"; + private String ${column.javaField}Url; #end #end #end From 2318b48b262d1b8074fa6c88377a6dde5d2f20fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 2 Sep 2024 13:06:51 +0800 Subject: [PATCH 11/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0sql=E5=85=B3=E9=94=AE=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/common/core/utils/sql/SqlUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java index 3e109b21..fcf9fb4b 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/sql/SqlUtil.java @@ -15,7 +15,7 @@ public class SqlUtil { /** * 定义常用的 sql关键字 */ - public static final String SQL_REGEX = "select |insert |delete |update |drop |count |exec |chr |mid |master |truncate |char |and |declare "; + public static String SQL_REGEX = "and |extractvalue|updatexml|sleep|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |union |like |+|/*|user()"; /** * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) From cfdfd870bb85def78bda52295ede7364072e673a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 2 Sep 2024 14:12:44 +0800 Subject: [PATCH 12/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E5=AD=90=E9=83=A8=E9=97=A8=20=E7=88=B6=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E6=9C=AA=E5=85=B3=E8=81=94=E5=BC=80=E5=90=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/system/service/impl/SysDeptServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 79e89cf6..bb5d5691 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -280,6 +280,8 @@ public class SysDeptServiceImpl implements ISysDeptService { dept.setAncestors(newAncestors); updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); } + } else { + dept.setAncestors(oldDept.getAncestors()); } int result = baseMapper.updateById(dept); if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) From e53d49bf0ac6562fb4de60af4652cb7d02aa702d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 2 Sep 2024 17:20:05 +0800 Subject: [PATCH 13/64] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=20xml=20?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/resource/api/RemoteMessageServiceStub.java | 4 ++-- ruoyi-modules/ruoyi-gen/pom.xml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java index 68f55401..0671ded3 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java @@ -25,7 +25,7 @@ public class RemoteMessageServiceStub implements RemoteMessageService { try { remoteMessageService.publishMessage(sessionKey, message); } catch (Exception e) { - log.warn("websocket 功能未开启或服务未找到"); + log.warn("推送功能未开启或服务未找到"); } } @@ -39,7 +39,7 @@ public class RemoteMessageServiceStub implements RemoteMessageService { try { remoteMessageService.publishAll(message); } catch (Exception e) { - log.warn("websocket 功能未开启或服务未找到"); + log.warn("推送功能未开启或服务未找到"); } } } diff --git a/ruoyi-modules/ruoyi-gen/pom.xml b/ruoyi-modules/ruoyi-gen/pom.xml index adb95a07..997aaa99 100644 --- a/ruoyi-modules/ruoyi-gen/pom.xml +++ b/ruoyi-modules/ruoyi-gen/pom.xml @@ -80,19 +80,19 @@ - + - + - + From 25843a67ca2f4bf10f1692b02acc03f9a88cd744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 3 Sep 2024 13:53:52 +0800 Subject: [PATCH 14/64] update sa-token 1.38.0 => 1.39.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0d12c806..15cd50e1 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 3.34.1 2.2.7 1.1.2 - 1.38.0 + 1.39.0 1.18.34 7.4 2.0.0 From 2f52b340f286784089b099333b35b5d5b91f8733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 4 Sep 2024 16:18:00 +0800 Subject: [PATCH 15/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E8=8F=9C=E5=8D=95id=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dromara/gen/domain/GenTable.java | 2 +- .../main/java/org/dromara/gen/service/GenTableServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java index 19f94b0d..cc284789 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java @@ -162,7 +162,7 @@ public class GenTable extends BaseEntity { * 上级菜单ID字段 */ @TableField(exist = false) - private String parentMenuId; + private Long parentMenuId; /** * 上级菜单名称字段 diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java index 7638707b..3c6e3eb8 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java @@ -558,7 +558,7 @@ public class GenTableServiceImpl implements IGenTableService { String treeCode = paramsObj.getStr(GenConstants.TREE_CODE); String treeParentCode = paramsObj.getStr(GenConstants.TREE_PARENT_CODE); String treeName = paramsObj.getStr(GenConstants.TREE_NAME); - String parentMenuId = paramsObj.getStr(GenConstants.PARENT_MENU_ID); + Long parentMenuId = paramsObj.getLong(GenConstants.PARENT_MENU_ID); String parentMenuName = paramsObj.getStr(GenConstants.PARENT_MENU_NAME); genTable.setTreeCode(treeCode); From 67f19b350a16035fa89e5b5ebaf72103b52aa816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 5 Sep 2024 18:52:48 +0800 Subject: [PATCH 16/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5SSE=20token=E8=BF=87=E6=9C=9F=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=20Servlet=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/handler/GlobalExceptionHandler.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java index 061d3aa4..bd801bae 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java @@ -2,6 +2,7 @@ package org.dromara.common.web.handler; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; +import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; @@ -10,6 +11,7 @@ import org.dromara.common.core.domain.R; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.base.BaseException; import org.dromara.common.core.utils.StreamUtils; +import org.dromara.common.core.utils.StringUtils; import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.validation.BindException; import org.springframework.web.HttpRequestMethodNotSupportedException; @@ -53,6 +55,22 @@ public class GlobalExceptionHandler { return ObjectUtil.isNotNull(code) ? R.fail(code, e.getMessage()) : R.fail(e.getMessage()); } + /** + * servlet异常 + */ + @ExceptionHandler(ServletException.class) + public R handleServletException(ServletException e, HttpServletRequest request) { + if (StringUtils.contains(e.getMessage(), "NotLoginException")) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage()); + return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源"); + } else { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生未知异常.", requestURI, e); + return R.fail(e.getMessage()); + } + } + /** * 业务异常 */ From fddfb4389d16a8978397974cbd25e0dfe2bd3756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 5 Sep 2024 18:52:59 +0800 Subject: [PATCH 17/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20commons-io=20?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-modules/ruoyi-workflow/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ruoyi-modules/ruoyi-workflow/pom.xml b/ruoyi-modules/ruoyi-workflow/pom.xml index 13fdfc51..55c5b8d1 100644 --- a/ruoyi-modules/ruoyi-workflow/pom.xml +++ b/ruoyi-modules/ruoyi-workflow/pom.xml @@ -133,6 +133,12 @@ org.dromara ruoyi-api-workflow + + + commons-io + commons-io + 2.15.0 + From 2a6e63917f9c362a10aec1e70e64a1fab05b423a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 9 Sep 2024 11:32:09 +0800 Subject: [PATCH 18/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E7=94=9F=E4=BA=A7=E7=8E=AF=E5=A2=83=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E7=BB=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/oracle/oracle_ry_job.sql | 1 + sql/postgres/postgres_ry_job.sql | 1 + sql/ry-job.sql | 1 + 3 files changed, 3 insertions(+) diff --git a/sql/oracle/oracle_ry_job.sql b/sql/oracle/oracle_ry_job.sql index d2e17c1f..da65dbbf 100644 --- a/sql/oracle/oracle_ry_job.sql +++ b/sql/oracle/oracle_ry_job.sql @@ -74,6 +74,7 @@ COMMENT ON COLUMN sj_group_config.update_dt IS '修改时间'; COMMENT ON TABLE sj_group_config IS '组配置'; INSERT INTO sj_group_config (namespace_id, group_name, description, token, group_status, version, group_partition, id_generator_mode, init_scene, bucket_index, create_dt, update_dt) VALUES ('dev', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, sysdate, sysdate); +INSERT INTO sj_group_config (namespace_id, group_name, description, token, group_status, version, group_partition, id_generator_mode, init_scene, bucket_index, create_dt, update_dt) VALUES ('prod', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, sysdate, sysdate); -- sj_notify_config CREATE TABLE sj_notify_config diff --git a/sql/postgres/postgres_ry_job.sql b/sql/postgres/postgres_ry_job.sql index 3bed8a27..a9bc4df3 100644 --- a/sql/postgres/postgres_ry_job.sql +++ b/sql/postgres/postgres_ry_job.sql @@ -68,6 +68,7 @@ COMMENT ON COLUMN sj_group_config.update_dt IS '修改时间'; COMMENT ON TABLE sj_group_config IS '组配置'; INSERT INTO sj_group_config VALUES (1, 'dev', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); +INSERT INTO sj_group_config VALUES (2, 'prod', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); -- sj_notify_config CREATE TABLE sj_notify_config diff --git a/sql/ry-job.sql b/sql/ry-job.sql index c3aa7601..418ba94c 100644 --- a/sql/ry-job.sql +++ b/sql/ry-job.sql @@ -40,6 +40,7 @@ CREATE TABLE `sj_group_config` DEFAULT CHARSET = utf8mb4 COMMENT ='组配置'; INSERT INTO `sj_group_config` VALUES (1, 'dev', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); +INSERT INTO `sj_group_config` VALUES (1, 'prod', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); CREATE TABLE `sj_notify_config` ( From 1a52581e4e19a74e1f7646e01b56f1edb5ccac9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 9 Sep 2024 14:46:24 +0000 Subject: [PATCH 19/64] update sql/ry-job.sql. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 疯狂的狮子Li <15040126243@163.com> --- sql/ry-job.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/ry-job.sql b/sql/ry-job.sql index 418ba94c..396798ee 100644 --- a/sql/ry-job.sql +++ b/sql/ry-job.sql @@ -40,7 +40,7 @@ CREATE TABLE `sj_group_config` DEFAULT CHARSET = utf8mb4 COMMENT ='组配置'; INSERT INTO `sj_group_config` VALUES (1, 'dev', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); -INSERT INTO `sj_group_config` VALUES (1, 'prod', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); +INSERT INTO `sj_group_config` VALUES (2, 'prod', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); CREATE TABLE `sj_notify_config` ( From 998ba53519a1c05bec2f096cd2d8a928e0c2e76d Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Tue, 10 Sep 2024 10:28:33 +0800 Subject: [PATCH 20/64] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9ETreeUtil=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=8A=82=E7=82=B9=E5=88=97=E8=A1=A8=E4=B8=AD=E6=89=80?= =?UTF-8?q?=E6=9C=89=E8=8A=82=E7=82=B9=E7=9A=84=E5=8F=B6=E5=AD=90=E8=8A=82?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/TreeBuildUtils.java | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java index d0163e64..8e501dfe 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java @@ -5,11 +5,13 @@ import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.lang.tree.parser.NodeParser; -import org.dromara.common.core.utils.reflect.ReflectUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.dromara.common.core.utils.reflect.ReflectUtils; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 扩展 hutool TreeUtil 封装系统树构建 @@ -24,12 +26,54 @@ public class TreeBuildUtils extends TreeUtil { */ public static final TreeNodeConfig DEFAULT_CONFIG = TreeNodeConfig.DEFAULT_CONFIG.setNameKey("label"); + /** + * 构建树形结构 + * + * @param 输入节点的类型 + * @param 节点ID的类型 + * @param list 节点列表,其中包含了要构建树形结构的所有节点 + * @param nodeParser 解析器,用于将输入节点转换为树节点 + * @return 构建好的树形结构列表 + */ public static List> build(List list, NodeParser nodeParser) { if (CollUtil.isEmpty(list)) { - return null; + return CollUtil.newArrayList(); } K k = ReflectUtils.invokeGetter(list.get(0), "parentId"); return TreeUtil.build(list, k, DEFAULT_CONFIG, nodeParser); } + /** + * 获取节点列表中所有节点的叶子节点 + * + * @param 节点ID的类型 + * @param nodes 节点列表 + * @return 包含所有叶子节点的列表 + */ + public static List> getLeafNodes(List> nodes) { + if (CollUtil.isEmpty(nodes)) { + return CollUtil.newArrayList(); + } + return nodes.stream() + .flatMap(TreeBuildUtils::extractLeafNodes) + .collect(Collectors.toList()); + } + + /** + * 获取指定节点下的所有叶子节点 + * + * @param 节点ID的类型 + * @param node 要查找叶子节点的根节点 + * @return 包含所有叶子节点的列表 + */ + private static Stream> extractLeafNodes(Tree node) { + if (!node.hasChild()) { + return Stream.of(node); + } else { + // 递归调用,获取所有子节点的叶子节点 + return node.getChildren().stream() + .flatMap(TreeBuildUtils::extractLeafNodes); + } + } + } From cd0df97ed4b4584a9ad548c7b9170fc1345e9187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 11 Sep 2024 09:30:15 +0800 Subject: [PATCH 21/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5=E4=B8=8D=E5=85=BC=E5=AE=B9sqlserver=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/workflow/service/impl/ActTaskServiceImpl.java | 1 + .../src/main/resources/mapper/workflow/ActTaskMapper.xml | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index f6acba3e..4a56b33b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -280,6 +280,7 @@ public class ActTaskServiceImpl implements IActTaskService { if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) { queryWrapper.eq("t.processDefinitionKey", taskBo.getProcessDefinitionKey()); } + queryWrapper.orderByDesc("t.CREATE_TIME_"); Page page = actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); List taskList = page.getRecords(); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml index d1508abc..be27877d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml @@ -41,8 +41,7 @@ FROM ACT_RU_TASK RES INNER JOIN ACT_HI_PROCINST AHP ON RES.PROC_INST_ID_ = AHP.PROC_INST_ID_ INNER JOIN ACT_RE_PROCDEF ARP ON ARP.ID_ = RES.PROC_DEF_ID_ - WHERE RES.PARENT_TASK_ID_ IS NULL - ORDER BY RES.CREATE_TIME_ DESC) t ${ew.getCustomSqlSegment} + WHERE RES.PARENT_TASK_ID_ IS NULL) t ${ew.getCustomSqlSegment} From a1741dd839dc6025145e654bd2d8202358cc481a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 11 Sep 2024 12:01:22 +0800 Subject: [PATCH 22/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=BF=97=E6=9F=A5=E8=AF=A2=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysOperLogServiceImpl.java | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java index f80f1523..9d835184 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java @@ -34,8 +34,18 @@ public class SysOperLogServiceImpl implements ISysOperLogService { @Override public TableDataInfo selectPageOperLogList(SysOperLogBo operLog, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(operLog); + if (StringUtils.isBlank(pageQuery.getOrderByColumn())) { + pageQuery.setOrderByColumn("oper_id"); + pageQuery.setIsAsc("desc"); + } + Page page = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(page); + } + + private LambdaQueryWrapper buildQueryWrapper(SysOperLogBo operLog) { Map params = operLog.getParams(); - LambdaQueryWrapper lqw = new LambdaQueryWrapper() + return new LambdaQueryWrapper() .like(StringUtils.isNotBlank(operLog.getOperIp()), SysOperLog::getOperIp, operLog.getOperIp()) .like(StringUtils.isNotBlank(operLog.getTitle()), SysOperLog::getTitle, operLog.getTitle()) .eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0, @@ -50,12 +60,6 @@ public class SysOperLogServiceImpl implements ISysOperLogService { .like(StringUtils.isNotBlank(operLog.getOperName()), SysOperLog::getOperName, operLog.getOperName()) .between(params.get("beginTime") != null && params.get("endTime") != null, SysOperLog::getOperTime, params.get("beginTime"), params.get("endTime")); - if (StringUtils.isBlank(pageQuery.getOrderByColumn())) { - pageQuery.setOrderByColumn("oper_id"); - pageQuery.setIsAsc("desc"); - } - Page page = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(page); } /** @@ -78,23 +82,8 @@ public class SysOperLogServiceImpl implements ISysOperLogService { */ @Override public List selectOperLogList(SysOperLogBo operLog) { - Map params = operLog.getParams(); - return baseMapper.selectVoList(new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(operLog.getOperIp()), SysOperLog::getOperIp, operLog.getOperIp()) - .like(StringUtils.isNotBlank(operLog.getTitle()), SysOperLog::getTitle, operLog.getTitle()) - .eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0, - SysOperLog::getBusinessType, operLog.getBusinessType()) - .func(f -> { - if (ArrayUtil.isNotEmpty(operLog.getBusinessTypes())) { - f.in(SysOperLog::getBusinessType, Arrays.asList(operLog.getBusinessTypes())); - } - }) - .eq(operLog.getStatus() != null && operLog.getStatus() > 0, - SysOperLog::getStatus, operLog.getStatus()) - .like(StringUtils.isNotBlank(operLog.getOperName()), SysOperLog::getOperName, operLog.getOperName()) - .between(params.get("beginTime") != null && params.get("endTime") != null, - SysOperLog::getOperTime, params.get("beginTime"), params.get("endTime")) - .orderByDesc(SysOperLog::getOperId)); + LambdaQueryWrapper lqw = buildQueryWrapper(operLog); + return baseMapper.selectVoList(lqw.orderByDesc(SysOperLog::getOperId)); } /** From d5e587532563a701bcfa95f2e1c4c8dba2d93400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 11 Sep 2024 16:04:43 +0800 Subject: [PATCH 23/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4okhttp=E6=97=A0=E7=94=A8=E7=89=88=E6=9C=AC=E9=99=90?= =?UTF-8?q?=E5=88=B6(spring=E5=B7=B2=E7=BB=8F=E9=99=90=E5=88=B6=E8=BF=87?= =?UTF-8?q?=E4=BA=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pom.xml b/pom.xml index 15cd50e1..5044fbca 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,6 @@ 2.25.15 0.29.13 - 4.10.0 3.3.2 @@ -314,12 +313,6 @@ ${skywalking-toolkit.version} - - com.squareup.okhttp3 - okhttp - ${okhttp.version} - - software.amazon.awssdk From f3526100a8f76cf60598f39b570b07bc9824ade8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 11 Sep 2024 16:05:22 +0800 Subject: [PATCH 24/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E5=A4=84=E7=90=86=20scala=E5=BA=93=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-visual/ruoyi-snailjob-server/pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ruoyi-visual/ruoyi-snailjob-server/pom.xml b/ruoyi-visual/ruoyi-snailjob-server/pom.xml index fab68f6f..0cdaa547 100644 --- a/ruoyi-visual/ruoyi-snailjob-server/pom.xml +++ b/ruoyi-visual/ruoyi-snailjob-server/pom.xml @@ -16,6 +16,18 @@ com.aizuda snail-job-server-starter ${snailjob.version} + + + org.scala-lang + scala-library + + + + + + org.scala-lang + scala-library + 2.13.9 From 992647fd14bbf67da53cbf1e4996446872d40aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 11 Sep 2024 16:53:45 +0800 Subject: [PATCH 25/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0dubbo=E5=85=83=E6=95=B0=E6=8D=AE=E4=B8=AD=E5=BF=83=20r?= =?UTF-8?q?edis=E9=9B=86=E7=BE=A4=E9=85=8D=E7=BD=AE=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi-common-dubbo/src/main/resources/common-dubbo.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/resources/common-dubbo.yml b/ruoyi-common/ruoyi-common-dubbo/src/main/resources/common-dubbo.yml index 3e1199f6..79092151 100644 --- a/ruoyi-common/ruoyi-common-dubbo/src/main/resources/common-dubbo.yml +++ b/ruoyi-common/ruoyi-common-dubbo/src/main/resources/common-dubbo.yml @@ -24,10 +24,14 @@ dubbo: group: DUBBO_GROUP username: dubbo password: ${spring.data.redis.password} + # 集群开关 + cluster: false parameters: namespace: ${spring.profiles.active} database: ${spring.data.redis.database} timeout: ${spring.data.redis.timeout} + # 集群地址 cluster 为 true 生效 + backup: 127.0.0.1:6379,127.0.0.1:6381 # 消费者相关配置 consumer: # 结果缓存(LRU算法) From 30a7db3624277435512bfa20a3ec35bd8f9adc69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 12 Sep 2024 16:58:05 +0800 Subject: [PATCH 26/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E7=8A=B6=E6=80=81=E6=9B=B4=E6=94=B9=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=B8=A5=E8=B0=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/system/service/impl/SysTenantServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 65380f22..63b82dd0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -268,7 +268,10 @@ public class SysTenantServiceImpl implements ISysTenantService { @CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId") @Override public int updateTenantStatus(SysTenantBo bo) { - SysTenant tenant = MapstructUtils.convert(bo, SysTenant.class); + SysTenant tenant = new SysTenant(); + tenant.setId(bo.getId()); + tenant.setTenantId(bo.getTenantId()); + tenant.setStatus(bo.getStatus()); return baseMapper.updateById(tenant); } From 32fa5d1e8fb8f5514a7dd3a8dab7785249694152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 13 Sep 2024 09:39:15 +0800 Subject: [PATCH 27/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=B8=8D=E5=BA=94=E8=AF=A5set=E7=9A=84=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/system/service/impl/SysTenantServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 63b82dd0..7d6ca5b3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -270,7 +270,6 @@ public class SysTenantServiceImpl implements ISysTenantService { public int updateTenantStatus(SysTenantBo bo) { SysTenant tenant = new SysTenant(); tenant.setId(bo.getId()); - tenant.setTenantId(bo.getTenantId()); tenant.setStatus(bo.getStatus()); return baseMapper.updateById(tenant); } From 528850b28ff59157293fdd2c4d4376e988eace11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 13 Sep 2024 14:42:09 +0800 Subject: [PATCH 28/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=BD=93=E5=89=8D=E4=BC=9A=E8=AF=9D=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/tenant/helper/TenantHelper.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java index b1856126..1a5ea1a7 100644 --- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java +++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java @@ -1,6 +1,5 @@ package org.dromara.common.tenant.helper; -import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; @@ -130,7 +129,7 @@ public class TenantHelper { if (!isEnable()) { return; } - if (!isLogin() || !global) { + if (!LoginHelper.isLogin() || !global) { TEMP_DYNAMIC_TENANT.set(tenantId); return; } @@ -147,7 +146,7 @@ public class TenantHelper { if (!isEnable()) { return null; } - if (!isLogin()) { + if (!LoginHelper.isLogin()) { return TEMP_DYNAMIC_TENANT.get(); } // 如果线程内有值 优先返回 @@ -167,7 +166,7 @@ public class TenantHelper { if (!isEnable()) { return; } - if (!isLogin()) { + if (!LoginHelper.isLogin()) { TEMP_DYNAMIC_TENANT.remove(); return; } @@ -218,13 +217,4 @@ public class TenantHelper { return tenantId; } - private static boolean isLogin() { - try { - StpUtil.checkLogin(); - return true; - } catch (Exception e) { - return false; - } - } - } From 4be95fd878a61ca4853bb42b3bcfee09d783bb19 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 13 Sep 2024 15:14:00 +0800 Subject: [PATCH 29/64] =?UTF-8?q?docs=20=E6=9F=A5=E8=AF=A2=E8=A1=A8?= =?UTF-8?q?=E5=90=8D=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/gen/mapper/GenTableMapper.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java index 5911ab20..d859bf75 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java @@ -38,6 +38,14 @@ public interface GenTableMapper extends BaseMapperPlus { */ GenTable selectGenTableByName(String tableName); + /** + * 查询指定数据源下的所有表名列表 + * + * @param dataName 数据源名称,用于选择不同的数据源 + * @return 当前数据库中的表名列表 + * + * @DS("") 使用默认数据源执行查询操作 + */ @DS("") List selectTableNameList(String dataName); } From 28dff1831f0b2a719cfb3d324a92177458f445bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 13 Sep 2024 17:43:11 +0800 Subject: [PATCH 30/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=E8=BF=94=E5=9B=9E=E5=89=8D=E7=AB=AF=E7=9A=84=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E4=BF=A1=E6=81=AF=E9=87=8C=E5=8C=85=E5=90=ABhtml?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/system/listener/SysUserImportListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java index 13ec6fd9..2b2f981c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java @@ -3,6 +3,7 @@ package org.dromara.system.listener; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.digest.BCrypt; +import cn.hutool.http.HtmlUtil; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import jakarta.validation.ConstraintViolation; @@ -82,7 +83,7 @@ public class SysUserImportListener extends AnalysisEventListener Date: Wed, 18 Sep 2024 18:07:51 +0800 Subject: [PATCH 31/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8E=89=E6=9C=89=E9=97=AE=E9=A2=98=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95(=E4=BD=BF=E7=94=A8RedisUtils)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/common/redis/utils/CacheUtils.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/CacheUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/CacheUtils.java index 42a88d67..ea5c6c27 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/CacheUtils.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/CacheUtils.java @@ -10,10 +10,9 @@ import org.springframework.cache.CacheManager; import java.util.Set; /** - * 缓存操作工具类 {@link } + * 缓存操作工具类 * * @author Michelle.Chung - * @date 2022/8/13 */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @SuppressWarnings(value = {"unchecked"}) @@ -21,16 +20,6 @@ public class CacheUtils { private static final CacheManager CACHE_MANAGER = SpringUtils.getBean(CacheManager.class); - /** - * 获取缓存组内所有的KEY - * - * @param cacheNames 缓存组名称 - */ - public static Set keys(String cacheNames) { - RMap rmap = (RMap) CACHE_MANAGER.getCache(cacheNames).getNativeCache(); - return rmap.keySet(); - } - /** * 获取缓存值 * From 0ee13b881413b6a92e85f487dfed0d506f7ffcfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 19 Sep 2024 13:59:11 +0800 Subject: [PATCH 32/64] =?UTF-8?q?update=20mybatis-plus=203.5.7=20=3D>=203.?= =?UTF-8?q?5.8=20=E4=BB=A3=E7=A0=81=E9=80=82=E9=85=8D=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../mybatis/core/mapper/BaseMapperPlus.java | 24 +++++-------------- .../handler/PlusDataPermissionHandler.java | 4 ++-- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/pom.xml b/pom.xml index 5044fbca..184decd9 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 2023.0.3 3.2.3 3.5.16 - 3.5.7 + 3.5.8 3.9.1 4.3.1 2.3 diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java index 12290903..67a2fe8f 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java @@ -72,9 +72,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 插入操作是否成功的布尔值 */ default boolean insertBatch(Collection entityList) { - Db.saveBatch(entityList); - // 临时解决 新版本 mp 插入状态判断错误问题 - return true; + return Db.saveBatch(entityList); } /** @@ -84,9 +82,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 更新操作是否成功的布尔值 */ default boolean updateBatchById(Collection entityList) { - Db.updateBatchById(entityList); - // 临时解决 新版本 mp 插入状态判断错误问题 - return true; + return Db.updateBatchById(entityList); } /** @@ -96,9 +92,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 插入或更新操作是否成功的布尔值 */ default boolean insertOrUpdateBatch(Collection entityList) { - Db.saveOrUpdateBatch(entityList); - // 临时解决 新版本 mp 插入状态判断错误问题 - return true; + return Db.saveOrUpdateBatch(entityList); } /** @@ -109,9 +103,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 插入操作是否成功的布尔值 */ default boolean insertBatch(Collection entityList, int batchSize) { - Db.saveBatch(entityList, batchSize); - // 临时解决 新版本 mp 插入状态判断错误问题 - return true; + return Db.saveBatch(entityList, batchSize); } /** @@ -122,9 +114,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 更新操作是否成功的布尔值 */ default boolean updateBatchById(Collection entityList, int batchSize) { - Db.updateBatchById(entityList, batchSize); - // 临时解决 新版本 mp 插入状态判断错误问题 - return true; + return Db.updateBatchById(entityList, batchSize); } /** @@ -135,9 +125,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 插入或更新操作是否成功的布尔值 */ default boolean insertOrUpdateBatch(Collection entityList, int batchSize) { - Db.saveOrUpdateBatch(entityList, batchSize); - // 临时解决 新版本 mp 插入状态判断错误问题 - return true; + return Db.saveOrUpdateBatch(entityList, batchSize); } /** diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java index 5171e563..f55260e8 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java @@ -6,8 +6,8 @@ import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.expression.Parenthesis; import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.expression.operators.relational.ParenthesedExpressionList; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import org.apache.ibatis.io.Resources; import org.dromara.common.core.exception.ServiceException; @@ -106,7 +106,7 @@ public class PlusDataPermissionHandler { try { Expression expression = CCJSqlParserUtil.parseExpression(dataFilterSql); // 数据权限使用单独的括号 防止与其他条件冲突 - Parenthesis parenthesis = new Parenthesis(expression); + ParenthesedExpressionList parenthesis = new ParenthesedExpressionList<>(expression); if (ObjectUtil.isNotNull(where)) { return new AndExpression(where, parenthesis); } else { From 9b19b09eb2ae410738c0bce0e15ce4432bd3afd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 19 Sep 2024 13:59:42 +0800 Subject: [PATCH 33/64] update easyexcel 4.0.2 => 4.0.3 update redisson 3.34.1 => 3.36.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 184decd9..08b63df4 100644 --- a/pom.xml +++ b/pom.xml @@ -28,9 +28,9 @@ 2.2.22 2.6.0 0.15.0 - 4.0.2 + 4.0.3 5.8.31 - 3.34.1 + 3.36.0 2.2.7 1.1.2 1.39.0 From 21bc893410b3786659a31ee3cd67c01ebaf56b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 19 Sep 2024 17:53:32 +0800 Subject: [PATCH 34/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20sse=20?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=8D=95=E7=8B=AC=E5=A4=84=E7=90=86=20?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=87=BA=E7=8E=B0=E5=BC=82=E5=B8=B8=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/exception/SseException.java | 62 +++++++++++++++++++ ruoyi-common/ruoyi-common-web/pom.xml | 2 +- .../web/handler/GlobalExceptionHandler.java | 26 +++++--- .../dromara/gateway/filter/AuthFilter.java | 13 +++- 4 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/SseException.java diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/SseException.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/SseException.java new file mode 100644 index 00000000..a76e16d9 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/SseException.java @@ -0,0 +1,62 @@ +package org.dromara.common.core.exception; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serial; + +/** + * sse 特制异常 + * + * @author LionLi + */ +@Data +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@AllArgsConstructor +public final class SseException extends RuntimeException { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 错误码 + */ + private Integer code; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + */ + private String detailMessage; + + public SseException(String message) { + this.message = message; + } + + public SseException(String message, Integer code) { + this.message = message; + this.code = code; + } + + @Override + public String getMessage() { + return message; + } + + public SseException setMessage(String message) { + this.message = message; + return this; + } + + public SseException setDetailMessage(String detailMessage) { + this.detailMessage = detailMessage; + return this; + } +} diff --git a/ruoyi-common/ruoyi-common-web/pom.xml b/ruoyi-common/ruoyi-common-web/pom.xml index 7e920d16..1cc44992 100644 --- a/ruoyi-common/ruoyi-common-web/pom.xml +++ b/ruoyi-common/ruoyi-common-web/pom.xml @@ -19,7 +19,7 @@ org.dromara - ruoyi-common-core + ruoyi-common-json diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java index bd801bae..42c6087a 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java @@ -9,9 +9,10 @@ import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.exception.SseException; import org.dromara.common.core.exception.base.BaseException; import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.json.utils.JsonUtils; import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.validation.BindException; import org.springframework.web.HttpRequestMethodNotSupportedException; @@ -55,20 +56,25 @@ public class GlobalExceptionHandler { return ObjectUtil.isNotNull(code) ? R.fail(code, e.getMessage()) : R.fail(e.getMessage()); } + /** + * 认证失败 + */ + @ResponseStatus(org.springframework.http.HttpStatus.UNAUTHORIZED) + @ExceptionHandler(SseException.class) + public String handleNotLoginException(SseException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage()); + return JsonUtils.toJsonString(R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源")); + } + /** * servlet异常 */ @ExceptionHandler(ServletException.class) public R handleServletException(ServletException e, HttpServletRequest request) { - if (StringUtils.contains(e.getMessage(), "NotLoginException")) { - String requestURI = request.getRequestURI(); - log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage()); - return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源"); - } else { - String requestURI = request.getRequestURI(); - log.error("请求地址'{}',发生未知异常.", requestURI, e); - return R.fail(e.getMessage()); - } + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生未知异常.", requestURI, e); + return R.fail(e.getMessage()); } /** diff --git a/ruoyi-gateway/src/main/java/org/dromara/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/org/dromara/gateway/filter/AuthFilter.java index d3dbba34..bf0e11c3 100644 --- a/ruoyi-gateway/src/main/java/org/dromara/gateway/filter/AuthFilter.java +++ b/ruoyi-gateway/src/main/java/org/dromara/gateway/filter/AuthFilter.java @@ -8,6 +8,7 @@ import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.util.SaResult; import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.exception.SseException; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.satoken.utils.LoginHelper; @@ -39,11 +40,19 @@ public class AuthFilter { SaRouter.match("/**") .notMatch(ignoreWhite.getWhites()) .check(r -> { + ServerHttpRequest request = SaReactorSyncHolder.getContext().getRequest(); // 检查是否登录 是否有token - StpUtil.checkLogin(); + try { + StpUtil.checkLogin(); + } catch (NotLoginException e) { + if (request.getURI().getPath().contains("sse")) { + throw new SseException(e.getMessage(), e.getCode()); + } else { + throw e; + } + } // 检查 header 与 param 里的 clientid 与 token 里的是否一致 - ServerHttpRequest request = SaReactorSyncHolder.getContext().getRequest(); String headerCid = request.getHeaders().getFirst(LoginHelper.CLIENT_KEY); String paramCid = request.getQueryParams().getFirst(LoginHelper.CLIENT_KEY); String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString(); From e6a765cd34ce8222b6876d16b7fc0aa7a374d9d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 19 Sep 2024 18:09:58 +0800 Subject: [PATCH 35/64] update springboot 3.2.9 => 3.2.10 --- pom.xml | 19 +------------------ ruoyi-common/ruoyi-common-web/pom.xml | 13 ------------- 2 files changed, 1 insertion(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index 08b63df4..3402c5e4 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ UTF-8 UTF-8 17 - 3.2.9 + 3.2.10 2023.0.3 3.2.3 3.5.16 @@ -45,7 +45,6 @@ 1.16.6 2.7.0 - 2.3.15.Final 1.2.83 @@ -346,22 +345,6 @@ ${ip2region.version} - - io.undertow - undertow-core - ${undertow.version} - - - io.undertow - undertow-servlet - ${undertow.version} - - - io.undertow - undertow-websockets-jsr - ${undertow.version} - - com.alibaba fastjson diff --git a/ruoyi-common/ruoyi-common-web/pom.xml b/ruoyi-common/ruoyi-common-web/pom.xml index 1cc44992..6bb30063 100644 --- a/ruoyi-common/ruoyi-common-web/pom.xml +++ b/ruoyi-common/ruoyi-common-web/pom.xml @@ -39,19 +39,6 @@ spring-boot-starter-undertow - - io.undertow - undertow-core - - - io.undertow - undertow-servlet - - - io.undertow - undertow-websockets-jsr - - org.springframework.boot From 77bf53800dcdaf2c541cebdda3b518c5be946667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 19 Sep 2024 23:14:26 +0800 Subject: [PATCH 36/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20redis?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=20=E5=A6=82=E6=9E=9C=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E7=A7=9F=E6=88=B7id=E5=88=99=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/common/redis/utils/RedisUtils.java | 4 ++-- .../common/tenant/handle/TenantKeyPrefixHandler.java | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java index 67be2fb7..6fa3b748 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java @@ -517,7 +517,7 @@ public class RedisUtils { } /** - * 获得缓存的基本对象列表 + * 获得缓存的基本对象列表(全局匹配忽略租户 自行拼接租户id) * * @param pattern 字符串前缀 * @return 对象列表 @@ -528,7 +528,7 @@ public class RedisUtils { } /** - * 删除缓存的基本对象列表 + * 删除缓存的基本对象列表(全局匹配忽略租户 自行拼接租户id) * * @param pattern 字符串前缀 */ diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/TenantKeyPrefixHandler.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/TenantKeyPrefixHandler.java index 94753986..65f52339 100644 --- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/TenantKeyPrefixHandler.java +++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/TenantKeyPrefixHandler.java @@ -35,7 +35,8 @@ public class TenantKeyPrefixHandler extends KeyPrefixHandler { } String tenantId = TenantHelper.getTenantId(); if (StringUtils.isBlank(tenantId)) { - log.error("无法获取有效的租户id -> Null"); + log.debug("无法获取有效的租户id -> Null"); + return super.map(name); } if (StringUtils.startsWith(name, tenantId + "")) { // 如果存在则直接返回 @@ -61,7 +62,8 @@ public class TenantKeyPrefixHandler extends KeyPrefixHandler { } String tenantId = TenantHelper.getTenantId(); if (StringUtils.isBlank(tenantId)) { - log.error("无法获取有效的租户id -> Null"); + log.debug("无法获取有效的租户id -> Null"); + return super.unmap(name); } if (StringUtils.startsWith(unmap, tenantId + "")) { // 如果存在则删除 From f6cf5ab6ca0800c4a4252c85a51207e81bbc73c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 20 Sep 2024 15:45:50 +0800 Subject: [PATCH 37/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E9=80=82?= =?UTF-8?q?=E9=85=8Dmp=E6=96=B0=E7=89=88=E6=9C=AC=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=90=8D=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/mybatis/core/mapper/BaseMapperPlus.java | 8 ++++---- .../main/java/org/dromara/demo/mapper/TestDemoMapper.java | 2 +- .../dromara/demo/service/impl/TestDemoServiceImpl.java | 2 +- .../dromara/resource/service/impl/SysOssServiceImpl.java | 2 +- .../workflow/service/impl/WfFormManageServiceImpl.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java index 67a2fe8f..7964a37a 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java @@ -160,8 +160,8 @@ public interface BaseMapperPlus extends BaseMapper { * @param idList 主键ID集合 * @return 查询到的VO对象列表 */ - default List selectVoBatchIds(Collection idList) { - return selectVoBatchIds(idList, this.currentVoClass()); + default List selectVoByIds(Collection idList) { + return selectVoByIds(idList, this.currentVoClass()); } /** @@ -172,8 +172,8 @@ public interface BaseMapperPlus extends BaseMapper { * @param VO类的类型 * @return 查询到的VO对象列表,经过转换为指定的VO类后返回 */ - default List selectVoBatchIds(Collection idList, Class voClass) { - List list = this.selectBatchIds(idList); + default List selectVoByIds(Collection idList, Class voClass) { + List list = this.selectByIds(idList); if (CollUtil.isEmpty(list)) { return CollUtil.newArrayList(); } diff --git a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java index 2bee5623..07a35a30 100644 --- a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java +++ b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java @@ -49,7 +49,7 @@ public interface TestDemoMapper extends BaseMapperPlus { @DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "userName", value = "user_id") }, joinStr = "AND") - List selectBatchIds(@Param(Constants.COLL) Collection idList); + List selectByIds(@Param(Constants.COLL) Collection idList); @Override @DataPermission({ diff --git a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java index f27ec498..07ad54ef 100644 --- a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java +++ b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java @@ -101,7 +101,7 @@ public class TestDemoServiceImpl implements ITestDemoService { public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { // 做一些业务上的校验,判断是否需要校验 - List list = baseMapper.selectBatchIds(ids); + List list = baseMapper.selectByIds(ids); if (list.size() != ids.size()) { throw new ServiceException("您没有删除权限!"); } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java index dda73e3c..ab3ddc6e 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java @@ -237,7 +237,7 @@ public class SysOssServiceImpl implements ISysOssService { if (isValid) { // 做一些业务上的校验,判断是否需要校验 } - List list = baseMapper.selectBatchIds(ids); + List list = baseMapper.selectByIds(ids); for (SysOss sysOss : list) { OssClient storage = OssFactory.instance(sysOss.getService()); storage.delete(sysOss.getUrl()); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java index da2e777d..55e49117 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java @@ -41,7 +41,7 @@ public class WfFormManageServiceImpl implements IWfFormManageService { @Override public List queryByIds(List ids) { - return baseMapper.selectVoBatchIds(ids); + return baseMapper.selectVoByIds(ids); } /** From 048e1e3f85cf3245edc6747e59aad122d680a998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 20 Sep 2024 17:18:22 +0800 Subject: [PATCH 38/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=B9=A6?= =?UTF-8?q?=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/stream/producer/TransactionRocketProducer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-example/ruoyi-test-mq/src/main/java/org/dromara/stream/producer/TransactionRocketProducer.java b/ruoyi-example/ruoyi-test-mq/src/main/java/org/dromara/stream/producer/TransactionRocketProducer.java index b6477bdd..cef54bb3 100644 --- a/ruoyi-example/ruoyi-test-mq/src/main/java/org/dromara/stream/producer/TransactionRocketProducer.java +++ b/ruoyi-example/ruoyi-test-mq/src/main/java/org/dromara/stream/producer/TransactionRocketProducer.java @@ -28,8 +28,8 @@ public class TransactionRocketProducer { List tags = Arrays.asList("TAG-1", "TAG-2", "TAG-3"); for (int i = 0; i < 3; i++) { Message message = MessageBuilder.withPayload("===>事务消息-" + i).build(); - //destination formats: `topicName:tags` message – message Message arg – ext arg - TransactionSendResult res = rocketMQTemplate.sendMessageInTransaction("transaction_topic:" + tags.get(i), message, i + 1); + // destination formats: `topicName:tags` message – message Message arg – ext arg + TransactionSendResult res = rocketMQTemplate.sendMessageInTransaction("transaction-topic:" + tags.get(i), message, i + 1); if (res.getLocalTransactionState().equals(LocalTransactionState.COMMIT_MESSAGE) && res.getSendStatus().equals(SendStatus.SEND_OK)) { log.info("【生产者】事物消息发送成功;成功结果:{}", res); } else { From 48b172e6c96fca51a9a0fea52fe93bf70f97640f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 24 Sep 2024 18:18:40 +0800 Subject: [PATCH 39/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E5=99=A8=20postgres=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E4=B8=BB=E9=94=AE=E7=B1=BB=E5=9E=8B=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dromara/gen/constant/GenConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java index 937869f8..d471041c 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java @@ -61,7 +61,7 @@ public interface GenConstants { /** * 数据库数字类型 */ - String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer", + String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "int2", "int4", "int8", "number", "integer", "bit", "bigint", "float", "double", "decimal", "numeric", "real", "double precision", "smallserial", "serial", "bigserial", "money", "smallmoney"}; From d2b640162ff6509318d45344a99fce056d39c684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 25 Sep 2024 11:21:48 +0800 Subject: [PATCH 40/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20postgres=20?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E8=8F=9C=E5=8D=95=E5=90=8D=E7=A7=B0=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/postgres/postgres_ry_cloud.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/postgres/postgres_ry_cloud.sql b/sql/postgres/postgres_ry_cloud.sql index 9e4223ff..edce8305 100644 --- a/sql/postgres/postgres_ry_cloud.sql +++ b/sql/postgres/postgres_ry_cloud.sql @@ -429,7 +429,7 @@ comment on column sys_menu.remark is '备注'; -- ---------------------------- -- 一级菜单 insert into sys_menu values('1', '系统管理', '0', '1', 'system', null, '', '1', '0', 'M', '0', '0', '', 'system', 103, 1, now(), null, null, '系统管理目录'); -insert into sys_menu values('6', '系统管理', '0', '2', 'tenant', null, '', '1', '0', 'M', '0', '0', '', 'chart', 103, 1, now(), null, null, '租户管理目录'); +insert into sys_menu values('6', '租户管理', '0', '2', 'tenant', null, '', '1', '0', 'M', '0', '0', '', 'chart', 103, 1, now(), null, null, '租户管理目录'); insert into sys_menu values('2', '系统监控', '0', '3', 'monitor', null, '', '1', '0', 'M', '0', '0', '', 'monitor', 103, 1, now(), null, null, '系统监控目录'); insert into sys_menu values('3', '系统工具', '0', '4', 'tool', null, '', '1', '0', 'M', '0', '0', '', 'tool', 103, 1, now(), null, null, '系统工具目录'); insert into sys_menu values('4', 'PLUS官网', '0', '5', 'https://gitee.com/dromara/RuoYi-Cloud-Plus', null, '', '0', '0', 'M', '0', '0', '', 'guide', 103, 1, now(), null, null, 'RuoYi-Cloud-Plus官网地址'); From 152989483046bba98aa81b6a0a9fbca8781d74a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 29 Sep 2024 17:42:30 +0800 Subject: [PATCH 41/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E9=83=A8?= =?UTF-8?q?=E5=88=86web=E5=BC=82=E5=B8=B8=E8=A2=ABCryptoFilter=E6=88=AA?= =?UTF-8?q?=E8=83=A1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/common/encrypt/filter/CryptoFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java index 98351321..79d58daf 100644 --- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/filter/CryptoFilter.java @@ -99,7 +99,7 @@ public class CryptoFilter implements Filter { } } } catch (Exception e) { - throw new RuntimeException(e); + return null; } return null; } From 15c8b4cbfd68f37a0c76c81c2a096728d597bee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 29 Sep 2024 17:42:39 +0800 Subject: [PATCH 42/64] update sms4j 3.3.2 => 3.3.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3402c5e4..298f9cba 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ 0.29.13 - 3.3.2 + 3.3.3 8.7.2-20240808 From e00b30001792c74e2790ec69494559d7b9a535a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 30 Sep 2024 17:56:20 +0800 Subject: [PATCH 43/64] update anyline 20240808 => 20240930 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 298f9cba..7f961aac 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ 3.3.3 - 8.7.2-20240808 + 8.7.2-20240930 7.0.1 From 0db17bac6cce856322879dccd7d68edd674e9801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 1 Oct 2024 10:55:39 +0800 Subject: [PATCH 44/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=AD=97=E5=85=B8=E5=AD=98=E5=82=A8=E6=98=AF=E6=9C=AA?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E7=A7=9F=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/impl/SysTenantServiceImpl.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 7d6ca5b3..2f860620 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -444,12 +444,14 @@ public class SysTenantServiceImpl implements ISysTenantService { } } } - if (CollUtil.isNotEmpty(saveTypeList)) { - dictTypeMapper.insertBatch(saveTypeList); - } - if (CollUtil.isNotEmpty(saveDataList)) { - dictDataMapper.insertBatch(saveDataList); - } + TenantHelper.ignore(() -> { + if (CollUtil.isNotEmpty(saveTypeList)) { + dictTypeMapper.insertBatch(saveTypeList); + } + if (CollUtil.isNotEmpty(saveDataList)) { + dictDataMapper.insertBatch(saveDataList); + } + }); for (String tenantId : set) { TenantHelper.dynamic(tenantId, () -> CacheUtils.clear(CacheNames.SYS_DICT)); } From 0e7c7e8033ffdf67194bf40b9198cdf2a435fa13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 8 Oct 2024 14:44:45 +0800 Subject: [PATCH 45/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=90=8C?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=94=A8=E6=88=B7=E4=B8=8D=E5=90=8Ctoken?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E4=B8=8D=E5=90=8C=E6=9C=8D=E5=8A=A1=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=8F=91=E9=80=81=E4=B8=8D=E5=88=B0=E9=97=AE=E9=A2=98?= =?UTF-8?q?(=E6=94=B9=E4=B8=BA=E5=85=A8=E5=B1=80=E5=8F=91=E9=80=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/sse/core/SseEmitterManager.java | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java index 1d37a27d..5e48e072 100644 --- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java +++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java @@ -124,25 +124,13 @@ public class SseEmitterManager { * @param sseMessageDto 要发布的SSE消息对象 */ public void publishMessage(SseMessageDto sseMessageDto) { - List unsentUserIds = new ArrayList<>(); - // 当前服务内用户,直接发送消息 - for (Long userId : sseMessageDto.getUserIds()) { - if (USER_TOKEN_EMITTERS.containsKey(userId)) { - sendMessage(userId, sseMessageDto.getMessage()); - continue; - } - unsentUserIds.add(userId); - } - // 不在当前服务内用户,发布订阅消息 - if (CollUtil.isNotEmpty(unsentUserIds)) { - SseMessageDto broadcastMessage = new SseMessageDto(); - broadcastMessage.setMessage(sseMessageDto.getMessage()); - broadcastMessage.setUserIds(unsentUserIds); - RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> { - log.info("SSE发送主题订阅消息topic:{} session keys:{} message:{}", - SSE_TOPIC, unsentUserIds, sseMessageDto.getMessage()); - }); - } + SseMessageDto broadcastMessage = new SseMessageDto(); + broadcastMessage.setMessage(sseMessageDto.getMessage()); + broadcastMessage.setUserIds(sseMessageDto.getUserIds()); + RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> { + log.info("SSE发送主题订阅消息topic:{} session keys:{} message:{}", + SSE_TOPIC, sseMessageDto.getUserIds(), sseMessageDto.getMessage()); + }); } /** From 791b73f1a5816cc619cb84a0d3eba113831f2ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 8 Oct 2024 16:31:18 +0800 Subject: [PATCH 46/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=A1=A5?= =?UTF-8?q?=E5=85=A8=20@Override=20=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/common/redis/manager/CaffeineCacheDecorator.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java index 793e21f5..6e83df13 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java @@ -44,6 +44,7 @@ public class CaffeineCacheDecorator implements Cache { } @SuppressWarnings("unchecked") + @Override public T get(Object key, Class type) { Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, type)); return (T) o; @@ -55,6 +56,7 @@ public class CaffeineCacheDecorator implements Cache { cache.put(key, value); } + @Override public ValueWrapper putIfAbsent(Object key, Object value) { CAFFEINE.invalidate(getUniqueKey(key)); return cache.putIfAbsent(key, value); @@ -65,6 +67,7 @@ public class CaffeineCacheDecorator implements Cache { evictIfPresent(key); } + @Override public boolean evictIfPresent(Object key) { boolean b = cache.evictIfPresent(key); if (b) { @@ -78,6 +81,7 @@ public class CaffeineCacheDecorator implements Cache { cache.clear(); } + @Override public boolean invalidate() { return cache.invalidate(); } From 4959712df05eb7e4e02b7af0315252b6cddb6d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 12 Oct 2024 16:23:54 +0800 Subject: [PATCH 47/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=A1=A5?= =?UTF-8?q?=E5=85=A8=20pg=20=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dromara/gen/constant/GenConstants.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java index d471041c..3e1fd414 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java @@ -56,13 +56,13 @@ public interface GenConstants { * 数据库时间类型 */ String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp", "year", "interval", - "smalldatetime", "datetime2", "datetimeoffset"}; + "smalldatetime", "datetime2", "datetimeoffset", "timestamptz"}; /** * 数据库数字类型 */ String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "int2", "int4", "int8", "number", "integer", - "bit", "bigint", "float", "double", "decimal", "numeric", "real", "double precision", + "bit", "bigint", "float", "float4", "float8", "double", "decimal", "numeric", "real", "double precision", "smallserial", "serial", "bigserial", "money", "smallmoney"}; /** From c32bcfd8adb6e97e5305876e8ad3f7597849303c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 14 Oct 2024 00:39:19 +0800 Subject: [PATCH 48/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20EncryptorManag?= =?UTF-8?q?er=20=E7=BC=93=E5=AD=98=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E5=86=85=E5=AD=98=E8=86=A8=E8=83=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/encrypt/core/EncryptorManager.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java index a6d3cf9c..2d795e07 100644 --- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java @@ -17,7 +17,10 @@ import org.springframework.core.type.classreading.CachingMetadataReaderFactory; import org.springframework.util.ClassUtils; import java.lang.reflect.Field; -import java.util.*; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -34,7 +37,7 @@ public class EncryptorManager { /** * 缓存加密器 */ - Map encryptorMap = new ConcurrentHashMap<>(); + Map encryptorMap = new ConcurrentHashMap<>(); /** * 类加密字段缓存 @@ -67,11 +70,12 @@ public class EncryptorManager { * @param encryptContext 加密执行者需要的相关配置参数 */ public IEncryptor registAndGetEncryptor(EncryptContext encryptContext) { - if (encryptorMap.containsKey(encryptContext)) { - return encryptorMap.get(encryptContext); + int key = encryptContext.hashCode(); + if (encryptorMap.containsKey(key)) { + return encryptorMap.get(key); } IEncryptor encryptor = ReflectUtil.newInstance(encryptContext.getAlgorithm().getClazz(), encryptContext); - encryptorMap.put(encryptContext, encryptor); + encryptorMap.put(key, encryptor); return encryptor; } @@ -81,7 +85,7 @@ public class EncryptorManager { * @param encryptContext 加密执行者需要的相关配置参数 */ public void removeEncryptor(EncryptContext encryptContext) { - this.encryptorMap.remove(encryptContext); + this.encryptorMap.remove(encryptContext.hashCode()); } /** From a639753fe99d25db771b4efaca8c7afd56972fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 15 Oct 2024 17:35:51 +0800 Subject: [PATCH 49/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=89=B9?= =?UTF-8?q?=E6=80=A7=E6=83=85=E5=86=B5=E4=B8=8B=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8?= =?UTF-8?q?=E6=8A=A5null=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/common/web/handler/GlobalExceptionHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java index 42c6087a..321c2261 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java @@ -176,7 +176,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { log.error(e.getMessage()); - String message = e.getBindingResult().getFieldError().getDefaultMessage(); + String message = StreamUtils.join(e.getBindingResult().getAllErrors(), DefaultMessageSourceResolvable::getDefaultMessage, ", "); return R.fail(message); } From be936ddf6b11615c3f3a1645ec71eb45234a880d Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Wed, 16 Oct 2024 10:55:20 +0800 Subject: [PATCH 50/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8Doss=E4=BA=91?= =?UTF-8?q?=E5=8E=82=E5=95=86=E6=9B=B4=E6=94=B9=E5=AF=BC=E8=87=B4=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E4=B8=8B=E8=BD=BD=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- .../java/org/dromara/common/oss/core/OssClient.java | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 7f961aac..e09ea4ca 100644 --- a/pom.xml +++ b/pom.xml @@ -49,8 +49,8 @@ 1.2.83 - 2.25.15 - 0.29.13 + 2.28.22 + 0.31.3 3.3.3 diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index bde26ae1..aff5490f 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -83,8 +83,8 @@ public class OssClient { StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( AwsBasicCredentials.create(properties.getAccessKey(), properties.getSecretKey())); - //MinIO 使用 HTTPS 限制使用域名访问,站点填域名。需要启用路径样式访问 - boolean isStyle = !StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE); + //使用对象存储服务时要求明确配置访问样式(路径样式或虚拟托管样式)。需要启用路径样式访问 + boolean isStyle = true; //创建AWS基于 CRT 的 S3 客户端 this.client = S3AsyncClient.crtBuilder() @@ -178,7 +178,9 @@ public class OssClient { .key(key) .contentMD5(StringUtils.isNotEmpty(md5Digest) ? md5Digest : null) .contentType(contentType) - .acl(getAccessPolicy().getObjectCannedACL()) + // 用于设置对象的访问控制列表(ACL)。不同云厂商对ACL的支持和实现方式有所不同, + // 因此根据具体的云服务提供商,你可能需要进行不同的配置(自行开启,阿里云有acl权限配置,腾讯云没有acl权限配置) + //.acl(getAccessPolicy().getObjectCannedACL()) .build()) .addTransferListener(LoggingTransferListener.create()) .source(filePath).build()); @@ -224,7 +226,9 @@ public class OssClient { y -> y.bucket(properties.getBucketName()) .key(key) .contentType(contentType) - .acl(getAccessPolicy().getObjectCannedACL()) + // 用于设置对象的访问控制列表(ACL)。不同云厂商对ACL的支持和实现方式有所不同, + // 因此根据具体的云服务提供商,你可能需要进行不同的配置(自行开启,阿里云有acl权限配置,腾讯云没有acl权限配置) + //.acl(getAccessPolicy().getObjectCannedACL()) .build()) .build()); From 097dbdcdee775a868dc08d8fe9efb6e9418e5b5c Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Wed, 16 Oct 2024 15:31:07 +0800 Subject: [PATCH 51/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8Doss=E4=B8=8A?= =?UTF-8?q?=E4=BC=A010=E7=A7=92=E8=B6=85=E6=97=B6=EF=BC=8C=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=BB=98=E8=AE=A4=E6=97=B6=E9=97=B4=E4=B8=80=E5=88=86?= =?UTF-8?q?=E9=92=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/common/oss/core/OssClient.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index aff5490f..900536b5 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -15,12 +15,12 @@ import org.dromara.common.oss.properties.OssProperties; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.ResponseInputStream; -import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.core.async.BlockingInputStreamAsyncRequestBody; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.S3Configuration; +import software.amazon.awssdk.services.s3.crt.S3CrtHttpConfiguration; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.NoSuchBucketException; import software.amazon.awssdk.services.s3.model.S3Exception; @@ -95,6 +95,9 @@ public class OssClient { .minimumPartSizeInBytes(10 * 1025 * 1024L) .checksumValidationEnabled(false) .forcePathStyle(isStyle) + .httpConfiguration(S3CrtHttpConfiguration.builder() + .connectionTimeout(Duration.ofSeconds(60)) // 设置连接超时 + .build()) .build(); //AWS基于 CRT 的 S3 AsyncClient 实例用作 S3 传输管理器的底层客户端 @@ -217,7 +220,10 @@ public class OssClient { } try { // 创建异步请求体(length如果为空会报错) - BlockingInputStreamAsyncRequestBody body = AsyncRequestBody.forBlockingInputStream(length); + BlockingInputStreamAsyncRequestBody body = BlockingInputStreamAsyncRequestBody.builder() + .contentLength(length) + .subscribeTimeout(Duration.ofSeconds(30)) + .build(); // 使用 transferManager 进行上传 Upload upload = transferManager.upload( From 9cf3310f1e63aa8b5d9d43266664e4101b4f1ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 16 Oct 2024 16:16:39 +0800 Subject: [PATCH 52/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=B0=86ip?= =?UTF-8?q?2region.xdb=E6=96=87=E4=BB=B6=E8=BD=AC=E7=A7=BB=E5=88=B0web?= =?UTF-8?q?=E5=8C=85=E4=B8=8B=20=E9=98=B2=E6=AD=A2=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=BD=BF=E7=94=A8core=E5=8C=85=E6=89=93?= =?UTF-8?q?=E5=8C=85=E5=A4=AA=E5=A4=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/ip2region.xdb | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename ruoyi-common/{ruoyi-common-core => ruoyi-common-web}/src/main/resources/ip2region.xdb (100%) diff --git a/ruoyi-common/ruoyi-common-core/src/main/resources/ip2region.xdb b/ruoyi-common/ruoyi-common-web/src/main/resources/ip2region.xdb similarity index 100% rename from ruoyi-common/ruoyi-common-core/src/main/resources/ip2region.xdb rename to ruoyi-common/ruoyi-common-web/src/main/resources/ip2region.xdb From 0d8a713d691870c007786f03802433a326266e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 17 Oct 2024 17:25:24 +0800 Subject: [PATCH 53/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20snailjob?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AFip=E9=85=8D=E7=BD=AE=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/nacos/ruoyi-job.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/nacos/ruoyi-job.yml b/config/nacos/ruoyi-job.yml index 1c9298f3..2fa9a7e9 100644 --- a/config/nacos/ruoyi-job.yml +++ b/config/nacos/ruoyi-job.yml @@ -29,3 +29,5 @@ snail-job: namespace: ${spring.profiles.active} # 随主应用端口飘逸 port: 2${server.port} + # 客户端ip指定 + host: From 12b4aefa2f016f755be481ea703acd2d1f44aec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 17 Oct 2024 17:35:05 +0800 Subject: [PATCH 54/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95DELETE=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dromara/common/log/aspect/LogAspect.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java index ce3fc04e..eb81dfef 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/aspect/LogAspect.java @@ -159,8 +159,7 @@ public class LogAspect { private void setRequestValue(JoinPoint joinPoint, OperLogEvent operLog, String[] excludeParamNames) throws Exception { Map paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest()); String requestMethod = operLog.getRequestMethod(); - if (MapUtil.isEmpty(paramsMap) - && HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) { + if (MapUtil.isEmpty(paramsMap) && StringUtils.equalsAny(requestMethod, HttpMethod.PUT.name(), HttpMethod.POST.name(), HttpMethod.DELETE.name())) { String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames); operLog.setOperParam(StringUtils.substring(params, 0, 2000)); } else { From d622d717b8354df5b30dc15cb0c6c3e01dd5afd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 17 Oct 2024 18:12:58 +0800 Subject: [PATCH 55/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E5=99=A8=E5=85=BC=E5=AE=B9=E6=89=80=E6=9C=89demo?= =?UTF-8?q?=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TestLeaveServiceImpl.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java index 8a9d8050..18b85ca1 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java @@ -144,11 +144,16 @@ public class TestLeaveServiceImpl implements ITestLeaveService { * * @param processTaskEvent 参数 */ - @EventListener(condition = "#processTaskEvent.key=='leave1' && #processTaskEvent.taskDefinitionKey=='Activity_14633hx'") + @EventListener(condition = "#processTaskEvent.key.startsWith('leave')") public void processTaskHandler(ProcessTaskEvent processTaskEvent) { - log.info("当前任务执行了{}", processTaskEvent.toString()); - TestLeave testLeave = baseMapper.selectById(Long.valueOf(processTaskEvent.getBusinessKey())); - testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); - baseMapper.updateById(testLeave); + // 所有demo案例的申请人节点id + String[] ids = {"Activity_14633hx", "Activity_19b1i4j", "Activity_0uscrk3", + "Activity_0uscrk3", "Activity_0x6b71j", "Activity_0zy3g6j", "Activity_06a55t0"}; + if (StringUtils.equalsAny(processTaskEvent.getTaskDefinitionKey(), ids)) { + log.info("当前任务执行了{}", processTaskEvent.toString()); + TestLeave testLeave = baseMapper.selectById(Long.valueOf(processTaskEvent.getBusinessKey())); + testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); + baseMapper.updateById(testLeave); + } } } From 74b897dfd712b9fa2de3a767816782d46ebc2828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 17 Oct 2024 15:26:50 +0000 Subject: [PATCH 56/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E7=94=9F=E6=88=90=E7=A7=9F=E6=88=B7ID=E6=9C=AA?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 疯狂的狮子Li <15040126243@163.com> --- .../org/dromara/system/service/impl/SysTenantServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 2f860620..80254127 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -203,7 +203,7 @@ public class SysTenantServiceImpl implements ISysTenantService { String numbers = RandomUtil.randomNumbers(6); // 判断是否存在,如果存在则重新生成 if (tenantIds.contains(numbers)) { - generateTenantId(tenantIds); + return generateTenantId(tenantIds); } return numbers; } From f64b17b548532dc1857e14cd28300c9b07d931c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 19 Oct 2024 14:51:35 +0800 Subject: [PATCH 57/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E5=90=8C=E6=AD=A5=20=E6=95=B0=E6=8D=AE=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysTenantServiceImpl.java | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 80254127..74765498 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.system.service.impl; import cn.dev33.satoken.secure.BCrypt; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; @@ -413,33 +414,36 @@ public class SysTenantServiceImpl implements ISysTenantService { Map map = StreamUtils.toIdentityMap(dataListTenant, SysDictData::getDictValue); for (SysDictData dictData : dataList) { if (!map.containsKey(dictData.getDictValue())) { + SysDictData data = BeanUtil.toBean(dictData, SysDictData.class); // 设置字典编码为 null - dictData.setDictCode(null); - dictData.setTenantId(tenantId); - dictData.setCreateTime(null); - dictData.setUpdateTime(null); + data.setDictCode(null); + data.setTenantId(tenantId); + data.setCreateTime(null); + data.setUpdateTime(null); set.add(tenantId); - saveDataList.add(dictData); + saveDataList.add(data); } } } else { - dictType.setDictId(null); - dictType.setTenantId(tenantId); - dictType.setCreateTime(null); - dictType.setUpdateTime(null); + SysDictType type = BeanUtil.toBean(dictType, SysDictType.class); + type.setDictId(null); + type.setTenantId(tenantId); + type.setCreateTime(null); + type.setUpdateTime(null); set.add(tenantId); - saveTypeList.add(dictType); + saveTypeList.add(type); if (CollUtil.isNotEmpty(dataList)) { // 筛选出 dictType 对应的 data for (SysDictData dictData : dataList) { + SysDictData data = BeanUtil.toBean(dictData, SysDictData.class); // 设置字典编码为 null - dictData.setDictCode(null); - dictData.setTenantId(tenantId); - dictData.setCreateTime(null); - dictData.setUpdateTime(null); + data.setDictCode(null); + data.setTenantId(tenantId); + data.setCreateTime(null); + data.setUpdateTime(null); set.add(tenantId); + saveDataList.add(data); } - saveDataList.addAll(dataList); } } } From 503a0efc319034ccfae77bf820618bce1df8ff7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 20 Oct 2024 12:26:05 +0800 Subject: [PATCH 58/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=BB=8F?= =?UTF-8?q?=E8=BF=87=E5=8A=A0=E5=AF=86=E7=9A=84=E8=AF=B7=E6=B1=82=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=BF=87=E6=BB=A4xss=E9=97=AE=E9=A2=98=20=E5=B0=86xss?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BB=8Egateway=E7=A7=BB=E5=8A=A8=E5=88=B0co?= =?UTF-8?q?mmon-web=E8=A7=A3=E5=AF=86=E5=90=8E=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/nacos/application-common.yml | 8 ++ config/nacos/ruoyi-gateway.yml | 7 -- .../common/web/config/FilterConfig.java | 33 ++++++ .../web}/config/properties/XssProperties.java | 8 +- .../dromara/common/web/filter/XssFilter.java | 66 ++++++++++++ .../filter/XssHttpServletRequestWrapper.java | 97 +++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 3 +- .../org/dromara/gateway/filter/XssFilter.java | 100 ------------------ 8 files changed, 209 insertions(+), 113 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java rename {ruoyi-gateway/src/main/java/org/dromara/gateway => ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web}/config/properties/XssProperties.java (71%) create mode 100644 ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssFilter.java create mode 100644 ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java delete mode 100644 ruoyi-gateway/src/main/java/org/dromara/gateway/filter/XssFilter.java diff --git a/config/nacos/application-common.yml b/config/nacos/application-common.yml index 17b26aec..ee793c7a 100644 --- a/config/nacos/application-common.yml +++ b/config/nacos/application-common.yml @@ -222,6 +222,14 @@ api-decrypt: # 对应前端加密公钥 MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ== privateKey: MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y= +# 防止XSS攻击 +xss: + enabled: true + excludeUrls: + - /system/notice + - /workflow/model/save + - /workflow/model/editModelXml + # 接口文档配置 springdoc: api-docs: diff --git a/config/nacos/ruoyi-gateway.yml b/config/nacos/ruoyi-gateway.yml index 60657ae0..ec59aff8 100644 --- a/config/nacos/ruoyi-gateway.yml +++ b/config/nacos/ruoyi-gateway.yml @@ -1,12 +1,5 @@ # 安全配置 security: - # 防止XSS攻击 - xss: - enabled: true - excludeUrls: - - /system/notice - - /workflow/model/save - - /workflow/model/editModelXml # 不校验白名单 ignore: whites: diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java new file mode 100644 index 00000000..1faf5931 --- /dev/null +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/FilterConfig.java @@ -0,0 +1,33 @@ +package org.dromara.common.web.config; + +import jakarta.servlet.DispatcherType; +import org.dromara.common.web.config.properties.XssProperties; +import org.dromara.common.web.filter.XssFilter; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; + +/** + * Filter配置 + * + * @author Lion Li + */ +@AutoConfiguration +@EnableConfigurationProperties(XssProperties.class) +public class FilterConfig { + + @Bean + @ConditionalOnProperty(value = "xss.enabled", havingValue = "true") + public FilterRegistrationBean xssFilterRegistration() { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setDispatcherTypes(DispatcherType.REQUEST); + registration.setFilter(new XssFilter()); + registration.addUrlPatterns("/*"); + registration.setName("xssFilter"); + registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE + 1); + return registration; + } + +} diff --git a/ruoyi-gateway/src/main/java/org/dromara/gateway/config/properties/XssProperties.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/properties/XssProperties.java similarity index 71% rename from ruoyi-gateway/src/main/java/org/dromara/gateway/config/properties/XssProperties.java rename to ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/properties/XssProperties.java index ce77b1ed..369bc4d9 100644 --- a/ruoyi-gateway/src/main/java/org/dromara/gateway/config/properties/XssProperties.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/properties/XssProperties.java @@ -1,9 +1,8 @@ -package org.dromara.gateway.config.properties; +package org.dromara.common.web.config.properties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.List; @@ -11,12 +10,11 @@ import java.util.List; /** * XSS跨站脚本配置 * - * @author ruoyi + * @author Lion Li */ @Data -@Configuration @RefreshScope -@ConfigurationProperties(prefix = "security.xss") +@ConfigurationProperties(prefix = "xss") public class XssProperties { /** diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssFilter.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssFilter.java new file mode 100644 index 00000000..a1bbd296 --- /dev/null +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssFilter.java @@ -0,0 +1,66 @@ +package org.dromara.common.web.filter; + +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.web.config.properties.XssProperties; +import org.springframework.http.HttpMethod; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 防止XSS攻击的过滤器 + * + * @author ruoyi + */ +public class XssFilter implements Filter { + /** + * 排除链接 + */ + public List excludes = new ArrayList<>(); + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + XssProperties properties = SpringUtils.getBean(XssProperties.class); + String appName = SpringUtils.getApplicationName(); + String appPath = "/" + StringUtils.substring(appName, appName.indexOf("-") + 1); + List excludeUrls = properties.getExcludeUrls() + .stream() + .filter(x -> StringUtils.startsWith(x, appPath)) + .map(x -> x.replaceFirst(appPath, StringUtils.EMPTY)) + .toList(); + excludes.addAll(excludeUrls); + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse resp = (HttpServletResponse) response; + if (handleExcludeURL(req, resp)) { + chain.doFilter(request, response); + return; + } + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) { + String url = request.getServletPath(); + String method = request.getMethod(); + // GET DELETE 不过滤 + if (method == null || HttpMethod.GET.matches(method) || HttpMethod.DELETE.matches(method)) { + return true; + } + return StringUtils.matches(url, excludes); + } + + @Override + public void destroy() { + + } +} diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java new file mode 100644 index 00000000..b32b0359 --- /dev/null +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java @@ -0,0 +1,97 @@ +package org.dromara.common.web.filter; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HtmlUtil; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import org.dromara.common.core.utils.StringUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * XSS过滤处理 + * + * @author ruoyi + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + /** + * @param request + */ + public XssHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + } + + @Override + public String[] getParameterValues(String name) { + String[] values = super.getParameterValues(name); + if (values != null) { + int length = values.length; + String[] escapseValues = new String[length]; + for (int i = 0; i < length; i++) { + // 防xss攻击和过滤前后空格 + escapseValues[i] = HtmlUtil.cleanHtmlTag(values[i]).trim(); + } + return escapseValues; + } + return super.getParameterValues(name); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + // 非json类型,直接返回 + if (!isJsonRequest()) { + return super.getInputStream(); + } + + // 为空,直接返回 + String json = StrUtil.str(IoUtil.readBytes(super.getInputStream(), false), StandardCharsets.UTF_8); + if (StringUtils.isEmpty(json)) { + return super.getInputStream(); + } + + // xss过滤 + json = HtmlUtil.cleanHtmlTag(json).trim(); + byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8); + final ByteArrayInputStream bis = IoUtil.toStream(jsonBytes); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return true; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public int available() throws IOException { + return jsonBytes.length; + } + + @Override + public void setReadListener(ReadListener readListener) { + } + + @Override + public int read() throws IOException { + return bis.read(); + } + }; + } + + /** + * 是否是Json请求 + */ + public boolean isJsonRequest() { + String header = super.getHeader(HttpHeaders.CONTENT_TYPE); + return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); + } +} diff --git a/ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index b0f0fc4d..098c0b71 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,3 +1,4 @@ +org.dromara.common.web.config.FilterConfig org.dromara.common.web.config.I18nConfig org.dromara.common.web.config.UndertowConfig -org.dromara.common.web.config.ResourcesConfig \ No newline at end of file +org.dromara.common.web.config.ResourcesConfig diff --git a/ruoyi-gateway/src/main/java/org/dromara/gateway/filter/XssFilter.java b/ruoyi-gateway/src/main/java/org/dromara/gateway/filter/XssFilter.java deleted file mode 100644 index d5016107..00000000 --- a/ruoyi-gateway/src/main/java/org/dromara/gateway/filter/XssFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.dromara.gateway.filter; - -import cn.hutool.http.HtmlUtil; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.gateway.config.properties.XssProperties; -import org.dromara.gateway.utils.WebFluxUtils; -import io.netty.buffer.ByteBufAllocator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.gateway.filter.GatewayFilterChain; -import org.springframework.cloud.gateway.filter.GlobalFilter; -import org.springframework.core.Ordered; -import org.springframework.core.io.buffer.*; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.http.server.reactive.ServerHttpRequestDecorator; -import org.springframework.stereotype.Component; -import org.springframework.web.server.ServerWebExchange; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -import java.nio.charset.StandardCharsets; - -/** - * 跨站脚本过滤器 - * - * @author ruoyi - */ -@Component -@ConditionalOnProperty(value = "security.xss.enabled", havingValue = "true") -public class XssFilter implements GlobalFilter, Ordered { - // 跨站脚本的 xss 配置,nacos自行添加 - @Autowired - private XssProperties xss; - - @Override - public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - ServerHttpRequest request = exchange.getRequest(); - // GET DELETE 不过滤 - HttpMethod method = request.getMethod(); - if (method == null || method == HttpMethod.GET || method == HttpMethod.DELETE) { - return chain.filter(exchange); - } - // 非json类型,不过滤 - if (!WebFluxUtils.isJsonRequest(exchange)) { - return chain.filter(exchange); - } - // excludeUrls 不过滤 - String url = request.getURI().getPath(); - if (StringUtils.matches(url, xss.getExcludeUrls())) { - return chain.filter(exchange); - } - ServerHttpRequestDecorator httpRequestDecorator = requestDecorator(exchange); - return chain.filter(exchange.mutate().request(httpRequestDecorator).build()); - - } - - private ServerHttpRequestDecorator requestDecorator(ServerWebExchange exchange) { - ServerHttpRequestDecorator serverHttpRequestDecorator = new ServerHttpRequestDecorator(exchange.getRequest()) { - @Override - public Flux getBody() { - Flux body = super.getBody(); - return body.buffer().map(dataBuffers -> { - DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); - DataBuffer join = dataBufferFactory.join(dataBuffers); - byte[] content = new byte[join.readableByteCount()]; - join.read(content); - DataBufferUtils.release(join); - String bodyStr = new String(content, StandardCharsets.UTF_8); - // 防xss攻击过滤 - bodyStr = HtmlUtil.cleanHtmlTag(bodyStr); - // 转成字节 - byte[] bytes = bodyStr.getBytes(); - NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT); - DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length); - buffer.write(bytes); - return buffer; - }); - } - - @Override - public HttpHeaders getHeaders() { - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.putAll(super.getHeaders()); - // 由于修改了请求体的body,导致content-length长度不确定,因此需要删除原先的content-length - httpHeaders.remove(HttpHeaders.CONTENT_LENGTH); - httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, "chunked"); - return httpHeaders; - } - - }; - return serverHttpRequestDecorator; - } - - @Override - public int getOrder() { - return Ordered.HIGHEST_PRECEDENCE; - } -} From 9018dcb3776b2714d5f630851609411a4638f0ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 21 Oct 2024 13:38:36 +0800 Subject: [PATCH 59/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=B9=A6=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/service/impl/WfDefinitionConfigServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java index ab55ff80..b2ffb9ef 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java @@ -96,7 +96,7 @@ public class WfDefinitionConfigServiceImpl implements IWfDefinitionConfigService baseMapper.delete(new LambdaQueryWrapper().eq(WfDefinitionConfig::getTableName, bo.getTableName())); add.setTableName(add.getTableName().toLowerCase()); boolean flag = baseMapper.insertOrUpdate(add); - if (baseMapper.insertOrUpdate(add)) { + if (flag) { bo.setId(add.getId()); } return flag; From 87031a099517d929d8639032a16084031f7903e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 21 Oct 2024 14:01:34 +0800 Subject: [PATCH 60/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20xss=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=99=A8=20=E6=9C=AA=E8=BF=87=E6=BB=A4url=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/XssHttpServletRequestWrapper.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java index b32b0359..80e4886a 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/filter/XssHttpServletRequestWrapper.java @@ -14,6 +14,7 @@ import org.springframework.http.MediaType; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.Map; /** * XSS过滤处理 @@ -28,6 +29,33 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { super(request); } + @Override + public String getParameter(String name) { + String value = super.getParameter(name); + if (value != null) { + return HtmlUtil.cleanHtmlTag(value).trim(); + } + return value; + } + + @Override + public Map getParameterMap() { + Map valueMap = super.getParameterMap(); + for (Map.Entry entry : valueMap.entrySet()) { + String[] values = entry.getValue(); + if (values != null) { + int length = values.length; + String[] escapseValues = new String[length]; + for (int i = 0; i < length; i++) { + // 防xss攻击和过滤前后空格 + escapseValues[i] = HtmlUtil.cleanHtmlTag(values[i]).trim(); + } + valueMap.put(entry.getKey(), escapseValues); + } + } + return valueMap; + } + @Override public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); @@ -40,7 +68,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { } return escapseValues; } - return super.getParameterValues(name); + return values; } @Override From 1096c1752345efe8cc2c56a479479f734021344b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 23 Oct 2024 17:59:49 +0800 Subject: [PATCH 61/64] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=B5=81=E7=A8=8B=E5=8F=98=E9=87=8F=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BD=BF=E7=94=A8=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/service/impl/WorkflowServiceImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index 86e43965..e12ec169 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java @@ -8,6 +8,7 @@ import org.dromara.workflow.service.IActProcessInstanceService; import org.dromara.workflow.service.WorkflowService; import org.dromara.workflow.utils.WorkflowUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.TaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,7 +25,7 @@ import java.util.Map; public class WorkflowServiceImpl implements WorkflowService { @Autowired(required = false) - private RuntimeService runtimeService; + private TaskService taskService; private final IActProcessInstanceService actProcessInstanceService; private final IActHiProcinstService actHiProcinstService; /** @@ -67,7 +68,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public void setVariable(String taskId, String variableName, Object value) { - runtimeService.setVariable(taskId, variableName, value); + taskService.setVariable(taskId, variableName, value); } /** @@ -78,7 +79,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public void setVariables(String taskId, Map variables) { - runtimeService.setVariables(taskId, variables); + taskService.setVariables(taskId, variables); } /** @@ -90,7 +91,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public void setVariableLocal(String taskId, String variableName, Object value) { - runtimeService.setVariableLocal(taskId, variableName, value); + taskService.setVariableLocal(taskId, variableName, value); } /** @@ -101,7 +102,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public void setVariablesLocal(String taskId, Map variables) { - runtimeService.setVariablesLocal(taskId, variables); + taskService.setVariablesLocal(taskId, variables); } /** From c8cb74c52a9ab782e2f1db15562d824c2d39a283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 24 Oct 2024 14:48:07 +0800 Subject: [PATCH 62/64] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20postgres?= =?UTF-8?q?=E9=80=82=E9=85=8DfindInSet=E5=86=99=E6=B3=95=20=E6=8F=90?= =?UTF-8?q?=E9=AB=98=E6=9F=A5=E8=AF=A2=E6=95=88=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/common/mybatis/helper/DataBaseHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java index a98b3b7e..bf40756b 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java @@ -62,8 +62,8 @@ public class DataBaseHelper { // charindex(',100,' , ',0,100,101,') <> 0 return "charindex(',%s,' , ','+%s+',') <> 0".formatted(var, var2); } else if (dataBasyType == DataBaseType.POSTGRE_SQL) { - // (select position(',100,' in ',0,100,101,')) <> 0 - return "(select position(',%s,' in ','||%s||',')) <> 0".formatted(var, var2); + // (select strpos(',0,100,101,' , ',100,')) <> 0 + return "(select strpos(','||%s||',' , ',%s,')) <> 0".formatted(var2, var); } else if (dataBasyType == DataBaseType.ORACLE) { // instr(',0,100,101,' , ',100,') <> 0 return "instr(','||%s||',' , ',%s,') <> 0".formatted(var2, var); From f4aef0eda83f125157bf0db5276a73aeb14ea5ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 25 Oct 2024 10:45:53 +0800 Subject: [PATCH 63/64] update springboot 3.2.10 => 3.2.11 update redisson 3.36.0 => 3.37.0 update mapstruct-plus 1.4.4 => 1.4.5 update anyline 8.7.2-20240930 => 8.7.2-20241022 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index e09ea4ca..878a432f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ UTF-8 UTF-8 17 - 3.2.10 + 3.2.11 2023.0.3 3.2.3 3.5.16 @@ -30,7 +30,7 @@ 0.15.0 4.0.3 5.8.31 - 3.36.0 + 3.37.0 2.2.7 1.1.2 1.39.0 @@ -40,7 +40,7 @@ 7.14.0 9.2.0 1.76 - 1.4.4 + 1.4.5 0.2.0 1.16.6 @@ -55,7 +55,7 @@ 3.3.3 - 8.7.2-20240930 + 8.7.2-20241022 7.0.1 From daae5a8ba92c767b0999aa7d1ed2c502485bb703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 25 Oct 2024 11:03:32 +0800 Subject: [PATCH 64/64] =?UTF-8?q?=F0=9F=8E=80=E5=8F=91=E5=B8=83=202.2.2=20?= =?UTF-8?q?=E6=AD=A3=E5=BC=8F=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .run/ruoyi-auth.run.xml | 2 +- .run/ruoyi-gateway.run.xml | 2 +- .run/ruoyi-gen.run.xml | 2 +- .run/ruoyi-job.run.xml | 2 +- .run/ruoyi-monitor.run.xml | 2 +- .run/ruoyi-nacos.run.xml | 2 +- .run/ruoyi-resource.run.xml | 2 +- .run/ruoyi-seata-server.run.xml | 2 +- .run/ruoyi-sentinel-dashboard.run.xml | 2 +- .run/ruoyi-snailjob-server.run.xml | 2 +- .run/ruoyi-system.run.xml | 2 +- .run/ruoyi-workflow.run.xml | 2 +- README.md | 2 +- docker/docker-compose.yml | 24 +++++++++---------- pom.xml | 2 +- ruoyi-api/ruoyi-api-bom/pom.xml | 2 +- ruoyi-common/ruoyi-common-alibaba-bom/pom.xml | 2 +- ruoyi-common/ruoyi-common-bom/pom.xml | 2 +- 18 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.run/ruoyi-auth.run.xml b/.run/ruoyi-auth.run.xml index 9c84b321..0461483b 100644 --- a/.run/ruoyi-auth.run.xml +++ b/.run/ruoyi-auth.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-gateway.run.xml b/.run/ruoyi-gateway.run.xml index b6e5ac04..4230e6cd 100644 --- a/.run/ruoyi-gateway.run.xml +++ b/.run/ruoyi-gateway.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-gen.run.xml b/.run/ruoyi-gen.run.xml index abd6d2ff..e23c8104 100644 --- a/.run/ruoyi-gen.run.xml +++ b/.run/ruoyi-gen.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-job.run.xml b/.run/ruoyi-job.run.xml index ead6cdae..6e960f5c 100644 --- a/.run/ruoyi-job.run.xml +++ b/.run/ruoyi-job.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-monitor.run.xml b/.run/ruoyi-monitor.run.xml index fc525a25..7318b6ba 100644 --- a/.run/ruoyi-monitor.run.xml +++ b/.run/ruoyi-monitor.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-nacos.run.xml b/.run/ruoyi-nacos.run.xml index 03e3f236..094cf8ce 100644 --- a/.run/ruoyi-nacos.run.xml +++ b/.run/ruoyi-nacos.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-resource.run.xml b/.run/ruoyi-resource.run.xml index 79b1f4a9..14204b8c 100644 --- a/.run/ruoyi-resource.run.xml +++ b/.run/ruoyi-resource.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-seata-server.run.xml b/.run/ruoyi-seata-server.run.xml index dd9b15a2..86aaade0 100644 --- a/.run/ruoyi-seata-server.run.xml +++ b/.run/ruoyi-seata-server.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-sentinel-dashboard.run.xml b/.run/ruoyi-sentinel-dashboard.run.xml index 41c2f518..a8848a53 100644 --- a/.run/ruoyi-sentinel-dashboard.run.xml +++ b/.run/ruoyi-sentinel-dashboard.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-snailjob-server.run.xml b/.run/ruoyi-snailjob-server.run.xml index dfeb8b06..411c393a 100644 --- a/.run/ruoyi-snailjob-server.run.xml +++ b/.run/ruoyi-snailjob-server.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-system.run.xml b/.run/ruoyi-system.run.xml index 9c75c60e..b441aea8 100644 --- a/.run/ruoyi-system.run.xml +++ b/.run/ruoyi-system.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-workflow.run.xml b/.run/ruoyi-workflow.run.xml index 59435e9b..21ef0fe7 100644 --- a/.run/ruoyi-workflow.run.xml +++ b/.run/ruoyi-workflow.run.xml @@ -2,7 +2,7 @@ - diff --git a/README.md b/README.md index bfb67c32..be6eb6a6 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus/blob/master/LICENSE) [![使用IntelliJ IDEA开发维护](https://img.shields.io/badge/IntelliJ%20IDEA-提供支持-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Cloud-Plus)
-[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.2.1-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus) +[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.2.2-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.1-blue.svg)]() [![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]() [![JDK-21](https://img.shields.io/badge/JDK-21-green.svg)]() diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 21b86c01..f45b9392 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -29,7 +29,7 @@ services: network_mode: "host" nacos: - image: ruoyi/ruoyi-nacos:2.2.1 + image: ruoyi/ruoyi-nacos:2.2.2 container_name: nacos ports: - "8848:8848" @@ -96,7 +96,7 @@ services: network_mode: "host" seata-server: - image: ruoyi/ruoyi-seata-server:2.2.1 + image: ruoyi/ruoyi-seata-server:2.2.2 container_name: seata-server ports: - "7091:7091" @@ -135,7 +135,7 @@ services: network_mode: "host" sentinel: - image: ruoyi/ruoyi-sentinel-dashboard:2.2.1 + image: ruoyi/ruoyi-sentinel-dashboard:2.2.2 container_name: sentinel environment: TZ: Asia/Shanghai @@ -150,7 +150,7 @@ services: network_mode: "host" ruoyi-monitor: - image: ruoyi/ruoyi-monitor:2.2.1 + image: ruoyi/ruoyi-monitor:2.2.2 container_name: ruoyi-monitor environment: # 时区上海 @@ -166,7 +166,7 @@ services: network_mode: "host" ruoyi-snailjob-server: - image: ruoyi/ruoyi-snailjob-server:2.2.1 + image: ruoyi/ruoyi-snailjob-server:2.2.2 container_name: ruoyi-snailjob-server environment: # 时区上海 @@ -180,7 +180,7 @@ services: network_mode: "host" ruoyi-gateway: - image: ruoyi/ruoyi-gateway:2.2.1 + image: ruoyi/ruoyi-gateway:2.2.2 container_name: ruoyi-gateway environment: # 时区上海 @@ -196,7 +196,7 @@ services: network_mode: "host" ruoyi-auth: - image: ruoyi/ruoyi-auth:2.2.1 + image: ruoyi/ruoyi-auth:2.2.2 container_name: ruoyi-auth environment: # 时区上海 @@ -212,7 +212,7 @@ services: network_mode: "host" ruoyi-system: - image: ruoyi/ruoyi-system:2.2.1 + image: ruoyi/ruoyi-system:2.2.2 container_name: ruoyi-system environment: # 时区上海 @@ -228,7 +228,7 @@ services: network_mode: "host" ruoyi-gen: - image: ruoyi/ruoyi-gen:2.2.1 + image: ruoyi/ruoyi-gen:2.2.2 container_name: ruoyi-gen environment: # 时区上海 @@ -244,7 +244,7 @@ services: network_mode: "host" ruoyi-job: - image: ruoyi/ruoyi-job:2.2.1 + image: ruoyi/ruoyi-job:2.2.2 container_name: ruoyi-job environment: # 时区上海 @@ -260,7 +260,7 @@ services: network_mode: "host" ruoyi-resource: - image: ruoyi/ruoyi-resource:2.2.1 + image: ruoyi/ruoyi-resource:2.2.2 container_name: ruoyi-resource environment: # 时区上海 @@ -276,7 +276,7 @@ services: network_mode: "host" ruoyi-workflow: - image: ruoyi/ruoyi-workflow:2.2.1 + image: ruoyi/ruoyi-workflow:2.2.2 container_name: ruoyi-workflow environment: # 时区上海 diff --git a/pom.xml b/pom.xml index 878a432f..c74a8b9b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ RuoYi-Cloud-Plus微服务系统 - 2.2.1 + 2.2.2 UTF-8 UTF-8 17 diff --git a/ruoyi-api/ruoyi-api-bom/pom.xml b/ruoyi-api/ruoyi-api-bom/pom.xml index 26889bed..c2926347 100644 --- a/ruoyi-api/ruoyi-api-bom/pom.xml +++ b/ruoyi-api/ruoyi-api-bom/pom.xml @@ -15,7 +15,7 @@ - 2.2.1 + 2.2.2 diff --git a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml index 561e2f1b..94956fd9 100644 --- a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml @@ -14,7 +14,7 @@ - 2.2.1 + 2.2.2 2023.0.1.2 1.8.8 1.7.1 diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index 8a096cd6..91d30f05 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -14,7 +14,7 @@ - 2.2.1 + 2.2.2