package com.freedom.admin.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.freedom.admin.base.BaseController; import com.freedom.admin.common.Result; import com.freedom.admin.config.MyException; import com.freedom.admin.entity.TSysUser; import com.freedom.admin.entity.TSysUserRole; import com.freedom.admin.mapper.TSysUserRoleMapper; import com.freedom.admin.service.TSysUserService; import com.freedom.admin.service.UserService; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.security.PermitAll; import java.util.ArrayList; import java.util.List; /** * @author zhangjiaxun * @date 2021/2/2 13:41 * @description 控制层-用户表 */ @RestController @RequestMapping("sys-user") @Log4j2 public class TSysUserController extends BaseController { @Autowired private TSysUserService tSysUserService; @Autowired private UserService userService; @Autowired private TSysUserRoleMapper tSysUserRoleMapper; /** * 用户注册 * * @param sysUser 用户信息 * @return Result 响应结果 * */ @RequestMapping("register") @PermitAll public Result register(TSysUser sysUser){ try { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("del_flag",0); queryWrapper.eq("username", sysUser.getUsername()); long count = tSysUserService.count(queryWrapper); if (count > 0){ return Result.error().message("账号已存在!"); } boolean register = tSysUserService.register(sysUser); return Result.ok().setData(register); } catch (MyException e) { return Result.error().code(e.getCode()).message(e.getMessage()); } } /** * 获取用户信息 * */ @RequestMapping("getUserInfo") @PreAuthorize("hasAnyAuthority('user:getUserInfo')") public Result getUserInfo(){ TSysUser user = getUser(); return Result.ok().setData(user); } /** * 获取当前登录用户个人中心信息 * */ @RequestMapping("getPersonalInfo") @PermitAll public Result getPersonalInfo(){ TSysUser user = getUser(); if (user == null) { return Result.error().message("用户未登录"); } user.setPassword(null); return Result.ok().setData(user); } /** * 修改密码 * */ @RequestMapping("updatePassword") @PermitAll public Result updatePassword(TSysUser tSysUser, String oldPassword, String newPassword){ try { if (StringUtils.isBlank(oldPassword) || StringUtils.isBlank(newPassword)) { return Result.error().message("旧密码和新密码不能为空"); } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("del_flag",0); queryWrapper.eq("id", tSysUser.getId()); TSysUser user = tSysUserService.getOne(queryWrapper); if (user == null) { return Result.error().message("用户不存在"); } BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); if (!bCryptPasswordEncoder.matches(oldPassword, user.getPassword())) { return Result.error().code(419).message("旧密码不正确"); } user.setPassword(bCryptPasswordEncoder.encode(newPassword)); user.setEncodeType("BCrypt"); tSysUserService.updateById(user); return Result.ok(); } catch (Exception e) { return Result.error().message("修改密码失败"); } } /** * 重置密码 * */ @RequestMapping("resetPassword") @PermitAll public Result resetPassword(TSysUser tSysUser){ try { TSysUser user = new TSysUser(); user.setId(tSysUser.getId()); BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); user.setPassword(bCryptPasswordEncoder.encode("123456")); user.setEncodeType("BCrypt"); tSysUserService.updateById(user); return Result.ok().message("密码已重置为 123456"); } catch (Exception e) { return Result.error().message("重置密码失败"); } } /** * 获取用户数据列表 * */ @RequestMapping("findPageList") @PermitAll public Result findPageList(@Param("pageNum") long pageNum, @Param("pageSize") long pageSize, TSysUser tSysUser){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("del_flag",0); queryWrapper.eq(StringUtils.isNotBlank(tSysUser.getUsername()),"username", tSysUser.getUsername()); Page page = tSysUserService.page(new Page<>(pageNum,pageSize), queryWrapper); // 填充每个用户的角色ID,用于编辑回显 if (page.getRecords() != null) { for (TSysUser user : page.getRecords()) { QueryWrapper roleWrapper = new QueryWrapper<>(); roleWrapper.eq("user_id", user.getId()); List userRoleList = tSysUserRoleMapper.selectList(roleWrapper); if (userRoleList != null && !userRoleList.isEmpty()) { List roleIdList = new ArrayList<>(); for (TSysUserRole ur : userRoleList) { roleIdList.add(String.valueOf(ur.getRoleId())); } user.setRoleIds(String.join(",", roleIdList)); } } } return Result.ok().setData(page); } /** * 获取用户列表数据 * */ @RequestMapping("add") @PermitAll public Result add(TSysUser tSysUser,String userRoleStr){ try { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("del_flag",0); queryWrapper.eq("username", tSysUser.getUsername()); long count = tSysUserService.count(queryWrapper); if (count > 0){ return Result.error().message("账号已存在!"); } boolean save = tSysUserService.save(tSysUser, userRoleStr, getUsername()); return Result.ok().setData(save); } catch (MyException e) { return Result.error().code(e.getCode()).message(e.getMessage()); } } @RequestMapping("update") @PermitAll public Result update(TSysUser tSysUser,String userRoleStr){ try { tSysUserService.updateById(tSysUser); // 更新用户角色关联 if (StringUtils.isNotBlank(userRoleStr)) { QueryWrapper delWrapper = new QueryWrapper<>(); delWrapper.eq("user_id", tSysUser.getId()); tSysUserRoleMapper.delete(delWrapper); List roleList = com.alibaba.fastjson.JSONArray.parseArray(userRoleStr, TSysUserRole.class); if (roleList != null && !roleList.isEmpty()) { for (TSysUserRole ur : roleList) { ur.setUserId(tSysUser.getId()); ur.setCreateBy(getUsername()); ur.setCreateTime(new java.util.Date()); tSysUserRoleMapper.insert(ur); } } } } catch (Exception e) { return Result.error(); } return Result.ok(); } @RequestMapping("remove") @PermitAll public Result remove(TSysUser tSysUser){ try { tSysUserService.removeById(tSysUser.getId()); } catch (Exception e) { return Result.error(); } return Result.ok(); } }