TopSysUserController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. package com.zhongzheng.controller.top;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.lang.Validator;
  4. import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
  5. import com.zhongzheng.common.annotation.Log;
  6. import com.zhongzheng.common.constant.UserConstants;
  7. import com.zhongzheng.common.core.bo.SysUserEditBo;
  8. import com.zhongzheng.common.core.controller.BaseController;
  9. import com.zhongzheng.common.core.domain.AjaxResult;
  10. import com.zhongzheng.common.core.domain.entity.TopSysUser;
  11. import com.zhongzheng.common.core.domain.model.TopLoginUser;
  12. import com.zhongzheng.common.core.page.TableDataInfo;
  13. import com.zhongzheng.common.enums.BusinessType;
  14. import com.zhongzheng.common.exception.CustomException;
  15. import com.zhongzheng.common.utils.SecurityUtils;
  16. import com.zhongzheng.common.utils.ServletUtils;
  17. import com.zhongzheng.common.utils.ToolsUtils;
  18. import com.zhongzheng.common.utils.poi.ExcelUtil;
  19. import com.zhongzheng.framework.web.service.TopTokenService;
  20. import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
  21. import com.zhongzheng.modules.top.domain.TopSysRole;
  22. import com.zhongzheng.modules.top.service.ITopSysPostService;
  23. import com.zhongzheng.modules.top.service.ITopSysRoleService;
  24. import com.zhongzheng.modules.top.service.ITopSysUserService;
  25. import io.swagger.annotations.Api;
  26. import io.swagger.annotations.ApiImplicitParam;
  27. import io.swagger.annotations.ApiOperation;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.security.access.prepost.PreAuthorize;
  30. import org.springframework.security.authentication.AuthenticationManager;
  31. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  32. import org.springframework.security.core.Authentication;
  33. import org.springframework.validation.annotation.Validated;
  34. import org.springframework.web.bind.annotation.*;
  35. import javax.annotation.Resource;
  36. import java.util.List;
  37. import java.util.stream.Collectors;
  38. /**
  39. * 用户信息
  40. *
  41. * @author zhongzheng
  42. */
  43. @Api(tags ="用户信息管理")
  44. @RestController
  45. @RequestMapping("/system/top/user")
  46. public class TopSysUserController extends BaseController
  47. {
  48. @Autowired
  49. private ITopSysUserService topSysUserService;
  50. @Autowired
  51. private ITopSysRoleService topSysRoleService;
  52. @Autowired
  53. private ITopSysPostService topSysPostService;
  54. @Autowired
  55. private TopTokenService tokenService;
  56. @Resource
  57. private AuthenticationManager authenticationManager;
  58. /**
  59. * 获取用户列表
  60. */
  61. @ApiOperation("获取用户列表")
  62. @PreAuthorize("@ss.hasPermi('system:user:list')")
  63. @GetMapping("/list")
  64. public TableDataInfo list(TopSysUser user)
  65. {
  66. startPage();
  67. List<TopSysUser> list = topSysUserService.selectUserList(user);
  68. return getDataTable(list);
  69. }
  70. @Log(title = "用户管理", businessType = BusinessType.EXPORT)
  71. @PreAuthorize("@ss.hasPermi('system:user:export')")
  72. @GetMapping("/export")
  73. public AjaxResult export(TopSysUser user)
  74. {
  75. List<TopSysUser> list = topSysUserService.selectUserList(user);
  76. ExcelUtil<TopSysUser> util = new ExcelUtil<TopSysUser>(TopSysUser.class);
  77. return util.exportExcel(list, "用户数据");
  78. }
  79. @Log(title = "用户管理", businessType = BusinessType.IMPORT)
  80. @PreAuthorize("@ss.hasPermi('system:user:import')")
  81. @PostMapping("/importData")
  82. /* public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
  83. {
  84. ExcelUtil<TopSysUser> util = new ExcelUtil<TopSysUser>(TopSysUser.class);
  85. List<TopSysUser> userList = util.importExcel(file.getInputStream());
  86. LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
  87. String operName = loginUser.getUsername();
  88. String message = topSysUserService.importUser(userList, updateSupport, operName);
  89. return AjaxResult.success(message);
  90. }*/
  91. @GetMapping("/importTemplate")
  92. public AjaxResult importTemplate()
  93. {
  94. ExcelUtil<TopSysUser> util = new ExcelUtil<TopSysUser>(TopSysUser.class);
  95. return util.importTemplateExcel("用户数据");
  96. }
  97. /**
  98. * 根据用户编号获取详细信息
  99. */
  100. @ApiOperation("获取用户详细")
  101. @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
  102. @PreAuthorize("@ss.hasPermi('system:user:query')")
  103. @GetMapping(value = { "/{userId}" })
  104. public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
  105. {
  106. AjaxResult ajax = AjaxResult.success();
  107. List<TopSysRole> roles = topSysRoleService.selectRoleAll();
  108. TopSysUser sysUser = topSysUserService.selectUserById(userId);
  109. ajax.put("roles", TopSysUser.isAdmin(sysUser.getUserName()) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
  110. ajax.put("posts", topSysPostService.selectPostAll());
  111. if (Validator.isNotNull(userId))
  112. {
  113. ajax.put(AjaxResult.DATA_TAG, topSysUserService.selectUserById(userId));
  114. ajax.put("postIds", topSysPostService.selectPostListByUserId(userId));
  115. ajax.put("roleIds", topSysRoleService.selectRoleListByUserId(userId));
  116. }
  117. return ajax;
  118. }
  119. /**
  120. * 新增用户
  121. */
  122. @ApiOperation("新增用户")
  123. @ApiOperationSupport(ignoreParameters = {"id","orderDate.id"})
  124. @PreAuthorize("@ss.hasPermi('system:user:add')")
  125. @Log(title = "用户管理", businessType = BusinessType.INSERT)
  126. @PostMapping
  127. public AjaxResult add(@Validated @RequestBody TopSysUser user)
  128. {
  129. if (UserConstants.NOT_UNIQUE.equals(topSysUserService.checkUserNameUnique(user.getUserName())))
  130. {
  131. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
  132. }
  133. else if (Validator.isNotEmpty(user.getPhonenumber())
  134. && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkPhoneUnique(user)))
  135. {
  136. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
  137. }
  138. else if (Validator.isNotEmpty(user.getEmail())
  139. && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkEmailUnique(user)))
  140. {
  141. return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  142. }
  143. user.setCreateBy(SecurityUtils.getUsername());
  144. if(!ToolsUtils.verifPwd(user.getPassword())){
  145. throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
  146. }
  147. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  148. return toAjax(topSysUserService.insertUser(user));
  149. }
  150. /**
  151. * 修改用户
  152. */
  153. @ApiOperation("更新用户")
  154. @PreAuthorize("@ss.hasPermi('system:user:edit')")
  155. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  156. @PostMapping("/edit")
  157. public AjaxResult edit(@Validated @RequestBody SysUserEditBo bo)
  158. {
  159. if (Validator.isNotEmpty(bo.getStatus())&&bo.getStatus().equals(-1)){
  160. TopSysUser user = BeanUtil.toBean(bo, TopSysUser.class);
  161. int result = topSysUserService.updateUser(user);
  162. return toAjax(result);
  163. }
  164. TopSysUser user = BeanUtil.toBean(bo, TopSysUser.class);
  165. topSysUserService.checkUserAllowed(user);
  166. TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
  167. if(!loginUser.getUser().isAdmin()&& !loginUser.getUser().getUserId().equals(user.getUserId())){
  168. return AjaxResult.error("您无权限修改本信息");
  169. }
  170. if (Validator.isNotEmpty(user.getPhonenumber())
  171. && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkPhoneUnique(user)))
  172. {
  173. return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
  174. }
  175. else if (Validator.isNotEmpty(user.getEmail())
  176. && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkEmailUnique(user)))
  177. {
  178. return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  179. }
  180. if(Validator.isNotEmpty(user.getPassword())){
  181. //重置密码
  182. if(!loginUser.getUser().isAdmin()){
  183. //普通用户需传入旧密码修改
  184. // 旧密码用户验证
  185. Authentication authentication = null;
  186. try
  187. {
  188. // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
  189. authentication = authenticationManager
  190. .authenticate(new UsernamePasswordAuthenticationToken(loginUser.getUser().getUserName(), bo.getOldPassword()));
  191. }
  192. catch (Exception e)
  193. {
  194. return AjaxResult.error("旧密码错误");
  195. }
  196. }
  197. if(!ToolsUtils.verifPwd(user.getPassword())){
  198. throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
  199. }
  200. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  201. }
  202. user.setUpdateBy(SecurityUtils.getUsername());
  203. int result = topSysUserService.updateUser(user);
  204. if(result>0){
  205. TopSysUser newUser = topSysUserService.selectUserByUserName(loginUser.getUser().getUserName());
  206. //同个用户ID则更新用户信息,admin操作其他用户则不更新
  207. if(newUser.getUserId().equals(loginUser.getUser().getUserId())){
  208. // 更新缓存用户
  209. loginUser.setUser(newUser);
  210. }
  211. tokenService.setLoginUser(loginUser);
  212. }
  213. return toAjax(result);
  214. }
  215. /**
  216. * 删除用户
  217. */
  218. /* @ApiOperation("删除用户信息")
  219. @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
  220. @PreAuthorize("@ss.hasPermi('system:user:remove')")
  221. @Log(title = "用户管理", businessType = BusinessType.DELETE)
  222. @DeleteMapping("/{userIds}")
  223. public AjaxResult remove(@PathVariable Long[] userIds)
  224. {
  225. return toAjax(topSysUserService.deleteUserByIds(userIds));
  226. }*/
  227. /**
  228. * 重置密码
  229. */
  230. /* @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
  231. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  232. @PostMapping("/resetPwd")
  233. public AjaxResult resetPwd(@RequestBody TopSysUser user)
  234. {
  235. topSysUserService.checkUserAllowed(user);
  236. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  237. user.setUpdateBy(SecurityUtils.getUsername());
  238. return toAjax(topSysUserService.resetPwd(user));
  239. }*/
  240. /**
  241. * 状态修改
  242. */
  243. @PreAuthorize("@ss.hasPermi('system:user:edit')")
  244. @Log(title = "用户管理", businessType = BusinessType.UPDATE)
  245. @PutMapping("/changeStatus")
  246. public AjaxResult changeStatus(@RequestBody TopSysUser user)
  247. {
  248. topSysUserService.checkUserAllowed(user);
  249. user.setUpdateBy(SecurityUtils.getUsername());
  250. return toAjax(topSysUserService.updateUserStatus(user));
  251. }
  252. /**
  253. * 业务层次获取用户列表
  254. */
  255. @ApiOperation("业务层次获取用户列表")
  256. @PreAuthorize("@ss.hasPermi('system:user:list')")
  257. @GetMapping("/businessPeopleList")
  258. public TableDataInfo queryBusinessPeopleList(CourseBusinessQueryBo bo)
  259. {
  260. startPage();
  261. List<TopSysUser> list = topSysUserService.queryBusinessPeopleList(bo);
  262. return getDataTable(list);
  263. }
  264. }