SysUserController.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807
  1. package com.jiayue.ssi.controller;
  2. import cn.hutool.core.lang.Validator;
  3. import cn.hutool.core.util.IdcardUtil;
  4. import cn.hutool.core.util.NumberUtil;
  5. import cn.hutool.crypto.SmUtil;
  6. import cn.hutool.json.JSONUtil;
  7. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.jiayue.ssi.annotation.AgainVerify;
  10. import com.jiayue.ssi.annotation.OperateLog;
  11. import com.jiayue.ssi.annotation.PreventReplay;
  12. import com.jiayue.ssi.backenum.ApproveOperaterEnum;
  13. import com.jiayue.ssi.backenum.ApproveStatusEnum;
  14. import com.jiayue.ssi.backenum.AuditType;
  15. import com.jiayue.ssi.backenum.BusinessType;
  16. import com.jiayue.ssi.config.SendMailUtil;
  17. import com.jiayue.ssi.constant.ApproveConstants;
  18. import com.jiayue.ssi.constant.CacheConstants;
  19. import com.jiayue.ssi.constant.CustomException;
  20. import com.jiayue.ssi.constant.SecretKeyConstants;
  21. import com.jiayue.ssi.entity.*;
  22. import com.jiayue.ssi.service.*;
  23. import com.jiayue.ssi.service.impl.SysPermissionService;
  24. import com.jiayue.ssi.util.*;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.security.access.prepost.PreAuthorize;
  29. import org.springframework.web.bind.annotation.*;
  30. import java.util.*;
  31. import java.util.stream.Collectors;
  32. /**
  33. * 用户信息接口
  34. *
  35. * @author xsl
  36. * @since 2023/03/13
  37. */
  38. @RestController
  39. @RequestMapping("/sysUserController")
  40. @Slf4j
  41. public class SysUserController {
  42. @Autowired
  43. SysUserService sysUserService;
  44. @Autowired
  45. SendMailUtil sendMailUtil;
  46. @Autowired
  47. SysPermissionService sysPermissionService;
  48. @Autowired
  49. SysUserRoleService sysUserRoleService;
  50. @Autowired
  51. SysApproveService sysApproveService;
  52. @Autowired
  53. SysRoleService sysRoleService;
  54. @Autowired
  55. SysPolicyService sysPolicyService;
  56. /**
  57. * 获取用户分页信息
  58. *
  59. * @return 用户信息
  60. */
  61. @GetMapping(value = "/getAll")
  62. @PreAuthorize("@ss.hasPermi('system:user:list')")
  63. @OperateLog(title = "用户管理", businessType = BusinessType.QUERY, auditType = AuditType.SYS,operdesc = "用户查询")
  64. @PreventReplay
  65. public ResponseVO getAll(String username, String phonenumber,
  66. String status) throws CustomException {
  67. try {
  68. if (StringUtils.isNotEmpty(username)) {
  69. if (username.length() > 20) {
  70. return ResponseVO.fail("用户账号长度不能超过20个字符!");
  71. }
  72. }
  73. if (StringUtils.isNotEmpty(phonenumber)) {
  74. if (phonenumber.length() > 11) {
  75. return ResponseVO.fail("手机号码长度不能超过11个字符!");
  76. }
  77. }
  78. // 查询全部
  79. List<SysUser> sysUserList = sysUserService.queryAllUserByDecrypt();
  80. // 根据查询条件过滤结果
  81. if (StringUtils.isNotEmpty(username)) {
  82. sysUserList = sysUserList.stream().filter(user -> username.equals(user.getUsername())).collect(Collectors.toList());
  83. }
  84. if (StringUtils.isNotEmpty(phonenumber)) {
  85. sysUserList = sysUserList.stream().filter(user -> phonenumber.equals(user.getPhonenumber())).collect(Collectors.toList());
  86. }
  87. if (StringUtils.isNotEmpty(status)) {
  88. sysUserList = sysUserList.stream().filter(user -> status.equals(user.getStatus())).collect(Collectors.toList());
  89. }
  90. SysRole sysRole = sysRoleService.selectRoleListByUserId();
  91. if ("YWGL".equals(sysRole.getRoleKey())){
  92. // 业务管理员员
  93. sysUserList = sysUserList.stream().filter(user -> "1".equals(user.getUsertype())).collect(Collectors.toList());
  94. }
  95. return ResponseVO.success(sysUserList);
  96. } catch (Exception e) {
  97. throw new CustomException("获取所有用户异常", e);
  98. }
  99. }
  100. /**
  101. * 获取当前用户信息
  102. *
  103. * @return 用户信息
  104. */
  105. @GetMapping(value = "/getCurrentUser")
  106. public ResponseVO getCurrentUser() throws CustomException {
  107. try {
  108. SysUser sysUser = SecurityContextUtil.getSysUser();
  109. // 权限集合
  110. Set<String> permissions = sysPermissionService.getMenuPermission(sysUser.getId());
  111. Map<String, Object> map = new HashMap<>();
  112. sysUser.setMailbox(SM2CryptUtils.decrypt(sysUser.getMailbox(), SecretKeyConstants.SERVER_PRIVATE_KEY));
  113. sysUser.setPhonenumber(SM2CryptUtils.decrypt(sysUser.getPhonenumber(), SecretKeyConstants.SERVER_PRIVATE_KEY));
  114. sysUser.setNickname(SM2CryptUtils.decrypt(sysUser.getNickname(), SecretKeyConstants.SERVER_PRIVATE_KEY));
  115. map.put("sysUser", sysUser);
  116. map.put("permissions", permissions);
  117. return ResponseVO.success(map);
  118. } catch (Exception e) {
  119. throw new CustomException("获取当前用户异常", e);
  120. }
  121. }
  122. /**
  123. * 新增用户
  124. */
  125. @PostMapping(value = "/addUser")
  126. @OperateLog(title = "用户管理", businessType = BusinessType.INSERT, auditType = AuditType.SYS,operdesc = "新增用户")
  127. @PreAuthorize("@ss.hasPermi('system:user:add')")
  128. @PreventReplay
  129. public ResponseVO addUser(@RequestBody SysUser user) throws CustomException {
  130. try {
  131. String username="";
  132. SysApprove sysApprove = new SysApprove();
  133. if (StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getUsername().trim())) {
  134. return ResponseVO.fail("用户账号不能为空!");
  135. }
  136. else {
  137. username = user.getUsername().trim();
  138. if (username.contains(" ")){
  139. return ResponseVO.fail("账号中不能含有空格!");
  140. }
  141. String regExp = "^[^0-9][\\w_]{4,19}$";
  142. if (!username.matches(regExp)) {
  143. return ResponseVO.fail("用户账号长度必须是5-20位,只能包含字母、数字和下划线,不能数字开头!");
  144. }
  145. sysApprove.setUsername(username);
  146. }
  147. if (!IdcardUtil.isValidCard(user.getIdcard())) {
  148. return ResponseVO.fail("身份证无效!");
  149. }
  150. // sm2加密身份证
  151. sysApprove.setIdcard(SM2CryptUtils.encrypt(user.getIdcard(), SecretKeyConstants.SERVER_PUBLIC_KEY));
  152. if (StringUtils.isEmpty(user.getPhonenumber())) {
  153. return ResponseVO.fail("手机号码不能为空!");
  154. } else if (!Validator.isMobile(user.getPhonenumber())) {
  155. return ResponseVO.fail("请输入正确的手机号码!");
  156. }
  157. // 加密手机号
  158. sysApprove.setPhonenumber(SM2CryptUtils.encrypt(user.getPhonenumber(), SecretKeyConstants.SERVER_PUBLIC_KEY));
  159. if (StringUtils.isEmpty(user.getNickname()) || StringUtils.isEmpty(user.getNickname().trim())) {
  160. return ResponseVO.fail("姓名不能为空!");
  161. } else {
  162. String nickName = user.getNickname().trim();
  163. if (nickName.length() > 30) {
  164. return ResponseVO.fail("姓名长度不能超过30个字符!");
  165. }
  166. // 加密姓名
  167. sysApprove.setNickname(SM2CryptUtils.encrypt(nickName, SecretKeyConstants.SERVER_PUBLIC_KEY));
  168. }
  169. if (StringUtils.isEmpty(user.getMailbox())) {
  170. return ResponseVO.fail("邮箱不能为空!");
  171. } else if (!Validator.isEmail(user.getMailbox())) {
  172. return ResponseVO.fail("请输入正确的邮箱地址!");
  173. } else if (user.getMailbox().length() > 50) {
  174. return ResponseVO.fail("邮箱长度不能超过50个字符!");
  175. }
  176. // 加密邮箱
  177. sysApprove.setMailbox(SM2CryptUtils.encrypt(user.getMailbox(), SecretKeyConstants.SERVER_PUBLIC_KEY));
  178. if (user.getExpDate()!=null){
  179. // 判断临时账号有效期不能超过30天
  180. Calendar calendar = Calendar.getInstance();
  181. // 将当前日期增加30天
  182. calendar.add(Calendar.DAY_OF_MONTH, 29);
  183. // 获取增加30天后的日期
  184. Date endDate = calendar.getTime();
  185. if (!user.getExpDate().before(endDate)){
  186. return ResponseVO.fail("账号有效期不能超过30天!");
  187. }
  188. sysApprove.setExpDate(user.getExpDate());
  189. }
  190. // 新增时先判断审批表里待审批-新增中是否存在相同账号、身份证
  191. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  192. // 新增操作类型
  193. wrapper.eq("operation", "0");
  194. // 待审批
  195. wrapper.eq("approve_status", "0");
  196. List<SysApprove> sysApproveList = sysApproveService.list(wrapper);
  197. for (SysApprove sysApprove1:sysApproveList){
  198. String approveUsername = sysApprove1.getUsername();
  199. String approveIdcard = SM2CryptUtils.decrypt(sysApprove1.getIdcard(), SecretKeyConstants.SERVER_PRIVATE_KEY);
  200. if (username.equals(approveUsername)){
  201. return ResponseVO.fail("账号"+username + "在待审批,不能再次新增!");
  202. }
  203. if (user.getIdcard().equals(approveIdcard)){
  204. return ResponseVO.fail("身份证"+user.getIdcard() + "在待审批中,不能再次新增!");
  205. }
  206. }
  207. List<SysUser> sysUserList = sysUserService.queryAllUserByDecrypt();
  208. for (SysUser sysUser:sysUserList){
  209. if (username.equals(sysUser.getUsername())){
  210. return ResponseVO.fail("账号"+username + "存在,不能再次新增!");
  211. }
  212. if (user.getIdcard().equals(sysUser.getIdcard())){
  213. return ResponseVO.fail("身份证"+user.getIdcard() + "存在,不能再次新增!");
  214. }
  215. }
  216. sysApprove.setUsertype(user.getUsertype());
  217. sysApprove.setStatus("0");
  218. // 用户新增插入审批表
  219. sysApprove.setModuleName(ApproveConstants.MODULE_NAME_USER);
  220. sysApprove.setOperation(String.valueOf(ApproveOperaterEnum.INSERT.getCode()));
  221. sysApprove.setApproveStatus(String.valueOf(ApproveStatusEnum.DSP.getCode()));
  222. sysApprove.setEntityName("SysUser");
  223. boolean bo = sysApproveService.save(sysApprove);
  224. if (bo) {
  225. return ResponseVO.success("添加用户信息成功,请联系审核管理员进行审核!");
  226. } else {
  227. log.error("添加用户信息失败");
  228. return ResponseVO.fail("添加用户信息失败");
  229. }
  230. } catch (Exception e) {
  231. throw new CustomException("添加用户信息异常", e);
  232. }
  233. }
  234. /**
  235. * 更新用户
  236. *
  237. * @param user 参数
  238. * @return 执行结果
  239. */
  240. @PostMapping(value = "/updateUser")
  241. @AgainVerify
  242. @OperateLog(title = "用户管理", businessType = BusinessType.UPDATE, auditType = AuditType.SYS,operdesc = "修改用户")
  243. @PreAuthorize("@ss.hasPermi('system:user:edit')")
  244. @PreventReplay
  245. public ResponseVO updateUser(@RequestBody SysUser user) throws CustomException {
  246. try {
  247. SysUser existUser = sysUserService.getById(user.getId());
  248. if (existUser == null) {
  249. return ResponseVO.fail("id为空不能修改!");
  250. }
  251. // 获取审批表是否存在此操作
  252. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  253. // 条件:待审批
  254. wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
  255. // 条件:删除操作
  256. wrapper.eq("master_id", user.getId());
  257. // 条件:实体名
  258. wrapper.eq("entity_name", "SysUser");
  259. List<SysApprove> list = sysApproveService.list(wrapper);
  260. if (list.size() > 0) {
  261. return ResponseVO.fail("此记录存在未审批的操作,不能进行修改!");
  262. }
  263. String username = "";
  264. SysApprove sysApprove = new SysApprove();
  265. if (StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getUsername().trim())) {
  266. return ResponseVO.fail("用户账号不能为空!");
  267. } else{
  268. username = user.getUsername().trim();
  269. if (username.contains(" ")){
  270. return ResponseVO.fail("账号中不能含有空格!");
  271. }
  272. String regExp = "^[^0-9][\\w_]{4,19}$";
  273. if (!username.matches(regExp)){
  274. return ResponseVO.fail("用户账号长度必须是5-20位,只能包含字母、数字和下划线,不能数字开头!");
  275. }
  276. sysApprove.setUsername(username);
  277. }
  278. if (!IdcardUtil.isValidCard(user.getIdcard())) {
  279. return ResponseVO.fail("身份证无效!");
  280. }
  281. // sm2加密身份证
  282. sysApprove.setIdcard(SM2CryptUtils.encrypt(user.getIdcard(), SecretKeyConstants.SERVER_PUBLIC_KEY));
  283. if (StringUtils.isEmpty(user.getMailbox())) {
  284. return ResponseVO.fail("邮箱不能为空!");
  285. } else if (!Validator.isEmail(user.getMailbox())) {
  286. return ResponseVO.fail("请输入正确的邮箱地址!");
  287. } else if (user.getMailbox().length() > 50) {
  288. return ResponseVO.fail("邮箱长度不能超过50个字符!");
  289. }
  290. // 加密邮箱
  291. sysApprove.setMailbox(SM2CryptUtils.encrypt(user.getMailbox(), SecretKeyConstants.SERVER_PUBLIC_KEY));
  292. if (StringUtils.isEmpty(user.getPhonenumber())) {
  293. return ResponseVO.fail("手机号码不能为空!");
  294. } else if (!Validator.isMobile(user.getPhonenumber())) {
  295. return ResponseVO.fail("请输入正确的手机号码!");
  296. }
  297. // 加密手机号
  298. sysApprove.setPhonenumber(SM2CryptUtils.encrypt(user.getPhonenumber(), SecretKeyConstants.SERVER_PUBLIC_KEY));
  299. if (StringUtils.isEmpty(user.getNickname()) || StringUtils.isEmpty(user.getNickname().trim())) {
  300. return ResponseVO.fail("姓名不能为空!");
  301. } else {
  302. String nickName = user.getNickname().trim();
  303. if (nickName.length() > 30) {
  304. return ResponseVO.fail("姓名长度不能超过30个字符!");
  305. }
  306. // 加密姓名
  307. sysApprove.setNickname(SM2CryptUtils.encrypt(nickName, SecretKeyConstants.SERVER_PUBLIC_KEY));
  308. }
  309. if (user.getExpDate()==null) {
  310. user.setExpDate(null);
  311. }
  312. else{
  313. // 判断临时账号有效期不能超过30天
  314. Calendar calendar = Calendar.getInstance();
  315. // 将当前日期增加30天
  316. calendar.add(Calendar.DAY_OF_MONTH, 29);
  317. // 获取增加30天后的日期
  318. Date endDate = calendar.getTime();
  319. if (!user.getExpDate().before(endDate)){
  320. return ResponseVO.fail("账号有效期不能超过30天!");
  321. }
  322. sysApprove.setExpDate(user.getExpDate());
  323. }
  324. sysApprove.setUsertype(user.getUsertype());
  325. sysApprove.setStatus(user.getStatus());
  326. sysApprove.setMasterId(String.valueOf(user.getId()));
  327. // 将修改前信息存入
  328. sysApprove.setParameterContent(JSONUtil.parse(existUser).toString());
  329. // 用户新增插入审批表
  330. sysApprove.setModuleName(ApproveConstants.MODULE_NAME_USER);
  331. sysApprove.setOperation(String.valueOf(ApproveOperaterEnum.UPDATE.getCode()));
  332. sysApprove.setApproveStatus(String.valueOf(ApproveStatusEnum.DSP.getCode()));
  333. sysApprove.setEntityName("SysUser");
  334. // 更改用户表signstr为1
  335. boolean bo = sysUserService.addUserByApprove(user.getId(),sysApprove);
  336. if (bo) {
  337. return ResponseVO.success("修改用户信息成功,等待审核管理员进行审核!");
  338. } else {
  339. log.error("修改用户信息失败");
  340. return ResponseVO.fail("修改用户信息失败");
  341. }
  342. } catch (Exception e) {
  343. throw new CustomException("修改用户信息异常", e);
  344. }
  345. }
  346. /**
  347. * 初始密码发送邮箱
  348. */
  349. @PostMapping(value = "/resetPassword")
  350. @OperateLog(title = "用户管理", businessType = BusinessType.RESETPWD, auditType = AuditType.SYS,operdesc = "初始/重置密码发送邮箱")
  351. @PreAuthorize("@ss.hasPermi('system:user:send')")
  352. @PreventReplay
  353. public ResponseVO resetPassword(String id) {
  354. if (StringUtils.isEmpty(id)) {
  355. return ResponseVO.fail("重置密码缺失id!");
  356. }
  357. // 获取审批表是否存在此操作
  358. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  359. // 条件:待审批
  360. wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
  361. // 条件:删除操作
  362. wrapper.eq("master_id", id);
  363. // 条件:实体名
  364. wrapper.eq("entity_name", "SysUser");
  365. List<SysApprove> list = sysApproveService.list(wrapper);
  366. if (list.size() > 0) {
  367. return ResponseVO.fail("此记录存在未审批的操作,不能初始/重置密码!");
  368. }
  369. // id获取用户
  370. SysUser sysUser = sysUserService.getById(id);
  371. if (sysUser == null) {
  372. return ResponseVO.fail("重置密码失败!");
  373. }
  374. SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
  375. // 生成8位初始密码
  376. String randomPwd = RandomRulePwd.createPwd(sysPolicy.getPasswordRule(),8);
  377. log.info("发送邮箱重置密码后台输出======> 用户名:"+sysUser.getUsername()+" 初始/重置密码:"+randomPwd);
  378. // SM3加密密码
  379. String sm3password = SmUtil.sm3(randomPwd).toUpperCase();
  380. // 再对密码sm2
  381. String sm2password = SM2CryptUtils.encrypt(sm3password,SecretKeyConstants.SERVER_PUBLIC_KEY);
  382. boolean bo = sysUserService.resetPassword(Integer.parseInt(id), sm2password);
  383. if (!bo) {
  384. return ResponseVO.fail("密码生成失败!");
  385. }
  386. try {
  387. // String[] mailArray = {AesUtils.decryptStr(sysUser.getMailbox())};
  388. // sendMailUtil.executeSendMail(mailArray, "系统登录密码", "密码:" + randomPwd);
  389. } catch (Exception e) {
  390. // log.error("用户名:"+sysUser.getUsername()+",邮箱验证码发送失败!",e);
  391. return ResponseVO.fail("发送邮箱失败");
  392. }
  393. return ResponseVO.success();
  394. }
  395. /**
  396. * 删除用户信息
  397. */
  398. @PostMapping(value = "/delUser")
  399. @AgainVerify
  400. @OperateLog(title = "用户管理", businessType = BusinessType.DELETE, auditType = AuditType.SYS,operdesc = "删除用户")
  401. @PreAuthorize("@ss.hasPermi('system:user:remove')")
  402. @PreventReplay
  403. public ResponseVO delete(String id) throws CustomException {
  404. try {
  405. if (StringUtils.isEmpty(id)) {
  406. return ResponseVO.fail("id不能为空!");
  407. }
  408. // id获取用户
  409. SysUser sysUser = sysUserService.getById(id);
  410. if (sysUser == null) {
  411. return ResponseVO.fail("id为空不能删除用户!");
  412. }
  413. // 获取审批表是否存在此操作
  414. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  415. // 条件:待审批
  416. wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
  417. // 条件:删除操作
  418. wrapper.eq("master_id", id);
  419. // 条件:实体名
  420. wrapper.eq("entity_name", "SysUser");
  421. List<SysApprove> list = sysApproveService.list(wrapper);
  422. if (list.size() > 0) {
  423. return ResponseVO.fail("此记录存在未审批的操作,不能进行删除!");
  424. }
  425. boolean bo = sysUserService.removeUserById(sysUser);
  426. if (bo) {
  427. return ResponseVO.success("【删除用户】已进入审批,审批通过后实现真正删除!");
  428. } else {
  429. log.error("删除用户信息失败");
  430. return ResponseVO.fail("删除用户信息失败");
  431. }
  432. } catch (Exception e) {
  433. throw new CustomException("删除用户信息异常", e);
  434. }
  435. }
  436. /**
  437. * 修改密码
  438. */
  439. @PostMapping(value = "/updatePassword")
  440. @OperateLog(title = "用户管理", businessType = BusinessType.PWDUPDATE, auditType = AuditType.SYS,operdesc = "修改个人密码")
  441. @PreventReplay
  442. public ResponseVO updatePassword(String id, String oldPassword, String newPassword, String confirmPassword) throws CustomException {
  443. try {
  444. oldPassword = oldPassword.trim();
  445. newPassword = newPassword.trim();
  446. confirmPassword = confirmPassword.trim();
  447. if (StringUtils.isEmpty(id)) {
  448. return ResponseVO.fail("修改密码缺失id!");
  449. }
  450. // 获取审批表是否存在此操作
  451. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  452. // 条件:待审批
  453. wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
  454. // 条件:删除操作
  455. wrapper.eq("master_id", id);
  456. // 条件:实体名
  457. wrapper.eq("entity_name", "SysUser");
  458. List<SysApprove> list = sysApproveService.list(wrapper);
  459. if (list.size() > 0) {
  460. return ResponseVO.fail("此记录存在未审批的操作,不能进行修改!");
  461. }
  462. // id获取用户
  463. SysUser sysUser = sysUserService.getById(id);
  464. if (sysUser == null) {
  465. return ResponseVO.fail("找不到用户,修改密码失败!");
  466. }
  467. if (newPassword == null) {
  468. // 返回密码长度问题
  469. return ResponseVO.fail("密码长度需要8~20位之间!");
  470. }
  471. if (StringUtils.isEmpty(oldPassword)) {
  472. return ResponseVO.fail("旧密码不能为空!");
  473. }
  474. if (StringUtils.isEmpty(newPassword)) {
  475. return ResponseVO.fail("新密码不能为空!");
  476. } else if (StringUtils.isEmpty(confirmPassword)) {
  477. return ResponseVO.fail("确认密码不能为空!");
  478. } else if (!newPassword.equals(confirmPassword)) {
  479. return ResponseVO.fail("新密码两次输入的密码不一致!");
  480. }
  481. if (newPassword.contains(" ")){
  482. return ResponseVO.fail("新密码中不能含有空格!");
  483. }
  484. // 对新密码规则验证
  485. if (newPassword.contains(sysUser.getUsername())) {
  486. return ResponseVO.fail("密码不能含有账号!");
  487. }
  488. if (SmUtil.sm3(newPassword).toUpperCase().equals(sysUser.getPassword())) {
  489. return ResponseVO.fail("新密码不能与上次密码相同!");
  490. }
  491. SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
  492. String ruleInfo = PasswordRuleUtil.ruleRegx(sysPolicy.getPasswordRule(),newPassword);
  493. if (!"true".equals(ruleInfo)){
  494. return ResponseVO.fail(ruleInfo);
  495. }
  496. // 新密码加密
  497. String sm3newpwd = SmUtil.sm3(newPassword).toUpperCase();
  498. // 再次sm2加密
  499. String sm2password = SM2CryptUtils.encrypt(sm3newpwd,SecretKeyConstants.SERVER_PUBLIC_KEY);
  500. sysUser.setPassword(sm2password);
  501. sysUser.setLastUpdatePwdTime(new Date());
  502. boolean bo = sysUserService.updateById(sysUser);
  503. if (!bo) {
  504. return ResponseVO.fail("修改密码失败!");
  505. }
  506. return ResponseVO.success();
  507. } catch (Exception e) {
  508. throw new CustomException("修改密码异常", e);
  509. }
  510. }
  511. /**
  512. * 解锁用户信息
  513. */
  514. @PostMapping(value = "/relockUser")
  515. @OperateLog(title = "用户管理", businessType = BusinessType.UNLOCK, auditType = AuditType.SYS,operdesc = "用户账号解锁")
  516. @PreAuthorize("@ss.hasPermi('system:user:relock')")
  517. @PreventReplay
  518. public ResponseVO relockUser(String id) throws CustomException {
  519. try {
  520. if (StringUtils.isEmpty(id)) {
  521. return ResponseVO.fail("id不能为空!");
  522. }
  523. // 获取审批表是否存在此操作
  524. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  525. // 条件:待审批
  526. wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
  527. // 条件:删除操作
  528. wrapper.eq("master_id", id);
  529. // 条件:实体名
  530. wrapper.eq("entity_name", "SysUser");
  531. List<SysApprove> list = sysApproveService.list(wrapper);
  532. if (list.size() > 0) {
  533. return ResponseVO.fail("此记录存在未审批的操作,不能进行修改!");
  534. }
  535. // id获取用户
  536. SysUser sysUser = sysUserService.getById(id);
  537. if (sysUser == null) {
  538. return ResponseVO.fail("不能解锁用户!");
  539. }
  540. if (!"1".equals(sysUser.getStatus())) {
  541. return ResponseVO.fail("只能对【锁定】状态的进行解锁!");
  542. }
  543. boolean bo = sysUserService.relockUserById(Integer.parseInt(id));
  544. if (bo) {
  545. return ResponseVO.success("解锁成功");
  546. } else {
  547. log.error("解锁失败");
  548. return ResponseVO.fail("解锁失败");
  549. }
  550. } catch (Exception e) {
  551. throw new CustomException("解锁异常", e);
  552. }
  553. }
  554. /**
  555. * 用户授权角色
  556. */
  557. @PostMapping("/authRole")
  558. @PreAuthorize("@ss.hasPermi('system:user:role')")
  559. @OperateLog(title = "用户管理", businessType = BusinessType.GRANT, auditType = AuditType.SYS,operdesc = "用户授权角色")
  560. @PreventReplay
  561. public ResponseVO authRole(String userId, String roleId) throws CustomException {
  562. try {
  563. if (StringUtils.isEmpty(userId)) {
  564. return ResponseVO.fail("id不能为空!");
  565. }
  566. // id获取用户
  567. SysUser sysUser = sysUserService.getById(userId);
  568. if (sysUser == null) {
  569. return ResponseVO.fail("id为空不能授权用户!");
  570. }
  571. // id获取用户
  572. SysRole sysRole = sysRoleService.getById(roleId);
  573. if (sysRole == null) {
  574. return ResponseVO.fail("角色id为空不能授权用户!");
  575. }
  576. // 获取审批表是否存在此操作
  577. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  578. // 条件:待审批
  579. wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
  580. // 条件:删除操作
  581. wrapper.eq("master_id", userId);
  582. // 条件:实体名
  583. wrapper.eq("entity_name", "SysUser");
  584. List<SysApprove> list = sysApproveService.list(wrapper);
  585. if (list.size() > 0) {
  586. return ResponseVO.fail("此记录存在未审批的操作,不能进行修改!");
  587. }
  588. SysApprove sysApprove = new SysApprove();
  589. sysApprove.setMasterId(userId);
  590. sysApprove.setUsername(sysUser.getUsername());
  591. sysApprove.setRoleId(roleId);
  592. sysApprove.setParameterContent("授权用户账号:"+sysUser.getUsername()+",分配角色:"+sysRole.getRoleName());
  593. // 用户新增插入审批表
  594. sysApprove.setModuleName(ApproveConstants.MODULE_NAME_USER);
  595. sysApprove.setOperation(String.valueOf(ApproveOperaterEnum.APPROVE.getCode()));
  596. sysApprove.setApproveStatus(String.valueOf(ApproveStatusEnum.DSP.getCode()));
  597. sysApprove.setEntityName("SysUser");
  598. // 更改用户表signstr为1
  599. boolean bo = sysUserService.addUserByApprove(Long.parseLong(userId),sysApprove);
  600. if (bo) {
  601. return ResponseVO.success("授权用户信息成功,等待审核管理员进行审核!");
  602. } else {
  603. log.error("授权用户信息失败");
  604. return ResponseVO.fail("授权用户信息失败");
  605. }
  606. } catch (Exception e) {
  607. throw new CustomException("分配角色异常", e);
  608. }
  609. // return ResponseVO.success("分配角色成功");
  610. }
  611. /**
  612. * 根据用户ID获取角色
  613. *
  614. * @param userId
  615. * @return
  616. */
  617. @GetMapping("/getUserRole")
  618. @PreventReplay
  619. public ResponseVO getUserRole(Long userId) throws CustomException {
  620. try {
  621. if (userId == null) {
  622. return ResponseVO.fail("用户id不能为空!");
  623. }
  624. QueryWrapper<SysUserRole> wrapper = new QueryWrapper<>();
  625. wrapper.eq("user_id", userId);
  626. SysUserRole sysUserRole = sysUserRoleService.getOne(wrapper);
  627. return ResponseVO.success(sysUserRole);
  628. } catch (Exception e) {
  629. throw new CustomException("获取用户角色异常", e);
  630. }
  631. }
  632. /**
  633. * 检测用户密码是否符合规则
  634. *
  635. * @return 用户信息
  636. */
  637. @GetMapping(value = "/validatePasswordRule")
  638. public ResponseVO validatePasswordRule() throws CustomException {
  639. try {
  640. SysUser sysUser = SecurityContextUtil.getSysUser();
  641. String upwd = CacheConstants.usernamePasswordMap.get(sysUser.getUsername());
  642. SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
  643. String ruleInfo = PasswordRuleUtil.ruleRegx(sysPolicy.getPasswordRule(),upwd);
  644. return ResponseVO.success(ruleInfo);
  645. } catch (Exception e) {
  646. throw new CustomException("检测用户密码是否符合规则异常", e);
  647. }
  648. }
  649. /**
  650. * 注销用户信息
  651. */
  652. @PostMapping(value = "/logOffUser")
  653. @AgainVerify
  654. @OperateLog(title = "用户管理", businessType = BusinessType.DELETE, auditType = AuditType.SYS,operdesc = "注销用户账号")
  655. @PreAuthorize("@ss.hasPermi('system:user:logoff')")
  656. @PreventReplay
  657. public ResponseVO logOffUser(String id) throws CustomException {
  658. try {
  659. if (StringUtils.isEmpty(id)) {
  660. return ResponseVO.fail("id不能为空!");
  661. }
  662. // id获取用户
  663. SysUser sysUser = sysUserService.getById(id);
  664. if (sysUser == null) {
  665. return ResponseVO.fail("id为空不能删除用户!");
  666. }
  667. // 获取审批表是否存在此操作
  668. QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
  669. // 条件:待审批
  670. wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
  671. // 条件:删除操作
  672. wrapper.eq("master_id", id);
  673. // 条件:实体名
  674. wrapper.eq("entity_name", "SysUser");
  675. List<SysApprove> list = sysApproveService.list(wrapper);
  676. if (list.size() > 0) {
  677. return ResponseVO.fail("此记录存在未审批的操作,不能注销!");
  678. }
  679. // 根据id改变状态为注销,提交到审核
  680. SysApprove sysApprove = new SysApprove();
  681. sysApprove.setUsername(sysUser.getUsername());
  682. sysApprove.setNickname(sysUser.getNickname());
  683. sysApprove.setIdcard(sysUser.getIdcard());
  684. sysApprove.setMailbox(sysUser.getMailbox());
  685. sysApprove.setPhonenumber(sysUser.getPhonenumber());
  686. sysApprove.setUsertype(sysUser.getUsertype());
  687. sysApprove.setStatus(sysUser.getStatus());
  688. sysApprove.setMasterId(String.valueOf(sysUser.getId()));
  689. sysApprove.setParameterContent(JSONUtil.parse(sysUser).toString());
  690. // 用户新增插入审批表
  691. sysApprove.setModuleName(ApproveConstants.MODULE_NAME_USER);
  692. sysApprove.setOperation(String.valueOf(ApproveOperaterEnum.DELETE.getCode()));
  693. sysApprove.setApproveStatus(String.valueOf(ApproveStatusEnum.DSP.getCode()));
  694. sysApprove.setEntityName("SysUser");
  695. boolean bo = sysUserService.addUserByApprove(Long.parseLong(id),sysApprove);
  696. if (bo) {
  697. return ResponseVO.success("注销用户成功,等待审核管理员进行审核!");
  698. } else {
  699. log.error("注销用户失败");
  700. return ResponseVO.fail("注销用户失败");
  701. }
  702. } catch (Exception e) {
  703. throw new CustomException("注销用户异常", e);
  704. }
  705. }
  706. /**
  707. * 获取用户分页信息(查询在线用户使用 其中屏蔽了状态为注销的用户)
  708. *
  709. * @return 用户信息
  710. */
  711. @GetMapping(value = "/getUserByHealthy")
  712. @PreAuthorize("@ss.hasPermi('monitor:onLine:list')")
  713. @OperateLog(title = "在线用户管理", businessType = BusinessType.QUERY, auditType = AuditType.SYS,operdesc = "在线用户查询")
  714. @PreventReplay
  715. public ResponseVO getUserByHealthy(String currentPage, String pageSize, String onLineStatus) throws CustomException {
  716. try {
  717. Integer cp;
  718. if (StringUtils.isNotEmpty(currentPage)) {
  719. if (NumberUtil.isInteger(currentPage)) {
  720. cp = Integer.parseInt(currentPage);
  721. } else {
  722. return ResponseVO.fail("currentPage不是整数!");
  723. }
  724. } else {
  725. return ResponseVO.fail("currentPage不能是空!");
  726. }
  727. Integer ps;
  728. if (StringUtils.isNotEmpty(pageSize)) {
  729. if (NumberUtil.isInteger(pageSize)) {
  730. ps = Integer.parseInt(pageSize);
  731. } else {
  732. return ResponseVO.fail("pageSize不是整数!");
  733. }
  734. } else {
  735. return ResponseVO.fail("pageSize不能是空!");
  736. }
  737. QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
  738. wrapper.ne("status", "2");
  739. if (StringUtils.isNotEmpty(onLineStatus)) {
  740. wrapper.eq("online_status", onLineStatus);
  741. }
  742. Page<SysUser> result = sysUserService.page(new Page<>(cp, ps), wrapper);
  743. return ResponseVO.success(result);
  744. } catch (Exception e) {
  745. throw new CustomException("获取用户异常", e);
  746. }
  747. }
  748. }