SysUserServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. package com.ruoyi.system.service.impl;
  2. import java.util.ArrayList;
  3. import java.util.LinkedHashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  7. import com.aliyuncs.exceptions.ClientException;
  8. import com.ruoyi.common.core.domain.AjaxResult;
  9. import com.ruoyi.common.utils.DateUtils;
  10. import com.ruoyi.common.utils.SendSmsUtils;
  11. import com.ruoyi.system.domain.*;
  12. import com.ruoyi.system.mapper.*;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import com.ruoyi.common.annotation.DataScope;
  19. import com.ruoyi.common.constant.UserConstants;
  20. import com.ruoyi.common.core.domain.entity.SysRole;
  21. import com.ruoyi.common.core.domain.entity.SysUser;
  22. import com.ruoyi.common.exception.CustomException;
  23. import com.ruoyi.common.utils.SecurityUtils;
  24. import com.ruoyi.common.utils.StringUtils;
  25. import com.ruoyi.system.service.ISysConfigService;
  26. import com.ruoyi.system.service.ISysUserService;
  27. import javax.validation.constraints.Size;
  28. /**
  29. * 用户 业务层处理
  30. *
  31. * @author ruoyi
  32. */
  33. @Service
  34. public class SysUserServiceImpl implements ISysUserService {
  35. private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
  36. @Autowired
  37. private SysUserMapper userMapper;
  38. @Autowired
  39. private SysRoleMapper roleMapper;
  40. @Autowired
  41. private SysPostMapper postMapper;
  42. @Autowired
  43. private SysUserRoleMapper userRoleMapper;
  44. @Autowired
  45. private SysUserPostMapper userPostMapper;
  46. @Autowired
  47. private ISysConfigService configService;
  48. @Autowired
  49. private TextMessageMapper textMessageMapper;
  50. @Autowired
  51. private TextMessageLogMapper textMessageLogMapper;
  52. /**
  53. * 根据条件分页查询用户列表
  54. *
  55. * @param user 用户信息
  56. * @return 用户信息集合信息
  57. */
  58. @Override
  59. @DataScope(deptAlias = "d", userAlias = "u")
  60. public List<SysUser> selectUserList(SysUser user) {
  61. return userMapper.selectUserList(user);
  62. }
  63. /**
  64. * 通过用户名查询用户
  65. *
  66. * @param userName 用户名
  67. * @return 用户对象信息
  68. */
  69. @Override
  70. public SysUser selectUserByUserName(String userName) {
  71. return userMapper.selectUserByUserName(userName);
  72. }
  73. /**
  74. * 通过用户ID查询用户
  75. *
  76. * @param userId 用户ID
  77. * @return 用户对象信息
  78. */
  79. @Override
  80. public SysUser selectUserById(Long userId) {
  81. return userMapper.selectUserById(userId);
  82. }
  83. /**
  84. * 查询用户所属角色组
  85. *
  86. * @param userName 用户名
  87. * @return 结果
  88. */
  89. @Override
  90. public String selectUserRoleGroup(String userName) {
  91. List<SysRole> list = roleMapper.selectRolesByUserName(userName);
  92. StringBuffer idsStr = new StringBuffer();
  93. for (SysRole role : list) {
  94. idsStr.append(role.getRoleName()).append(",");
  95. }
  96. if (StringUtils.isNotEmpty(idsStr.toString())) {
  97. return idsStr.substring(0, idsStr.length() - 1);
  98. }
  99. return idsStr.toString();
  100. }
  101. /**
  102. * 查询用户所属岗位组
  103. *
  104. * @param userName 用户名
  105. * @return 结果
  106. */
  107. @Override
  108. public String selectUserPostGroup(String userName) {
  109. List<SysPost> list = postMapper.selectPostsByUserName(userName);
  110. StringBuffer idsStr = new StringBuffer();
  111. for (SysPost post : list) {
  112. idsStr.append(post.getPostName()).append(",");
  113. }
  114. if (StringUtils.isNotEmpty(idsStr.toString())) {
  115. return idsStr.substring(0, idsStr.length() - 1);
  116. }
  117. return idsStr.toString();
  118. }
  119. /**
  120. * 校验用户名称是否唯一
  121. *
  122. * @param userName 用户名称
  123. * @return 结果
  124. */
  125. @Override
  126. public String checkUserNameUnique(String userName) {
  127. int count = userMapper.checkUserNameUnique(userName);
  128. if (count > 0) {
  129. return UserConstants.NOT_UNIQUE;
  130. }
  131. return UserConstants.UNIQUE;
  132. }
  133. /**
  134. * 校验用户名称是否唯一
  135. *
  136. * @param user 用户信息
  137. * @return
  138. */
  139. @Override
  140. public String checkPhoneUnique(SysUser user) {
  141. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  142. SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
  143. if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
  144. return UserConstants.NOT_UNIQUE;
  145. }
  146. return UserConstants.UNIQUE;
  147. }
  148. /**
  149. * 校验email是否唯一
  150. *
  151. * @param user 用户信息
  152. * @return
  153. */
  154. @Override
  155. public String checkEmailUnique(SysUser user) {
  156. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  157. SysUser info = userMapper.checkEmailUnique(user.getEmail());
  158. if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
  159. return UserConstants.NOT_UNIQUE;
  160. }
  161. return UserConstants.UNIQUE;
  162. }
  163. /**
  164. * 校验用户是否允许操作
  165. *
  166. * @param user 用户信息
  167. */
  168. @Override
  169. public void checkUserAllowed(SysUser user) {
  170. if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
  171. throw new CustomException("不允许操作超级管理员用户");
  172. }
  173. }
  174. /**
  175. * 新增保存用户信息
  176. *
  177. * @param user 用户信息
  178. * @return 结果
  179. */
  180. @Override
  181. @Transactional
  182. public int insertUser(SysUser user) {
  183. // 新增用户信息
  184. int rows = userMapper.insertUser(user);
  185. // 新增用户岗位关联
  186. insertUserPost(user);
  187. // 新增用户与角色管理
  188. insertUserRole(user);
  189. return rows;
  190. }
  191. /**
  192. * 修改保存用户信息
  193. *
  194. * @param user 用户信息
  195. * @return 结果
  196. */
  197. @Override
  198. @Transactional
  199. public int updateUser(SysUser user) {
  200. Long userId = user.getUserId();
  201. // 删除用户与角色关联
  202. userRoleMapper.deleteUserRoleByUserId(userId);
  203. // 新增用户与角色管理
  204. insertUserRole(user);
  205. // 删除用户与岗位关联
  206. userPostMapper.deleteUserPostByUserId(userId);
  207. // 新增用户与岗位管理
  208. insertUserPost(user);
  209. return userMapper.updateUser(user);
  210. }
  211. /**
  212. * 修改用户状态
  213. *
  214. * @param user 用户信息
  215. * @return 结果
  216. */
  217. @Override
  218. public int updateUserStatus(SysUser user) {
  219. return userMapper.updateUser(user);
  220. }
  221. /**
  222. * 修改用户基本信息
  223. *
  224. * @param user 用户信息
  225. * @return 结果
  226. */
  227. @Override
  228. public int updateUserProfile(SysUser user) {
  229. return userMapper.updateUser(user);
  230. }
  231. /**
  232. * 修改用户头像
  233. *
  234. * @param userName 用户名
  235. * @param avatar 头像地址
  236. * @return 结果
  237. */
  238. @Override
  239. public boolean updateUserAvatar(String userName, String avatar) {
  240. return userMapper.updateUserAvatar(userName, avatar) > 0;
  241. }
  242. /**
  243. * 重置用户密码
  244. *
  245. * @param user 用户信息
  246. * @return 结果
  247. */
  248. @Override
  249. public int resetPwd(SysUser user) {
  250. return userMapper.updateUser(user);
  251. }
  252. /**
  253. * 重置用户密码
  254. *
  255. * @param userName 用户名
  256. * @param password 密码
  257. * @param clearTextPasswords 明文密码
  258. * @return 结果
  259. */
  260. @Override
  261. public int resetUserPwd(String userName, String password, String clearTextPasswords) {
  262. return userMapper.resetUserPwd(userName, password, clearTextPasswords);
  263. }
  264. /**
  265. * 新增用户角色信息
  266. *
  267. * @param user 用户对象
  268. */
  269. public void insertUserRole(SysUser user) {
  270. Long[] roles = user.getRoleIds();
  271. if (StringUtils.isNotNull(roles)) {
  272. // 新增用户与角色管理
  273. List<SysUserRole> list = new ArrayList<SysUserRole>();
  274. for (Long roleId : roles) {
  275. SysUserRole ur = new SysUserRole();
  276. ur.setUserId(user.getUserId());
  277. ur.setRoleId(roleId);
  278. list.add(ur);
  279. }
  280. if (list.size() > 0) {
  281. userRoleMapper.batchUserRole(list);
  282. }
  283. }
  284. }
  285. /**
  286. * 新增用户岗位信息
  287. *
  288. * @param user 用户对象
  289. */
  290. public void insertUserPost(SysUser user) {
  291. Long[] posts = user.getPostIds();
  292. if (StringUtils.isNotNull(posts)) {
  293. // 新增用户与岗位管理
  294. List<SysUserPost> list = new ArrayList<SysUserPost>();
  295. for (Long postId : posts) {
  296. SysUserPost up = new SysUserPost();
  297. up.setUserId(user.getUserId());
  298. up.setPostId(postId);
  299. list.add(up);
  300. }
  301. if (list.size() > 0) {
  302. userPostMapper.batchUserPost(list);
  303. }
  304. }
  305. }
  306. /**
  307. * 通过用户ID删除用户
  308. *
  309. * @param userId 用户ID
  310. * @return 结果
  311. */
  312. @Override
  313. @Transactional
  314. public int deleteUserById(Long userId) {
  315. // 删除用户与角色关联
  316. userRoleMapper.deleteUserRoleByUserId(userId);
  317. // 删除用户与岗位表
  318. userPostMapper.deleteUserPostByUserId(userId);
  319. return userMapper.deleteUserById(userId);
  320. }
  321. /**
  322. * 批量删除用户信息
  323. *
  324. * @param userIds 需要删除的用户ID
  325. * @return 结果
  326. */
  327. @Override
  328. @Transactional
  329. public int deleteUserByIds(Long[] userIds) {
  330. for (Long userId : userIds) {
  331. checkUserAllowed(new SysUser(userId));
  332. }
  333. // 删除用户与角色关联
  334. userRoleMapper.deleteUserRole(userIds);
  335. // 删除用户与岗位关联
  336. userPostMapper.deleteUserPost(userIds);
  337. return userMapper.deleteUserByIds(userIds);
  338. }
  339. /**
  340. * 导入用户数据
  341. *
  342. * @param userList 用户数据列表
  343. * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
  344. * @param operName 操作用户
  345. * @return 结果
  346. */
  347. @Override
  348. public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
  349. if (StringUtils.isNull(userList) || userList.size() == 0) {
  350. throw new CustomException("导入用户数据不能为空!");
  351. }
  352. int successNum = 0;
  353. int failureNum = 0;
  354. StringBuilder successMsg = new StringBuilder();
  355. StringBuilder failureMsg = new StringBuilder();
  356. String password = configService.selectConfigByKey("sys.user.initPassword");
  357. for (SysUser user : userList) {
  358. try {
  359. // 验证是否存在这个用户
  360. SysUser u = userMapper.selectUserByUserName(user.getUserName());
  361. if (StringUtils.isNull(u)) {
  362. user.setPassword(SecurityUtils.encryptPassword(password));
  363. user.setCreateBy(operName);
  364. this.insertUser(user);
  365. successNum++;
  366. successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
  367. } else if (isUpdateSupport) {
  368. user.setUpdateBy(operName);
  369. this.updateUser(user);
  370. successNum++;
  371. successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
  372. } else {
  373. failureNum++;
  374. failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
  375. }
  376. } catch (Exception e) {
  377. failureNum++;
  378. String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
  379. failureMsg.append(msg + e.getMessage());
  380. log.error(msg, e);
  381. }
  382. }
  383. if (failureNum > 0) {
  384. failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  385. throw new CustomException(failureMsg.toString());
  386. } else {
  387. successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
  388. }
  389. return successMsg.toString();
  390. }
  391. /**
  392. * 给用户发短信
  393. *
  394. * @param map
  395. * @return
  396. */
  397. @Override
  398. public AjaxResult sendSms(Map<String, Object> map) {
  399. StringBuilder nickNames = new StringBuilder("发送失败的人有:");
  400. ArrayList<LinkedHashMap> userList = (ArrayList<LinkedHashMap>) map.get("userList");
  401. String content = String.valueOf(map.get("content"));
  402. String accessKeyId = "LTAI5tNA2fcBJH6EWRH6Pxr6";
  403. String accessKeySecret = "5WdaPEOvC3u9LC7pwy2DQ9pgmJvgUr";
  404. String signName = "安徽博曼网络科技有限公司";
  405. String templateCode = "SMS_219525380";
  406. String message = null;
  407. boolean flag = false;
  408. Long textMessageId = Long.valueOf(String.valueOf(map.get("textMessageId")));
  409. TextMessage textMessage = textMessageMapper.selectTextMessageById(textMessageId);
  410. if (textMessage != null) {
  411. accessKeyId = textMessage.getAccessKeyId();
  412. accessKeySecret = textMessage.getAccessKeySecret();
  413. signName = textMessage.getSignName();
  414. templateCode = textMessage.getTemplateCode();
  415. }
  416. if (userList.size() > 0) {
  417. StringBuilder sb = new StringBuilder();
  418. for (LinkedHashMap sysUser : userList) {
  419. String phone = String.valueOf(sysUser.get("phonenumber"));
  420. String nikeName = sysUser.get("nickName").toString();
  421. if (StringUtils.isNotBlank(phone)) {
  422. sb.append(phone).append(",");
  423. } else {
  424. if (!"null".equals(nikeName)) {
  425. flag = true;
  426. nickNames.append(sysUser.get("nickName")).append(",");
  427. }
  428. }
  429. }
  430. if (StringUtils.isNotBlank(sb)) {
  431. sb.replace(sb.length() - 1, sb.length(), "");
  432. }
  433. try {
  434. SendSmsResponse sendSmsResponse = SendSmsUtils.sendSms(sb.toString(), content, accessKeyId, accessKeySecret, signName, templateCode);
  435. message = sendSmsResponse.getMessage();
  436. for (LinkedHashMap sysUser : userList) {
  437. String phone = String.valueOf(sysUser.get("phonenumber"));
  438. String nikeName = sysUser.get("nickName").toString();
  439. if (StringUtils.isNotBlank(phone)) {
  440. TextMessageLog textMessageLog = new TextMessageLog();
  441. textMessageLog.setPhoneNum(phone);
  442. textMessageLog.setNickName(sysUser.get("nickName").toString());
  443. textMessageLog.setCreateTime(DateUtils.getNowDate());
  444. textMessageLog.setContent(content);
  445. textMessageLog.setCreateBy(SecurityUtils.getUsername());
  446. textMessageLog.setStatus(message);
  447. textMessageLogMapper.insertTextMessageLog(textMessageLog);
  448. } else {
  449. if (!"null".equals(nikeName)) {
  450. TextMessageLog textMessageLog = new TextMessageLog();
  451. textMessageLog.setNickName(sysUser.get("nickName").toString());
  452. textMessageLog.setCreateTime(DateUtils.getNowDate());
  453. textMessageLog.setContent(content);
  454. textMessageLog.setCreateBy(SecurityUtils.getUsername());
  455. textMessageLog.setStatus("该用户没有手机号");
  456. textMessageLogMapper.insertTextMessageLog(textMessageLog);
  457. }
  458. }
  459. }
  460. } catch (ClientException e) {
  461. for (LinkedHashMap sysUser : userList) {
  462. String phone = String.valueOf(sysUser.get("phonenumber"));
  463. String nikeName = sysUser.get("nickName").toString();
  464. if (StringUtils.isNotBlank(phone)) {
  465. TextMessageLog textMessageLog = new TextMessageLog();
  466. textMessageLog.setPhoneNum(phone);
  467. textMessageLog.setNickName(sysUser.get("nickName").toString());
  468. textMessageLog.setCreateTime(DateUtils.getNowDate());
  469. textMessageLog.setContent(content);
  470. textMessageLog.setCreateBy(SecurityUtils.getUsername());
  471. textMessageLog.setStatus("参数设置有误,请检查");
  472. textMessageLogMapper.insertTextMessageLog(textMessageLog);
  473. } else {
  474. if (!"null".equals(nikeName)) {
  475. TextMessageLog textMessageLog = new TextMessageLog();
  476. textMessageLog.setNickName(sysUser.get("nickName").toString());
  477. textMessageLog.setCreateTime(DateUtils.getNowDate());
  478. textMessageLog.setContent(content);
  479. textMessageLog.setCreateBy(SecurityUtils.getUsername());
  480. textMessageLog.setStatus("参数设置有误,请检查");
  481. textMessageLogMapper.insertTextMessageLog(textMessageLog);
  482. }
  483. }
  484. }
  485. return AjaxResult.error("参数设置有误,请检查");
  486. }
  487. if (flag) {
  488. nickNames.replace(nickNames.length() - 1, nickNames.length(), "");
  489. return AjaxResult.success(nickNames);
  490. }
  491. }
  492. return AjaxResult.success(message);
  493. }
  494. }