From b4791ab7616d2a988a011dfe4a7c7ef1417b2bcf Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 25 Apr 2024 17:09:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(=E4=B8=93=E5=8C=BA=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84):=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E6=96=87=E7=AB=A0=E5=BC=82=E6=AD=A5=E7=9B=B8=E5=85=B3=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/redis/service/RedisService.java | 43 +++++++++++++--- .../service/impl/SysUserServiceImpl.java | 3 +- .../doc/service/impl/CmsAsyncServiceImpl.java | 50 +++++++++---------- 3 files changed, 61 insertions(+), 35 deletions(-) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java index 67ac6e304..b758c9c10 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java @@ -1,11 +1,5 @@ package com.ruoyi.common.redis.service; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundSetOperations; import org.springframework.data.redis.core.HashOperations; @@ -13,6 +7,9 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; +import java.util.*; +import java.util.concurrent.TimeUnit; + /** * spring redis 工具类 * @@ -265,4 +262,38 @@ public class RedisService { return redisTemplate.keys(pattern); } + + /** + * 列表新增值 + * + * @param key 列表键 + * @param value 列表值 + * @return 列表长度 + */ + public Long leftPush(final String key, final String value) { + return redisTemplate.opsForList().leftPush(key, value); + } + + /** + * 列表弹出值 + * + * @param key 列表键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return 对象 + */ + public Object rightPop(final String key, final long timeout, final TimeUnit unit) { + return redisTemplate.opsForList().rightPop(key, timeout, unit); + } + + /** + * 列表中根据索引查找值 + * + * @param key 列表键 + * @param index 索引值 + * @return 对象 + */ + public Object listIndexOf(final String key, final long index) { + return redisTemplate.opsForList().index(key, index); + } } diff --git a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/common/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/common/service/impl/SysUserServiceImpl.java index 88503a50e..dc4d41336 100644 --- a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/common/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/common/service/impl/SysUserServiceImpl.java @@ -22,8 +22,7 @@ public class SysUserServiceImpl implements ISysUserService { @Override public SysUser selectUserByUserName(String username) { - SysUser sysUser = FeignUtils.getReturnData(remoteUserService.getSysUserByUserName(username, SecurityConstants.INNER)); - return sysUser; + return FeignUtils.getReturnData(remoteUserService.getSysUserByUserName(username, SecurityConstants.INNER)); } @Override diff --git a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/doc/service/impl/CmsAsyncServiceImpl.java b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/doc/service/impl/CmsAsyncServiceImpl.java index bff9394b7..daf3089c3 100644 --- a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/doc/service/impl/CmsAsyncServiceImpl.java +++ b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/doc/service/impl/CmsAsyncServiceImpl.java @@ -41,7 +41,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.util.DigestUtils; @@ -70,8 +69,6 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { private ICmsProjectService cmsProjectService; @Autowired private CmsDocMapper cmsDocMapper; - @Autowired - public RedisTemplate redisTemplate; @Value("${cms.summaryMaxLength}") private int summaryMaxLength; @Value("${http.gatewayUrl}") @@ -179,8 +176,7 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { //获取数据库中栏目名称列表 List databaseDirNameList = cmsDirList.stream().map(CmsDoc::getName).collect(Collectors.toList()); //获取数据库中多的栏目名称列表 - List deleteDirNameList = new ArrayList<>(); - deleteDirNameList.addAll(databaseDirNameList); + List deleteDirNameList = new ArrayList<>(databaseDirNameList); deleteDirNameList.removeAll(gitLinkDirNameList); for (String deleteDirName : deleteDirNameList) { CmsDoc cmsDir = cmsDocMapper.selectCmsDocDirByNameAndDeptId(deleteDirName, cmsProject.getDeptId()); @@ -197,8 +193,7 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { cmsDocMapper.deleteCmsDocById(cmsDir.getId()); } } - List addDirNameList = new ArrayList<>(); - addDirNameList.addAll(gitLinkDirNameList); + List addDirNameList = new ArrayList<>(gitLinkDirNameList); addDirNameList.removeAll(databaseDirNameList); //获取GitLink中多的文件夹名称列表 for (String addDirName : addDirNameList) { @@ -255,7 +250,7 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { } }catch (Exception e){ logger.error("[{}]同步新增文章发生异常:{}" - , e.getMessage()); + , cmsProject.getName(), e.getMessage()); } } } @@ -277,10 +272,10 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { } } catch (Exception e) { logger.error("[{}]同步删除文章发生异常:{}" - , e.getMessage()); + , cmsProject.getName(), e.getMessage()); } } - if (removedList.size() > 0) { + if (!removedList.isEmpty()) { SyncDatabaseAndGitLinkDir(cmsProject); } } @@ -302,7 +297,7 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { } } catch (Exception e) { logger.error("[{}]同步修改文章发生异常:{}" - , e.getMessage()); + , cmsProject.getName(), e.getMessage()); } } } @@ -364,13 +359,11 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { //获取数据库所有文件的filePath List databaseFilePathList = cmsDocList.stream().map(CmsDoc::getFilePath).collect(Collectors.toList()); //获取需要新增的文章 - List addDocFilePathList = new ArrayList<>(); - addDocFilePathList.addAll(gitlinkFilePathList); + List addDocFilePathList = new ArrayList<>(gitlinkFilePathList); addDocFilePathList.removeAll(databaseFilePathList); syncDocAddedData(cmsProject, addDocFilePathList); //获取需要删除的文章 - List removeDocFilePathList = new ArrayList<>(); - removeDocFilePathList.addAll(databaseFilePathList); + List removeDocFilePathList = new ArrayList<>(databaseFilePathList); removeDocFilePathList.removeAll(gitlinkFilePathList); syncDocRemovedData(cmsProject, removeDocFilePathList); //更新所有文章信息 @@ -391,19 +384,19 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { String cmsSyncDeptIdKey=CacheConstants.CMS_SYNC_DEPT_ID_KEY+deptId; //为当前同步操作生成UUID,若拿到的UUID为自身,则执行本次同步动作 String UUID= IdUtils.fastSimpleUUID(); - redisTemplate.opsForList().leftPush(cmsSyncDeptIdKey,UUID); + redisService.leftPush(cmsSyncDeptIdKey, UUID); //设置缓存过期时间,防止异常情况导致同步无法继续执行 - redisTemplate.expire(cmsSyncDeptIdKey,3600,TimeUnit.SECONDS); - String currentUUID= String.valueOf(redisTemplate.opsForList().index(cmsSyncDeptIdKey,-1)); + redisService.expire(cmsSyncDeptIdKey, 3600, TimeUnit.SECONDS); + String currentUUID = String.valueOf(redisService.listIndexOf(cmsSyncDeptIdKey, -1)); //设置最大循环阈值,防止意外情况导致死循环(7200次,约1小时左右) int threshold=7200; while (!UUID.equals(currentUUID)&&threshold!=0){ try { Thread.sleep(1000); } catch (InterruptedException e) { - logger.error("同步文章时Sleep失败:"+e.getMessage()); + logger.error("同步文章时Sleep失败:{}", e.getMessage()); } - currentUUID= String.valueOf(redisTemplate.opsForList().index(cmsSyncDeptIdKey,-1)); + currentUUID = String.valueOf(redisService.listIndexOf(cmsSyncDeptIdKey, -1)); threshold--; } @@ -440,10 +433,10 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { } } }catch (Exception e) { - logger.error("同步文章时发送异常:" + e.getMessage()); + logger.error("同步文章时发送异常:{}", e.getMessage()); }finally { //本次同步执行完成后,再弹出该UUID - redisTemplate.opsForList().rightPop(cmsSyncDeptIdKey,500, TimeUnit.MICROSECONDS); + redisService.rightPop(cmsSyncDeptIdKey, 500, TimeUnit.MICROSECONDS); } } @@ -525,7 +518,8 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { try { gitLinkRequestHelper.doPatch(CmsGitLinkRequestUrl.UPDATE_PROTECTED_BRANCHES(userName, identifier, params, pushWhitelistUsernames), null); } catch (URISyntaxException e) { - e.printStackTrace(); + logger.error("同步更新保护分支设置失败:{}", e.getMessage()); + ; } } @@ -538,7 +532,8 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { try { gitLinkRequestHelper.doDelete(CmsGitLinkRequestUrl.DELETE_PROTECTED_BRANCHES(userName, identifier, params, pushWhitelistUsernames), null); } catch (URISyntaxException e) { - e.printStackTrace(); + logger.error("同步删除保护分支设置失败:{}", e.getMessage()); + ; } } @@ -555,7 +550,8 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { try { gitLinkRequestHelper.doPost(CmsGitLinkRequestUrl.CREATE_PROTECTED_BRANCHES(userName, identifier, params, pushWhitelistUsernames), null); } catch (URISyntaxException e) { - e.printStackTrace(); + logger.error("同步创建保护分支设置失败:{}", e.getMessage()); + ; } } @@ -724,7 +720,7 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { //updateCmsCommonDatabase(oldCmsDoc); } - Boolean isChangeContent = false; + boolean isChangeContent = false; if (content != null) { String newMd5 = DigestUtils.md5DigestAsHex(content.getBytes()); String oldMd5 = null; @@ -887,7 +883,7 @@ public class CmsAsyncServiceImpl implements ICmsAsyncService { //删除旧栏目 deleteCmsDocByGitLink(cmsProject, oldCmsDir); } catch (Exception e) { - logger.error("重命名栏目失败(原栏目名称[" + oldCmsDir.getName() + "],新栏目名称[" + newCmsDir.getName() + "]):{}", e.getMessage()); + logger.error("重命名栏目失败(原栏目名称[{}],新栏目名称[{}]):{}", oldCmsDir.getName(), newCmsDir.getName(), e.getMessage()); throw new ServiceException("重命名栏目失败(原栏目名称[" + oldCmsDir.getName() + "],新栏目名称[" + newCmsDir.getName() + "])"); } finally { remoteZoneService.lockCmsByDeptId(cmsProject.getDeptId(), 0, SecurityConstants.INNER); From fff7f008128d1ad85b37d21e50cf808f432f4647 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 26 Apr 2024 14:55:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(=E4=B8=93=E5=8C=BA=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=B8=93=E5=8C=BA=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91):=20=E5=88=9B=E5=BB=BA=E4=B8=93=E5=8C=BA=E6=97=B6?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=86=85=E7=BD=AE=E8=B6=85=E7=AE=A1=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=9D=A5=E5=88=9B=E5=BB=BA=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=80=85=E6=9C=AA=E6=8B=A5=E6=9C=89=E7=89=B9?= =?UTF-8?q?=E8=89=B2=E4=B8=93=E5=8C=BA=E7=BB=84=E7=BB=87=E4=B8=8B=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E9=A1=B9=E7=9B=AE=E7=9A=84=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/cms/utils/CmsGitLinkRequestUrl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/utils/CmsGitLinkRequestUrl.java b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/utils/CmsGitLinkRequestUrl.java index f98f50e46..a1c50cb71 100644 --- a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/utils/CmsGitLinkRequestUrl.java +++ b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/utils/CmsGitLinkRequestUrl.java @@ -18,7 +18,7 @@ public class CmsGitLinkRequestUrl extends GitLinkRequestUrl { * 创建项目 */ public static GitLinkRequestUrl CREATE_PROJECT() { - return getGitLinkRequestUrl("/api/projects.json"); + return getAdminGitLinkRequestUrl("/api/projects.json"); } /**