UserController.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package com.genersoft.iot.vmp.vmanager.user;
  2. import com.genersoft.iot.vmp.conf.security.SecurityUtils;
  3. import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
  4. import com.genersoft.iot.vmp.service.IRoleService;
  5. import com.genersoft.iot.vmp.service.IUserService;
  6. import com.genersoft.iot.vmp.storager.dao.dto.Role;
  7. import com.genersoft.iot.vmp.storager.dao.dto.User;
  8. import com.genersoft.iot.vmp.utils.DateUtil;
  9. import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
  10. import com.github.pagehelper.PageInfo;
  11. import io.swagger.v3.oas.annotations.Operation;
  12. import io.swagger.v3.oas.annotations.Parameter;
  13. import io.swagger.v3.oas.annotations.tags.Tag;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.http.HttpStatus;
  16. import org.springframework.http.ResponseEntity;
  17. import org.springframework.security.authentication.AuthenticationManager;
  18. import org.springframework.util.DigestUtils;
  19. import org.springframework.util.StringUtils;
  20. import org.springframework.web.bind.annotation.*;
  21. import javax.security.sasl.AuthenticationException;
  22. import java.util.List;
  23. @Tag(name = "用户管理")
  24. @CrossOrigin
  25. @RestController
  26. @RequestMapping("/api/user")
  27. public class UserController {
  28. @Autowired
  29. private AuthenticationManager authenticationManager;
  30. @Autowired
  31. private IUserService userService;
  32. @Autowired
  33. private IRoleService roleService;
  34. @GetMapping("/login")
  35. @Operation(summary = "登录")
  36. @Parameter(name = "username", description = "用户名", required = true)
  37. @Parameter(name = "password", description = "密码(32位md5加密)", required = true)
  38. public WVPResult<LoginUser> login(@RequestParam String username, @RequestParam String password){
  39. LoginUser user = null;
  40. WVPResult<LoginUser> result = new WVPResult<>();
  41. try {
  42. user = SecurityUtils.login(username, password, authenticationManager);
  43. } catch (AuthenticationException e) {
  44. e.printStackTrace();
  45. result.setCode(-1);
  46. result.setMsg("fail");
  47. }
  48. if (user != null) {
  49. result.setCode(0);
  50. result.setMsg("success");
  51. result.setData(user);
  52. }else {
  53. result.setCode(-1);
  54. result.setMsg("fail");
  55. }
  56. return result;
  57. }
  58. @PostMapping("/changePassword")
  59. @Operation(summary = "修改密码")
  60. @Parameter(name = "username", description = "用户名", required = true)
  61. @Parameter(name = "oldpassword", description = "旧密码(已md5加密的密码)", required = true)
  62. @Parameter(name = "password", description = "新密码(未md5加密的密码)", required = true)
  63. public String changePassword(@RequestParam String oldPassword, @RequestParam String password){
  64. // 获取当前登录用户id
  65. LoginUser userInfo = SecurityUtils.getUserInfo();
  66. if (userInfo== null) {
  67. return "fail";
  68. }
  69. String username = userInfo.getUsername();
  70. LoginUser user = null;
  71. try {
  72. user = SecurityUtils.login(username, oldPassword, authenticationManager);
  73. if (user != null) {
  74. int userId = SecurityUtils.getUserId();
  75. boolean result = userService.changePassword(userId, DigestUtils.md5DigestAsHex(password.getBytes()));
  76. if (result) {
  77. return "success";
  78. }
  79. }
  80. } catch (AuthenticationException e) {
  81. e.printStackTrace();
  82. }
  83. return "fail";
  84. }
  85. @PostMapping("/add")
  86. @Operation(summary = "停止视频回放")
  87. @Parameter(name = "username", description = "用户名", required = true)
  88. @Parameter(name = "password", description = "密码(未md5加密的密码)", required = true)
  89. @Parameter(name = "roleId", description = "角色ID", required = true)
  90. public ResponseEntity<WVPResult<Integer>> add(@RequestParam String username,
  91. @RequestParam String password,
  92. @RequestParam Integer roleId){
  93. WVPResult<Integer> result = new WVPResult<>();
  94. if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || roleId == null) {
  95. result.setCode(-1);
  96. result.setMsg("参数不可为空");
  97. return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
  98. }
  99. // 获取当前登录用户id
  100. int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
  101. if (currenRoleId != 1) {
  102. // 只用角色id为1才可以删除和添加用户
  103. result.setCode(-1);
  104. result.setMsg("用户无权限");
  105. return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
  106. }
  107. User user = new User();
  108. user.setUsername(username);
  109. user.setPassword(DigestUtils.md5DigestAsHex(password.getBytes()));
  110. //新增用户的pushKey的生成规则为md5(时间戳+用户名)
  111. user.setPushKey(DigestUtils.md5DigestAsHex((System.currentTimeMillis()+password).getBytes()));
  112. Role role = roleService.getRoleById(roleId);
  113. if (role == null) {
  114. result.setCode(-1);
  115. result.setMsg("roleId is not found");
  116. // 角色不存在
  117. return new ResponseEntity<>(result, HttpStatus.OK);
  118. }
  119. user.setRole(role);
  120. user.setCreateTime(DateUtil.getNow());
  121. user.setUpdateTime(DateUtil.getNow());
  122. int addResult = userService.addUser(user);
  123. result.setCode(addResult > 0 ? 0 : -1);
  124. result.setMsg(addResult > 0 ? "success" : "fail");
  125. result.setData(addResult);
  126. return new ResponseEntity<>(result, HttpStatus.OK);
  127. }
  128. @DeleteMapping("/删除用户")
  129. @Operation(summary = "停止视频回放")
  130. @Parameter(name = "id", description = "用户Id", required = true)
  131. public ResponseEntity<WVPResult<String>> delete(@RequestParam Integer id){
  132. // 获取当前登录用户id
  133. int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
  134. WVPResult<String> result = new WVPResult<>();
  135. if (currenRoleId != 1) {
  136. // 只用角色id为0才可以删除和添加用户
  137. result.setCode(-1);
  138. result.setMsg("用户无权限");
  139. return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
  140. }
  141. int deleteResult = userService.deleteUser(id);
  142. result.setCode(deleteResult>0? 0 : -1);
  143. result.setMsg(deleteResult>0? "success" : "fail");
  144. return new ResponseEntity<>(result, HttpStatus.OK);
  145. }
  146. @GetMapping("/all")
  147. @Operation(summary = "查询用户")
  148. public ResponseEntity<WVPResult<List<User>>> all(){
  149. // 获取当前登录用户id
  150. List<User> allUsers = userService.getAllUsers();
  151. WVPResult<List<User>> result = new WVPResult<>();
  152. result.setCode(0);
  153. result.setMsg("success");
  154. result.setData(allUsers);
  155. return new ResponseEntity<>(result, HttpStatus.OK);
  156. }
  157. /**
  158. * 分页查询用户
  159. *
  160. * @param page 当前页
  161. * @param count 每页查询数量
  162. * @return 分页用户列表
  163. */
  164. @GetMapping("/users")
  165. @Operation(summary = "分页查询用户")
  166. @Parameter(name = "page", description = "当前页", required = true)
  167. @Parameter(name = "count", description = "每页查询数量", required = true)
  168. public PageInfo<User> users(int page, int count) {
  169. return userService.getUsers(page, count);
  170. }
  171. @RequestMapping("/changePushKey")
  172. @Operation(summary = "修改pushkey")
  173. @Parameter(name = "userId", description = "用户Id", required = true)
  174. @Parameter(name = "pushKey", description = "新的pushKey", required = true)
  175. public ResponseEntity<WVPResult<String>> changePushKey(@RequestParam Integer userId,@RequestParam String pushKey) {
  176. // 获取当前登录用户id
  177. int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
  178. WVPResult<String> result = new WVPResult<>();
  179. if (currenRoleId != 1) {
  180. // 只用角色id为0才可以删除和添加用户
  181. result.setCode(-1);
  182. result.setMsg("用户无权限");
  183. return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
  184. }
  185. int resetPushKeyResult = userService.changePushKey(userId,pushKey);
  186. result.setCode(resetPushKeyResult > 0 ? 0 : -1);
  187. result.setMsg(resetPushKeyResult > 0 ? "success" : "fail");
  188. return new ResponseEntity<>(result, HttpStatus.OK);
  189. }
  190. @PostMapping("/changePasswordForAdmin")
  191. @Operation(summary = "管理员修改普通用户密码")
  192. @Parameter(name = "adminId", description = "管理员id", required = true)
  193. @Parameter(name = "userId", description = "用户id", required = true)
  194. @Parameter(name = "password", description = "新密码(未md5加密的密码)", required = true)
  195. public String changePasswordForAdmin(@RequestParam int userId, @RequestParam String password) {
  196. // 获取当前登录用户id
  197. LoginUser userInfo = SecurityUtils.getUserInfo();
  198. if (userInfo == null) {
  199. return "fail";
  200. }
  201. Role role = userInfo.getRole();
  202. if (role != null && role.getId() == 1) {
  203. boolean result = userService.changePassword(userId, DigestUtils.md5DigestAsHex(password.getBytes()));
  204. if (result) {
  205. return "success";
  206. }
  207. }
  208. return "fail";
  209. }
  210. }