SysUserController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. package com.xunmei.system.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.xunmei.common.core.domain.R;
  4. import com.xunmei.common.core.utils.DateUtils;
  5. import com.xunmei.common.core.utils.StringUtils;
  6. import com.xunmei.common.core.web.controller.BaseController;
  7. import com.xunmei.common.core.web.domain.AjaxResult;
  8. import com.xunmei.common.core.web.page.TableDataInfo;
  9. import com.xunmei.common.log.annotation.Log;
  10. import com.xunmei.common.log.enums.BusinessType;
  11. import com.xunmei.common.security.annotation.InnerAuth;
  12. import com.xunmei.common.security.annotation.RequiresPermissions;
  13. import com.xunmei.common.security.utils.SaltHelper;
  14. import com.xunmei.common.security.utils.SecurityUtils;
  15. import com.xunmei.system.api.domain.SysRole;
  16. import com.xunmei.system.api.domain.SysUser;
  17. import com.xunmei.system.api.domain.SysUserInformation;
  18. import com.xunmei.system.api.model.LoginUser;
  19. import com.xunmei.system.domain.SysUserRole;
  20. import com.xunmei.system.domain.vo.SysUserListVo;
  21. import com.xunmei.system.domain.vo.UserRoleVo;
  22. import com.xunmei.system.service.*;
  23. import io.swagger.annotations.ApiOperation;
  24. import org.apache.commons.lang3.ArrayUtils;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import org.springframework.validation.annotation.Validated;
  28. import org.springframework.web.bind.annotation.*;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.Set;
  32. import java.util.stream.Collectors;
  33. /**
  34. * 用户信息
  35. *
  36. * @author xunmei
  37. */
  38. @RestController
  39. @RequestMapping("/user")
  40. public class SysUserController extends BaseController {
  41. @Autowired
  42. private ISysUserService userService;
  43. @Autowired
  44. private ISysRoleService roleService;
  45. @Autowired
  46. private ISysDeptService deptService;
  47. @Autowired
  48. private ISysPostService postService;
  49. @Autowired
  50. private ISysPermissionService permissionService;
  51. @Autowired
  52. private ISysConfigService configService;
  53. @Autowired
  54. private ISysUserRoleService sysUserRoleService;
  55. @Autowired
  56. private ISysUserInformationService sysUserInformationService;
  57. /**
  58. * 获取用户列表
  59. */
  60. @RequiresPermissions("system:user:list")
  61. @GetMapping("/list")
  62. public TableDataInfo<SysUser> list(SysUser user) {
  63. return userService.selectUserList(user);
  64. }
  65. @RequiresPermissions("system:user:list")
  66. @GetMapping("/dictionlist")
  67. public R<List<SysUser>> list2(SysUser user) {
  68. try {
  69. return R.ok(userService.selectSyncUserList(user));
  70. } catch (Exception e) {
  71. return R.fail(e.getMessage());
  72. }
  73. }
  74. /**
  75. * 获取当前用户信息
  76. */
  77. @InnerAuth
  78. @GetMapping("/info/{username}")
  79. public R<LoginUser> info(@PathVariable("username") String username) {
  80. SysUser sysUser = userService.selectUserByUserName(username);
  81. if (StringUtils.isNull(sysUser)) {
  82. return R.fail("用户名或密码错误");
  83. }
  84. //获取当前用户的角色数据。
  85. List<SysRole> sysRoles = roleService.selectRolesByUserId(sysUser.getId());
  86. sysUser.setRoles(sysRoles);
  87. // 角色集合
  88. Set<String> roles = permissionService.getRolePermission(sysUser);
  89. // 权限集合
  90. Set<String> permissions = permissionService.getMenuPermission(sysUser);
  91. LoginUser sysUserVo = new LoginUser();
  92. sysUserVo.setOrgId(sysUserVo.getOrgId());
  93. sysUserVo.setName(sysUserVo.getName());
  94. sysUserVo.setSysUser(sysUser);
  95. sysUserVo.setRoles(roles);
  96. sysUserVo.setPermissions(permissions);
  97. return R.ok(sysUserVo);
  98. }
  99. /**
  100. * 注册用户信息
  101. */
  102. @InnerAuth
  103. @PostMapping("/register")
  104. public R<Boolean> register(@RequestBody SysUser sysUser) {
  105. String username = sysUser.getUsername();
  106. if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) {
  107. return R.fail("当前系统没有开启注册功能!");
  108. }
  109. if (!userService.checkUserNameUnique(sysUser)) {
  110. return R.fail("保存用户'" + username + "'失败,注册账号已存在");
  111. }
  112. return R.ok(userService.registerUser(sysUser));
  113. }
  114. /**
  115. * 获取用户信息
  116. *
  117. * @return 用户信息
  118. */
  119. @GetMapping("getInfo")
  120. public AjaxResult getInfo() {
  121. SysUser user = userService.selectUserById(SecurityUtils.getUserId());
  122. // 角色集合
  123. Set<String> roles = permissionService.getRolePermission(user);
  124. // 权限集合
  125. Set<String> permissions = permissionService.getMenuPermission(user);
  126. List<UserRoleVo> userRoleVos = sysUserRoleService.selectUserRoleVoList(user.getId());
  127. AjaxResult ajax = AjaxResult.success();
  128. ajax.put("user", user);
  129. ajax.put("roles", roles);
  130. //用户角色信息
  131. ajax.put("roleList", userRoleVos);
  132. ajax.put("permissions", permissions);
  133. return ajax;
  134. }
  135. /**
  136. * 根据用户编号获取详细信息
  137. */
  138. @RequiresPermissions("system:user:query")
  139. @GetMapping(value = {"/", "/{userId}"})
  140. public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) {
  141. userService.checkUserDataScope(userId);
  142. AjaxResult ajax = AjaxResult.success();
  143. List<SysRole> roles = roleService.selectRoleAll();
  144. ajax.put("roles", roles);
  145. ajax.put("posts", null);
  146. if (StringUtils.isNotNull(userId)) {
  147. SysUserInformation informationByUserId = sysUserInformationService.getInformationByUserId(userId);
  148. if (null == informationByUserId) {
  149. informationByUserId = new SysUserInformation();
  150. }
  151. SysUser sysUser = userService.selectUserById(userId);
  152. List<SysUserRole> userRoles = sysUserRoleService.list(new QueryWrapper<SysUserRole>().eq("user_id", userId));
  153. sysUser.setRoles(roles);
  154. String sex = "男";
  155. String status = "禁用";
  156. if (null != sysUser) {
  157. if (sysUser.getGender().equals("1")) {
  158. sex = "女";
  159. }
  160. if (sysUser.getIsLock().equals("0")) {
  161. status = "启用";
  162. }
  163. }
  164. ajax.put(AjaxResult.DATA_TAG, sysUser);
  165. ajax.put("information", informationByUserId);
  166. ajax.put("postIds", null);
  167. ajax.put("roleIds", userRoles.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()));
  168. ajax.put("roleName", roleService.getRoleName(userId));
  169. ajax.put("sex", sex);
  170. ajax.put("status", status);
  171. }
  172. return ajax;
  173. }
  174. /**
  175. * 新增用户
  176. */
  177. @RequiresPermissions("system:user:add")
  178. @Log(title = "用户管理", businessType = BusinessType.INSERT)
  179. @PostMapping
  180. @Transactional(rollbackFor = Exception.class)
  181. public AjaxResult add(@Validated @RequestBody SysUser user) {
  182. if (!userService.checkUserNameUnique(user)) {
  183. return error("新增用户'" + user.getUsername() + "'失败,登录账号已存在");
  184. } else if (StringUtils.isNotEmpty(user.getPhone()) && !userService.checkPhoneUnique(user)) {
  185. return error("新增用户'" + user.getUsername() + "'失败,手机号码已存在");
  186. }
  187. user.setCreateBy(SecurityUtils.getUsername());
  188. user.setCreateTime(new Date());
  189. //isp的加密方式
  190. final String salt = SaltHelper.salt();
  191. user.setSalt(salt);
  192. user.setPassword(SaltHelper.exec(user.getPassword(), salt));
  193. user.setOriginalOrgId(user.getOrgId());
  194. userService.insertUser(user);
  195. return AjaxResult.success();
  196. }
  197. /**
  198. * 修改用户
  199. */
  200. @RequiresPermissions("system:user:edit")
  201. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  202. @PutMapping
  203. public AjaxResult edit(@Validated @RequestBody SysUser user) {
  204. userService.checkUserAllowed(user);
  205. userService.checkUserDataScope(user.getId());
  206. if (!userService.checkUserNameUnique(user)) {
  207. return error("修改用户'" + user.getUsername() + "'失败,登录账号已存在");
  208. } else if (StringUtils.isNotEmpty(user.getPhone()) && !userService.checkPhoneUnique(user)) {
  209. return error("修改用户'" + user.getUsername() + "'失败,手机号码已存在");
  210. }
  211. if (user.getRoleIds() != null && user.getRoleIds().length > 0) {
  212. sysUserRoleService.remove(new QueryWrapper<SysUserRole>().eq("user_id", user.getId()));
  213. for (Long roleId :
  214. user.getRoleIds()) {
  215. SysUserRole sysUserRole = new SysUserRole();
  216. sysUserRole.setUserId(user.getId());
  217. sysUserRole.setRoleId(roleId);
  218. sysUserRole.setCreateTime(new Date());
  219. sysUserRoleService.insertSysUserRole(sysUserRole);
  220. }
  221. }
  222. user.setUpdateBy(SecurityUtils.getUsername());
  223. return toAjax(userService.updateUser(user));
  224. }
  225. /**
  226. * 删除用户
  227. */
  228. @RequiresPermissions("system:user:remove")
  229. @Log(title = "用户管理", businessType = BusinessType.DELETE)
  230. @DeleteMapping("/{userIds}")
  231. public AjaxResult remove(@PathVariable Long[] userIds) {
  232. if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) {
  233. return error("当前用户不能删除");
  234. }
  235. return toAjax(userService.deleteUserByIds(userIds));
  236. }
  237. /**
  238. * 重置密码
  239. */
  240. @RequiresPermissions("system:user:edit")
  241. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  242. @PutMapping("/resetPwd")
  243. public AjaxResult resetPwd(@RequestBody SysUser user) {
  244. userService.checkUserAllowed(user);
  245. userService.checkUserDataScope(user.getId());
  246. final String salt = SaltHelper.salt();
  247. user.setSalt(salt);
  248. // user.setPassword(SaltHelper.exec(user.getPassword(), userService.selectUserById(user.getId()).getSalt()));
  249. user.setPassword(SaltHelper.exec(user.getPassword(), salt));
  250. user.setUpdateBy(SecurityUtils.getUsername());
  251. return toAjax(userService.resetPwd(user));
  252. }
  253. /**
  254. * 状态修改
  255. */
  256. @RequiresPermissions("system:user:edit")
  257. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  258. @PutMapping("/changeStatus")
  259. public AjaxResult changeStatus(@RequestBody SysUser user) {
  260. userService.checkUserAllowed(user);
  261. userService.checkUserDataScope(user.getId());
  262. user.setUpdateBy(SecurityUtils.getUsername());
  263. return toAjax(userService.updateUserStatus(user));
  264. }
  265. /**
  266. * 根据用户编号获取授权角色
  267. */
  268. @RequiresPermissions("system:user:query")
  269. @GetMapping("/authRole/{userId}")
  270. public AjaxResult authRole(@PathVariable("userId") Long userId) {
  271. AjaxResult ajax = AjaxResult.success();
  272. SysUser user = userService.selectUserById(userId);
  273. List<SysRole> roles = roleService.selectRolesByUserId(userId);
  274. List<SysUserRole> userRoles = sysUserRoleService.selectSysUserRoleListByUserId(userId);
  275. ajax.put("user", user);
  276. ajax.put("roles", roles);
  277. ajax.put("userRoles", userRoles);
  278. return ajax;
  279. }
  280. /**
  281. * 用户授权角色
  282. */
  283. @RequiresPermissions("system:user:edit")
  284. @Log(title = "用户管理", businessType = BusinessType.GRANT)
  285. @PutMapping("/authRole")
  286. public AjaxResult insertAuthRole(Long userId, Long[] roleIds) {
  287. userService.checkUserDataScope(userId);
  288. userService.insertUserAuth(userId, roleIds);
  289. return success();
  290. }
  291. /**
  292. * 获取用户列表
  293. */
  294. @InnerAuth
  295. @PostMapping("/sync/list")
  296. public R<List<SysUser>> syncUserList(@RequestBody SysUser user) {
  297. try {
  298. return R.ok(userService.selectSyncUserList(user));
  299. } catch (Exception e) {
  300. return R.fail(e.getMessage());
  301. }
  302. }
  303. @InnerAuth
  304. @GetMapping("/getUserById")
  305. public SysUser getUserById(Long id) {
  306. return userService.selectUserById(id);
  307. }
  308. /**
  309. * 查询机构列表
  310. */
  311. @ApiOperation(value = "批量保存同步用户数据")
  312. @InnerAuth
  313. @PostMapping("/sync/batch")
  314. public R<Boolean> batchSaveSyncSysOrgs(@RequestBody List<SysUser> sysUserList) {
  315. userService.batchSaveOrUpdate(sysUserList);
  316. return R.ok(true);
  317. }
  318. /**
  319. * 查询机构列表
  320. */
  321. @ApiOperation(value = "记录用户最后一次登录")
  322. @InnerAuth
  323. @PostMapping("/userLoginInfo")
  324. public R<Boolean> userLoginInfo(Long id, Date loginTime, String loginIp) {
  325. SysUser sysUser = userService.selectUserById(id);
  326. sysUser.setLastIp(loginIp);
  327. if (null==loginTime){
  328. loginTime= DateUtils.getNowDate();
  329. }
  330. sysUser.setLastTime(loginTime);
  331. userService.saveOrUpdate(sysUser);
  332. return R.ok(true);
  333. }
  334. @ApiOperation(value = "根据机构id查询用户")
  335. @GetMapping("/getByOrgId/{orgId}")
  336. public R<List<SysUserListVo>> getByOrgId(@PathVariable Long orgId) {
  337. List<SysUserListVo> sysUsers = userService.selectUserByOrgId(orgId);
  338. return R.ok(sysUsers);
  339. }
  340. }