diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java index 6a6dbf3b..eefcebc3 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsFileControllerService.java @@ -120,7 +120,7 @@ public class QmsFileControllerService { // 校验权限 Long userId = UserUtil.getUserId(); - checkFilePermission(request.getId(), userId, true); + VUtil.trueThrowBusinessError(!checkFilePermission(request.getId(), userId)).throwMessage("无权限修改此文件"); String operator = UserUtil.getUserName(); LocalDateTime now = LocalDateTime.now(); @@ -154,7 +154,7 @@ public class QmsFileControllerService { // 校验权限 Long userId = UserUtil.getUserId(); - checkFilePermission(id, userId, true); + VUtil.trueThrowBusinessError(!checkFilePermission(id, userId)).throwMessage("无权限"); // 删除文件 fileService.removeById(id); @@ -222,9 +222,15 @@ public class QmsFileControllerService { // 校验权限 Long userId = UserUtil.getUserId(); - checkFilePermission(id, userId, false); - + boolean permission = checkFilePermission(id, userId); QmsFileVO vo = BeanUtil.copyProperties(file, QmsFileVO.class); + String key = StrUtil.format(LOCK_KEY, id); + Long lockedUserId = redisTemplate.opsForValue().get(key); + if (Objects.nonNull(lockedUserId)) { + permission = Objects.equals(lockedUserId, userId); + vo.setCurrentLockUserName(userService.getById(lockedUserId).getUserName()); + } + vo.setCanWrite(permission); // 获取分类名称 QmsFileCategory category = categoryService.getById(file.getCategoryId()); @@ -563,9 +569,9 @@ public class QmsFileControllerService { /** * 校验文件权限 - * @param needWrite 是否需要写权限 + * @return 是否有写入权限 */ - private void checkFilePermission(Long fileId, Long userId, boolean needWrite) { + private boolean checkFilePermission(Long fileId, Long userId) { QmsFile file = fileService.getById(fileId); if (file == null) { throw new NflgException(STATE.BusinessError, "文件不存在"); @@ -573,7 +579,7 @@ public class QmsFileControllerService { // 文件创建者有权限 if (Objects.equals(file.getCreateUserId(), userId)) { - return; + return true; } // 检查是否是文件组员 @@ -585,9 +591,7 @@ public class QmsFileControllerService { if (member != null) { // 有权限:只读(1) 或 读写(2) - if (!needWrite || member.getPermissionType() >= 2) { - return; - } + return member.getPermissionType() == 2; } // 检查是否是分类组员 @@ -598,9 +602,7 @@ public class QmsFileControllerService { .one(); if (categoryMember != null) { - if (!needWrite || categoryMember.getPermissionType() >= 2) { - return; - } + return categoryMember.getPermissionType() == 2; } throw new NflgException(STATE.BusinessError, "无权限操作此文件"); @@ -647,8 +649,10 @@ public class QmsFileControllerService { if (Boolean.FALSE.equals(result)) { Long lockedUserId = redisTemplate.opsForValue().get(key); if (lockedUserId != null) { - User lockedUser = userService.getById(lockedUserId); - VUtil.trueThrowBusinessError(true).throwMessage("文件已被用户【" + lockedUser.getUserName() + "】锁定"); + if (!Objects.equals(lockedUserId, currentUserId)) { + User lockedUser = userService.getById(lockedUserId); + VUtil.trueThrowBusinessError(true).throwMessage("文件已被用户【" + lockedUser.getUserName() + "】锁定"); + } } // key 在两次 Redis 操作间隙恰好过期,仍属于锁定失败,需兜底报错 VUtil.trueThrowBusinessError(true).throwMessage("文件已被锁定"); diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsFileVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsFileVO.java index 20509cd8..49968f29 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsFileVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsFileVO.java @@ -88,6 +88,11 @@ public class QmsFileVO { */ private List members; + /** + * 是否可以编辑 + */ + private boolean canWrite; + /** * 当前锁定用户名称 */