package net.maku.system.controller; import cn.hutool.core.util.StrUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import net.maku.framework.common.page.PageResult; import net.maku.framework.common.utils.Result; import net.maku.framework.security.user.SecurityUser; import net.maku.framework.security.user.UserDetail; import net.maku.system.convert.SysUserConvert; import net.maku.system.entity.SysUserEntity; import net.maku.system.service.SysUserPostService; import net.maku.system.service.SysUserRoleService; import net.maku.system.service.SysUserService; import net.maku.system.vo.user.*; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** * 用户管理 * * @author 阿沐 babamu@126.com */ @RestController @RequestMapping("sys/user") @AllArgsConstructor @Tag(name="用户管理") public class SysUserController { private final SysUserService sysUserService; private final SysUserRoleService sysUserRoleService; private final SysUserPostService sysUserPostService; private final PasswordEncoder passwordEncoder; @GetMapping("page") @Operation(summary = "分页") public Result> page(@Valid SysUserQuery query){ PageResult page = sysUserService.page(query); return Result.ok(page); } @GetMapping("{id}") @Operation(summary = "信息") @PreAuthorize("hasAuthority('sys:user:info')") public Result get(@PathVariable("id") Long id){ SysUserEntity entity = sysUserService.getById(id); SysUserVO vo = SysUserConvert.INSTANCE.convert(entity); // 用户角色列表 List roleIdList = sysUserRoleService.getRoleIdList(id); vo.setRoleIdList(roleIdList); // 用户岗位列表 List postIdList = sysUserPostService.getPostIdList(id); vo.setPostIdList(postIdList); return Result.ok(vo); } @GetMapping("info") @Operation(summary = "登录用户") public Result info(){ SysUserVO user = SysUserConvert.INSTANCE.convert(SecurityUser.getUser()); return Result.ok(user); } @PutMapping("password") @Operation(summary = "修改密码") public Result password(@RequestBody @Valid SysUserPasswordVO vo){ // 原密码不正确 UserDetail user = SecurityUser.getUser(); if(!passwordEncoder.matches(vo.getPassword(), user.getPassword())){ return Result.error("原密码不正确"); } // 修改密码 sysUserService.updatePassword(user.getId(), passwordEncoder.encode(vo.getNewPassword())); return Result.ok(); } @PostMapping @Operation(summary = "保存") @PreAuthorize("hasAuthority('sys:user:save')") public Result save(@RequestBody @Valid SysUserPostVO vo){ // 新增密码不能为空 if (StrUtil.isBlank(vo.getPassword())){ Result.error("密码不能为空"); } // 密码加密 vo.setPassword(passwordEncoder.encode(vo.getPassword())); // 保存 sysUserService.save(vo); return Result.ok(); } @PutMapping @Operation(summary = "修改") @PreAuthorize("hasAuthority('sys:user:update')") public Result update(@RequestBody @Valid SysUserPutVO vo){ // 如果密码不为空,则进行加密处理 if(StrUtil.isBlank(vo.getPassword())){ vo.setPassword(null); }else{ vo.setPassword(passwordEncoder.encode(vo.getPassword())); } sysUserService.update(vo); return Result.ok(); } @DeleteMapping @Operation(summary = "删除") @PreAuthorize("hasAuthority('sys:user:delete')") public Result delete(@RequestBody List idList){ sysUserService.delete(idList); return Result.ok(); } }