SysUserController.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package com.ruoyi.web.controller.system;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.ArrayUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.ruoyi.common.annotation.Log;
  6. import com.ruoyi.common.constant.UserConstants;
  7. import com.ruoyi.common.core.controller.BaseController;
  8. import com.ruoyi.common.core.domain.AjaxResult;
  9. import com.ruoyi.common.core.domain.entity.SysDept;
  10. import com.ruoyi.common.core.domain.entity.SysRole;
  11. import com.ruoyi.common.core.domain.entity.SysUser;
  12. import com.ruoyi.common.core.page.TableDataInfo;
  13. import com.ruoyi.common.enums.BusinessType;
  14. import com.ruoyi.common.utils.SecurityUtils;
  15. import com.ruoyi.common.utils.StringUtils;
  16. import com.ruoyi.common.utils.poi.ExcelUtil;
  17. import com.ruoyi.system.domain.vo.SysUserExportVo;
  18. import com.ruoyi.system.domain.vo.SysUserImportVo;
  19. import com.ruoyi.system.service.ISysPostService;
  20. import com.ruoyi.system.service.ISysRoleService;
  21. import com.ruoyi.system.service.ISysUserService;
  22. import io.swagger.annotations.Api;
  23. import io.swagger.annotations.ApiImplicitParam;
  24. import io.swagger.annotations.ApiImplicitParams;
  25. import io.swagger.annotations.ApiOperation;
  26. import lombok.RequiredArgsConstructor;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.security.access.prepost.PreAuthorize;
  29. import org.springframework.validation.annotation.Validated;
  30. import org.springframework.web.bind.annotation.*;
  31. import org.springframework.web.multipart.MultipartFile;
  32. import javax.servlet.http.HttpServletResponse;
  33. import java.util.ArrayList;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37. import java.util.stream.Collectors;
  38. /**
  39. * 用户信息
  40. *
  41. * @author Lion Li
  42. */
  43. @Validated
  44. @Api(value = "用户信息控制器", tags = {"用户信息管理"})
  45. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  46. @RestController
  47. @RequestMapping("/system/user")
  48. public class SysUserController extends BaseController {
  49. private final ISysUserService userService;
  50. private final ISysRoleService roleService;
  51. private final ISysPostService postService;
  52. /**
  53. * 获取用户列表
  54. */
  55. @ApiOperation("获取用户列表")
  56. @PreAuthorize("@ss.hasPermi('system:user:list')")
  57. @GetMapping("/list")
  58. public TableDataInfo<SysUser> list(SysUser user) {
  59. return userService.selectPageUserList(user);
  60. }
  61. @ApiOperation("导出用户列表")
  62. @Log(title = "用户管理", businessType = BusinessType.EXPORT)
  63. @PreAuthorize("@ss.hasPermi('system:user:export')")
  64. @GetMapping("/export")
  65. public void export(SysUser user, HttpServletResponse response) {
  66. List<SysUser> list = userService.selectUserList(user);
  67. List<SysUserExportVo> listVo = BeanUtil.copyToList(list, SysUserExportVo.class);
  68. for (int i = 0; i < list.size(); i++) {
  69. SysDept dept = list.get(i).getDept();
  70. SysUserExportVo vo = listVo.get(i);
  71. if (ObjectUtil.isNotEmpty(dept)) {
  72. vo.setDeptName(dept.getDeptName());
  73. vo.setLeader(dept.getLeader());
  74. }
  75. }
  76. ExcelUtil.exportExcel(listVo, "用户数据", SysUserExportVo.class, response);
  77. }
  78. @ApiOperation("导入用户列表")
  79. @ApiImplicitParams({
  80. @ApiImplicitParam(name = "file", value = "导入文件", dataType = "java.io.File", required = true),
  81. })
  82. @Log(title = "用户管理", businessType = BusinessType.IMPORT)
  83. @PreAuthorize("@ss.hasPermi('system:user:import')")
  84. @PostMapping("/importData")
  85. public AjaxResult<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
  86. List<SysUserImportVo> userListVo = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class);
  87. List<SysUser> userList = BeanUtil.copyToList(userListVo, SysUser.class);
  88. String operName = getUsername();
  89. String message = userService.importUser(userList, updateSupport, operName);
  90. return AjaxResult.success(message);
  91. }
  92. @ApiOperation("下载导入模板")
  93. @GetMapping("/importTemplate")
  94. public void importTemplate(HttpServletResponse response) {
  95. ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", SysUserImportVo.class, response);
  96. }
  97. /**
  98. * 根据用户编号获取详细信息
  99. */
  100. @ApiOperation("根据用户编号获取详细信息")
  101. @PreAuthorize("@ss.hasPermi('system:user:query')")
  102. @GetMapping(value = {"/", "/{userId}"})
  103. public AjaxResult<Map<String, Object>> getInfo(@PathVariable(value = "userId", required = false) Long userId) {
  104. userService.checkUserDataScope(userId);
  105. Map<String, Object> ajax = new HashMap<>();
  106. List<SysRole> roles = roleService.selectRoleAll();
  107. ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
  108. ajax.put("posts", postService.selectPostAll());
  109. if (StringUtils.isNotNull(userId)) {
  110. ajax.put("user", userService.selectUserById(userId));
  111. ajax.put("postIds", postService.selectPostListByUserId(userId));
  112. ajax.put("roleIds", roleService.selectRoleListByUserId(userId));
  113. }
  114. return AjaxResult.success(ajax);
  115. }
  116. /**
  117. * 新增用户
  118. */
  119. @ApiOperation("新增用户")
  120. @PreAuthorize("@ss.hasPermi('system:user:add')")
  121. @Log(title = "用户管理", businessType = BusinessType.INSERT)
  122. @PostMapping
  123. public AjaxResult<Void> add(@Validated @RequestBody SysUser user) {
  124. if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) {
  125. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
  126. } else if (StringUtils.isNotEmpty(user.getPhonenumber())
  127. && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
  128. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
  129. } else if (StringUtils.isNotEmpty(user.getEmail())
  130. && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
  131. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  132. }
  133. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  134. return toAjax(userService.insertUser(user));
  135. }
  136. /**
  137. * 修改用户
  138. */
  139. @ApiOperation("修改用户")
  140. @PreAuthorize("@ss.hasPermi('system:user:edit')")
  141. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  142. @PutMapping
  143. public AjaxResult<Void> edit(@Validated @RequestBody SysUser user) {
  144. userService.checkUserAllowed(user);
  145. if (StringUtils.isNotEmpty(user.getPhonenumber())
  146. && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
  147. return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
  148. } else if (StringUtils.isNotEmpty(user.getEmail())
  149. && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
  150. return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  151. }
  152. return toAjax(userService.updateUser(user));
  153. }
  154. /**
  155. * 删除用户
  156. */
  157. @ApiOperation("删除用户")
  158. @PreAuthorize("@ss.hasPermi('system:user:remove')")
  159. @Log(title = "用户管理", businessType = BusinessType.DELETE)
  160. @DeleteMapping("/{userIds}")
  161. public AjaxResult<Void> remove(@PathVariable Long[] userIds) {
  162. if (ArrayUtil.contains(userIds, getUserId())) {
  163. return error("当前用户不能删除");
  164. }
  165. return toAjax(userService.deleteUserByIds(userIds));
  166. }
  167. /**
  168. * 重置密码
  169. */
  170. @ApiOperation("重置密码")
  171. @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
  172. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  173. @PutMapping("/resetPwd")
  174. public AjaxResult<Void> resetPwd(@RequestBody SysUser user) {
  175. userService.checkUserAllowed(user);
  176. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  177. return toAjax(userService.resetPwd(user));
  178. }
  179. /**
  180. * 状态修改
  181. */
  182. @ApiOperation("状态修改")
  183. @PreAuthorize("@ss.hasPermi('system:user:edit')")
  184. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  185. @PutMapping("/changeStatus")
  186. public AjaxResult<Void> changeStatus(@RequestBody SysUser user) {
  187. userService.checkUserAllowed(user);
  188. return toAjax(userService.updateUserStatus(user));
  189. }
  190. /**
  191. * 根据用户编号获取授权角色
  192. */
  193. @ApiOperation("根据用户编号获取授权角色")
  194. @PreAuthorize("@ss.hasPermi('system:user:query')")
  195. @GetMapping("/authRole/{userId}")
  196. public AjaxResult<Map<String, Object>> authRole(@PathVariable("userId") Long userId) {
  197. SysUser user = userService.selectUserById(userId);
  198. List<SysRole> roles = roleService.selectRolesByUserId(userId);
  199. Map<String, Object> ajax = new HashMap<>();
  200. ajax.put("user", user);
  201. ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
  202. return AjaxResult.success(ajax);
  203. }
  204. /**
  205. * 用户授权角色
  206. */
  207. @ApiOperation("用户授权角色")
  208. @PreAuthorize("@ss.hasPermi('system:user:edit')")
  209. @Log(title = "用户管理", businessType = BusinessType.GRANT)
  210. @PutMapping("/authRole")
  211. public AjaxResult<Void> insertAuthRole(Long userId, Long[] roleIds) {
  212. userService.insertUserAuth(userId, roleIds);
  213. return success();
  214. }
  215. }