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();
}
}