From 92ff130b0dc3da88b17e24b279e75c7a621a3c10 Mon Sep 17 00:00:00 2001 From: vertoryao Date: Mon, 12 May 2025 17:37:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(dify):=20=E6=B7=BB=E5=8A=A0=20Docker=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B9=B6=E8=BF=9B=E8=A1=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 Dockerfile 以支持 Docker部署 - 更新 Maven 配置,添加 Docker 插件- 优化部分代码结构,提高可维护性 - 新增消息列表查询功能 - 修复用户密码编码问题 --- Dockerfile | 7 +++ pom.xml | 51 ++++++++++++++----- .../security/CustomAccessDeniedHandler.java | 1 + .../dify/controller/V1ChatController.java | 18 +++++++ .../system/controller/RoleController.java | 2 +- .../system/service/impl/UserServiceImpl.java | 1 + .../dify/service/system/DeptServiceTest.java | 3 +- .../dify/service/system/RoleServiceTest.java | 2 +- .../dify/service/system/UserServiceTest.java | 2 +- 9 files changed, 70 insertions(+), 17 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..087d260 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17 +EXPOSE 8080 + +VOLUME /tmp +ADD target/dify-backend-0.0.1-SNAPSHOT.jar /app.jar +RUN bash -c 'touch /app.jar' +ENTRYPOINT ["java","-jar","/app.jar"] diff --git a/pom.xml b/pom.xml index 8173865..931a44a 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.zsc.edu - dify + dify-backend 0.0.1-SNAPSHOT dify-backend dify-backend @@ -31,6 +31,7 @@ 3.5.11 1.6.2 2.0.53 + 0.44.0 @@ -96,7 +97,7 @@ org.postgresql postgresql - 42.6 + 42.7.3 com.baomidou @@ -118,16 +119,6 @@ lombok true - - - - - - - - - - org.mapstruct mapstruct @@ -230,6 +221,42 @@ + + io.fabric8 + docker-maven-plugin + ${docker-maven-plugin.version} + + + docker-build + package + + build + + + + + + registry.cn-hangzhou.aliyuncs.com + + vertoryao + 71127217311Yao + + + + + registry.cn-hangzhou.aliyuncs.com/harry_yao/${project.artifactId}:latest + registry.cn-hangzhou.aliyuncs.com/harry_yao/${project.artifactId} + + ${project.basedir}/Dockerfile + + + + + target/${project.build.finalName}.jar + + + + diff --git a/src/main/java/com/zsc/edu/dify/framework/security/CustomAccessDeniedHandler.java b/src/main/java/com/zsc/edu/dify/framework/security/CustomAccessDeniedHandler.java index 309c6ff..267cc64 100644 --- a/src/main/java/com/zsc/edu/dify/framework/security/CustomAccessDeniedHandler.java +++ b/src/main/java/com/zsc/edu/dify/framework/security/CustomAccessDeniedHandler.java @@ -27,6 +27,7 @@ public class CustomAccessDeniedHandler implements AccessDeniedHandler { @Override public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException ex) throws IOException, ServletException { + ex.printStackTrace(); response.setContentType("application/json;charset=utf-8"); ExceptionResult result; if (ex instanceof MissingCsrfTokenException) { diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java index 71785eb..f6c19fb 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java @@ -9,10 +9,12 @@ import com.zsc.edu.dify.modules.system.service.UserService; import io.github.guoshiqiufeng.dify.chat.DifyChat; import io.github.guoshiqiufeng.dify.chat.dto.request.ChatMessageSendRequest; import io.github.guoshiqiufeng.dify.chat.dto.request.MessageConversationsRequest; +import io.github.guoshiqiufeng.dify.chat.dto.request.MessagesRequest; import io.github.guoshiqiufeng.dify.chat.dto.response.ChatMessageSendCompletionResponse; import io.github.guoshiqiufeng.dify.chat.dto.response.ChatMessageSendResponse; import io.github.guoshiqiufeng.dify.chat.dto.response.MessageConversationsResponse; import io.github.guoshiqiufeng.dify.core.pojo.DifyPageResult; +import io.github.guoshiqiufeng.dify.core.pojo.response.MessagesResponseVO; import jakarta.annotation.Resource; import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; @@ -86,6 +88,22 @@ public class V1ChatController { request.setUserId(SecurityUtil.getUserInfo().id.toString()); return difyChat.conversations(request); } + /** + * 获取会话的消息列表 + * + * @param request 请求参数 + * @return 消息列表 + */ + @PostMapping("/messages/{appid}") + @PreAuthorize("hasAuthority('dify:chat:query')") + public DifyPageResult conversations( + @RequestBody MessagesRequest request, + @PathVariable String appid + ) { + String apiKey = appEntityService.getApikey(appid); + request.setApiKey(apiKey); + return difyChat.messages(request); + } /** * 停止流式消息 diff --git a/src/main/java/com/zsc/edu/dify/modules/system/controller/RoleController.java b/src/main/java/com/zsc/edu/dify/modules/system/controller/RoleController.java index 831ef98..545c53d 100644 --- a/src/main/java/com/zsc/edu/dify/modules/system/controller/RoleController.java +++ b/src/main/java/com/zsc/edu/dify/modules/system/controller/RoleController.java @@ -31,7 +31,7 @@ public class RoleController { * * @return 所有角色列表 */ - @DataPermission +// @DataPermission @GetMapping @PreAuthorize("hasAuthority('system:role:query')") public Page query(RoleQuery query, Page page) { diff --git a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java index 70c5a5e..dfdd1df 100644 --- a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java @@ -53,6 +53,7 @@ public class UserServiceImpl extends ServiceImpl implement dto.setRoleId(dto.getRoleIds().get(0)); userMapper.convert(dto, user); user.setName(dto.getName()); + user.setPassword(passwordEncoder.encode(dto.password)); boolean existsByPhone = count(new LambdaQueryWrapper().eq(User::getPhone, dto.getPhone())) > 0; boolean existsByEmail = count(new LambdaQueryWrapper().eq(User::getEmail, dto.getEmail())) > 0; if (user.getPhone().equals(dto.getPhone()) && existsByPhone) { diff --git a/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java b/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java index b556463..bede417 100644 --- a/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java +++ b/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java @@ -93,8 +93,7 @@ class DeptServiceTest { assertEquals(tmp.getId(), dept2.id); // 不能改为其他已存在的同名同代码部门 assertThrows(ConstraintException.class, - () -> service.edit( - new DeptDto(dept3.getName(), "remark",null), dept2.id)); + () -> service.edit(new DeptDto(dept3.getName(), true, "remark",null), dept2.id)); } diff --git a/src/test/java/com/zsc/edu/dify/service/system/RoleServiceTest.java b/src/test/java/com/zsc/edu/dify/service/system/RoleServiceTest.java index 696681f..3cab151 100644 --- a/src/test/java/com/zsc/edu/dify/service/system/RoleServiceTest.java +++ b/src/test/java/com/zsc/edu/dify/service/system/RoleServiceTest.java @@ -64,7 +64,7 @@ class RoleServiceTest { assertNotNull(Role.getId()); assertEquals(3, service.list(new QueryWrapper().like("name", "A")).size()); // 不能创建其他已存在的同名同代码部门 - assertThrows(ConstraintException.class, () -> service.create(new RoleDto(role1.getName(), "remark...", null))); + assertThrows(ConstraintException.class, () -> service.create(new RoleDto(role1.getName(), true,"remark...", null))); } @Test diff --git a/src/test/java/com/zsc/edu/dify/service/system/UserServiceTest.java b/src/test/java/com/zsc/edu/dify/service/system/UserServiceTest.java index ed84ef3..ef2b64c 100644 --- a/src/test/java/com/zsc/edu/dify/service/system/UserServiceTest.java +++ b/src/test/java/com/zsc/edu/dify/service/system/UserServiceTest.java @@ -79,7 +79,7 @@ public class UserServiceTest { @Test void update() { UserUpdateDto dto = new UserUpdateDto(); - dto.setEnable(false); + dto.setEnableState(false); dto.setRemark("remark..."); dto.setPhone("16786899221"); dto.setEmail("@abc.com");