From 28b0b36840c72274d835bf23103c820e0309e9dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Sun, 27 Apr 2025 20:01:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iflytop/gd/app/controller/AuthController.java | 16 ++++-- .../iflytop/gd/app/controller/CmdController.java | 2 +- .../gd/app/controller/CraftsController.java | 7 +-- .../iflytop/gd/app/controller/OresController.java | 7 +-- .../gd/app/controller/SolutionsController.java | 7 +-- .../iflytop/gd/app/controller/UserController.java | 7 +-- .../iflytop/gd/app/core/BaseCommandHandler.java | 17 ++++++ .../gd/app/core/CommandHandlerRegistry.java | 55 ++++++++++++++++++ .../gd/app/service/cmd/BaseCommandHandler.java | 17 ------ .../gd/app/service/cmd/CommandHandlerRegistry.java | 67 ---------------------- .../gd/debug/controller/CmdDebugController.java | 10 ++-- 11 files changed, 98 insertions(+), 114 deletions(-) create mode 100644 src/main/java/com/iflytop/gd/app/core/BaseCommandHandler.java create mode 100644 src/main/java/com/iflytop/gd/app/core/CommandHandlerRegistry.java delete mode 100644 src/main/java/com/iflytop/gd/app/service/cmd/BaseCommandHandler.java delete mode 100644 src/main/java/com/iflytop/gd/app/service/cmd/CommandHandlerRegistry.java diff --git a/src/main/java/com/iflytop/gd/app/controller/AuthController.java b/src/main/java/com/iflytop/gd/app/controller/AuthController.java index 2bf9c74..ae421d1 100644 --- a/src/main/java/com/iflytop/gd/app/controller/AuthController.java +++ b/src/main/java/com/iflytop/gd/app/controller/AuthController.java @@ -11,10 +11,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Objects; @@ -32,11 +29,12 @@ public class AuthController { @Operation(summary = "账号密码登录") @PostMapping("/login") - public Result login(@RequestBody LoginDTO loginDTO) { + public Result login(@RequestBody LoginDTO loginDTO) { User user = userService.getOne(new LambdaQueryWrapper<>(User.class).eq(User::getUsername, loginDTO.getUsername())); if (user != null && !Objects.equals(user.getDeleted(), Deleted.ENABLE) && user.getPassword().equals(loginDTO.getPassword())) { userService.setCurrentUser(user); - return Result.success(); + user.setPassword(null); + return Result.success(user); } return Result.failed(ResultCode.INVALID_CREDENTIALS); } @@ -47,4 +45,10 @@ public class AuthController { userService.clearCurrentUser(); return Result.success(); } + + @Operation(summary = "获取当前登录用户") + @GetMapping("/current") + public Result current() { + return Result.success(userService.getCurrentUser()); + } } diff --git a/src/main/java/com/iflytop/gd/app/controller/CmdController.java b/src/main/java/com/iflytop/gd/app/controller/CmdController.java index 84ad46e..3a2aa06 100644 --- a/src/main/java/com/iflytop/gd/app/controller/CmdController.java +++ b/src/main/java/com/iflytop/gd/app/controller/CmdController.java @@ -1,7 +1,7 @@ package com.iflytop.gd.app.controller; import com.iflytop.gd.common.cmd.CommandHandler; -import com.iflytop.gd.app.service.cmd.CommandHandlerRegistry; +import com.iflytop.gd.app.core.CommandHandlerRegistry; import com.iflytop.gd.app.model.dto.CmdDTO; import com.iflytop.gd.app.service.exceptions.UnSupportCommandException; import com.iflytop.gd.common.result.Result; diff --git a/src/main/java/com/iflytop/gd/app/controller/CraftsController.java b/src/main/java/com/iflytop/gd/app/controller/CraftsController.java index 7022339..7b78159 100644 --- a/src/main/java/com/iflytop/gd/app/controller/CraftsController.java +++ b/src/main/java/com/iflytop/gd/app/controller/CraftsController.java @@ -33,7 +33,7 @@ public class CraftsController { } @Operation(summary = "添加新工艺") - @PostMapping("/") + @PostMapping("") public Result addCrafts(@RequestBody Crafts crafts) { Crafts existingCrafts = craftsService.findByName(crafts.getName()); if (existingCrafts == null) { @@ -48,9 +48,8 @@ public class CraftsController { } @Operation(summary = "更新工艺") - @PutMapping("/{id}") - public Result updateCrafts(@PathVariable Long id, @RequestBody Crafts crafts) { - crafts.setId(id); + @PutMapping("") + public Result updateCrafts(@RequestBody Crafts crafts) { boolean isSuccess = craftsService.updateCrafts(crafts); if (isSuccess) { return Result.success(); diff --git a/src/main/java/com/iflytop/gd/app/controller/OresController.java b/src/main/java/com/iflytop/gd/app/controller/OresController.java index cee2019..b60d6e5 100644 --- a/src/main/java/com/iflytop/gd/app/controller/OresController.java +++ b/src/main/java/com/iflytop/gd/app/controller/OresController.java @@ -31,7 +31,7 @@ public class OresController { } @Operation(summary = "添加新矿石") - @PostMapping("/") + @PostMapping("") public Result addOres(@RequestBody Ores ores) { Ores existingOres = oresService.findByName(ores.getName()); if (existingOres == null) { @@ -46,11 +46,10 @@ public class OresController { } @Operation(summary = "更新矿石") - @PutMapping("/{id}") - public Result updateOres(@PathVariable Long id, @RequestBody Ores ores) { + @PutMapping("") + public Result updateOres(@RequestBody Ores ores) { Ores existingOres = oresService.findByName(ores.getName()); if (existingOres == null) { - ores.setId(id); boolean isSuccess = oresService.updateOres(ores); if (isSuccess) { return Result.success(); diff --git a/src/main/java/com/iflytop/gd/app/controller/SolutionsController.java b/src/main/java/com/iflytop/gd/app/controller/SolutionsController.java index 5146f45..9221464 100644 --- a/src/main/java/com/iflytop/gd/app/controller/SolutionsController.java +++ b/src/main/java/com/iflytop/gd/app/controller/SolutionsController.java @@ -31,7 +31,7 @@ public class SolutionsController { } @Operation(summary = "添加新溶液") - @PostMapping("/") + @PostMapping("") public Result addSolutions(@RequestBody Solutions solutions) { Solutions existingSolutions = solutionsService.findByName(solutions.getName()); if (existingSolutions == null) { @@ -46,11 +46,10 @@ public class SolutionsController { } @Operation(summary = "更新溶液") - @PutMapping("/{id}") - public Result updateSolutions(@PathVariable Long id, @RequestBody Solutions solutions) { + @PutMapping("") + public Result updateSolutions(@RequestBody Solutions solutions) { Solutions existingSolutions = solutionsService.findByName(solutions.getName()); if (existingSolutions == null) { - solutions.setId(id); boolean isSuccess = solutionsService.updateSolutions(solutions); if (isSuccess) { return Result.success(); diff --git a/src/main/java/com/iflytop/gd/app/controller/UserController.java b/src/main/java/com/iflytop/gd/app/controller/UserController.java index a818c0d..f5d3eaa 100644 --- a/src/main/java/com/iflytop/gd/app/controller/UserController.java +++ b/src/main/java/com/iflytop/gd/app/controller/UserController.java @@ -28,6 +28,7 @@ public class UserController { @GetMapping("/list") public PageResult getAllUsers(BasePageQuery pageQuery) { IPage result = userService.page(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), null); + result.getRecords().forEach(user -> user.setPassword(null)); return PageResult.success(result); } @@ -46,12 +47,6 @@ public class UserController { return Result.failed(); } - @Operation(summary = "当前用户信息") - @GetMapping("/current") - public Result currentUser() { - return Result.success(userService.getCurrentUser()); - } - @Operation(summary = "更新用户信息") @PutMapping("") public Result updateUser(@RequestBody User user) { diff --git a/src/main/java/com/iflytop/gd/app/core/BaseCommandHandler.java b/src/main/java/com/iflytop/gd/app/core/BaseCommandHandler.java new file mode 100644 index 0000000..3c1799c --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/core/BaseCommandHandler.java @@ -0,0 +1,17 @@ +package com.iflytop.gd.app.core; + + + +import com.iflytop.gd.common.annotation.CheckedRunnable; +import com.iflytop.gd.common.cmd.CommandHandler; +import com.iflytop.gd.common.utils.LambdaUtil; + +import java.util.concurrent.CompletableFuture; + +public abstract class BaseCommandHandler implements CommandHandler { + + protected CompletableFuture runAsync(CheckedRunnable task) { + return CompletableFuture.runAsync(LambdaUtil.unchecked(task)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/app/core/CommandHandlerRegistry.java b/src/main/java/com/iflytop/gd/app/core/CommandHandlerRegistry.java new file mode 100644 index 0000000..65b78f7 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/core/CommandHandlerRegistry.java @@ -0,0 +1,55 @@ +package com.iflytop.gd.app.core; + +import com.iflytop.gd.app.service.exceptions.UnSupportCommandException; +import com.iflytop.gd.common.annotation.CommandMapping; +import com.iflytop.gd.common.cmd.CommandHandler; +import io.micrometer.common.lang.NonNull; +import jakarta.annotation.PostConstruct; +import jakarta.validation.constraints.NotNull; +import org.springframework.aop.support.AopUtils; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class CommandHandlerRegistry implements ApplicationContextAware { + + private final Map handlerMap = new HashMap<>(); + private ApplicationContext applicationContext; + + @Override + public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + @PostConstruct + public void init() { + Map beans = applicationContext.getBeansWithAnnotation(CommandMapping.class); + for (Object bean : beans.values()) { + // 获取实际目标类,而不是代理类 + Class targetClass = AopUtils.getTargetClass(bean); + CommandMapping mapping = targetClass.getAnnotation(CommandMapping.class); + if (mapping != null && bean instanceof CommandHandler) { + String mappingKey = mapping.value(); + handlerMap.put(mappingKey, (CommandHandler) bean); + } + } + } + + /** + * 通过模块名称和命令名称获取命令处理器 + * @param commandName 命令名称 + * @return 命令处理器 + * @throws UnSupportCommandException + */ + public CommandHandler getCommandHandler(@NotNull String commandName) throws UnSupportCommandException { + if (!handlerMap.containsKey(commandName)) { + throw new UnSupportCommandException("commandName=" + commandName); + } + return handlerMap.get(commandName); + } +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/app/service/cmd/BaseCommandHandler.java b/src/main/java/com/iflytop/gd/app/service/cmd/BaseCommandHandler.java deleted file mode 100644 index 78dbf6d..0000000 --- a/src/main/java/com/iflytop/gd/app/service/cmd/BaseCommandHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.iflytop.gd.app.service.cmd; - - - -import com.iflytop.gd.common.annotation.CheckedRunnable; -import com.iflytop.gd.common.cmd.CommandHandler; -import com.iflytop.gd.common.utils.LambdaUtil; - -import java.util.concurrent.CompletableFuture; - -public abstract class BaseCommandHandler implements CommandHandler { - - protected CompletableFuture runAsync(CheckedRunnable task) { - return CompletableFuture.runAsync(LambdaUtil.unchecked(task)); - } - -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/app/service/cmd/CommandHandlerRegistry.java b/src/main/java/com/iflytop/gd/app/service/cmd/CommandHandlerRegistry.java deleted file mode 100644 index bec957b..0000000 --- a/src/main/java/com/iflytop/gd/app/service/cmd/CommandHandlerRegistry.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.iflytop.gd.app.service.cmd; - -import com.iflytop.gd.app.service.exceptions.UnSupportCommandException; -import com.iflytop.gd.common.annotation.CommandMapping; -import com.iflytop.gd.common.cmd.CommandHandler; -import io.micrometer.common.lang.NonNull; -import jakarta.annotation.PostConstruct; -import jakarta.validation.constraints.NotNull; -import org.springframework.aop.support.AopUtils; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.Map; - -@Component -public class CommandHandlerRegistry implements ApplicationContextAware { - - private final Map handlerMap = new HashMap<>(); - private ApplicationContext applicationContext; - - private final String SEPARATOR = ":"; - - @Override - public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } - - @PostConstruct - public void init() { - Map beans = applicationContext.getBeansWithAnnotation(CommandMapping.class); - for (Object bean : beans.values()) { - // 获取实际目标类,而不是代理类 - Class targetClass = AopUtils.getTargetClass(bean); - CommandMapping mapping = targetClass.getAnnotation(CommandMapping.class); - if (mapping != null && bean instanceof CommandHandler) { - String mappingKey = mapping.value(); - handlerMap.put(mappingKey, (CommandHandler) bean); - } - } - } - - /** - * 通过模块名称和命令名称获取命令处理器 - * @param commandName 命令名称 - * @return 命令处理器 - * @throws UnSupportCommandException - */ - public CommandHandler getCommandHandler(@NotNull String commandName) throws UnSupportCommandException { - if (!handlerMap.containsKey(commandName)) { - throw new UnSupportCommandException("commandName=" + commandName); - } - return handlerMap.get(commandName); - } - - - /** - * 通过模块名称和命令名称生成命令标识符 - * @return - */ - private String generateCommandIdentifier(@NotNull String moduleName, @NotNull String commandName) { - - return moduleName + SEPARATOR + commandName; - } -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/debug/controller/CmdDebugController.java b/src/main/java/com/iflytop/gd/debug/controller/CmdDebugController.java index 112e626..9923fe4 100644 --- a/src/main/java/com/iflytop/gd/debug/controller/CmdDebugController.java +++ b/src/main/java/com/iflytop/gd/debug/controller/CmdDebugController.java @@ -4,7 +4,7 @@ import com.iflytop.gd.app.model.dto.CmdDTO; import com.iflytop.gd.app.service.exceptions.UnSupportCommandException; import com.iflytop.gd.common.result.Result; import com.iflytop.gd.common.cmd.CommandHandler; -import com.iflytop.gd.app.service.cmd.CommandHandlerRegistry; +import com.iflytop.gd.app.core.CommandHandlerRegistry; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -28,14 +28,14 @@ public class CmdDebugController { String commandName = cmdDTO.getCommand(); try { CommandHandler commandHandler = registry.getCommandHandler(commandName); - log.info("业务指令开始执行"); + log.info("调试指令开始执行"); commandHandler.handle(cmdDTO); } catch (UnSupportCommandException exception) { - log.error("未找到对应的业务指令"); - String errorMsg = "未找到对应的业务指令, commandName=" + commandName; + log.error("未找到对应的调试指令"); + String errorMsg = "未找到对应的调试指令, commandName=" + commandName; return Result.failed(errorMsg); } catch (Exception e) { - log.error("执行业务指令发生异常: {}", cmdDTO, e); + log.error("执行调试指令发生异常: {}", cmdDTO, e); return Result.failed(e.getMessage()); } return Result.success();