From a390d56842af053b6ae5c101264872fd71fbe1a8 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Thu, 12 Sep 2024 21:24:50 +0800 Subject: [PATCH 1/6] =?UTF-8?q?chore:=20API=E6=96=87=E6=A1=A3=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E5=8C=85=E7=BA=A0=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 3 +-- src/main/resources/application-prod.yml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 8fc2b4f8..398bb917 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -20,7 +20,6 @@ spring: port: 6379 # 如果Redis 服务未设置密码,需要将password删掉或注释,而不是设置为空字符串 password: 123456 - timeout: 10s lettuce: pool: @@ -152,7 +151,7 @@ springdoc: - com.youlai.boot.system.controller - com.youlai.boot.module.auth.controller - com.youlai.boot.module.file.controller - - com.youlai.boot.module.generator.controller + - com.youlai.boot.module.codegen.controller default-flat-param-object: true # knife4j 接口文档配置 diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 92953031..09ccde44 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -56,7 +56,6 @@ mybatis-plus: # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - # 安全配置 security: # JWT 配置 @@ -136,7 +135,7 @@ springdoc: - com.youlai.boot.system.controller - com.youlai.boot.module.auth.controller - com.youlai.boot.module.file.controller - - com.youlai.boot.module.generator.controller + - com.youlai.boot.module.codegen.controller default-flat-param-object: true # knife4j 接口文档配置 From a75f2dff23e3b5a13759cfc971713f66182f3413 Mon Sep 17 00:00:00 2001 From: zhangyuanpeng <1016062422@qq.com> Date: Fri, 13 Sep 2024 12:32:57 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E2=80=9C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=AD=E9=97=B4=E5=B1=82=E7=BA=A7=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=88=B6=E8=8A=82=E7=82=B9=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=AD=90?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=A0=91=E7=9B=AE=E5=BD=95=E4=B8=8D=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E2=80=9D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/impl/MenuServiceImpl.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java index ef13a2cc..c65ad416 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java @@ -268,9 +268,32 @@ public class MenuServiceImpl extends ServiceImpl implements Me roleMenuService.refreshRolePermsCache(); } } + // 修改菜单如果有子菜单,则更新子菜单的树路径 + updateChildrenTreePath(entity.getId(), treePath); return result; } + /** + * 更新子菜单树路径 + * @param id 当前菜单ID + * @param treePath 当前菜单树路径 + */ + private void updateChildrenTreePath(Long id, String treePath) { + List children = this.list(new LambdaQueryWrapper().eq(Menu::getParentId, id)); + if (CollectionUtil.isNotEmpty(children)) { + // 子菜单的树路径等于父菜单的树路径加上父菜单ID + String childTreePath = treePath + "," + id; + this.update(new LambdaUpdateWrapper() + .eq(Menu::getParentId, id) + .set(Menu::getTreePath, childTreePath) + ); + for (Menu child : children) { + // 递归更新子菜单 + updateChildrenTreePath(child.getId(), childTreePath); + } + } + } + /** * 部门路径生成 * From 790ac8d692016c2b9d259a036f809db3ae3b7790 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Fri, 13 Sep 2024 12:45:11 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youlai/boot/common/base/BasePageQuery.java | 10 ++++++++-- .../boot/system/controller/UserController.java | 6 +++--- .../templates/codegen/controller.java.vm | 6 +++--- .../resources/templates/codegen/index.vue.vm | 18 ++++++++---------- .../resources/templates/codegen/query.java.vm | 4 +--- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/youlai/boot/common/base/BasePageQuery.java b/src/main/java/com/youlai/boot/common/base/BasePageQuery.java index ab8deac4..edb32fd3 100644 --- a/src/main/java/com/youlai/boot/common/base/BasePageQuery.java +++ b/src/main/java/com/youlai/boot/common/base/BasePageQuery.java @@ -1,9 +1,11 @@ package com.youlai.boot.common.base; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.io.Serial; +import java.io.Serializable; + /** * 基础分页请求对象 * @@ -12,7 +14,11 @@ import lombok.Data; */ @Data @Schema -public class BasePageQuery { +public class BasePageQuery implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + @Schema(description = "页码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private int pageNum = 1; diff --git a/src/main/java/com/youlai/boot/system/controller/UserController.java b/src/main/java/com/youlai/boot/system/controller/UserController.java index 90586df2..a17dd63d 100644 --- a/src/main/java/com/youlai/boot/system/controller/UserController.java +++ b/src/main/java/com/youlai/boot/system/controller/UserController.java @@ -99,7 +99,7 @@ public class UserController { @Operation(summary = "删除用户") @DeleteMapping("/{ids}") @PreAuthorize("@ss.hasPerm('sys:user:delete')") - public Result deleteUsers( + public Result deleteUsers( @Parameter(description = "用户ID,多个以英文逗号(,)分割") @PathVariable String ids ) { boolean result = userService.deleteUsers(ids); @@ -108,7 +108,7 @@ public class UserController { @Operation(summary = "修改用户状态") @PatchMapping(value = "/{userId}/status") - public Result updateUserStatus( + public Result updateUserStatus( @Parameter(description = "用户ID") @PathVariable Long userId, @Parameter(description = "用户状态(1:启用;0:禁用)") @RequestParam Integer status ) { @@ -144,7 +144,7 @@ public class UserController { @Operation(summary = "导入用户") @PostMapping("/import") - public Result importUsers(MultipartFile file) throws IOException { + public Result importUsers(MultipartFile file) throws IOException { UserImportListener listener = new UserImportListener(); String msg = ExcelUtils.importExcel(file.getInputStream(), UserImportDTO.class, listener); return Result.success(msg); diff --git a/src/main/resources/templates/codegen/controller.java.vm b/src/main/resources/templates/codegen/controller.java.vm index e0272aaa..792db37a 100644 --- a/src/main/resources/templates/codegen/controller.java.vm +++ b/src/main/resources/templates/codegen/controller.java.vm @@ -43,7 +43,7 @@ public class ${entityName}Controller { @Operation(summary = "新增${businessName}") @PostMapping @PreAuthorize("@ss.hasPerm('${moduleName}:${lowerFirstEntityName}:add')") - public Result save${entityName}(@RequestBody @Valid ${entityName}Form formData ) { + public Result save${entityName}(@RequestBody @Valid ${entityName}Form formData ) { boolean result = ${lowerFirstEntityName}Service.save${entityName}(formData); return Result.judge(result); } @@ -61,7 +61,7 @@ public class ${entityName}Controller { @Operation(summary = "修改${businessName}") @PutMapping(value = "/{id}") @PreAuthorize("@ss.hasPerm('${moduleName}:${lowerFirstEntityName}:edit')") - public Result update${entityName}( + public Result update${entityName}( @Parameter(description = "$!{businessName}ID") @PathVariable Long id, @RequestBody @Validated ${entityName}Form formData ) { @@ -72,7 +72,7 @@ public class ${entityName}Controller { @Operation(summary = "删除${businessName}") @DeleteMapping("/{ids}") @PreAuthorize("@ss.hasPerm('${moduleName}:${lowerFirstEntityName}:delete')") - public Result delete${entityName}s( + public Result delete${entityName}s( @Parameter(description = "$!{businessName}ID,多个以英文逗号(,)分割") @PathVariable String ids ) { boolean result = ${lowerFirstEntityName}Service.delete${entityName}s(ids); diff --git a/src/main/resources/templates/codegen/index.vue.vm b/src/main/resources/templates/codegen/index.vue.vm index 247a8ba2..14153069 100644 --- a/src/main/resources/templates/codegen/index.vue.vm +++ b/src/main/resources/templates/codegen/index.vue.vm @@ -174,10 +174,8 @@ #if($fieldConfig.formType == "INPUT") #elseif($fieldConfig.formType == "SELECT") #if($fieldConfig.dictType != "") @@ -189,34 +187,34 @@ #end #elseif($fieldConfig.formType == "RADIO") - + 选项一 选项二 #elseif($fieldConfig.formType == "CHECK_BOX") - + 选项一 选项二 #elseif($fieldConfig.formType == "INPUT_NUMBER") #elseif($fieldConfig.formType == "SWITCH") #elseif($fieldConfig.formType == "TEXT_AREA") #elseif($fieldConfig.formType == "DATE_TIME") Date: Fri, 13 Sep 2024 18:31:42 +0800 Subject: [PATCH 4/6] =?UTF-8?q?fix:=20=E4=BB=A3=E7=A0=81=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E8=A7=A3=E5=8E=8B=E6=8F=90=E7=A4=BA=E6=95=B0=E6=8D=AE=E4=B8=8D?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boot/module/codegen/service/impl/CodegenServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java b/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java index 89aa25a0..7e54dc91 100644 --- a/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java +++ b/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java @@ -273,7 +273,8 @@ public class CodegenServiceImpl implements CodegenService { for (String tableName : tableNames) { generateAndZipCode(tableName, zip); } - + // 确保所有压缩数据写入输出流,避免数据残留在内存缓冲区引发的数据不完整 + zip.finish(); return outputStream.toByteArray(); } catch (IOException e) { From 5d24d7496ff250e3993de736c67c7a7bc579510f Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Fri, 13 Sep 2024 21:49:44 +0800 Subject: [PATCH 5/6] =?UTF-8?q?chore:=20=E4=BF=AE=E5=A4=8D=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/mysql8/youlai_boot.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/mysql8/youlai_boot.sql b/sql/mysql8/youlai_boot.sql index c22cf4b7..2cfdc939 100644 --- a/sql/mysql8/youlai_boot.sql +++ b/sql/mysql8/youlai_boot.sql @@ -396,7 +396,7 @@ INSERT INTO `sys_user_role` VALUES (3, 3); -- ---------------------------- --- Table structure for sys_user_role +-- Table structure for sys_log -- ---------------------------- DROP TABLE IF EXISTS `sys_log`; CREATE TABLE `sys_log` ( From ef6889857a6788c3acd41dfaa982c6756d0fb1dc Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Fri, 13 Sep 2024 21:50:41 +0800 Subject: [PATCH 6/6] =?UTF-8?q?refactor:=20=E6=97=A5=E5=BF=97=E5=92=8Cwebs?= =?UTF-8?q?ocket=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WebsocketController.java | 7 +++--- ...erviceImpl.java => OnlineUserService.java} | 23 ++++++++----------- .../websocket/service/WebsocketService.java | 9 -------- .../boot/system/controller/LogController.java | 4 ++-- .../system/event/UserConnectionEvent.java | 22 ++++++++++++++++++ .../youlai/boot/system/mapper/LogMapper.java | 2 +- .../boot/system/model/vo/VisitTrendVO.java | 6 +++++ .../boot/system/service/LogService.java | 2 +- .../system/service/impl/LogServiceImpl.java | 4 ++-- src/main/resources/mapper/LogMapper.xml | 2 +- 10 files changed, 48 insertions(+), 33 deletions(-) rename src/main/java/com/youlai/boot/module/websocket/service/{impl/WebsocketServiceImpl.java => OnlineUserService.java} (76%) delete mode 100644 src/main/java/com/youlai/boot/module/websocket/service/WebsocketService.java diff --git a/src/main/java/com/youlai/boot/module/websocket/controller/WebsocketController.java b/src/main/java/com/youlai/boot/module/websocket/controller/WebsocketController.java index b8525d28..4470332c 100644 --- a/src/main/java/com/youlai/boot/module/websocket/controller/WebsocketController.java +++ b/src/main/java/com/youlai/boot/module/websocket/controller/WebsocketController.java @@ -49,9 +49,10 @@ public class WebsocketController { */ @MessageMapping("/sendToUser/{username}") public void sendToUser(Principal principal, @DestinationVariable String username, String message) { - - String sender = principal.getName(); // 发送人 - String receiver = username; // 接收人 + // 发送人 + String sender = principal.getName(); + // 接收人 + String receiver = username; log.info("发送人:{}; 接收人:{}", sender, receiver); // 发送消息给指定用户,拼接后路径 /user/{receiver}/queue/greeting diff --git a/src/main/java/com/youlai/boot/module/websocket/service/impl/WebsocketServiceImpl.java b/src/main/java/com/youlai/boot/module/websocket/service/OnlineUserService.java similarity index 76% rename from src/main/java/com/youlai/boot/module/websocket/service/impl/WebsocketServiceImpl.java rename to src/main/java/com/youlai/boot/module/websocket/service/OnlineUserService.java index 48fcdfb5..3d05c20d 100644 --- a/src/main/java/com/youlai/boot/module/websocket/service/impl/WebsocketServiceImpl.java +++ b/src/main/java/com/youlai/boot/module/websocket/service/OnlineUserService.java @@ -1,7 +1,6 @@ -package com.youlai.boot.module.websocket.service.impl; +package com.youlai.boot.module.websocket.service; import com.youlai.boot.system.event.UserConnectionEvent; -import com.youlai.boot.module.websocket.service.WebsocketService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; @@ -12,25 +11,21 @@ import org.springframework.stereotype.Service; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +/** + * 在线用户服务 + * + * @author Ray + * @since 2.3.0 + */ @Service -@Slf4j @RequiredArgsConstructor -public class WebsocketServiceImpl implements WebsocketService { +@Slf4j +public class OnlineUserService { private final SimpMessagingTemplate messagingTemplate; private final Set onlineUsers = ConcurrentHashMap.newKeySet(); - @Override - public void addUser(String username) { - onlineUsers.add(username); - } - - @Override - public void removeUser(String username) { - onlineUsers.remove(username); - } - @EventListener public void handleUserConnectionEvent(UserConnectionEvent event) { String username = event.getUsername(); diff --git a/src/main/java/com/youlai/boot/module/websocket/service/WebsocketService.java b/src/main/java/com/youlai/boot/module/websocket/service/WebsocketService.java deleted file mode 100644 index 4cfe70d1..00000000 --- a/src/main/java/com/youlai/boot/module/websocket/service/WebsocketService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.youlai.boot.module.websocket.service; - -public interface WebsocketService { - - void addUser(String username); - - void removeUser(String username) ; - -} diff --git a/src/main/java/com/youlai/boot/system/controller/LogController.java b/src/main/java/com/youlai/boot/system/controller/LogController.java index f829a981..3170e6e8 100644 --- a/src/main/java/com/youlai/boot/system/controller/LogController.java +++ b/src/main/java/com/youlai/boot/system/controller/LogController.java @@ -34,10 +34,10 @@ public class LogController { @Operation(summary = "日志分页列表") @GetMapping("/page") - public PageResult listPagedLogs( + public PageResult getLogPage( LogPageQuery queryParams ) { - Page result = logService.listPagedLogs(queryParams); + Page result = logService.getLogPage(queryParams); return PageResult.success(result); } diff --git a/src/main/java/com/youlai/boot/system/event/UserConnectionEvent.java b/src/main/java/com/youlai/boot/system/event/UserConnectionEvent.java index 8033a2c8..dadea814 100644 --- a/src/main/java/com/youlai/boot/system/event/UserConnectionEvent.java +++ b/src/main/java/com/youlai/boot/system/event/UserConnectionEvent.java @@ -3,11 +3,33 @@ package com.youlai.boot.system.event; import lombok.Getter; import org.springframework.context.ApplicationEvent; + +/** + * 用户连接事件 + * + * @author Ray + * @since 2.3.0 + */ @Getter public class UserConnectionEvent extends ApplicationEvent { + + /** + * 用户名 + */ private final String username; + + /** + * 是否连接 + */ private final boolean connected; + /** + * 用户连接事件 + * + * @param source 事件源 + * @param username 用户名 + * @param connected 是否连接 + */ public UserConnectionEvent(Object source, String username, boolean connected) { super(source); this.username = username; diff --git a/src/main/java/com/youlai/boot/system/mapper/LogMapper.java b/src/main/java/com/youlai/boot/system/mapper/LogMapper.java index a29bc6a8..68bcefe7 100644 --- a/src/main/java/com/youlai/boot/system/mapper/LogMapper.java +++ b/src/main/java/com/youlai/boot/system/mapper/LogMapper.java @@ -28,7 +28,7 @@ public interface LogMapper extends BaseMapper { * @param queryParams * @return */ - Page listPagedLogs(Page page, LogPageQuery queryParams); + Page getLogPage(Page page, LogPageQuery queryParams); /** * 统计浏览数(PV) diff --git a/src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java b/src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java index 07cb686f..0a47b0a1 100644 --- a/src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java +++ b/src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java @@ -7,6 +7,12 @@ import lombok.Setter; import java.util.List; +/** + * 访问趋势VO + * + * @author Ray + * @since 2.3.0 + */ @Schema(description = "访问趋势VO") @Getter @Setter diff --git a/src/main/java/com/youlai/boot/system/service/LogService.java b/src/main/java/com/youlai/boot/system/service/LogService.java index ccfece2c..5d80fc3d 100644 --- a/src/main/java/com/youlai/boot/system/service/LogService.java +++ b/src/main/java/com/youlai/boot/system/service/LogService.java @@ -25,7 +25,7 @@ public interface LogService extends IService { * @param queryParams 查询参数 * @return */ - Page listPagedLogs(LogPageQuery queryParams); + Page getLogPage(LogPageQuery queryParams); /** diff --git a/src/main/java/com/youlai/boot/system/service/impl/LogServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/LogServiceImpl.java index c8887e14..b6befa4d 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/LogServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/LogServiceImpl.java @@ -36,8 +36,8 @@ public class LogServiceImpl extends ServiceImpl * @return */ @Override - public Page listPagedLogs(LogPageQuery queryParams) { - return this.baseMapper.listPagedLogs(new Page<>(queryParams.getPageNum(), queryParams.getPageSize()), + public Page getLogPage(LogPageQuery queryParams) { + return this.baseMapper.getLogPage(new Page<>(queryParams.getPageNum(), queryParams.getPageSize()), queryParams); } diff --git a/src/main/resources/mapper/LogMapper.xml b/src/main/resources/mapper/LogMapper.xml index ca84f4b2..6d7de53b 100644 --- a/src/main/resources/mapper/LogMapper.xml +++ b/src/main/resources/mapper/LogMapper.xml @@ -5,7 +5,7 @@ - SELECT t1.id, t1.module,