feat(admin-server): 添加系统用户逻辑删除功能

- 在 Admin 和 Customer 实体类中添加 deleted 字段,用于逻辑删除
- 在 application.yml 及其不同环境配置中添加 MyBatis-Plus 逻辑删除配置
- 修改数据库初始化脚本,添加 deleted 字段
- 重构 SystemController,更名为 SystemUserController
- 添加批量删除系统用户的接口
- 将 LoginDto 重命名为 LoginDTO,统一命名规范- 新增 IdListDTO,用于批量操作的参数校验
This commit is contained in:
FallingCliff 2025-05-28 17:38:59 +08:00
parent ebf09639fe
commit 2e9bed02cb
11 changed files with 64 additions and 8 deletions

View File

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.admin_server.common.Result; import com.example.admin_server.common.Result;
import com.example.admin_server.enums.ResultCode; import com.example.admin_server.enums.ResultCode;
import com.example.admin_server.mapper.AdminMapper; import com.example.admin_server.mapper.AdminMapper;
import com.example.admin_server.model.dto.LoginDto; import com.example.admin_server.model.dto.LoginDTO;
import com.example.admin_server.model.entity.Admin; import com.example.admin_server.model.entity.Admin;
import com.example.admin_server.utils.JwtUtil; import com.example.admin_server.utils.JwtUtil;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
@ -31,7 +31,7 @@ public class AdminAuthController {
@PostMapping("/login") @PostMapping("/login")
@ApiOperation("管理员登录") @ApiOperation("管理员登录")
public Result<?> login(@Validated @RequestBody LoginDto request) { public Result<?> login(@Validated @RequestBody LoginDTO request) {
Admin admin = adminMapper.selectOne( Admin admin = adminMapper.selectOne(
new QueryWrapper<Admin>().eq("username", request.getUsername()) new QueryWrapper<Admin>().eq("username", request.getUsername())
); );

View File

@ -2,21 +2,22 @@ package com.example.admin_server.controller.admin;
import com.example.admin_server.common.Result; import com.example.admin_server.common.Result;
import com.example.admin_server.common.query.IPageRequest; import com.example.admin_server.common.query.IPageRequest;
import com.example.admin_server.model.dto.IdListDTO;
import com.example.admin_server.model.query.AdminQuery; import com.example.admin_server.model.query.AdminQuery;
import com.example.admin_server.service.IAdminService; import com.example.admin_server.service.IAdminService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List;
@RestController @RestController
@RequestMapping("/api/admin/system") @RequestMapping("/api/admin/system")
@RequiredArgsConstructor @RequiredArgsConstructor
@Api(tags = {"系统管理"}) @Api(tags = {"系统用户管理"})
public class SystemController { public class SystemUserController {
private final IAdminService iAdminService; private final IAdminService iAdminService;
@ -25,4 +26,10 @@ public class SystemController {
public Result<?> getAdminUserList(AdminQuery query, IPageRequest pageRequest) { public Result<?> getAdminUserList(AdminQuery query, IPageRequest pageRequest) {
return Result.ok(iAdminService.pageList(pageRequest, query)); return Result.ok(iAdminService.pageList(pageRequest, query));
} }
@DeleteMapping("/user/delete")
@ApiOperation("批量删除系统用户")
public Result<?> deleteAdminUsers(@RequestBody IdListDTO idList) {
return Result.ok(iAdminService.removeByIds(idList.getIdList()));
}
} }

View File

@ -0,0 +1,13 @@
package com.example.admin_server.model.dto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Data
public class IdListDTO {
@NotBlank(message = "ID列表不能为空")
private List<Integer> idList;
}

View File

@ -5,7 +5,7 @@ import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@Data @Data
public class LoginDto { public class LoginDTO {
@NotBlank(message = "用户名不能为空") @NotBlank(message = "用户名不能为空")
private String username; private String username;

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -82,5 +83,9 @@ public class Admin implements Serializable {
@TableField("update_time") @TableField("update_time")
private LocalDateTime updateTime; private LocalDateTime updateTime;
@ApiModelProperty(value = "是否删除0未删除1已删除")
@TableField("deleted")
@TableLogic
private Integer deleted;
} }

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -78,5 +79,9 @@ public class Customer implements Serializable {
@TableField("update_time") @TableField("update_time")
private LocalDateTime updateTime; private LocalDateTime updateTime;
@ApiModelProperty(value = "是否删除0未删除1已删除")
@TableField("deleted")
@TableLogic
private Integer deleted;
} }

View File

@ -29,3 +29,9 @@ wx:
knife4j: knife4j:
enable: true enable: true
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0

View File

@ -29,3 +29,9 @@ app:
knife4j: knife4j:
enable: true enable: true
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0

View File

@ -29,3 +29,9 @@ app:
knife4j: knife4j:
enable: true enable: true
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0

View File

@ -33,3 +33,9 @@ app:
knife4j: knife4j:
enable: true enable: true
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0

View File

@ -26,6 +26,7 @@ CREATE TABLE `admin` (
`last_login_time` datetime DEFAULT NULL COMMENT '上次登录时间', `last_login_time` datetime DEFAULT NULL COMMENT '上次登录时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除0未删除1已删除',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`) UNIQUE KEY `uk_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='后台管理员表'; ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='后台管理员表';
@ -44,6 +45,7 @@ CREATE TABLE `customer` (
`phone` varchar(20) DEFAULT NULL COMMENT '手机号(后续绑定时)', `phone` varchar(20) DEFAULT NULL COMMENT '手机号(后续绑定时)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除0未删除1已删除',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `uk_openid` (`openid`), UNIQUE KEY `uk_openid` (`openid`),
UNIQUE KEY `uk_username` (`username`) UNIQUE KEY `uk_username` (`username`)