SysUserController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. package com.boman.system.controller;
  2. import java.io.IOException;
  3. import java.util.List;
  4. import java.util.Set;
  5. import java.util.stream.Collectors;
  6. import javax.servlet.http.HttpServletResponse;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.boman.common.core.utils.obj.ObjectUtils;
  10. import com.boman.domain.SysDept;
  11. import com.boman.system.service.*;
  12. import com.google.common.collect.Lists;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.validation.annotation.Validated;
  17. import org.springframework.web.bind.annotation.DeleteMapping;
  18. import org.springframework.web.bind.annotation.GetMapping;
  19. import org.springframework.web.bind.annotation.PathVariable;
  20. import org.springframework.web.bind.annotation.PostMapping;
  21. import org.springframework.web.bind.annotation.PutMapping;
  22. import org.springframework.web.bind.annotation.RequestBody;
  23. import org.springframework.web.bind.annotation.RequestMapping;
  24. import org.springframework.web.bind.annotation.RestController;
  25. import org.springframework.web.multipart.MultipartFile;
  26. import com.boman.domain.constant.UserConstants;
  27. import com.boman.domain.dto.R;
  28. import com.boman.common.core.utils.SecurityUtils;
  29. import com.boman.common.core.utils.StringUtils;
  30. import com.boman.common.core.utils.poi.ExcelUtil;
  31. import com.boman.common.core.web.controller.BaseController;
  32. import com.boman.domain.dto.AjaxResult;
  33. import com.boman.common.core.web.page.TableDataInfo;
  34. import com.boman.common.log.annotation.Log;
  35. import com.boman.common.log.enums.BusinessType;
  36. import com.boman.common.security.annotation.PreAuthorize;
  37. import com.boman.domain.SysRole;
  38. import com.boman.domain.SysUser;
  39. import com.boman.system.api.model.LoginUser;
  40. /**
  41. * 用户信息
  42. *
  43. * @author ruoyi
  44. */
  45. @RestController
  46. @RequestMapping("/user")
  47. public class SysUserController extends BaseController
  48. {
  49. private static final Logger LOGGER = LoggerFactory.getLogger(SysUserController.class);
  50. @Autowired
  51. private ISysUserService userService;
  52. @Autowired
  53. private ISysRoleService roleService;
  54. @Autowired
  55. private ISysPostService postService;
  56. @Autowired
  57. private ISysPermissionService permissionService;
  58. @Autowired
  59. private ISysDeptService deptService;
  60. /**
  61. * 获取用户列表
  62. */
  63. @PreAuthorize(hasPermi = "system:user:list")
  64. @GetMapping("/list")
  65. public TableDataInfo list(SysUser user)
  66. {
  67. startPage();
  68. List<SysUser> list = userService.selectUserList(user);
  69. return getDataTable(list);
  70. }
  71. @Log(title = "修改用户的小程序唯一标识", businessType = BusinessType.UPDATE)
  72. @PostMapping("/updateUnionId")
  73. public AjaxResult updateUnionId(@RequestBody SysUser sysUser) {
  74. return userService.updateUnionId(sysUser);
  75. }
  76. @Log(title = "用户管理", businessType = BusinessType.EXPORT)
  77. @PreAuthorize(hasPermi = "system:user:export")
  78. @PostMapping("/export")
  79. public void export(HttpServletResponse response, SysUser user) throws IOException
  80. {
  81. List<SysUser> list = userService.selectUserList(user);
  82. ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
  83. util.exportExcel(response, list, "用户数据");
  84. }
  85. @Log(title = "用户管理", businessType = BusinessType.IMPORT)
  86. @PreAuthorize(hasPermi = "system:user:import")
  87. @PostMapping("/importData")
  88. public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
  89. {
  90. ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
  91. List<SysUser> userList = util.importExcel(file.getInputStream());
  92. String operName = SecurityUtils.getUsername();
  93. String message = userService.importUser(userList, updateSupport, operName);
  94. return AjaxResult.success(message);
  95. }
  96. @PostMapping("/importTemplate")
  97. public void importTemplate(HttpServletResponse response) throws IOException
  98. {
  99. ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
  100. util.importTemplateExcel(response, "用户数据");
  101. }
  102. /**
  103. * 获取当前用户信息
  104. */
  105. @GetMapping("/info/{username}")
  106. public R<LoginUser> info(@PathVariable("username") String username) {
  107. SysUser sysUser = userService.selectUserByUserName(username);
  108. if (StringUtils.isNull(sysUser)) {
  109. return R.fail("用户名或密码错误");
  110. }
  111. LoginUser sysUserVo = packPermDeptRoles(sysUser);
  112. return R.ok(sysUserVo);
  113. }
  114. /**
  115. * 获取当前用户信息
  116. */
  117. @PostMapping("/packInfo")
  118. public LoginUser packInfo(@RequestBody SysUser sysUser) {
  119. return packPermDeptRoles(sysUser);
  120. }
  121. private LoginUser packPermDeptRoles(SysUser sysUser) {
  122. LoginUser sysUserVo = new LoginUser();
  123. // 角色集合
  124. Set<String> roles = permissionService.getRolePermission(sysUser.getId());
  125. // 权限集合
  126. Set<String> permissions = permissionService.getMenuPermission(sysUser.getId());
  127. // todo
  128. /* if (ObjectUtils.isNotEmpty(sysUser.getDeptId())) {
  129. // 当前人所在部门和下级部门的deptIdList
  130. List<SysDept> sysDepts = deptService.listChildrenDepts(sysUser.getDeptId());
  131. if (ObjectUtils.isNotEmpty(sysDepts)) {
  132. // 所有部门
  133. List<Long> childrenDeptIds = ObjectUtils.map(sysDepts, SysDept::getId);
  134. if (ObjectUtils.isNotEmpty(childrenDeptIds)) {
  135. List<SysUser> users = userService.listByDeptId(childrenDeptIds);
  136. sysUserVo.setDeptUserIds(getUserIds(users));
  137. // 去除本部门后的所有子部门
  138. List<Long> child = ObjectUtils.filter(childrenDeptIds, deptId -> !deptId.equals(sysUser.getDeptId()));
  139. List<SysUser> childUsers = userService.listByDeptId(child);
  140. sysUserVo.setSubDeptUserIds(getUserIds(childUsers));
  141. }
  142. }
  143. }*/
  144. sysUserVo.setSysUser(sysUser);
  145. sysUserVo.setRoles(roles);
  146. sysUserVo.setPermissions(permissions);
  147. return sysUserVo;
  148. }
  149. private List<Long> getUserIds(List<SysUser> users) {
  150. List<Long> userIdList = Lists.newArrayListWithCapacity(0);
  151. if (ObjectUtils.isNotEmpty(users)) {
  152. userIdList = ObjectUtils.map(users, SysUser::getId);
  153. }
  154. return userIdList;
  155. }
  156. /**
  157. * 获取用户信息
  158. *
  159. * @return 用户信息
  160. */
  161. @GetMapping("getInfo")
  162. public AjaxResult getInfo()
  163. {
  164. Long id = SecurityUtils.getUserId();
  165. // 角色集合
  166. Set<String> roles = permissionService.getRolePermission(id);
  167. // 权限集合
  168. Set<String> permissions = permissionService.getMenuPermission(id);
  169. AjaxResult ajax = AjaxResult.success();
  170. ajax.put("user", userService.selectUserById(id));
  171. ajax.put("roles", roles);
  172. ajax.put("permissions", permissions);
  173. return ajax;
  174. }
  175. /**
  176. * 根据用户编号获取详细信息
  177. */
  178. @PreAuthorize(hasPermi = "system:user:query")
  179. @GetMapping(value = { "/", "/{id}" })
  180. public AjaxResult getInfo(@PathVariable(value = "id", required = false) Long id)
  181. {
  182. AjaxResult ajax = AjaxResult.success();
  183. List<SysRole> roles = roleService.selectRoleAll();
  184. ajax.put("roles", SysUser.isAdmin(id) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
  185. ajax.put("posts", postService.selectPostAll());
  186. if (StringUtils.isNotNull(id))
  187. {
  188. ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(id));
  189. ajax.put("postIds", postService.selectPostListById(id));
  190. ajax.put("roleIds", roleService.selectRoleListById(id));
  191. }
  192. return ajax;
  193. }
  194. /**
  195. * 新增用户
  196. */
  197. @PreAuthorize(hasPermi = "system:user:add")
  198. @Log(title = "用户管理", businessType = BusinessType.INSERT)
  199. @PostMapping
  200. public AjaxResult add(@Validated @RequestBody SysUser user)
  201. {
  202. if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName())))
  203. {
  204. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
  205. }
  206. else if (StringUtils.isNotEmpty(user.getPhonenumber())
  207. && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
  208. {
  209. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
  210. }
  211. else if (StringUtils.isNotEmpty(user.getEmail())
  212. && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
  213. {
  214. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  215. }
  216. user.setCreateBy(SecurityUtils.getUsername());
  217. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  218. return toAjax(userService.insertUser(user));
  219. }
  220. /**
  221. * 修改用户
  222. */
  223. @PreAuthorize(hasPermi = "system:user:edit")
  224. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  225. @PutMapping
  226. public AjaxResult edit(@Validated @RequestBody SysUser user)
  227. {
  228. //userService.checkUserAllowed(user);
  229. if (StringUtils.isNotEmpty(user.getPhonenumber())
  230. && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
  231. {
  232. return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
  233. }
  234. else if (StringUtils.isNotEmpty(user.getEmail())
  235. && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
  236. {
  237. return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  238. }
  239. user.setUpdateBy(SecurityUtils.getUsername());
  240. return toAjax(userService.updateUser(user));
  241. }
  242. /**
  243. * 删除用户
  244. */
  245. @PreAuthorize(hasPermi = "system:user:remove")
  246. @Log(title = "用户管理", businessType = BusinessType.DELETE)
  247. @DeleteMapping("/{ids}")
  248. public AjaxResult remove(@PathVariable Long[] ids)
  249. {
  250. return toAjax(userService.deleteUserByIds(ids));
  251. }
  252. /**
  253. * 重置密码
  254. */
  255. @PreAuthorize(hasPermi = "system:user:edit")
  256. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  257. @PutMapping("/resetPwd")
  258. public AjaxResult resetPwd(@RequestBody SysUser user)
  259. {
  260. //userService.checkUserAllowed(user);
  261. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  262. user.setUpdateBy(SecurityUtils.getUsername());
  263. return toAjax(userService.resetPwd(user));
  264. }
  265. /**
  266. * 状态修改
  267. */
  268. @PreAuthorize(hasPermi = "system:user:edit")
  269. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  270. @PutMapping("/changeStatus")
  271. public AjaxResult changeStatus(@RequestBody SysUser user)
  272. {
  273. userService.checkUserAllowed(user);
  274. user.setUpdateBy(SecurityUtils.getUsername());
  275. return toAjax(userService.updateUserStatus(user));
  276. }
  277. /**
  278. * 部门下所有人
  279. */
  280. // @PreAuthorize(hasPermi = "system:user:edit")
  281. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  282. @PostMapping("/listByDeptId")
  283. public List<SysUser> listByDeptId(@RequestBody List<Long> deptIdList) {
  284. return userService.listByDeptId(deptIdList);
  285. }
  286. /**
  287. * 为用户档案定制新增接口
  288. * @param result 结果
  289. * @return
  290. */
  291. @PostMapping("/addUser")
  292. public void addUser(@Validated @RequestBody List<JSONObject> result) {
  293. userService.addUser(result);
  294. }
  295. /**
  296. * 获取全部用户列表
  297. */
  298. @GetMapping("/userListAll")
  299. public List<SysUser> selectUserListAll()
  300. {
  301. return userService.selectUserListAll();
  302. }
  303. /**
  304. * 功能描述: queryByOpenId
  305. *
  306. * @param openId openId
  307. * @return com.boman.domain.SysUser
  308. */
  309. @GetMapping("/queryByOpenId/{openId}")
  310. public SysUser queryByOpenId(@PathVariable("openId") String openId){
  311. return userService.queryByOpenId(openId);
  312. }
  313. /**
  314. * 功能描述: getByPhone
  315. *
  316. * @param phone phone
  317. * @return com.boman.domain.SysUser
  318. */
  319. @GetMapping("/getByPhone/{phone}")
  320. public SysUser getByPhone(@PathVariable("phone") String phone) {
  321. SysUser sysUser = userService.getByPhone(phone);
  322. LOGGER.info("getByPhone: 请求结果:{}",JSON.toJSONString(sysUser));
  323. return ObjectUtils.requireNonNull(sysUser, String.format("手机号 [%s] 对应的用户不存在", phone));
  324. }
  325. }