package com.ruoyi.admin.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.admin.entity.SysUser; import com.ruoyi.admin.entity.UserRole; import com.ruoyi.admin.request.PasswordRequest; import com.ruoyi.admin.request.SysUserRequest; import com.ruoyi.admin.service.SysUserService; import com.ruoyi.admin.service.UserRoleService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** *

* 用户信息表 前端控制器 *

* * @author hjl * @since 2024-06-25 */ @RestController @RequestMapping("/sysUser") @Api(tags = {"后台-权限管理-账号管理"}) public class SysUserController { @Resource private SysUserService sysUserService; @Resource private TokenService tokenService; @Resource private UserRoleService userRoleService; /** * 账号分页列表 * * @param pageNum 页码 * @param pageSize 每页显示条数 */ @RequiresPermissions("power_account") @ApiOperation(value = "账号分页查询列表", tags = {"后台-权限管理-账号管理"}) @GetMapping(value = "/page") @ApiImplicitParams({ @ApiImplicitParam(value = "账号名称", name = "nickName", dataType = "String"), @ApiImplicitParam(value = "账号", name = "account", dataType = "String"), @ApiImplicitParam(value = "所属账号", name = "roleId", dataType = "String"), @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true), @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true) }) public R> queryPageList(String nickName, String account, String roleId, @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { return R.ok(sysUserService.queryPage(nickName, account, roleId, Page.of(pageNum, pageSize))); } /** * 启用/关闭后台账号 * * @param id 后台账号id * @param enable 启用/关闭 */ @RequiresPermissions("power_enable") @ApiOperation(value = "启用/关闭后台账号", tags = {"后台-师傅管理-师傅列表管理"}) @GetMapping(value = "/enable") @ApiImplicitParams({ @ApiImplicitParam(value = "账号id", name = "id", dataType = "Integer", required = true), @ApiImplicitParam(value = "0:关闭;1:启用", name = "enable", dataType = "Integer", required = true) }) public R enable(@RequestParam Integer id, @RequestParam Integer enable) { boolean update = sysUserService.lambdaUpdate().set(SysUser::getIsEnable, enable) .eq(SysUser::getUserId, id).update(); return update ? R.ok() : R.fail(); } /** * 账号详情 * * @param id 账号id */ @RequiresPermissions("power_detail") @ApiOperation(value = "账号详情", tags = {"后台-权限管理-账号管理"}) @GetMapping(value = "/detail") @ApiImplicitParams({ @ApiImplicitParam(value = "账号id", name = "id", dataType = "Integer", required = true) }) public R detail(@RequestParam Integer id) { // 账号详情 return R.ok(sysUserService.getById(id)); } /** * 新增账号 * * @param sysUserRequest 账号信息 */ @RequiresPermissions("power_save") @ApiOperation(value = "新增账号", tags = {"后台-权限管理-账号管理"}) @PostMapping(value = "/save") public R save(@RequestBody @Validated SysUserRequest sysUserRequest) { LoginUser loginUser = tokenService.getLoginUser(); if (null == loginUser) { return R.loginExpire("登录失效!"); } SysUser user = sysUserService.lambdaQuery() .eq(SysUser::getAccount, sysUserRequest.getAccount()) .eq(SysUser::getIsDelete, 0).one(); if (null != user) { return R.fail("该账号已存在!"); } // 账号封装 SysUser sysUser = new SysUser(); sysUser.setNickName(sysUserRequest.getNickName()); sysUser.setAccount(sysUserRequest.getAccount()); // 加密密码 String password = sysUserRequest.getPassword(); BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); sysUser.setPassword(passwordEncoder.encode(password)); sysUser.setIsEnable(sysUserRequest.getIsEnable()); boolean save = sysUserService.save(sysUser); // 添加账号与角色关联 UserRole userRole = new UserRole(); userRole.setUserId(sysUser.getUserId()); userRole.setRoleId(sysUserRequest.getRoleId().longValue()); save = save && userRoleService.save(userRole); return save ? R.ok() : R.fail(); } /** * 修改账号 * * @param sysUserRequest 账号信息 */ @RequiresPermissions("power_update") @ApiOperation(value = "修改账号", tags = {"后台-权限管理-账号管理"}) @PostMapping(value = "/update") public R update(@RequestBody SysUserRequest sysUserRequest) { Long userId = sysUserRequest.getUserId(); String nickName = sysUserRequest.getNickName(); String account = sysUserRequest.getAccount(); String password = sysUserRequest.getPassword(); Integer isEnable = sysUserRequest.getIsEnable(); Integer roleId = sysUserRequest.getRoleId(); LoginUser loginUser = tokenService.getLoginUser(); if (null == loginUser) { return R.loginExpire("登录失效!"); } SysUser user = sysUserService.lambdaQuery() .eq(SysUser::getAccount, sysUserRequest.getAccount()) .eq(SysUser::getIsDelete, 0) .ne(SysUser::getUserId, sysUserRequest.getUserId()).one(); if (null != user) { return R.fail("该账号已存在!"); } // 修改账号信息 BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); LambdaUpdateChainWrapper wrapper = sysUserService.lambdaUpdate(); wrapper = StringUtils.isNotBlank(nickName) ? wrapper.set(SysUser::getNickName, nickName) : wrapper; wrapper = StringUtils.isNotBlank(account) ? wrapper.set(SysUser::getAccount, account) : wrapper; wrapper = StringUtils.isNotBlank(password) ? wrapper.set(SysUser::getPassword, passwordEncoder.encode(password)) : wrapper; wrapper = null != isEnable ? wrapper.set(SysUser::getIsEnable, isEnable) : wrapper; boolean update = wrapper.eq(SysUser::getUserId, userId).update(); // 修改账号与角色关联 update = update && userRoleService.lambdaUpdate().set(UserRole::getRoleId, roleId) .eq(UserRole::getUserId, userId).update(); return update ? R.ok() : R.fail(); } /** * 修改密码 * * @param passwordRequest 账号信息 */ @ApiOperation(value = "修改密码", tags = {"后台-权限管理-账号管理"}) @PostMapping(value = "/updatePassword") public R updatePassword(@RequestBody @Validated PasswordRequest passwordRequest) { String account = passwordRequest.getAccount(); String oldPassword = passwordRequest.getOldPassword(); String newPassword = passwordRequest.getNewPassword(); String confirmPassword = passwordRequest.getConfirmPassword(); SysUser user = sysUserService.lambdaQuery() .eq(SysUser::getAccount, account) .eq(SysUser::getIsDelete, 0).one(); if (null == user) { return R.fail("账号不存在!"); } else { if (!newPassword.equals(confirmPassword)) { return R.fail("新密码与二次确认密码不一致,请重新输入!"); } BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); if (!passwordEncoder.matches(oldPassword, user.getPassword())) { return R.fail("原密码错误,请重试!"); } // 校验通过,加密新的明文密码 String encodeNewPassword = passwordEncoder.encode(newPassword); user.setPassword(encodeNewPassword); sysUserService.updateById(user); } return R.ok(); } /** * 根据id批量删除账号 * * @param ids 账号id拼接 */ @RequiresPermissions("power_delete") @ApiOperation(value = "批量删除账号", tags = {"后台-权限管理-账号管理"}) @GetMapping(value = "/batchDelete") @ApiImplicitParams({ @ApiImplicitParam(value = "多条账号id ',' 拼接", name = "ids", dataType = "String", required = true) }) public R batchDelete(@RequestParam String ids) { List idList = Arrays.stream(ids.split(",")).collect(Collectors.toList()); List list = sysUserService.lambdaQuery().in(SysUser::getUserId, idList).list(); list.forEach(data -> data.setIsDelete(1)); // 删除账号需要删除账号所关联的菜单信息 for (String id : idList) { userRoleService.remove(new QueryWrapper().eq("user_id", id)); } return sysUserService.updateBatchById(list) ? R.ok() : R.fail(); } }