From d17ed0a12347f50fade9772a801e31c8411c9baf Mon Sep 17 00:00:00 2001 From: huangxiang <155373492@qq.com> Date: Sun, 27 Apr 2025 13:30:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BC=98=E5=8C=96=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iflytop/gd/app/controller/CmdController.java | 6 +- .../gd/app/controller/CmdDebugController.java | 6 +- .../gd/app/controller/CraftsController.java | 4 +- .../iflytop/gd/app/controller/OresController.java | 8 +-- .../iflytop/gd/app/controller/UserController.java | 74 +++++++++++++++++++ .../com/iflytop/gd/app/core/CraftsContext.java | 4 +- .../iflytop/gd/app/model/dto/WebsocketResult.java | 18 +++++ .../com/iflytop/gd/app/model/entity/Crafts.java | 2 +- .../java/com/iflytop/gd/app/model/entity/Ores.java | 2 +- .../iflytop/gd/app/service/CraftsStepService.java | 1 - .../com/iflytop/gd/app/service/OresService.java | 3 +- .../iflytop/gd/app/service/WebSocketService.java | 18 +++++ .../gd/app/service/cmd/BaseCommandHandler.java | 18 +++++ .../iflytop/gd/app/service/cmd/CommandHandler.java | 9 +++ .../gd/app/service/cmd/CommandHandlerRegistry.java | 42 +++++++++++ .../iflytop/gd/app/service/cmd/DemoCommand.java | 3 +- .../gd/common/annotation/CheckedRunnable.java | 6 ++ .../gd/common/annotation/CommandMapping.java | 12 ++++ .../gd/common/constant/WebSocketMessageType.java | 25 +++++++ .../java/com/iflytop/gd/common/enums/Deleted.java | 12 ++++ .../com/iflytop/gd/common/enums/FixedUser.java | 12 ++++ .../java/com/iflytop/gd/common/enums/UsrRole.java | 7 ++ .../iflytop/gd/common/exception/AppException.java | 21 ++++++ .../gd/common/handler/GlobalExceptionHandler.java | 24 +++++++ .../gd/common/handler/MyMetaObjectHandler.java | 36 ++++++++++ .../com/iflytop/gd/common/result/IResultCode.java | 12 ++++ .../com/iflytop/gd/common/result/PageResult.java | 43 +++++++++++ .../java/com/iflytop/gd/common/result/Result.java | 75 +++++++++++++++++++ .../com/iflytop/gd/common/result/ResultCode.java | 75 +++++++++++++++++++ .../com/iflytop/gd/common/utils/LambdaUtil.java | 15 ++++ .../com/iflytop/gd/hardware/comm/can/driver/d.txt | 1 - .../iflytop/gd/hardware/comm/can/listener/d.txt | 1 - .../iflytop/gd/hardware/comm/can/protocol/d.txt | 1 - .../iflytop/gd/hardware/comm/rs485/driver/d.txt | 1 - .../iflytop/gd/hardware/comm/rs485/listener/d.txt | 1 - .../iflytop/gd/hardware/comm/rs485/protocol/d.txt | 1 - .../gd/infrastructure/comm/can/driver/d.txt | 1 + .../gd/infrastructure/comm/can/listener/d.txt | 1 + .../gd/infrastructure/comm/can/protocol/d.txt | 1 + .../gd/infrastructure/comm/rs485/driver/d.txt | 1 + .../gd/infrastructure/comm/rs485/listener/d.txt | 1 + .../gd/infrastructure/comm/rs485/protocol/d.txt | 1 + .../infrastructure/config/MybatisPlusConfig.java | 61 ++++++++++++++++ .../gd/infrastructure/config/SwaggerConfig.java | 68 ++++++++++++++++++ .../gd/infrastructure/config/WebConfig.java | 16 +++++ .../gd/infrastructure/config/WebSocketConfig.java | 14 ++++ .../gd/infrastructure/config/WebSocketServer.java | 49 +++++++++++++ .../infrastructure/repository/base/BaseEntity.java | 44 ++++++++++++ .../repository/base/BasePageQuery.java | 26 +++++++ .../infrastructure/repository/base/IBaseEnum.java | 84 ++++++++++++++++++++++ .../gd/infrastructure/repository/entity/User.java | 43 +++++++++++ .../repository/mapper/UserMapper.java | 13 ++++ .../system/common/annotation/CheckedRunnable.java | 6 -- .../system/common/annotation/CommandMapping.java | 12 ---- .../iflytop/gd/system/common/base/BaseEntity.java | 44 ------------ .../gd/system/common/base/BasePageQuery.java | 26 ------- .../iflytop/gd/system/common/base/IBaseEnum.java | 84 ---------------------- .../common/constant/WebSocketMessageType.java | 25 ------- .../iflytop/gd/system/common/enums/Deleted.java | 12 ---- .../iflytop/gd/system/common/enums/FixedUser.java | 12 ---- .../iflytop/gd/system/common/enums/UsrRole.java | 7 -- .../gd/system/common/exception/AppException.java | 21 ------ .../gd/system/common/result/IResultCode.java | 12 ---- .../gd/system/common/result/PageResult.java | 43 ----------- .../iflytop/gd/system/common/result/Result.java | 75 ------------------- .../gd/system/common/result/ResultCode.java | 75 ------------------- .../iflytop/gd/system/common/utils/LambdaUtil.java | 15 ---- .../gd/system/config/MybatisPlusConfig.java | 61 ---------------- .../iflytop/gd/system/config/SwaggerConfig.java | 69 ------------------ .../com/iflytop/gd/system/config/WebConfig.java | 16 ----- .../iflytop/gd/system/config/WebSocketConfig.java | 14 ---- .../iflytop/gd/system/config/WebSocketServer.java | 49 ------------- .../gd/system/controller/UserController.java | 74 ------------------- .../gd/system/core/cmd/BaseCommandHandler.java | 18 ----- .../iflytop/gd/system/core/cmd/CommandHandler.java | 9 --- .../gd/system/core/cmd/CommandHandlerRegistry.java | 42 ----------- .../gd/system/handler/GlobalExceptionHandler.java | 24 ------- .../gd/system/handler/MyMetaObjectHandler.java | 36 ---------- .../com/iflytop/gd/system/mapper/UserMapper.java | 13 ---- .../gd/system/model/dto/WebsocketResult.java | 18 ----- .../com/iflytop/gd/system/model/entity/User.java | 43 ----------- .../com/iflytop/gd/system/service/UserService.java | 4 +- .../gd/system/service/WebSocketService.java | 19 ----- 83 files changed, 998 insertions(+), 1003 deletions(-) create mode 100644 src/main/java/com/iflytop/gd/app/controller/UserController.java create mode 100644 src/main/java/com/iflytop/gd/app/model/dto/WebsocketResult.java create mode 100644 src/main/java/com/iflytop/gd/app/service/WebSocketService.java create mode 100644 src/main/java/com/iflytop/gd/app/service/cmd/BaseCommandHandler.java create mode 100644 src/main/java/com/iflytop/gd/app/service/cmd/CommandHandler.java create mode 100644 src/main/java/com/iflytop/gd/app/service/cmd/CommandHandlerRegistry.java create mode 100644 src/main/java/com/iflytop/gd/common/annotation/CheckedRunnable.java create mode 100644 src/main/java/com/iflytop/gd/common/annotation/CommandMapping.java create mode 100644 src/main/java/com/iflytop/gd/common/constant/WebSocketMessageType.java create mode 100644 src/main/java/com/iflytop/gd/common/enums/Deleted.java create mode 100644 src/main/java/com/iflytop/gd/common/enums/FixedUser.java create mode 100644 src/main/java/com/iflytop/gd/common/enums/UsrRole.java create mode 100644 src/main/java/com/iflytop/gd/common/exception/AppException.java create mode 100644 src/main/java/com/iflytop/gd/common/handler/GlobalExceptionHandler.java create mode 100644 src/main/java/com/iflytop/gd/common/handler/MyMetaObjectHandler.java create mode 100644 src/main/java/com/iflytop/gd/common/result/IResultCode.java create mode 100644 src/main/java/com/iflytop/gd/common/result/PageResult.java create mode 100644 src/main/java/com/iflytop/gd/common/result/Result.java create mode 100644 src/main/java/com/iflytop/gd/common/result/ResultCode.java create mode 100644 src/main/java/com/iflytop/gd/common/utils/LambdaUtil.java delete mode 100644 src/main/java/com/iflytop/gd/hardware/comm/can/driver/d.txt delete mode 100644 src/main/java/com/iflytop/gd/hardware/comm/can/listener/d.txt delete mode 100644 src/main/java/com/iflytop/gd/hardware/comm/can/protocol/d.txt delete mode 100644 src/main/java/com/iflytop/gd/hardware/comm/rs485/driver/d.txt delete mode 100644 src/main/java/com/iflytop/gd/hardware/comm/rs485/listener/d.txt delete mode 100644 src/main/java/com/iflytop/gd/hardware/comm/rs485/protocol/d.txt create mode 100644 src/main/java/com/iflytop/gd/infrastructure/comm/can/driver/d.txt create mode 100644 src/main/java/com/iflytop/gd/infrastructure/comm/can/listener/d.txt create mode 100644 src/main/java/com/iflytop/gd/infrastructure/comm/can/protocol/d.txt create mode 100644 src/main/java/com/iflytop/gd/infrastructure/comm/rs485/driver/d.txt create mode 100644 src/main/java/com/iflytop/gd/infrastructure/comm/rs485/listener/d.txt create mode 100644 src/main/java/com/iflytop/gd/infrastructure/comm/rs485/protocol/d.txt create mode 100644 src/main/java/com/iflytop/gd/infrastructure/config/MybatisPlusConfig.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/config/SwaggerConfig.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/config/WebConfig.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/config/WebSocketConfig.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/config/WebSocketServer.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/repository/base/BaseEntity.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/repository/base/BasePageQuery.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/repository/base/IBaseEnum.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/repository/entity/User.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/repository/mapper/UserMapper.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/annotation/CheckedRunnable.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/annotation/CommandMapping.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/base/BaseEntity.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/base/BasePageQuery.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/base/IBaseEnum.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/constant/WebSocketMessageType.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/enums/Deleted.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/enums/FixedUser.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/enums/UsrRole.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/exception/AppException.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/result/IResultCode.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/result/PageResult.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/result/Result.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/result/ResultCode.java delete mode 100644 src/main/java/com/iflytop/gd/system/common/utils/LambdaUtil.java delete mode 100644 src/main/java/com/iflytop/gd/system/config/MybatisPlusConfig.java delete mode 100644 src/main/java/com/iflytop/gd/system/config/SwaggerConfig.java delete mode 100644 src/main/java/com/iflytop/gd/system/config/WebConfig.java delete mode 100644 src/main/java/com/iflytop/gd/system/config/WebSocketConfig.java delete mode 100644 src/main/java/com/iflytop/gd/system/config/WebSocketServer.java delete mode 100644 src/main/java/com/iflytop/gd/system/controller/UserController.java delete mode 100644 src/main/java/com/iflytop/gd/system/core/cmd/BaseCommandHandler.java delete mode 100644 src/main/java/com/iflytop/gd/system/core/cmd/CommandHandler.java delete mode 100644 src/main/java/com/iflytop/gd/system/core/cmd/CommandHandlerRegistry.java delete mode 100644 src/main/java/com/iflytop/gd/system/handler/GlobalExceptionHandler.java delete mode 100644 src/main/java/com/iflytop/gd/system/handler/MyMetaObjectHandler.java delete mode 100644 src/main/java/com/iflytop/gd/system/mapper/UserMapper.java delete mode 100644 src/main/java/com/iflytop/gd/system/model/dto/WebsocketResult.java delete mode 100644 src/main/java/com/iflytop/gd/system/model/entity/User.java delete mode 100644 src/main/java/com/iflytop/gd/system/service/WebSocketService.java 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 8729c72..113fbc0 100644 --- a/src/main/java/com/iflytop/gd/app/controller/CmdController.java +++ b/src/main/java/com/iflytop/gd/app/controller/CmdController.java @@ -1,9 +1,9 @@ package com.iflytop.gd.app.controller; -import com.iflytop.gd.system.core.cmd.CommandHandler; -import com.iflytop.gd.system.core.cmd.CommandHandlerRegistry; +import com.iflytop.gd.app.service.cmd.CommandHandler; +import com.iflytop.gd.app.service.cmd.CommandHandlerRegistry; import com.iflytop.gd.app.model.dto.CmdDTO; -import com.iflytop.gd.system.common.result.Result; +import com.iflytop.gd.common.result.Result; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/iflytop/gd/app/controller/CmdDebugController.java b/src/main/java/com/iflytop/gd/app/controller/CmdDebugController.java index fe6afb2..02cdc81 100644 --- a/src/main/java/com/iflytop/gd/app/controller/CmdDebugController.java +++ b/src/main/java/com/iflytop/gd/app/controller/CmdDebugController.java @@ -1,9 +1,9 @@ package com.iflytop.gd.app.controller; import com.iflytop.gd.app.model.dto.CmdDTO; -import com.iflytop.gd.system.common.result.Result; -import com.iflytop.gd.system.core.cmd.CommandHandler; -import com.iflytop.gd.system.core.cmd.CommandHandlerRegistry; +import com.iflytop.gd.common.result.Result; +import com.iflytop.gd.app.service.cmd.CommandHandler; +import com.iflytop.gd.app.service.cmd.CommandHandlerRegistry; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; 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 fde8823..951883a 100644 --- a/src/main/java/com/iflytop/gd/app/controller/CraftsController.java +++ b/src/main/java/com/iflytop/gd/app/controller/CraftsController.java @@ -5,8 +5,8 @@ import com.iflytop.gd.app.model.dto.ResumeCraftsDto; import com.iflytop.gd.app.model.dto.StartCraftsDTO; import com.iflytop.gd.app.model.dto.StopCraftsDto; import com.iflytop.gd.app.service.CraftsStepService; -import com.iflytop.gd.system.common.result.Result; -import com.iflytop.gd.system.common.result.ResultCode; +import com.iflytop.gd.common.result.Result; +import com.iflytop.gd.common.result.ResultCode; import com.iflytop.gd.app.model.entity.Crafts; import com.iflytop.gd.app.service.CraftsService; import io.swagger.v3.oas.annotations.Operation; 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 db92a7e..cee2019 100644 --- a/src/main/java/com/iflytop/gd/app/controller/OresController.java +++ b/src/main/java/com/iflytop/gd/app/controller/OresController.java @@ -3,11 +3,11 @@ package com.iflytop.gd.app.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.iflytop.gd.app.model.entity.Ores; import com.iflytop.gd.app.model.vo.OresCraftsListVO; -import com.iflytop.gd.system.common.base.BasePageQuery; -import com.iflytop.gd.system.common.result.PageResult; +import com.iflytop.gd.infrastructure.repository.base.BasePageQuery; +import com.iflytop.gd.common.result.PageResult; import com.iflytop.gd.app.service.OresService; -import com.iflytop.gd.system.common.result.Result; -import com.iflytop.gd.system.common.result.ResultCode; +import com.iflytop.gd.common.result.Result; +import com.iflytop.gd.common.result.ResultCode; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/src/main/java/com/iflytop/gd/app/controller/UserController.java b/src/main/java/com/iflytop/gd/app/controller/UserController.java new file mode 100644 index 0000000..c1ce3d6 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/controller/UserController.java @@ -0,0 +1,74 @@ +package com.iflytop.gd.app.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.iflytop.gd.infrastructure.repository.base.BasePageQuery; +import com.iflytop.gd.common.result.PageResult; +import com.iflytop.gd.common.result.Result; +import com.iflytop.gd.common.result.ResultCode; +import com.iflytop.gd.infrastructure.repository.entity.User; +import com.iflytop.gd.system.service.UserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "用户接口") +@RestController +@RequestMapping("/api/user") +@RequiredArgsConstructor +@Slf4j +public class UserController { + private final UserService userService; + + @Operation(summary = "用户列表") + @GetMapping("/list") + public PageResult getAllUsers(BasePageQuery pageQuery) { + IPage result = userService.page(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), null); + return PageResult.success(result); + } + + @Operation(summary = "添加新用户") + @PostMapping("") + public Result addUser(@RequestBody User user) { + User existingUser = userService.getOne(new LambdaQueryWrapper().eq(User::getUsername, user.getUsername())); + if (existingUser == null) { + boolean isSuccess = userService.save(user); + if (isSuccess) { + return Result.success(); + } + } else { + return Result.failed(ResultCode.USER_ALREADY_EXISTS); + } + return Result.failed(); + } + + @Operation(summary = "当前用户信息") + @GetMapping("/current") + public Result currentUser() { + return Result.success(userService.getCurrentUser()); + } + + @Operation(summary = "更新用户信息") + @PutMapping("") + public Result updateUser(@RequestBody User user) { + boolean isSuccess = userService.updateById(user); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); + } + + @Operation(summary = "删除用户") + @DeleteMapping("/{ids}") + public Result deleteUser(@Parameter(description = "用户ID,多个以英文逗号(,)分割") @PathVariable String ids) { + boolean isSuccess = userService.deleteUser(ids); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); + } +} diff --git a/src/main/java/com/iflytop/gd/app/core/CraftsContext.java b/src/main/java/com/iflytop/gd/app/core/CraftsContext.java index 36ab562..d4fa82d 100644 --- a/src/main/java/com/iflytop/gd/app/core/CraftsContext.java +++ b/src/main/java/com/iflytop/gd/app/core/CraftsContext.java @@ -1,13 +1,13 @@ package com.iflytop.gd.app.core; import cn.hutool.json.JSONUtil; -import com.iflytop.gd.system.common.constant.WebSocketMessageType; +import com.iflytop.gd.common.constant.WebSocketMessageType; import com.iflytop.gd.app.common.enums.CraftEvents; import com.iflytop.gd.app.common.enums.CraftStates; import com.iflytop.gd.app.model.bo.CraftsStep; import com.iflytop.gd.app.service.CraftsStepService; import com.iflytop.gd.app.model.entity.Crafts; -import com.iflytop.gd.system.service.WebSocketService; +import com.iflytop.gd.app.service.WebSocketService; import lombok.Getter; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; diff --git a/src/main/java/com/iflytop/gd/app/model/dto/WebsocketResult.java b/src/main/java/com/iflytop/gd/app/model/dto/WebsocketResult.java new file mode 100644 index 0000000..de53826 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/model/dto/WebsocketResult.java @@ -0,0 +1,18 @@ +package com.iflytop.gd.app.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class WebsocketResult { + /** + * 推送类型(指令 cmd,报警 warn ,状态 status) + */ + @Schema(description = "推送类型(指令 cmd,报警 warn ,状态 status)") + private String type; + /** + * 执行结果 + */ + @Schema(description = "推送数据") + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/app/model/entity/Crafts.java b/src/main/java/com/iflytop/gd/app/model/entity/Crafts.java index a954a64..0bc7419 100644 --- a/src/main/java/com/iflytop/gd/app/model/entity/Crafts.java +++ b/src/main/java/com/iflytop/gd/app/model/entity/Crafts.java @@ -1,7 +1,7 @@ package com.iflytop.gd.app.model.entity; import com.baomidou.mybatisplus.annotation.TableName; -import com.iflytop.gd.system.common.base.BaseEntity; +import com.iflytop.gd.infrastructure.repository.base.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; diff --git a/src/main/java/com/iflytop/gd/app/model/entity/Ores.java b/src/main/java/com/iflytop/gd/app/model/entity/Ores.java index dec3b30..718e57e 100644 --- a/src/main/java/com/iflytop/gd/app/model/entity/Ores.java +++ b/src/main/java/com/iflytop/gd/app/model/entity/Ores.java @@ -1,7 +1,7 @@ package com.iflytop.gd.app.model.entity; import com.baomidou.mybatisplus.annotation.TableName; -import com.iflytop.gd.system.common.base.BaseEntity; +import com.iflytop.gd.infrastructure.repository.base.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; diff --git a/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java index 78cbc71..5dae5ca 100644 --- a/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java +++ b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java @@ -4,7 +4,6 @@ import com.iflytop.gd.app.common.enums.CraftEvents; import com.iflytop.gd.app.common.enums.CraftStates; import com.iflytop.gd.app.core.CraftsContext; import com.iflytop.gd.app.model.entity.Crafts; -import com.iflytop.gd.system.service.WebSocketService; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/iflytop/gd/app/service/OresService.java b/src/main/java/com/iflytop/gd/app/service/OresService.java index f8952ec..9aa5c9b 100644 --- a/src/main/java/com/iflytop/gd/app/service/OresService.java +++ b/src/main/java/com/iflytop/gd/app/service/OresService.java @@ -6,12 +6,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.iflytop.gd.app.model.vo.OresCraftsListVO; -import com.iflytop.gd.system.common.base.BasePageQuery; +import com.iflytop.gd.infrastructure.repository.base.BasePageQuery; import com.iflytop.gd.app.mapper.CraftsMapper; import com.iflytop.gd.app.mapper.OresMapper; import com.iflytop.gd.app.model.entity.Crafts; import com.iflytop.gd.app.model.entity.Ores; -import com.iflytop.gd.system.model.entity.User; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/iflytop/gd/app/service/WebSocketService.java b/src/main/java/com/iflytop/gd/app/service/WebSocketService.java new file mode 100644 index 0000000..5a13e4c --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/service/WebSocketService.java @@ -0,0 +1,18 @@ +package com.iflytop.gd.app.service; + +import cn.hutool.json.JSONUtil; +import com.iflytop.gd.infrastructure.config.WebSocketServer; +import com.iflytop.gd.app.model.dto.WebsocketResult; +import org.springframework.stereotype.Service; + +@Service +public class WebSocketService { + + public void push(String type, Object data) { + WebsocketResult websocketResult = new WebsocketResult(); + websocketResult.setType(type); + websocketResult.setData(data); + WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(websocketResult)); + } + +} 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 new file mode 100644 index 0000000..a392896 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/service/cmd/BaseCommandHandler.java @@ -0,0 +1,18 @@ +package com.iflytop.gd.app.service.cmd; + + + +import com.iflytop.gd.common.annotation.CheckedRunnable; +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/CommandHandler.java b/src/main/java/com/iflytop/gd/app/service/cmd/CommandHandler.java new file mode 100644 index 0000000..812ad2e --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/service/cmd/CommandHandler.java @@ -0,0 +1,9 @@ +package com.iflytop.gd.app.service.cmd; + +import com.iflytop.gd.app.model.dto.CmdDTO; + +import java.util.concurrent.CompletableFuture; + +public interface CommandHandler { + CompletableFuture handle(CmdDTO cmdDTO); +} \ 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 new file mode 100644 index 0000000..ca68ba8 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/service/cmd/CommandHandlerRegistry.java @@ -0,0 +1,42 @@ +package com.iflytop.gd.app.service.cmd; + +import com.iflytop.gd.common.annotation.CommandMapping; +import io.micrometer.common.lang.NonNull; +import jakarta.annotation.PostConstruct; +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) { + handlerMap.put(mapping.value(), (CommandHandler) bean); + } + } + } + + public CommandHandler getHandler(String command) { + return handlerMap.get(command); + } +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/app/service/cmd/DemoCommand.java b/src/main/java/com/iflytop/gd/app/service/cmd/DemoCommand.java index 6e9d24e..1defd30 100644 --- a/src/main/java/com/iflytop/gd/app/service/cmd/DemoCommand.java +++ b/src/main/java/com/iflytop/gd/app/service/cmd/DemoCommand.java @@ -1,8 +1,7 @@ package com.iflytop.gd.app.service.cmd; import com.iflytop.gd.app.model.dto.CmdDTO; -import com.iflytop.gd.system.common.annotation.CommandMapping; -import com.iflytop.gd.system.core.cmd.BaseCommandHandler; +import com.iflytop.gd.common.annotation.CommandMapping; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/iflytop/gd/common/annotation/CheckedRunnable.java b/src/main/java/com/iflytop/gd/common/annotation/CheckedRunnable.java new file mode 100644 index 0000000..d652552 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/annotation/CheckedRunnable.java @@ -0,0 +1,6 @@ +package com.iflytop.gd.common.annotation; + +@FunctionalInterface +public interface CheckedRunnable { + void run() throws Exception; +} diff --git a/src/main/java/com/iflytop/gd/common/annotation/CommandMapping.java b/src/main/java/com/iflytop/gd/common/annotation/CommandMapping.java new file mode 100644 index 0000000..5b4e657 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/annotation/CommandMapping.java @@ -0,0 +1,12 @@ +package com.iflytop.gd.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface CommandMapping { + String value(); +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/common/constant/WebSocketMessageType.java b/src/main/java/com/iflytop/gd/common/constant/WebSocketMessageType.java new file mode 100644 index 0000000..08a1dd3 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/constant/WebSocketMessageType.java @@ -0,0 +1,25 @@ +package com.iflytop.gd.common.constant; + +public class WebSocketMessageType { + /** + * 设备状态 + */ + public static final String STATUS = "status"; + /** + * 设备报警 + */ + public static final String ALARM = "alarm"; + /** + * 设备指令反馈 + */ + public static final String CMD = "cmd"; + /** + * 工艺执行反馈 + */ + public static final String CRAFTS = "crafts"; + /** + * 容器剩余状态 + */ + public static final String CONTAINER = "container"; + +} diff --git a/src/main/java/com/iflytop/gd/common/enums/Deleted.java b/src/main/java/com/iflytop/gd/common/enums/Deleted.java new file mode 100644 index 0000000..86e69a7 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/enums/Deleted.java @@ -0,0 +1,12 @@ +package com.iflytop.gd.common.enums; + +import lombok.Getter; + +/** + * 删除状态枚举 + */ +@Getter +public enum Deleted { + ENABLE, + DISABLE +} diff --git a/src/main/java/com/iflytop/gd/common/enums/FixedUser.java b/src/main/java/com/iflytop/gd/common/enums/FixedUser.java new file mode 100644 index 0000000..355e7bc --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/enums/FixedUser.java @@ -0,0 +1,12 @@ +package com.iflytop.gd.common.enums; + +import lombok.Getter; + +/** + * 系統固定用户 + */ +@Getter +public enum FixedUser { + ENABLE, + DISABLE +} diff --git a/src/main/java/com/iflytop/gd/common/enums/UsrRole.java b/src/main/java/com/iflytop/gd/common/enums/UsrRole.java new file mode 100644 index 0000000..ee6b1ac --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/enums/UsrRole.java @@ -0,0 +1,7 @@ +package com.iflytop.gd.common.enums; + +public enum UsrRole { + ADMIN, + DEVELOPER, + USER; +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/common/exception/AppException.java b/src/main/java/com/iflytop/gd/common/exception/AppException.java new file mode 100644 index 0000000..980627a --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/exception/AppException.java @@ -0,0 +1,21 @@ +package com.iflytop.gd.common.exception; + +import com.iflytop.gd.common.result.IResultCode; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class AppException extends RuntimeException { + private final IResultCode resultCode; + + public AppException(IResultCode resultCode) { + super(resultCode.getMsg()); + this.resultCode = resultCode; + } + + @Override + public String toString() { + return "AppException{" + "code='" + resultCode.getCode() + ", msg=" + resultCode.getMsg() + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/common/handler/GlobalExceptionHandler.java b/src/main/java/com/iflytop/gd/common/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..8148129 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/handler/GlobalExceptionHandler.java @@ -0,0 +1,24 @@ +package com.iflytop.gd.common.handler; + +import com.iflytop.gd.common.exception.AppException; +import com.iflytop.gd.common.result.Result; +import com.iflytop.gd.common.result.ResultCode; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(Exception.class) + public Result handleException(Exception ex) { + if (ex instanceof AppException ae) { + log.warn("AppException:", ae); + return Result.failed(ae.getResultCode()); + } + log.error("Unhandled exception:", ex); + return Result.failed(ResultCode.SYSTEM_ERROR); + } + +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/common/handler/MyMetaObjectHandler.java b/src/main/java/com/iflytop/gd/common/handler/MyMetaObjectHandler.java new file mode 100644 index 0000000..7d5a0b4 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/handler/MyMetaObjectHandler.java @@ -0,0 +1,36 @@ +package com.iflytop.gd.common.handler; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * mybatis-plus 字段自动填充 + */ +@Component +public class MyMetaObjectHandler implements MetaObjectHandler { + + /** + * 新增填充创建时间 + * + * @param metaObject 元数据 + */ + @Override + public void insertFill(MetaObject metaObject) { + this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class); + this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); + } + + /** + * 更新填充更新时间 + * + * @param metaObject 元数据 + */ + @Override + public void updateFill(MetaObject metaObject) { + this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); + } + +} diff --git a/src/main/java/com/iflytop/gd/common/result/IResultCode.java b/src/main/java/com/iflytop/gd/common/result/IResultCode.java new file mode 100644 index 0000000..25b91df --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/result/IResultCode.java @@ -0,0 +1,12 @@ +package com.iflytop.gd.common.result; + +/** + * 响应码接口 + **/ +public interface IResultCode { + + String getCode(); + + String getMsg(); + +} diff --git a/src/main/java/com/iflytop/gd/common/result/PageResult.java b/src/main/java/com/iflytop/gd/common/result/PageResult.java new file mode 100644 index 0000000..bab2ce6 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/result/PageResult.java @@ -0,0 +1,43 @@ +package com.iflytop.gd.common.result; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页响应结构体 + */ +@Data +public class PageResult implements Serializable { + + private String code; + + private Data data; + + private String msg; + + public static PageResult success(IPage page) { + PageResult result = new PageResult<>(); + result.setCode(ResultCode.SUCCESS.getCode()); + + Data data = new Data<>(); + data.setList(page.getRecords()); + data.setTotal(page.getTotal()); + + result.setData(data); + result.setMsg(ResultCode.SUCCESS.getMsg()); + return result; + } + + @lombok.Data + public static class Data { + + private List list; + + private long total; + + } + +} diff --git a/src/main/java/com/iflytop/gd/common/result/Result.java b/src/main/java/com/iflytop/gd/common/result/Result.java new file mode 100644 index 0000000..b06af4c --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/result/Result.java @@ -0,0 +1,75 @@ +package com.iflytop.gd.common.result; + +import cn.hutool.core.util.StrUtil; +import lombok.Data; + +import java.io.Serializable; + +/** + * 统一响应结构体 + **/ +@Data +public class Result implements Serializable { + + private String code; + + private T data; + + private String msg; + + public static Result success() { + return success(null); + } + + public static Result success(T data) { + Result result = new Result<>(); + result.setCode(ResultCode.SUCCESS.getCode()); + result.setMsg(ResultCode.SUCCESS.getMsg()); + result.setData(data); + return result; + } + + public static Result failed() { + return result(ResultCode.SYSTEM_ERROR.getCode(), ResultCode.SYSTEM_ERROR.getMsg(), null); + } + + public static Result failed(String msg) { + return result(ResultCode.SYSTEM_ERROR.getCode(), msg, null); + } + + public static Result judge(boolean status) { + if (status) { + return success(); + } else { + return failed(); + } + } + + public static Result failed(IResultCode resultCode) { + return result(resultCode.getCode(), resultCode.getMsg(), null); + } + + public static Result failed(IResultCode resultCode, String msg) { + return result(resultCode.getCode(), StrUtil.isNotBlank(msg) ? msg : resultCode.getMsg(), null); + } + + public static Result failed(String code, String msg) { + return result(code, msg, null); + } + + private static Result result(IResultCode resultCode, T data) { + return result(resultCode.getCode(), resultCode.getMsg(), data); + } + + private static Result result(String code, String msg, T data) { + Result result = new Result<>(); + result.setCode(code); + result.setData(data); + result.setMsg(msg); + return result; + } + + public static boolean isSuccess(Result result) { + return result != null && ResultCode.SUCCESS.getCode().equals(result.getCode()); + } +} diff --git a/src/main/java/com/iflytop/gd/common/result/ResultCode.java b/src/main/java/com/iflytop/gd/common/result/ResultCode.java new file mode 100644 index 0000000..5895172 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/result/ResultCode.java @@ -0,0 +1,75 @@ +package com.iflytop.gd.common.result; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.io.Serializable; + +/** + * 统一前端响应码定义 + */ +@Getter +@AllArgsConstructor +public enum ResultCode implements IResultCode, Serializable { + //================================ 通用 ================================= + SUCCESS("0", "成功"), + FAILED("-1", "未知错误"), + + //============================ 1xxx:请求 & 参数 ============================ + INVALID_PARAMETER("1000", "参数无效或缺失"), + PARAMETER_TYPE_MISMATCH("1001", "参数类型不匹配"), + PARAMETER_OUT_OF_RANGE("1002", "参数超出允许范围"), + + //============================ 2xxx:认证 & 授权 ============================ + UNAUTHORIZED("2000", "未认证或登录失效"), + FORBIDDEN("2001", "无访问权限"), + TOKEN_EXPIRED("2002", "Token 已过期"), + TOKEN_INVALID("2003", "Token 无效"), + + //============================ 3xxx:资源访问 ============================ + NOT_FOUND("3000", "资源不存在"), + METHOD_NOT_ALLOWED("3001", "不支持的请求方法"), + + //============================ 4xxx:业务错误 ============================ + USER_NOT_FOUND("4000", "用户不存在"), + USER_ALREADY_EXISTS("4001", "用户已存在"), + INVALID_CREDENTIALS("4002", "用户名或密码错误"), + OPERATION_NOT_ALLOWED("4003", "业务操作不允许"), + DATA_ALREADY_EXISTS("4004", "数据已存在"), + //============================ 5xxx:系统 & 第三方 ============================ + SYSTEM_ERROR("5000", "系统内部错误"), + SERVICE_UNAVAILABLE("5001", "服务暂不可用"), + EXTERNAL_API_ERROR("5002", "第三方服务调用失败"); + + /** 状态码 */ + private final String code; + /** 提示信息 */ + private final String msg; + + @Override + public String getCode() { + return code; + } + + @Override + public String getMsg() { + return msg; + } + + /** + * 根据 code 获取枚举 + */ + public static ResultCode parse(String code) { + for (ResultCode item : values()) { + if (item.code.equals(code)) { + return item; + } + } + return FAILED; + } + + @Override + public String toString() { + return "{\"code\":\"" + code + "\", \"msg\":\"" + msg + "\"}"; + } +} diff --git a/src/main/java/com/iflytop/gd/common/utils/LambdaUtil.java b/src/main/java/com/iflytop/gd/common/utils/LambdaUtil.java new file mode 100644 index 0000000..8257cdf --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/utils/LambdaUtil.java @@ -0,0 +1,15 @@ +package com.iflytop.gd.common.utils; + +import com.iflytop.gd.common.annotation.CheckedRunnable; + +public class LambdaUtil { + public static Runnable unchecked(CheckedRunnable runnable) { + return () -> { + try { + runnable.run(); + } catch (Exception e) { + throw new RuntimeException(e); + } + }; + } +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/hardware/comm/can/driver/d.txt b/src/main/java/com/iflytop/gd/hardware/comm/can/driver/d.txt deleted file mode 100644 index e0817aa..0000000 --- a/src/main/java/com/iflytop/gd/hardware/comm/can/driver/d.txt +++ /dev/null @@ -1 +0,0 @@ -核心驱动类(打开串口、读写接口) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/hardware/comm/can/listener/d.txt b/src/main/java/com/iflytop/gd/hardware/comm/can/listener/d.txt deleted file mode 100644 index 85a36cd..0000000 --- a/src/main/java/com/iflytop/gd/hardware/comm/can/listener/d.txt +++ /dev/null @@ -1 +0,0 @@ -报文编解码(帧结构、封包/拆包) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/hardware/comm/can/protocol/d.txt b/src/main/java/com/iflytop/gd/hardware/comm/can/protocol/d.txt deleted file mode 100644 index 44dc6ef..0000000 --- a/src/main/java/com/iflytop/gd/hardware/comm/can/protocol/d.txt +++ /dev/null @@ -1 +0,0 @@ -数据接收监听、事件分发 \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/hardware/comm/rs485/driver/d.txt b/src/main/java/com/iflytop/gd/hardware/comm/rs485/driver/d.txt deleted file mode 100644 index e0817aa..0000000 --- a/src/main/java/com/iflytop/gd/hardware/comm/rs485/driver/d.txt +++ /dev/null @@ -1 +0,0 @@ -核心驱动类(打开串口、读写接口) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/hardware/comm/rs485/listener/d.txt b/src/main/java/com/iflytop/gd/hardware/comm/rs485/listener/d.txt deleted file mode 100644 index 85a36cd..0000000 --- a/src/main/java/com/iflytop/gd/hardware/comm/rs485/listener/d.txt +++ /dev/null @@ -1 +0,0 @@ -报文编解码(帧结构、封包/拆包) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/hardware/comm/rs485/protocol/d.txt b/src/main/java/com/iflytop/gd/hardware/comm/rs485/protocol/d.txt deleted file mode 100644 index 44dc6ef..0000000 --- a/src/main/java/com/iflytop/gd/hardware/comm/rs485/protocol/d.txt +++ /dev/null @@ -1 +0,0 @@ -数据接收监听、事件分发 \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/comm/can/driver/d.txt b/src/main/java/com/iflytop/gd/infrastructure/comm/can/driver/d.txt new file mode 100644 index 0000000..e0817aa --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/comm/can/driver/d.txt @@ -0,0 +1 @@ +核心驱动类(打开串口、读写接口) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/comm/can/listener/d.txt b/src/main/java/com/iflytop/gd/infrastructure/comm/can/listener/d.txt new file mode 100644 index 0000000..85a36cd --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/comm/can/listener/d.txt @@ -0,0 +1 @@ +报文编解码(帧结构、封包/拆包) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/comm/can/protocol/d.txt b/src/main/java/com/iflytop/gd/infrastructure/comm/can/protocol/d.txt new file mode 100644 index 0000000..44dc6ef --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/comm/can/protocol/d.txt @@ -0,0 +1 @@ +数据接收监听、事件分发 \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/driver/d.txt b/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/driver/d.txt new file mode 100644 index 0000000..e0817aa --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/driver/d.txt @@ -0,0 +1 @@ +核心驱动类(打开串口、读写接口) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/listener/d.txt b/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/listener/d.txt new file mode 100644 index 0000000..85a36cd --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/listener/d.txt @@ -0,0 +1 @@ +报文编解码(帧结构、封包/拆包) \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/protocol/d.txt b/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/protocol/d.txt new file mode 100644 index 0000000..44dc6ef --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/comm/rs485/protocol/d.txt @@ -0,0 +1 @@ +数据接收监听、事件分发 \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/config/MybatisPlusConfig.java b/src/main/java/com/iflytop/gd/infrastructure/config/MybatisPlusConfig.java new file mode 100644 index 0000000..53e188c --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/config/MybatisPlusConfig.java @@ -0,0 +1,61 @@ +package com.iflytop.gd.infrastructure.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.iflytop.gd.common.handler.MyMetaObjectHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * + */ +@EnableTransactionManagement +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 乐观锁插件 + interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); + // 分页插件 + interceptor.addInnerInterceptor(paginationInnerInterceptor()); + + return interceptor; + } + + /** + * 分页插件,自动识别数据库类型 + * ... + */ + public PaginationInnerInterceptor paginationInnerInterceptor() { + PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); + // 设置数据库类型 + paginationInnerInterceptor.setDbType(DbType.SQLITE); + // 设置最大单页限制数量,默认 500 条,-1 不受限制 + paginationInnerInterceptor.setMaxLimit(-1L); + return paginationInnerInterceptor; + } + + /** + * 乐观锁插件 + * ... + */ + public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { + return new OptimisticLockerInnerInterceptor(); + } + + /** + * 自动填充数据库创建人、创建时间、更新人、更新时间 + */ + @Bean + public GlobalConfig globalConfig() { + GlobalConfig globalConfig = new GlobalConfig(); + globalConfig.setMetaObjectHandler(new MyMetaObjectHandler()); + return globalConfig; + } +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/config/SwaggerConfig.java b/src/main/java/com/iflytop/gd/infrastructure/config/SwaggerConfig.java new file mode 100644 index 0000000..25de415 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/config/SwaggerConfig.java @@ -0,0 +1,68 @@ +package com.iflytop.gd.infrastructure.config; + +import cn.hutool.core.util.ArrayUtil; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityScheme; +import org.springdoc.core.customizers.GlobalOpenApiCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.util.AntPathMatcher; + +import java.util.stream.Stream; + +/*** + * 创建Swagger配置 + */ +@Configuration +public class SwaggerConfig { + + @Bean + public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() { + return openApi -> { + // 全局添加Authorization + if (openApi.getPaths() != null) { + openApi.getPaths().forEach((path, pathItem) -> { + + // 忽略认证的请求无需携带 Authorization + String[] ignoreUrls = {"/api/auth/login"}; + if (ArrayUtil.isNotEmpty(ignoreUrls)) { + // Ant 匹配忽略的路径,不添加Authorization + AntPathMatcher antPathMatcher = new AntPathMatcher(); + if (Stream.of(ignoreUrls).anyMatch(ignoreUrl -> antPathMatcher.match(ignoreUrl, path))) { + return; + } + } + + // 其他接口统一添加Authorization +// pathItem.readOperations() +// .forEach(operation -> +// operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)) +// ); + }); + } + }; + } + + @Bean + public OpenAPI customOpenAPI() { + return new OpenAPI() + .info(new Info() + .title("系统API") + .version("1.0")) // 配置全局鉴权参数-Authorize + .components(new Components() + .addSecuritySchemes(HttpHeaders.AUTHORIZATION, + new SecurityScheme() + .name(HttpHeaders.AUTHORIZATION) + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .scheme("Bearer") + .bearerFormat("JWT") + ) + ); + } + + +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/config/WebConfig.java b/src/main/java/com/iflytop/gd/infrastructure/config/WebConfig.java new file mode 100644 index 0000000..05999c1 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/config/WebConfig.java @@ -0,0 +1,16 @@ +package com.iflytop.gd.infrastructure.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOrigins("*") + .allowedMethods("GET", "POST", "PUT", "DELETE") + .allowedHeaders("*"); + } +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/config/WebSocketConfig.java b/src/main/java/com/iflytop/gd/infrastructure/config/WebSocketConfig.java new file mode 100644 index 0000000..a3a8006 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/config/WebSocketConfig.java @@ -0,0 +1,14 @@ +package com.iflytop.gd.infrastructure.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Configuration +public class WebSocketConfig { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/config/WebSocketServer.java b/src/main/java/com/iflytop/gd/infrastructure/config/WebSocketServer.java new file mode 100644 index 0000000..d8484ab --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/config/WebSocketServer.java @@ -0,0 +1,49 @@ +package com.iflytop.gd.infrastructure.config; + + +import jakarta.websocket.*; +import jakarta.websocket.server.ServerEndpoint; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +@Slf4j +@ServerEndpoint("/ws") +@Component +public class WebSocketServer { + + private static final Set sessions = Collections.synchronizedSet(new HashSet<>()); + + public static void sendMessageToClients(String message) { + synchronized (sessions) { + for (Session session : sessions) { + try { + session.getBasicRemote().sendText(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + @OnOpen + public void onOpen(Session session) { + sessions.add(session); + } + + @OnMessage + public void onMessage(String message, Session session) { + } + + @OnClose + public void onClose(Session session) { + sessions.remove(session); // 移除关闭连接的 Session + } + + @OnError + public void onError(Throwable error) { + } +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/repository/base/BaseEntity.java b/src/main/java/com/iflytop/gd/infrastructure/repository/base/BaseEntity.java new file mode 100644 index 0000000..1e73461 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/repository/base/BaseEntity.java @@ -0,0 +1,44 @@ +package com.iflytop.gd.infrastructure.repository.base; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 基础实体类 + * 实体类的基类,包含了实体类的公共属性,如创建时间、更新时间、逻辑删除标识等

+ */ +@Data +public class BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/repository/base/BasePageQuery.java b/src/main/java/com/iflytop/gd/infrastructure/repository/base/BasePageQuery.java new file mode 100644 index 0000000..0661b0e --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/repository/base/BasePageQuery.java @@ -0,0 +1,26 @@ +package com.iflytop.gd.infrastructure.repository.base; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 基础分页请求对象 + */ +@Data +@Schema +public class BasePageQuery implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "页码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private int pageNum = 1; + + @Schema(description = "每页记录数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + private int pageSize = 10; + + +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/repository/base/IBaseEnum.java b/src/main/java/com/iflytop/gd/infrastructure/repository/base/IBaseEnum.java new file mode 100644 index 0000000..3da4bad --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/repository/base/IBaseEnum.java @@ -0,0 +1,84 @@ +package com.iflytop.gd.infrastructure.repository.base; + + +import cn.hutool.core.util.ObjectUtil; + +import java.util.EnumSet; +import java.util.Objects; + +/** + * 枚举通用接口 + */ +public interface IBaseEnum { + + /** + * 根据值获取枚举 + * + * @param value + * @param clazz + * @param 枚举 + * @return + */ + static & IBaseEnum> E getEnumByValue(Object value, Class clazz) { + Objects.requireNonNull(value); + EnumSet allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举 + E matchEnum = allEnums.stream() + .filter(e -> ObjectUtil.equal(e.getValue(), value)) + .findFirst() + .orElse(null); + return matchEnum; + } + + /** + * 根据文本标签获取值 + * + * @param value + * @param clazz + * @param + * @return + */ + static & IBaseEnum> String getLabelByValue(Object value, Class clazz) { + Objects.requireNonNull(value); + EnumSet allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举 + E matchEnum = allEnums.stream() + .filter(e -> ObjectUtil.equal(e.getValue(), value)) + .findFirst() + .orElse(null); + + String label = null; + if (matchEnum != null) { + label = matchEnum.getLabel(); + } + return label; + } + + /** + * 根据文本标签获取值 + * + * @param label + * @param clazz + * @param + * @return + */ + static & IBaseEnum> Object getValueByLabel(String label, Class clazz) { + Objects.requireNonNull(label); + EnumSet allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举 + String finalLabel = label; + E matchEnum = allEnums.stream() + .filter(e -> ObjectUtil.equal(e.getLabel(), finalLabel)) + .findFirst() + .orElse(null); + + Object value = null; + if (matchEnum != null) { + value = matchEnum.getValue(); + } + return value; + } + + T getValue(); + + String getLabel(); + + +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/repository/entity/User.java b/src/main/java/com/iflytop/gd/infrastructure/repository/entity/User.java new file mode 100644 index 0000000..726ea14 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/repository/entity/User.java @@ -0,0 +1,43 @@ +package com.iflytop.gd.infrastructure.repository.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.iflytop.gd.infrastructure.repository.base.BaseEntity; +import com.iflytop.gd.common.enums.Deleted; +import com.iflytop.gd.common.enums.FixedUser; +import com.iflytop.gd.common.enums.UsrRole; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户实体 + */ +@EqualsAndHashCode(callSuper = true) +@Schema(description = "用户") +@TableName("user") +@Data +public class User extends BaseEntity { + + @NotBlank() + @Schema(description = "用户名") + private String username; + + @NotBlank() + @Schema(description = "昵称") + private String nickname; + + @NotBlank() + @Schema(description = "密码") + private String password; + + @Schema(description = "人员角色") + private UsrRole role; + + @Schema(description = "是否删除(0-否 1-是)") + private Deleted deleted; + + @Schema(description = "是否是系统固定用户") + private FixedUser fixedUser; + +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/infrastructure/repository/mapper/UserMapper.java b/src/main/java/com/iflytop/gd/infrastructure/repository/mapper/UserMapper.java new file mode 100644 index 0000000..718a3e4 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/repository/mapper/UserMapper.java @@ -0,0 +1,13 @@ +package com.iflytop.gd.infrastructure.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.iflytop.gd.infrastructure.repository.entity.User; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户持久层接口 + */ +@Mapper +public interface UserMapper extends BaseMapper { + +} diff --git a/src/main/java/com/iflytop/gd/system/common/annotation/CheckedRunnable.java b/src/main/java/com/iflytop/gd/system/common/annotation/CheckedRunnable.java deleted file mode 100644 index 42d4f16..0000000 --- a/src/main/java/com/iflytop/gd/system/common/annotation/CheckedRunnable.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.iflytop.gd.system.common.annotation; - -@FunctionalInterface -public interface CheckedRunnable { - void run() throws Exception; -} diff --git a/src/main/java/com/iflytop/gd/system/common/annotation/CommandMapping.java b/src/main/java/com/iflytop/gd/system/common/annotation/CommandMapping.java deleted file mode 100644 index e82ef59..0000000 --- a/src/main/java/com/iflytop/gd/system/common/annotation/CommandMapping.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.iflytop.gd.system.common.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface CommandMapping { - String value(); -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/common/base/BaseEntity.java b/src/main/java/com/iflytop/gd/system/common/base/BaseEntity.java deleted file mode 100644 index 0af2428..0000000 --- a/src/main/java/com/iflytop/gd/system/common/base/BaseEntity.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.iflytop.gd.system.common.base; - -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 基础实体类 - * 实体类的基类,包含了实体类的公共属性,如创建时间、更新时间、逻辑删除标识等

- */ -@Data -public class BaseEntity implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主键ID - */ - @TableId(type = IdType.AUTO) - private Long id; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime createTime; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime updateTime; - -} diff --git a/src/main/java/com/iflytop/gd/system/common/base/BasePageQuery.java b/src/main/java/com/iflytop/gd/system/common/base/BasePageQuery.java deleted file mode 100644 index f53725c..0000000 --- a/src/main/java/com/iflytop/gd/system/common/base/BasePageQuery.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.iflytop.gd.system.common.base; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 基础分页请求对象 - */ -@Data -@Schema -public class BasePageQuery implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - @Schema(description = "页码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private int pageNum = 1; - - @Schema(description = "每页记录数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") - private int pageSize = 10; - - -} diff --git a/src/main/java/com/iflytop/gd/system/common/base/IBaseEnum.java b/src/main/java/com/iflytop/gd/system/common/base/IBaseEnum.java deleted file mode 100644 index 72ff589..0000000 --- a/src/main/java/com/iflytop/gd/system/common/base/IBaseEnum.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.iflytop.gd.system.common.base; - - -import cn.hutool.core.util.ObjectUtil; - -import java.util.EnumSet; -import java.util.Objects; - -/** - * 枚举通用接口 - */ -public interface IBaseEnum { - - /** - * 根据值获取枚举 - * - * @param value - * @param clazz - * @param 枚举 - * @return - */ - static & IBaseEnum> E getEnumByValue(Object value, Class clazz) { - Objects.requireNonNull(value); - EnumSet allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举 - E matchEnum = allEnums.stream() - .filter(e -> ObjectUtil.equal(e.getValue(), value)) - .findFirst() - .orElse(null); - return matchEnum; - } - - /** - * 根据文本标签获取值 - * - * @param value - * @param clazz - * @param - * @return - */ - static & IBaseEnum> String getLabelByValue(Object value, Class clazz) { - Objects.requireNonNull(value); - EnumSet allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举 - E matchEnum = allEnums.stream() - .filter(e -> ObjectUtil.equal(e.getValue(), value)) - .findFirst() - .orElse(null); - - String label = null; - if (matchEnum != null) { - label = matchEnum.getLabel(); - } - return label; - } - - /** - * 根据文本标签获取值 - * - * @param label - * @param clazz - * @param - * @return - */ - static & IBaseEnum> Object getValueByLabel(String label, Class clazz) { - Objects.requireNonNull(label); - EnumSet allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举 - String finalLabel = label; - E matchEnum = allEnums.stream() - .filter(e -> ObjectUtil.equal(e.getLabel(), finalLabel)) - .findFirst() - .orElse(null); - - Object value = null; - if (matchEnum != null) { - value = matchEnum.getValue(); - } - return value; - } - - T getValue(); - - String getLabel(); - - -} diff --git a/src/main/java/com/iflytop/gd/system/common/constant/WebSocketMessageType.java b/src/main/java/com/iflytop/gd/system/common/constant/WebSocketMessageType.java deleted file mode 100644 index cdff747..0000000 --- a/src/main/java/com/iflytop/gd/system/common/constant/WebSocketMessageType.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.iflytop.gd.system.common.constant; - -public class WebSocketMessageType { - /** - * 设备状态 - */ - public static final String STATUS = "status"; - /** - * 设备报警 - */ - public static final String ALARM = "alarm"; - /** - * 设备指令反馈 - */ - public static final String CMD = "cmd"; - /** - * 工艺执行反馈 - */ - public static final String CRAFTS = "crafts"; - /** - * 容器剩余状态 - */ - public static final String CONTAINER = "container"; - -} diff --git a/src/main/java/com/iflytop/gd/system/common/enums/Deleted.java b/src/main/java/com/iflytop/gd/system/common/enums/Deleted.java deleted file mode 100644 index 13ffb89..0000000 --- a/src/main/java/com/iflytop/gd/system/common/enums/Deleted.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.iflytop.gd.system.common.enums; - -import lombok.Getter; - -/** - * 删除状态枚举 - */ -@Getter -public enum Deleted { - ENABLE, - DISABLE -} diff --git a/src/main/java/com/iflytop/gd/system/common/enums/FixedUser.java b/src/main/java/com/iflytop/gd/system/common/enums/FixedUser.java deleted file mode 100644 index 8e8d208..0000000 --- a/src/main/java/com/iflytop/gd/system/common/enums/FixedUser.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.iflytop.gd.system.common.enums; - -import lombok.Getter; - -/** - * 系統固定用户 - */ -@Getter -public enum FixedUser { - ENABLE, - DISABLE -} diff --git a/src/main/java/com/iflytop/gd/system/common/enums/UsrRole.java b/src/main/java/com/iflytop/gd/system/common/enums/UsrRole.java deleted file mode 100644 index e8d676b..0000000 --- a/src/main/java/com/iflytop/gd/system/common/enums/UsrRole.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iflytop.gd.system.common.enums; - -public enum UsrRole { - ADMIN, - DEVELOPER, - USER; -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/common/exception/AppException.java b/src/main/java/com/iflytop/gd/system/common/exception/AppException.java deleted file mode 100644 index 28e634e..0000000 --- a/src/main/java/com/iflytop/gd/system/common/exception/AppException.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.iflytop.gd.system.common.exception; - -import com.iflytop.gd.system.common.result.IResultCode; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@Data -@EqualsAndHashCode(callSuper = true) -public class AppException extends RuntimeException { - private final IResultCode resultCode; - - public AppException(IResultCode resultCode) { - super(resultCode.getMsg()); - this.resultCode = resultCode; - } - - @Override - public String toString() { - return "AppException{" + "code='" + resultCode.getCode() + ", msg=" + resultCode.getMsg() + '}'; - } -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/common/result/IResultCode.java b/src/main/java/com/iflytop/gd/system/common/result/IResultCode.java deleted file mode 100644 index a4d80f3..0000000 --- a/src/main/java/com/iflytop/gd/system/common/result/IResultCode.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.iflytop.gd.system.common.result; - -/** - * 响应码接口 - **/ -public interface IResultCode { - - String getCode(); - - String getMsg(); - -} diff --git a/src/main/java/com/iflytop/gd/system/common/result/PageResult.java b/src/main/java/com/iflytop/gd/system/common/result/PageResult.java deleted file mode 100644 index 8deb6b6..0000000 --- a/src/main/java/com/iflytop/gd/system/common/result/PageResult.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.iflytop.gd.system.common.result; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** - * 分页响应结构体 - */ -@Data -public class PageResult implements Serializable { - - private String code; - - private Data data; - - private String msg; - - public static PageResult success(IPage page) { - PageResult result = new PageResult<>(); - result.setCode(ResultCode.SUCCESS.getCode()); - - Data data = new Data<>(); - data.setList(page.getRecords()); - data.setTotal(page.getTotal()); - - result.setData(data); - result.setMsg(ResultCode.SUCCESS.getMsg()); - return result; - } - - @lombok.Data - public static class Data { - - private List list; - - private long total; - - } - -} diff --git a/src/main/java/com/iflytop/gd/system/common/result/Result.java b/src/main/java/com/iflytop/gd/system/common/result/Result.java deleted file mode 100644 index b44497d..0000000 --- a/src/main/java/com/iflytop/gd/system/common/result/Result.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.iflytop.gd.system.common.result; - -import cn.hutool.core.util.StrUtil; -import lombok.Data; - -import java.io.Serializable; - -/** - * 统一响应结构体 - **/ -@Data -public class Result implements Serializable { - - private String code; - - private T data; - - private String msg; - - public static Result success() { - return success(null); - } - - public static Result success(T data) { - Result result = new Result<>(); - result.setCode(ResultCode.SUCCESS.getCode()); - result.setMsg(ResultCode.SUCCESS.getMsg()); - result.setData(data); - return result; - } - - public static Result failed() { - return result(ResultCode.SYSTEM_ERROR.getCode(), ResultCode.SYSTEM_ERROR.getMsg(), null); - } - - public static Result failed(String msg) { - return result(ResultCode.SYSTEM_ERROR.getCode(), msg, null); - } - - public static Result judge(boolean status) { - if (status) { - return success(); - } else { - return failed(); - } - } - - public static Result failed(IResultCode resultCode) { - return result(resultCode.getCode(), resultCode.getMsg(), null); - } - - public static Result failed(IResultCode resultCode, String msg) { - return result(resultCode.getCode(), StrUtil.isNotBlank(msg) ? msg : resultCode.getMsg(), null); - } - - public static Result failed(String code, String msg) { - return result(code, msg, null); - } - - private static Result result(IResultCode resultCode, T data) { - return result(resultCode.getCode(), resultCode.getMsg(), data); - } - - private static Result result(String code, String msg, T data) { - Result result = new Result<>(); - result.setCode(code); - result.setData(data); - result.setMsg(msg); - return result; - } - - public static boolean isSuccess(Result result) { - return result != null && ResultCode.SUCCESS.getCode().equals(result.getCode()); - } -} diff --git a/src/main/java/com/iflytop/gd/system/common/result/ResultCode.java b/src/main/java/com/iflytop/gd/system/common/result/ResultCode.java deleted file mode 100644 index 5def4f8..0000000 --- a/src/main/java/com/iflytop/gd/system/common/result/ResultCode.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.iflytop.gd.system.common.result; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.io.Serializable; - -/** - * 统一前端响应码定义 - */ -@Getter -@AllArgsConstructor -public enum ResultCode implements IResultCode, Serializable { - //================================ 通用 ================================= - SUCCESS("0", "成功"), - FAILED("-1", "未知错误"), - - //============================ 1xxx:请求 & 参数 ============================ - INVALID_PARAMETER("1000", "参数无效或缺失"), - PARAMETER_TYPE_MISMATCH("1001", "参数类型不匹配"), - PARAMETER_OUT_OF_RANGE("1002", "参数超出允许范围"), - - //============================ 2xxx:认证 & 授权 ============================ - UNAUTHORIZED("2000", "未认证或登录失效"), - FORBIDDEN("2001", "无访问权限"), - TOKEN_EXPIRED("2002", "Token 已过期"), - TOKEN_INVALID("2003", "Token 无效"), - - //============================ 3xxx:资源访问 ============================ - NOT_FOUND("3000", "资源不存在"), - METHOD_NOT_ALLOWED("3001", "不支持的请求方法"), - - //============================ 4xxx:业务错误 ============================ - USER_NOT_FOUND("4000", "用户不存在"), - USER_ALREADY_EXISTS("4001", "用户已存在"), - INVALID_CREDENTIALS("4002", "用户名或密码错误"), - OPERATION_NOT_ALLOWED("4003", "业务操作不允许"), - DATA_ALREADY_EXISTS("4004", "数据已存在"), - //============================ 5xxx:系统 & 第三方 ============================ - SYSTEM_ERROR("5000", "系统内部错误"), - SERVICE_UNAVAILABLE("5001", "服务暂不可用"), - EXTERNAL_API_ERROR("5002", "第三方服务调用失败"); - - /** 状态码 */ - private final String code; - /** 提示信息 */ - private final String msg; - - @Override - public String getCode() { - return code; - } - - @Override - public String getMsg() { - return msg; - } - - /** - * 根据 code 获取枚举 - */ - public static ResultCode parse(String code) { - for (ResultCode item : values()) { - if (item.code.equals(code)) { - return item; - } - } - return FAILED; - } - - @Override - public String toString() { - return "{\"code\":\"" + code + "\", \"msg\":\"" + msg + "\"}"; - } -} diff --git a/src/main/java/com/iflytop/gd/system/common/utils/LambdaUtil.java b/src/main/java/com/iflytop/gd/system/common/utils/LambdaUtil.java deleted file mode 100644 index f2f69f7..0000000 --- a/src/main/java/com/iflytop/gd/system/common/utils/LambdaUtil.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.iflytop.gd.system.common.utils; - -import com.iflytop.gd.system.common.annotation.CheckedRunnable; - -public class LambdaUtil { - public static Runnable unchecked(CheckedRunnable runnable) { - return () -> { - try { - runnable.run(); - } catch (Exception e) { - throw new RuntimeException(e); - } - }; - } -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/config/MybatisPlusConfig.java b/src/main/java/com/iflytop/gd/system/config/MybatisPlusConfig.java deleted file mode 100644 index 0c0a462..0000000 --- a/src/main/java/com/iflytop/gd/system/config/MybatisPlusConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.iflytop.gd.system.config; - -import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.core.config.GlobalConfig; -import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import com.iflytop.gd.system.handler.MyMetaObjectHandler; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * - */ -@EnableTransactionManagement -@Configuration -public class MybatisPlusConfig { - - @Bean - public MybatisPlusInterceptor mybatisPlusInterceptor() { - MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - // 乐观锁插件 - interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); - // 分页插件 - interceptor.addInnerInterceptor(paginationInnerInterceptor()); - - return interceptor; - } - - /** - * 分页插件,自动识别数据库类型 - * ... - */ - public PaginationInnerInterceptor paginationInnerInterceptor() { - PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); - // 设置数据库类型 - paginationInnerInterceptor.setDbType(DbType.SQLITE); - // 设置最大单页限制数量,默认 500 条,-1 不受限制 - paginationInnerInterceptor.setMaxLimit(-1L); - return paginationInnerInterceptor; - } - - /** - * 乐观锁插件 - * ... - */ - public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { - return new OptimisticLockerInnerInterceptor(); - } - - /** - * 自动填充数据库创建人、创建时间、更新人、更新时间 - */ - @Bean - public GlobalConfig globalConfig() { - GlobalConfig globalConfig = new GlobalConfig(); - globalConfig.setMetaObjectHandler(new MyMetaObjectHandler()); - return globalConfig; - } -} diff --git a/src/main/java/com/iflytop/gd/system/config/SwaggerConfig.java b/src/main/java/com/iflytop/gd/system/config/SwaggerConfig.java deleted file mode 100644 index 5bc5f07..0000000 --- a/src/main/java/com/iflytop/gd/system/config/SwaggerConfig.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iflytop.gd.system.config; - -import cn.hutool.core.util.ArrayUtil; -import io.swagger.v3.oas.models.Components; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.security.SecurityRequirement; -import io.swagger.v3.oas.models.security.SecurityScheme; -import org.springdoc.core.customizers.GlobalOpenApiCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpHeaders; -import org.springframework.util.AntPathMatcher; - -import java.util.stream.Stream; - -/*** - * 创建Swagger配置 - */ -@Configuration -public class SwaggerConfig { - - @Bean - public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() { - return openApi -> { - // 全局添加Authorization - if (openApi.getPaths() != null) { - openApi.getPaths().forEach((path, pathItem) -> { - - // 忽略认证的请求无需携带 Authorization - String[] ignoreUrls = {"/api/auth/login"}; - if (ArrayUtil.isNotEmpty(ignoreUrls)) { - // Ant 匹配忽略的路径,不添加Authorization - AntPathMatcher antPathMatcher = new AntPathMatcher(); - if (Stream.of(ignoreUrls).anyMatch(ignoreUrl -> antPathMatcher.match(ignoreUrl, path))) { - return; - } - } - - // 其他接口统一添加Authorization -// pathItem.readOperations() -// .forEach(operation -> -// operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)) -// ); - }); - } - }; - } - - @Bean - public OpenAPI customOpenAPI() { - return new OpenAPI() - .info(new Info() - .title("系统API") - .version("1.0")) // 配置全局鉴权参数-Authorize - .components(new Components() - .addSecuritySchemes(HttpHeaders.AUTHORIZATION, - new SecurityScheme() - .name(HttpHeaders.AUTHORIZATION) - .type(SecurityScheme.Type.APIKEY) - .in(SecurityScheme.In.HEADER) - .scheme("Bearer") - .bearerFormat("JWT") - ) - ); - } - - -} diff --git a/src/main/java/com/iflytop/gd/system/config/WebConfig.java b/src/main/java/com/iflytop/gd/system/config/WebConfig.java deleted file mode 100644 index 633d918..0000000 --- a/src/main/java/com/iflytop/gd/system/config/WebConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.iflytop.gd.system.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -public class WebConfig implements WebMvcConfigurer { - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/api/**") - .allowedOrigins("*") - .allowedMethods("GET", "POST", "PUT", "DELETE") - .allowedHeaders("*"); - } -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/config/WebSocketConfig.java b/src/main/java/com/iflytop/gd/system/config/WebSocketConfig.java deleted file mode 100644 index 24f1bad..0000000 --- a/src/main/java/com/iflytop/gd/system/config/WebSocketConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.iflytop.gd.system.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.socket.server.standard.ServerEndpointExporter; - -@Configuration -public class WebSocketConfig { - - @Bean - public ServerEndpointExporter serverEndpointExporter() { - return new ServerEndpointExporter(); - } -} diff --git a/src/main/java/com/iflytop/gd/system/config/WebSocketServer.java b/src/main/java/com/iflytop/gd/system/config/WebSocketServer.java deleted file mode 100644 index ddf7634..0000000 --- a/src/main/java/com/iflytop/gd/system/config/WebSocketServer.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.iflytop.gd.system.config; - - -import jakarta.websocket.*; -import jakarta.websocket.server.ServerEndpoint; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -@Slf4j -@ServerEndpoint("/ws") -@Component -public class WebSocketServer { - - private static final Set sessions = Collections.synchronizedSet(new HashSet<>()); - - public static void sendMessageToClients(String message) { - synchronized (sessions) { - for (Session session : sessions) { - try { - session.getBasicRemote().sendText(message); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - - @OnOpen - public void onOpen(Session session) { - sessions.add(session); - } - - @OnMessage - public void onMessage(String message, Session session) { - } - - @OnClose - public void onClose(Session session) { - sessions.remove(session); // 移除关闭连接的 Session - } - - @OnError - public void onError(Throwable error) { - } -} diff --git a/src/main/java/com/iflytop/gd/system/controller/UserController.java b/src/main/java/com/iflytop/gd/system/controller/UserController.java deleted file mode 100644 index 5e56094..0000000 --- a/src/main/java/com/iflytop/gd/system/controller/UserController.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.iflytop.gd.system.controller; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.iflytop.gd.system.common.base.BasePageQuery; -import com.iflytop.gd.system.common.result.PageResult; -import com.iflytop.gd.system.common.result.Result; -import com.iflytop.gd.system.common.result.ResultCode; -import com.iflytop.gd.system.model.entity.User; -import com.iflytop.gd.system.service.UserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -@Tag(name = "用户接口") -@RestController -@RequestMapping("/api/user") -@RequiredArgsConstructor -@Slf4j -public class UserController { - private final UserService userService; - - @Operation(summary = "用户列表") - @GetMapping("/list") - public PageResult getAllUsers(BasePageQuery pageQuery) { - IPage result = userService.page(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), null); - return PageResult.success(result); - } - - @Operation(summary = "添加新用户") - @PostMapping("") - public Result addUser(@RequestBody User user) { - User existingUser = userService.getOne(new LambdaQueryWrapper().eq(User::getUsername, user.getUsername())); - if (existingUser == null) { - boolean isSuccess = userService.save(user); - if (isSuccess) { - return Result.success(); - } - } else { - return Result.failed(ResultCode.USER_ALREADY_EXISTS); - } - return Result.failed(); - } - - @Operation(summary = "当前用户信息") - @GetMapping("/current") - public Result currentUser() { - return Result.success(userService.getCurrentUser()); - } - - @Operation(summary = "更新用户信息") - @PutMapping("") - public Result updateUser(@RequestBody User user) { - boolean isSuccess = userService.updateById(user); - if (isSuccess) { - return Result.success(); - } - return Result.failed(); - } - - @Operation(summary = "删除用户") - @DeleteMapping("/{ids}") - public Result deleteUser(@Parameter(description = "用户ID,多个以英文逗号(,)分割") @PathVariable String ids) { - boolean isSuccess = userService.deleteUser(ids); - if (isSuccess) { - return Result.success(); - } - return Result.failed(); - } -} diff --git a/src/main/java/com/iflytop/gd/system/core/cmd/BaseCommandHandler.java b/src/main/java/com/iflytop/gd/system/core/cmd/BaseCommandHandler.java deleted file mode 100644 index 052e314..0000000 --- a/src/main/java/com/iflytop/gd/system/core/cmd/BaseCommandHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iflytop.gd.system.core.cmd; - - - -import com.iflytop.gd.system.common.annotation.CheckedRunnable; -import com.iflytop.gd.system.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/system/core/cmd/CommandHandler.java b/src/main/java/com/iflytop/gd/system/core/cmd/CommandHandler.java deleted file mode 100644 index cae8795..0000000 --- a/src/main/java/com/iflytop/gd/system/core/cmd/CommandHandler.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.iflytop.gd.system.core.cmd; - -import com.iflytop.gd.app.model.dto.CmdDTO; - -import java.util.concurrent.CompletableFuture; - -public interface CommandHandler { - CompletableFuture handle(CmdDTO cmdDTO); -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/core/cmd/CommandHandlerRegistry.java b/src/main/java/com/iflytop/gd/system/core/cmd/CommandHandlerRegistry.java deleted file mode 100644 index d3d91e7..0000000 --- a/src/main/java/com/iflytop/gd/system/core/cmd/CommandHandlerRegistry.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iflytop.gd.system.core.cmd; - -import com.iflytop.gd.system.common.annotation.CommandMapping; -import io.micrometer.common.lang.NonNull; -import jakarta.annotation.PostConstruct; -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) { - handlerMap.put(mapping.value(), (CommandHandler) bean); - } - } - } - - public CommandHandler getHandler(String command) { - return handlerMap.get(command); - } -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/handler/GlobalExceptionHandler.java b/src/main/java/com/iflytop/gd/system/handler/GlobalExceptionHandler.java deleted file mode 100644 index 0a6ae18..0000000 --- a/src/main/java/com/iflytop/gd/system/handler/GlobalExceptionHandler.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.iflytop.gd.system.handler; - -import com.iflytop.gd.system.common.exception.AppException; -import com.iflytop.gd.system.common.result.Result; -import com.iflytop.gd.system.common.result.ResultCode; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -@Slf4j -@RestControllerAdvice -public class GlobalExceptionHandler { - - @ExceptionHandler(Exception.class) - public Result handleException(Exception ex) { - if (ex instanceof AppException ae) { - log.warn("AppException:", ae); - return Result.failed(ae.getResultCode()); - } - log.error("Unhandled exception:", ex); - return Result.failed(ResultCode.SYSTEM_ERROR); - } - -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/handler/MyMetaObjectHandler.java b/src/main/java/com/iflytop/gd/system/handler/MyMetaObjectHandler.java deleted file mode 100644 index a838157..0000000 --- a/src/main/java/com/iflytop/gd/system/handler/MyMetaObjectHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.iflytop.gd.system.handler; - -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import org.apache.ibatis.reflection.MetaObject; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; - -/** - * mybatis-plus 字段自动填充 - */ -@Component -public class MyMetaObjectHandler implements MetaObjectHandler { - - /** - * 新增填充创建时间 - * - * @param metaObject 元数据 - */ - @Override - public void insertFill(MetaObject metaObject) { - this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class); - this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); - } - - /** - * 更新填充更新时间 - * - * @param metaObject 元数据 - */ - @Override - public void updateFill(MetaObject metaObject) { - this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); - } - -} diff --git a/src/main/java/com/iflytop/gd/system/mapper/UserMapper.java b/src/main/java/com/iflytop/gd/system/mapper/UserMapper.java deleted file mode 100644 index 6c3c7d4..0000000 --- a/src/main/java/com/iflytop/gd/system/mapper/UserMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.iflytop.gd.system.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.iflytop.gd.system.model.entity.User; -import org.apache.ibatis.annotations.Mapper; - -/** - * 用户持久层接口 - */ -@Mapper -public interface UserMapper extends BaseMapper { - -} diff --git a/src/main/java/com/iflytop/gd/system/model/dto/WebsocketResult.java b/src/main/java/com/iflytop/gd/system/model/dto/WebsocketResult.java deleted file mode 100644 index 020abd5..0000000 --- a/src/main/java/com/iflytop/gd/system/model/dto/WebsocketResult.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iflytop.gd.system.model.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Data -public class WebsocketResult { - /** - * 推送类型(指令 cmd,报警 warn ,状态 status) - */ - @Schema(description = "推送类型(指令 cmd,报警 warn ,状态 status)") - private String type; - /** - * 执行结果 - */ - @Schema(description = "推送数据") - private Object data; -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/model/entity/User.java b/src/main/java/com/iflytop/gd/system/model/entity/User.java deleted file mode 100644 index 37d8a0f..0000000 --- a/src/main/java/com/iflytop/gd/system/model/entity/User.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.iflytop.gd.system.model.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.iflytop.gd.system.common.base.BaseEntity; -import com.iflytop.gd.system.common.enums.Deleted; -import com.iflytop.gd.system.common.enums.FixedUser; -import com.iflytop.gd.system.common.enums.UsrRole; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 用户实体 - */ -@EqualsAndHashCode(callSuper = true) -@Schema(description = "用户") -@TableName("user") -@Data -public class User extends BaseEntity { - - @NotBlank() - @Schema(description = "用户名") - private String username; - - @NotBlank() - @Schema(description = "昵称") - private String nickname; - - @NotBlank() - @Schema(description = "密码") - private String password; - - @Schema(description = "人员角色") - private UsrRole role; - - @Schema(description = "是否删除(0-否 1-是)") - private Deleted deleted; - - @Schema(description = "是否是系统固定用户") - private FixedUser fixedUser; - -} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/service/UserService.java b/src/main/java/com/iflytop/gd/system/service/UserService.java index 0f271e9..23f45c7 100644 --- a/src/main/java/com/iflytop/gd/system/service/UserService.java +++ b/src/main/java/com/iflytop/gd/system/service/UserService.java @@ -1,8 +1,8 @@ package com.iflytop.gd.system.service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.iflytop.gd.system.mapper.UserMapper; -import com.iflytop.gd.system.model.entity.User; +import com.iflytop.gd.infrastructure.repository.mapper.UserMapper; +import com.iflytop.gd.infrastructure.repository.entity.User; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; diff --git a/src/main/java/com/iflytop/gd/system/service/WebSocketService.java b/src/main/java/com/iflytop/gd/system/service/WebSocketService.java deleted file mode 100644 index 0b6cfb0..0000000 --- a/src/main/java/com/iflytop/gd/system/service/WebSocketService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.iflytop.gd.system.service; - -import cn.hutool.json.JSONUtil; -import com.iflytop.gd.app.common.enums.CraftStates; -import com.iflytop.gd.system.config.WebSocketServer; -import com.iflytop.gd.system.model.dto.WebsocketResult; -import org.springframework.stereotype.Service; - -@Service -public class WebSocketService { - - public void push(String type, Object data) { - WebsocketResult websocketResult = new WebsocketResult(); - websocketResult.setType(type); - websocketResult.setData(data); - WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(websocketResult)); - } - -}