electripper-v2/ruoyi-web/src/main/java/com/ruoyi/web/system/SysUserController.java

272 lines
9.5 KiB
Java
Raw Normal View History

2025-03-12 17:34:00 +08:00
package com.ruoyi.web.system;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
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.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.RestController;
2025-04-25 09:59:00 +08:00
import com.alibaba.fastjson2.JSONObject;
2025-03-12 17:34:00 +08:00
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
2025-03-13 10:15:06 +08:00
import com.ruoyi.common.core.domain.entity.Role;
import com.ruoyi.common.core.domain.entity.User;
2025-03-15 18:38:04 +08:00
import com.ruoyi.common.core.domain.vo.UserVO;
2025-03-12 17:34:00 +08:00
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.validate.ValidGroup;
import com.ruoyi.common.enums.BusinessType;
2025-04-22 12:00:46 +08:00
import com.ruoyi.common.enums.LogBizType;
2025-03-12 17:34:00 +08:00
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
2025-03-13 10:15:06 +08:00
import com.ruoyi.system.dept.domain.DeptQuery;
import com.ruoyi.system.dept.service.DeptService;
import com.ruoyi.system.post.service.PostService;
import com.ruoyi.system.role.service.RoleService;
import com.ruoyi.system.user.domain.UserQuery;
2025-03-12 17:34:00 +08:00
import com.ruoyi.system.user.service.UserAssembler;
2025-03-15 18:38:04 +08:00
import com.ruoyi.system.user.service.UserConverter;
2025-03-12 17:34:00 +08:00
import com.ruoyi.system.user.service.UserService;
2025-04-25 09:59:00 +08:00
import com.ruoyi.system.user.utils.UserUtil;
2025-03-12 17:34:00 +08:00
/**
* 用户信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController
{
@Autowired
private UserService userService;
@Autowired
2025-03-13 10:15:06 +08:00
private RoleService roleService;
2025-03-12 17:34:00 +08:00
@Autowired
2025-03-13 10:15:06 +08:00
private DeptService deptService;
2025-03-12 17:34:00 +08:00
@Autowired
2025-03-13 10:15:06 +08:00
private PostService postService;
2025-03-12 17:34:00 +08:00
@Autowired
private UserAssembler userAssembler;
2025-03-15 18:38:04 +08:00
@Autowired
private UserConverter userConverter;
2025-03-12 17:34:00 +08:00
/**
* 获取用户列表
*/
@PreAuthorize("@ss.hasPermi('system:user:list')")
@GetMapping("/list")
2025-03-13 10:15:06 +08:00
public TableDataInfo list(UserQuery query)
2025-03-12 17:34:00 +08:00
{
startPage();
2025-04-10 11:29:06 +08:00
query.setScope(true);
2025-03-13 10:15:06 +08:00
List<UserVO> list = userService.selectUserListScope(query);
2025-03-12 17:34:00 +08:00
return getDataTable(list);
}
/**
* 获取所有用户名称列表
* @return
*/
@PreAuthorize("@ss.hasPermi('system:user:list')")
@GetMapping("/listAll")
public AjaxResult listAll() {
return success(userService.selectAllUserNameList());
}
/**
* 获取用户列表ByIds
*/
@PreAuthorize("@ss.hasPermi('system:user:list')")
@PostMapping("/listByIds")
public AjaxResult list(@RequestBody List<Long> userIds)
{
2025-03-15 18:38:04 +08:00
List<UserVO> list = userService.selectByIds(userIds);
2025-03-12 17:34:00 +08:00
return success(list);
}
@Log(title = "用户管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:user:export')")
@PostMapping("/export")
2025-03-13 10:15:06 +08:00
public void export(HttpServletResponse response, UserQuery query)
2025-03-12 17:34:00 +08:00
{
2025-04-10 11:29:06 +08:00
query.setScope(true);
2025-03-12 17:34:00 +08:00
query.setExcludeUserId(1L);
2025-03-13 10:15:06 +08:00
List<UserVO> list = userService.selectUserListScope(query);
ExcelUtil<UserVO> util = new ExcelUtil<UserVO>(UserVO.class);
2025-03-12 17:34:00 +08:00
util.exportExcel(response, list, "用户数据");
}
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response)
{
2025-03-13 10:15:06 +08:00
ExcelUtil<User> util = new ExcelUtil<User>(User.class);
2025-03-12 17:34:00 +08:00
util.importTemplateExcel(response, "用户数据");
}
/**
* 根据用户编号获取详细信息
*/
@PreAuthorize("@ss.hasPermi('system:user:query')")
@GetMapping(value = { "/", "/{userId}" })
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
{
userService.checkUserDataScope(userId);
AjaxResult ajax = AjaxResult.success();
2025-03-13 10:15:06 +08:00
List<Role> roles = roleService.selectRoleAll();
ajax.put("roles", User.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
2025-03-12 17:34:00 +08:00
ajax.put("posts", postService.selectPostAll());
if (StringUtils.isNotNull(userId))
{
2025-03-13 10:29:46 +08:00
UserVO user = userService.selectUserById(userId);
2025-03-13 10:15:06 +08:00
ajax.put(AjaxResult.DATA_TAG, user);
2025-03-12 17:34:00 +08:00
ajax.put("postIds", postService.selectPostListByUserId(userId));
2025-03-13 10:15:06 +08:00
ajax.put("roleIds", user.getRoles().stream().map(Role::getRoleId).collect(Collectors.toList()));
2025-03-12 17:34:00 +08:00
}
return ajax;
}
/**
* 新增用户
*/
@PreAuthorize("@ss.hasPermi('system:user:add')")
2025-04-22 12:00:46 +08:00
@Log(title = "新增用户", businessType = BusinessType.INSERT, bizIdName = "arg0", bizType = LogBizType.USER)
2025-03-12 17:34:00 +08:00
@PostMapping
2025-03-13 10:29:46 +08:00
public AjaxResult add(@Validated(ValidGroup.Create.class) @RequestBody UserVO user) {
2025-03-15 18:38:04 +08:00
user = userConverter.toVOByCreate(user);
2025-03-12 17:34:00 +08:00
user.setCreateBy(getUsername());
2025-03-18 18:05:10 +08:00
deptService.checkDeptDataScope(user.getDeptId());
roleService.checkRoleDataScope(user.getRoleIds());
2025-03-12 17:34:00 +08:00
return toAjax(userService.insertUser(user));
}
/**
* 修改用户
*/
@PreAuthorize("@ss.hasPermi('system:user:edit')")
2025-04-22 12:00:46 +08:00
@Log(title = "修改用户", businessType = BusinessType.UPDATE, bizIdName = "arg0", bizType = LogBizType.USER)
2025-03-12 17:34:00 +08:00
@PutMapping
2025-03-13 10:29:46 +08:00
public AjaxResult edit(@Validated(ValidGroup.Update.class) @RequestBody UserVO user) {
2025-03-15 18:38:04 +08:00
user = userConverter.toVOByUpdate(user);
2025-03-12 17:34:00 +08:00
user.setUpdateBy(getUsername());
2025-03-18 18:05:10 +08:00
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
2025-03-12 17:34:00 +08:00
return toAjax(userService.updateUser(user));
}
/**
* 删除用户
*/
@PreAuthorize("@ss.hasPermi('system:user:remove')")
2025-04-22 12:00:46 +08:00
@Log(title = "删除用户", businessType = BusinessType.DELETE, bizIdName = "arg0", bizType = LogBizType.USER)
2025-03-12 17:34:00 +08:00
@DeleteMapping("/{userIds}")
public AjaxResult remove(@PathVariable Long[] userIds)
{
if (ArrayUtils.contains(userIds, getUserId()))
{
return error("当前用户不能删除");
}
return toAjax(userService.deleteUserByIds(userIds));
}
/**
* 重置密码
*/
@PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
2025-04-22 12:00:46 +08:00
@Log(title = "重置用户密码", businessType = BusinessType.UPDATE, bizIdName = "arg0", bizType = LogBizType.USER)
2025-03-12 17:34:00 +08:00
@PutMapping("/resetPwd")
2025-04-25 09:59:00 +08:00
public AjaxResult resetPwd(Long userId)
2025-03-12 17:34:00 +08:00
{
2025-04-25 09:59:00 +08:00
UserVO user = userService.selectUserById(userId);
2025-03-12 17:34:00 +08:00
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
2025-04-25 09:59:00 +08:00
String password = UserUtil.randomPassword();
User data = new User();
data.setUserId(userId);
data.setPassword(SecurityUtils.encryptPassword(password));
data.setUpdateBy(getNickName());
int rows = userService.resetPwd(data);
if (rows > 0) {
JSONObject json = new JSONObject();
json.put("password", password);
json.put("userName", user.getUserName());
return AjaxResult.success("重置密码成功", json);
}
return error("重置密码失败");
2025-03-12 17:34:00 +08:00
}
/**
* 状态修改
*/
@PreAuthorize("@ss.hasPermi('system:user:edit')")
2025-04-22 12:00:46 +08:00
@Log(title = "修改用户状态", businessType = BusinessType.UPDATE, bizIdName = "arg0", bizType = LogBizType.USER)
2025-03-12 17:34:00 +08:00
@PutMapping("/changeStatus")
2025-03-13 10:15:06 +08:00
public AjaxResult changeStatus(@RequestBody User user)
2025-03-12 17:34:00 +08:00
{
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
user.setUpdateBy(getUsername());
return toAjax(userService.updateUserStatus(user));
}
/**
* 根据用户编号获取授权角色
*/
@PreAuthorize("@ss.hasPermi('system:user:query')")
@GetMapping("/authRole/{userId}")
2025-04-22 12:00:46 +08:00
@Log(title = "获取用户授权角色", businessType = BusinessType.OTHER, bizIdName = "arg0", bizType = LogBizType.USER)
2025-03-12 17:34:00 +08:00
public AjaxResult authRole(@PathVariable("userId") Long userId)
{
AjaxResult ajax = AjaxResult.success();
2025-03-13 10:15:06 +08:00
User user = userService.selectUserById(userId);
List<Role> roles = roleService.selectRolesByUserId(userId);
2025-03-12 17:34:00 +08:00
ajax.put("user", user);
2025-03-13 10:15:06 +08:00
ajax.put("roles", User.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
2025-03-12 17:34:00 +08:00
return ajax;
}
/**
* 用户授权角色
*/
@PreAuthorize("@ss.hasPermi('system:user:edit')")
2025-04-22 12:00:46 +08:00
@Log(title = "用户授权角色", businessType = BusinessType.GRANT, bizIdName = "arg0", bizType = LogBizType.USER)
2025-03-12 17:34:00 +08:00
@PutMapping("/authRole")
public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
{
userService.checkUserDataScope(userId);
roleService.checkRoleDataScope(roleIds);
userService.insertUserAuth(userId, roleIds);
return success();
}
/**
* 获取部门树列表
*/
@PreAuthorize("@ss.hasPermi('system:user:list')")
@GetMapping("/deptTree")
2025-03-13 10:15:06 +08:00
public AjaxResult deptTree(DeptQuery dept)
2025-03-12 17:34:00 +08:00
{
return success(deptService.selectDeptTreeList(dept));
}
}