From 771b4f091ee497bbd687e5f0f00d6b56818f5542 Mon Sep 17 00:00:00 2001 From: haichang <18360199714@aliyun.com> Date: Fri, 5 Jul 2024 12:40:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=8F=8A=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E5=8F=91=E7=94=9F=E6=93=8D=E4=BD=9C=E6=97=B6=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=85=B6=E4=BB=96=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ComponentInfoMagicResourceStorage.java | 12 +++++ .../service/TaskInfoMagicResourceStorage.java | 13 +++++ .../magicapi/core/config/MessageType.java | 12 +++++ .../AbstractPathMagicResourceStorage.java | 28 ++++++++++ .../impl/ApiInfoMagicResourceStorage.java | 14 +++++ .../core/web/MagicResourceController.java | 32 +++++++++++- .../FunctionInfoMagicResourceStorage.java | 13 +++++ .../ssssssss/magicapi/utils/ServletUtils.java | 52 +++++++++++++++++++ 8 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 magic-api/src/main/java/org/ssssssss/magicapi/utils/ServletUtils.java diff --git a/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentInfoMagicResourceStorage.java b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentInfoMagicResourceStorage.java index 8ebdf94d..0731db82 100644 --- a/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentInfoMagicResourceStorage.java +++ b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentInfoMagicResourceStorage.java @@ -1,6 +1,9 @@ package org.ssssssss.magicapi.component.service; +import org.springframework.context.event.EventListener; import org.ssssssss.magicapi.component.model.ComponentInfo; +import org.ssssssss.magicapi.core.event.FileEvent; +import org.ssssssss.magicapi.core.event.GroupEvent; import org.ssssssss.magicapi.core.exception.InvalidArgumentException; import org.ssssssss.magicapi.core.model.JsonCode; import org.ssssssss.magicapi.core.service.AbstractPathMagicResourceStorage; @@ -28,4 +31,13 @@ public class ComponentInfoMagicResourceStorage extends AbstractPathMagicResource return buildMappingKey(info, magicResourceService.getGroupPath(info.getGroupId())); } + @EventListener(condition = "#event.type == 'component'") + public void onFileEvent(FileEvent event) { + super.onFileEvent(event); + } + + @EventListener(condition = "#event.type == 'component'") + public void onGroupEvent(GroupEvent event) { + super.onGroupEvent(event); + } } diff --git a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskInfoMagicResourceStorage.java b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskInfoMagicResourceStorage.java index cb7e2d77..2440195f 100644 --- a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskInfoMagicResourceStorage.java +++ b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskInfoMagicResourceStorage.java @@ -1,5 +1,8 @@ package org.ssssssss.magicapi.task.service; +import org.springframework.context.event.EventListener; +import org.ssssssss.magicapi.core.event.FileEvent; +import org.ssssssss.magicapi.core.event.GroupEvent; import org.ssssssss.magicapi.core.service.AbstractPathMagicResourceStorage; import org.ssssssss.magicapi.task.model.TaskInfo; @@ -24,4 +27,14 @@ public class TaskInfoMagicResourceStorage extends AbstractPathMagicResourceStora public String buildMappingKey(TaskInfo info) { return buildMappingKey(info, magicResourceService.getGroupPath(info.getGroupId())); } + + @EventListener(condition = "#event.type == 'task'") + public void onFileEvent(FileEvent event) { + super.onFileEvent(event); + } + + @EventListener(condition = "#event.type == 'task'") + public void onGroupEvent(GroupEvent event) { + super.onGroupEvent(event); + } } diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java index b8674f50..e00a3101 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/config/MessageType.java @@ -25,6 +25,18 @@ public enum MessageType { ONLINE_USERS, /* 通知客户端,他人进入文件*/ INTO_FILE_ID, + /* 通知客户端,他人修改文件*/ + UPDATE_FILE_ID, + /* 通知客户端,他人删除文件*/ + DELETE_FILE_ID, + /* 通知客户端,他人修改目录*/ + UPDATE_GROUP_ID, + /* 通知客户端,他人删除目录*/ + DELETE_GROUP_ID, + /* 通知客户端,他人将文件锁定*/ + LOCK_FILE_ID, + /* 通知客户端,他人文件解锁*/ + UNLOCK_FILE_ID, /* ping */ PING, diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/AbstractPathMagicResourceStorage.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/AbstractPathMagicResourceStorage.java index 0b369238..5f62eed6 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/AbstractPathMagicResourceStorage.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/AbstractPathMagicResourceStorage.java @@ -1,9 +1,19 @@ package org.ssssssss.magicapi.core.service; +import org.ssssssss.magicapi.core.config.Constants; import org.ssssssss.magicapi.core.config.JsonCodeConstants; +import org.ssssssss.magicapi.core.config.MessageType; +import org.ssssssss.magicapi.core.config.WebSocketSessionManager; +import org.ssssssss.magicapi.core.event.EventAction; +import org.ssssssss.magicapi.core.event.FileEvent; +import org.ssssssss.magicapi.core.event.GroupEvent; +import org.ssssssss.magicapi.core.model.Group; +import org.ssssssss.magicapi.core.model.MagicEntity; import org.ssssssss.magicapi.core.model.PathMagicEntity; import org.ssssssss.magicapi.utils.PathUtils; +import org.ssssssss.magicapi.utils.ServletUtils; +import javax.servlet.http.HttpServletRequest; import java.util.Objects; public abstract class AbstractPathMagicResourceStorage implements MagicResourceStorage, JsonCodeConstants { @@ -35,4 +45,22 @@ public abstract class AbstractPathMagicResourceStorage folderDetail(@PathVariable("id") String id, MagicHttpServletRequest request) { + Group group = MagicConfiguration.getMagicResourceService().getGroup(id); + isTrue(allowVisit(request, Authorization.VIEW, group), PERMISSION_INVALID); + return new JsonBean<>(MagicConfiguration.getMagicResourceService().getGroup(id)); + } + @PostMapping("/resource/folder/save") @ResponseBody public JsonBean saveFolder(@RequestBody Group group, MagicHttpServletRequest request) { @@ -103,6 +113,14 @@ public class MagicResourceController extends MagicController implements MagicExc return new JsonBean<>(MagicConfiguration.getMagicResourceService().file(id)); } + @GetMapping("/resource/file/simple/{id}") + @ResponseBody + public JsonBean simple(@PathVariable("id") String id, MagicHttpServletRequest request) { + MagicEntity entity = MagicConfiguration.getMagicResourceService().file(id); + isTrue(allowVisit(request, Authorization.VIEW, entity), PERMISSION_INVALID); + return new JsonBean<>(MagicConfiguration.getMagicResourceService().file(id).simple()); + } + @PostMapping("/resource/move") @ResponseBody public JsonBean move(String src, String groupId, MagicHttpServletRequest request) { @@ -127,7 +145,12 @@ public class MagicResourceController extends MagicController implements MagicExc MagicEntity entity = service.file(id); notNull(entity, FILE_NOT_FOUND); isTrue(allowVisit(request, Authorization.LOCK, entity), PERMISSION_INVALID); - return new JsonBean<>(service.lock(id)); + boolean lock = service.lock(id); + if (lock){ + String clientId = request.getHeader(Constants.HEADER_REQUEST_CLIENT_ID); + WebSocketSessionManager.sendToOther(clientId,MessageType.LOCK_FILE_ID,id); + } + return new JsonBean<>(lock); } @PostMapping("/resource/unlock") @@ -136,7 +159,12 @@ public class MagicResourceController extends MagicController implements MagicExc MagicEntity entity = service.file(id); notNull(entity, FILE_NOT_FOUND); isTrue(allowVisit(request, Authorization.UNLOCK, entity), PERMISSION_INVALID); - return new JsonBean<>(service.unlock(id)); + boolean unlock = service.unlock(id); + if (unlock){ + String clientId = request.getHeader(Constants.HEADER_REQUEST_CLIENT_ID); + WebSocketSessionManager.sendToOther(clientId,MessageType.LOCK_FILE_ID,id); + } + return new JsonBean<>(unlock); } @GetMapping("/resource") diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/function/service/FunctionInfoMagicResourceStorage.java b/magic-api/src/main/java/org/ssssssss/magicapi/function/service/FunctionInfoMagicResourceStorage.java index 638dc3be..0e69cc18 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/function/service/FunctionInfoMagicResourceStorage.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/function/service/FunctionInfoMagicResourceStorage.java @@ -1,5 +1,8 @@ package org.ssssssss.magicapi.function.service; +import org.springframework.context.event.EventListener; +import org.ssssssss.magicapi.core.event.FileEvent; +import org.ssssssss.magicapi.core.event.GroupEvent; import org.ssssssss.magicapi.function.model.FunctionInfo; import org.ssssssss.magicapi.core.service.AbstractPathMagicResourceStorage; @@ -24,4 +27,14 @@ public class FunctionInfoMagicResourceStorage extends AbstractPathMagicResourceS public void validate(FunctionInfo entity) { notBlank(entity.getPath(), FUNCTION_PATH_REQUIRED); } + + @EventListener(condition = "#event.type == 'function'") + public void onFileEvent(FileEvent event) { + super.onFileEvent(event); + } + + @EventListener(condition = "#event.type == 'function'") + public void onGroupEvent(GroupEvent event) { + super.onGroupEvent(event); + } } diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/utils/ServletUtils.java b/magic-api/src/main/java/org/ssssssss/magicapi/utils/ServletUtils.java new file mode 100644 index 00000000..8257a7d2 --- /dev/null +++ b/magic-api/src/main/java/org/ssssssss/magicapi/utils/ServletUtils.java @@ -0,0 +1,52 @@ +package org.ssssssss.magicapi.utils; + + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +/** + * 客户端工具类 + * + * @author ruoyi + */ +public class ServletUtils +{ + + /** + * 获取request + */ + public static HttpServletRequest getRequest() + { + return getRequestAttributes().getRequest(); + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse() + { + return getRequestAttributes().getResponse(); + } + + /** + * 获取session + */ + public static HttpSession getSession() + { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() + { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } +} \ No newline at end of file -- Gitee