liujie
2026-07-31 0cf54692efc067adca7fa4308af241f723930b58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.tourguide.api.admin;
 
import com.tourguide.common.api.ApiResponse;
import com.tourguide.common.api.PageResponse;
import com.tourguide.modules.user.dto.UserCreateRequest;
import com.tourguide.modules.user.dto.AdminPasswordResetRequest;
import com.tourguide.modules.user.dto.RoleOptionResponse;
import com.tourguide.modules.user.dto.UserResponse;
import com.tourguide.modules.user.dto.UserStatusRequest;
import com.tourguide.modules.user.dto.UserUpdateRequest;
import com.tourguide.modules.user.service.AdminUserService;
import com.tourguide.security.AppUserPrincipal;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
 
/**
 * 管理后台员工账号管理接口。
 * 仅操作 sys_admin_user 表,支持员工查询、新增、编辑、停启、重置密码和删除。
 */
@RestController
@RequestMapping("/api/admin/users")
public class AdminUserController {
    private final AdminUserService userService;
    public AdminUserController(AdminUserService userService) { this.userService = userService; }
 
    /**
     * 分页查询后台员工账号,支持按昵称、登录名、角色和状态筛选。
     *
     * @param page 页码,从 1 开始
     * @param size 每页记录数
     * @param nickname 员工昵称关键字
     * @param username 登录账号关键字
     * @param roleCode 角色编码
     * @param status 账号启用状态
     * @return 后台员工账号分页结果
     */
    @GetMapping
    public ApiResponse<PageResponse<UserResponse>> page(@RequestParam(defaultValue = "1") long page,
                                                        @RequestParam(defaultValue = "10") long size,
                                                        @RequestParam(required = false) String nickname,
                                                        @RequestParam(required = false) String username,
                                                        @RequestParam(required = false) String roleCode,
                                                        @RequestParam(required = false) Integer status) {
        return ApiResponse.success(userService.page(page, size, nickname, username, roleCode, status));
    }
 
    /**
     * 查询当前启用的角色选项,供员工新增和编辑表单选择。
     *
     * @return 可分配角色的编码和名称列表
     */
    @GetMapping("/role-options")
    public ApiResponse<List<RoleOptionResponse>> roleOptions() {
        return ApiResponse.success(userService.roleOptions());
    }
 
    /**
     * 新增后台员工账号,校验登录名唯一性和所选角色可用性。
     *
     * @param request 员工登录名、初始密码、昵称和角色信息
     * @return 新建后的员工账号信息
     */
    @PostMapping
    public ApiResponse<UserResponse> create(@Valid @RequestBody UserCreateRequest request) {
        return ApiResponse.success(userService.create(request));
    }
 
    /**
     * 更新指定员工的登录名、昵称、角色等可维护资料。
     * 当前操作人标识用于执行不能破坏自身权限等业务保护。
     *
     * @param id 员工账号主键
     * @param request 员工资料更新参数
     * @param principal 当前登录后台账号身份
     * @return 更新后的员工账号信息
     */
    @PutMapping("/{id}")
    public ApiResponse<UserResponse> update(@PathVariable Long id,
                                            @Valid @RequestBody UserUpdateRequest request,
                                            @AuthenticationPrincipal AppUserPrincipal principal) {
        return ApiResponse.success(userService.update(id, request, principal.getUserId()));
    }
 
    /**
     * 启用或禁用指定员工账号,并阻止当前登录人禁用自身账号。
     *
     * @param id 员工账号主键
     * @param request 目标状态,1 为启用、0 为禁用
     * @param principal 当前登录后台账号身份
     * @return 状态更新后的员工账号信息
     */
    @PutMapping("/{id}/status")
    public ApiResponse<UserResponse> updateStatus(@PathVariable Long id,
                                                  @Valid @RequestBody UserStatusRequest request,
                                                  @AuthenticationPrincipal AppUserPrincipal principal) {
        return ApiResponse.success(userService.updateStatus(id, request.getStatus(), principal.getUserId()));
    }
 
    /**
     * 由后台管理员重置指定员工的登录密码。
     *
     * @param id 员工账号主键
     * @param request 新密码和确认密码
     * @return 无业务数据的成功响应
     */
    @PutMapping("/{id}/password")
    public ApiResponse<Void> resetPassword(@PathVariable Long id,
                                           @Valid @RequestBody AdminPasswordResetRequest request) {
        userService.resetPassword(id, request);
        return ApiResponse.success();
    }
 
    /**
     * 删除指定后台员工账号,当前登录账号不能删除自身。
     *
     * @param id 员工账号主键
     * @param principal 当前登录后台账号身份
     * @return 无业务数据的成功响应
     */
    @DeleteMapping("/{id}")
    public ApiResponse<Void> delete(@PathVariable Long id,
                                    @AuthenticationPrincipal AppUserPrincipal principal) {
        userService.delete(id, principal.getUserId());
        return ApiResponse.success();
    }
}