From 0ee2516b5edbec695d14c5e790f438d1f69f8a1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Sat, 26 Apr 2025 16:00:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=94=A8=E6=88=B7=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gd/GraphiteDigesterServiceApplication.java | 9 ++- .../iflytop/gd/system/common/enums/Deleted.java | 12 ++++ .../gd/system/common/enums/DeletedEnum.java | 24 ------- .../iflytop/gd/system/common/enums/FixedUser.java | 12 ++++ .../iflytop/gd/system/common/enums/StatusEnum.java | 24 ------- .../iflytop/gd/system/common/enums/UsrRole.java | 7 ++ .../iflytop/gd/system/config/SwaggerConfig.java | 8 +-- .../gd/system/controller/UserController.java | 74 ++++++++++++++++++++++ .../com/iflytop/gd/system/mapper/UserMapper.java | 13 ++++ .../com/iflytop/gd/system/model/entity/User.java | 43 +++++++++++++ .../com/iflytop/gd/system/service/UserService.java | 32 ++++++++++ src/main/resources/sql/init.sql | 7 +- 12 files changed, 209 insertions(+), 56 deletions(-) create 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/DeletedEnum.java create 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/StatusEnum.java create mode 100644 src/main/java/com/iflytop/gd/system/common/enums/UsrRole.java create mode 100644 src/main/java/com/iflytop/gd/system/controller/UserController.java create mode 100644 src/main/java/com/iflytop/gd/system/mapper/UserMapper.java create mode 100644 src/main/java/com/iflytop/gd/system/model/entity/User.java create mode 100644 src/main/java/com/iflytop/gd/system/service/UserService.java diff --git a/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java b/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java index 0db0c9f..5f16fcd 100644 --- a/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java +++ b/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java @@ -2,12 +2,19 @@ package com.iflytop.gd; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.ConfigurableEnvironment; @SpringBootApplication public class GraphiteDigesterServiceApplication { public static void main(String[] args) { - SpringApplication.run(GraphiteDigesterServiceApplication.class, args); + ConfigurableApplicationContext ctx = SpringApplication.run(GraphiteDigesterServiceApplication.class, args); + ConfigurableEnvironment env = ctx.getEnvironment(); + String port = env.getProperty("local.server.port", env.getProperty("server.port", "8080")); + System.out.println("应用已启动"); + System.out.println("访问地址 → http://localhost:" + port + "/"); + System.out.println("文档地址 → http://localhost:" + port + "/doc.html"); } } 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 new file mode 100644 index 0000000..13ffb89 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/common/enums/Deleted.java @@ -0,0 +1,12 @@ +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/DeletedEnum.java b/src/main/java/com/iflytop/gd/system/common/enums/DeletedEnum.java deleted file mode 100644 index 858d27d..0000000 --- a/src/main/java/com/iflytop/gd/system/common/enums/DeletedEnum.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.iflytop.gd.system.common.enums; - -import com.iflytop.gd.system.common.base.IBaseEnum; -import lombok.Getter; - -/** - * 删除状态枚举 - */ -@Getter -public enum DeletedEnum implements IBaseEnum { - - ENABLE(1, "删除"), - DISABLE(0, "未删除"); - - private final Integer value; - - - private final String label; - - DeletedEnum(Integer value, String label) { - this.value = value; - this.label = label; - } -} 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 new file mode 100644 index 0000000..8e8d208 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/common/enums/FixedUser.java @@ -0,0 +1,12 @@ +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/StatusEnum.java b/src/main/java/com/iflytop/gd/system/common/enums/StatusEnum.java deleted file mode 100644 index d5104d5..0000000 --- a/src/main/java/com/iflytop/gd/system/common/enums/StatusEnum.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.iflytop.gd.system.common.enums; - -import com.iflytop.gd.system.common.base.IBaseEnum; -import lombok.Getter; - -/** - * 状态枚举 - */ -@Getter -public enum StatusEnum implements IBaseEnum { - - ENABLE(1, "启用"), - DISABLE(0, "禁用"); - - private final Integer value; - - - private final String label; - - StatusEnum(Integer value, String label) { - this.value = value; - this.label = label; - } -} 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 new file mode 100644 index 0000000..e8d676b --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/common/enums/UsrRole.java @@ -0,0 +1,7 @@ +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/config/SwaggerConfig.java b/src/main/java/com/iflytop/gd/system/config/SwaggerConfig.java index db82617..5bc5f07 100644 --- a/src/main/java/com/iflytop/gd/system/config/SwaggerConfig.java +++ b/src/main/java/com/iflytop/gd/system/config/SwaggerConfig.java @@ -38,10 +38,10 @@ public class SwaggerConfig { } // 其他接口统一添加Authorization - pathItem.readOperations() - .forEach(operation -> - operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)) - ); +// pathItem.readOperations() +// .forEach(operation -> +// operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)) +// ); }); } }; diff --git a/src/main/java/com/iflytop/gd/system/controller/UserController.java b/src/main/java/com/iflytop/gd/system/controller/UserController.java new file mode 100644 index 0000000..5e56094 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/controller/UserController.java @@ -0,0 +1,74 @@ +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/mapper/UserMapper.java b/src/main/java/com/iflytop/gd/system/mapper/UserMapper.java new file mode 100644 index 0000000..6c3c7d4 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/mapper/UserMapper.java @@ -0,0 +1,13 @@ +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/entity/User.java b/src/main/java/com/iflytop/gd/system/model/entity/User.java new file mode 100644 index 0000000..37d8a0f --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/model/entity/User.java @@ -0,0 +1,43 @@ +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 new file mode 100644 index 0000000..0f271e9 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/service/UserService.java @@ -0,0 +1,32 @@ +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 lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户业务实现类 + */ +@Service +@RequiredArgsConstructor +public class UserService extends ServiceImpl { + @Getter + @Setter + private User currentUser; + + public boolean deleteUser(String idsStr) { + List ids = Arrays.stream(idsStr.split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + return this.removeByIds(ids); + } + +} diff --git a/src/main/resources/sql/init.sql b/src/main/resources/sql/init.sql index 23646c4..38a4f6a 100644 --- a/src/main/resources/sql/init.sql +++ b/src/main/resources/sql/init.sql @@ -5,11 +5,12 @@ CREATE TABLE IF NOT EXISTS user ( nickname TEXT, password TEXT, role TEXT, - fixed_user INTEGER, + fixed_user TEXT, + deleted TEXT, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -INSERT INTO user (username,nickname, password, role, fixed_user) -SELECT 'admin','Admin', '000000', 'ADMIN', 1 +INSERT INTO user (username,nickname, password, role, fixed_user, deleted) +SELECT 'admin','Admin', '123456', 'ADMIN', 'ENABLE','DISABLE' WHERE NOT EXISTS (SELECT 1 FROM user WHERE username = 'admin'); \ No newline at end of file