package com.sinata.appointment.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.stp.StpUtil; import com.sinata.appointment.common.Result; import com.sinata.appointment.common.ResultUtil; import com.sinata.appointment.dto.ResetPasswordRequest; import com.sinata.appointment.dto.SysUserCreateRequest; import com.sinata.appointment.dto.SysUserDetailVo; import com.sinata.appointment.dto.SysUserListVo; import com.sinata.appointment.dto.SysUserUpdateRequest; import com.sinata.appointment.dto.UserStatusPatchRequest; import com.sinata.appointment.service.SysUserApplicationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import java.util.Map; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @Tag(name = "系统用户") @RestController @RequestMapping("/api/sys/users") @RequiredArgsConstructor @Validated public class SysUserController { private final SysUserApplicationService sysUserApplicationService; @Operation(summary = "分页(手机号为脱敏字段)") @GetMapping @SaCheckPermission("sys:users:page") public Result> page( @RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String realName, @RequestParam(required = false) String mobile, @RequestParam(required = false) Long roleId, @RequestParam(required = false) Integer status) { return ResultUtil.page( sysUserApplicationService.pageUsers(page, size, realName, mobile, roleId, status)); } @Operation(summary = "详情(须同时传 uuid 防越权)") @GetMapping("/{id}") @SaCheckPermission("sys:users:detail") public Result detail( @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { return ResultUtil.data(sysUserApplicationService.getDetail(id, uuid)); } @Operation(summary = "新增") @PostMapping @SaCheckPermission("sys:users:create") public Result> create(@Valid @RequestBody SysUserCreateRequest request) { return ResultUtil.data(sysUserApplicationService.createUser(request)); } @Operation(summary = "修改(body 须含 uuid,不可改登录名与密码)") @PutMapping("/{id}") @SaCheckPermission("sys:users:update") public Result update(@PathVariable Long id, @Valid @RequestBody SysUserUpdateRequest request) { sysUserApplicationService.updateUser(id, request); return ResultUtil.success(); } @Operation(summary = "重置密码(body 须含 uuid)") @PostMapping("/{id}/password") @SaCheckPermission("sys:users:password") public Result resetPassword( @PathVariable Long id, @Valid @RequestBody ResetPasswordRequest request) { sysUserApplicationService.resetPassword(id, request); return ResultUtil.success(); } @Operation(summary = "启用/禁用(body 须含 uuid)") @PatchMapping("/{id}/status") @SaCheckPermission("sys:users:status") public Result status( @PathVariable Long id, @Valid @RequestBody UserStatusPatchRequest request) { sysUserApplicationService.patchStatus(id, request, StpUtil.getLoginIdAsLong()); return ResultUtil.success(); } @Operation(summary = "删除(逻辑删除,须传 uuid)") @DeleteMapping("/{id}") @SaCheckPermission("sys:users:delete") public Result delete( @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { sysUserApplicationService.deleteUser(id, uuid, StpUtil.getLoginIdAsLong()); return ResultUtil.success(); } }