UserServiceImpl.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.zswl.dataservice.service.user.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.gson.JsonObject;
  4. import com.zswl.dataservice.config.SystemDefaultConfig;
  5. import com.zswl.dataservice.dao.UserDao;
  6. import com.zswl.dataservice.domain.user.User;
  7. import com.zswl.dataservice.model.mqtt.SendMessageModel;
  8. import com.zswl.dataservice.model.user.UpdateUserPassWordParam;
  9. import com.zswl.dataservice.model.user.UserInfoModel;
  10. import com.zswl.dataservice.model.user.UserUpdateParam;
  11. import com.zswl.dataservice.service.base.RedisService;
  12. import com.zswl.dataservice.service.base.SuperService;
  13. import com.zswl.dataservice.service.user.UserService;
  14. import com.zswl.dataservice.type.ResultState;
  15. import com.zswl.dataservice.type.UserState;
  16. import com.zswl.dataservice.type.UserType;
  17. import com.zswl.dataservice.utils.DateUtils;
  18. import com.zswl.dataservice.utils.ValidateResult;
  19. import com.zswl.dataservice.utils.ValidateUtils;
  20. import com.zswl.dataservice.utils.mqtt.mqttConfig.client.MQClient;
  21. import com.zswl.dataservice.utils.mqtt.mqttConfig.constant.MQConstant;
  22. import com.zswl.dataservice.utils.result.ResultContent;
  23. import jakarta.jms.Message;
  24. import jakarta.jms.TextMessage;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.apache.activemq.artemis.jms.client.ActiveMQBytesMessage;
  27. import org.apache.activemq.artemis.jms.client.ActiveMQTopic;
  28. import org.apache.commons.lang3.ObjectUtils;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.jms.annotation.JmsListener;
  31. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  32. import org.springframework.security.crypto.password.PasswordEncoder;
  33. import org.springframework.stereotype.Service;
  34. import com.zswl.dataservice.utils.bean.BeanUtils;
  35. import java.util.UUID;
  36. /**
  37. * @author TRX
  38. * @date 2024/3/20
  39. */
  40. @Slf4j
  41. @Service
  42. public class UserServiceImpl extends SuperService implements UserService {
  43. @Autowired
  44. UserDao userDao;
  45. @Autowired
  46. RedisService redisService;
  47. @Autowired
  48. MQClient mqClient;
  49. @Autowired
  50. UserManagerServiceImpl userManagerService;
  51. /**
  52. * 初始超级管理员
  53. *
  54. * @return
  55. */
  56. public ResultContent initAdmin() {
  57. PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
  58. String loginName = "admin";
  59. User user = userDao.findByLoginName(loginName);
  60. if (ObjectUtils.isEmpty(user)) {
  61. user = new User();
  62. String defaultPassWord = SystemDefaultConfig.defaultPassWord;
  63. user.setLoginName(loginName);
  64. user.setUserName("超级管理员");
  65. user.setPassWord(passwordEncoder.encode(defaultPassWord));
  66. user.setUserType(UserType.SuperAdmin);
  67. user.setIsAdmin(Boolean.TRUE);
  68. user.setUserState(UserState.Enable);
  69. user.setPhone("");
  70. user.setHeadUrl("");
  71. userDao.save(user);
  72. } else {
  73. log.info("admin 用户已存在");
  74. }
  75. return ResultContent.buildSuccess();
  76. }
  77. /**
  78. * 编辑当前用户密码
  79. *
  80. * @param param
  81. * @return
  82. */
  83. public ResultContent updateUserPassWord(UpdateUserPassWordParam param) {
  84. PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
  85. String userId = getCurrentUserId();
  86. User user = userDao.findTopById(userId);
  87. if (ObjectUtils.isEmpty(user)) {
  88. return ResultContent.buildFail("当前用户信息为空");
  89. }
  90. if (!param.getConfirmPass().equals(param.getPassWord())) {
  91. return ResultContent.buildFail("密码和验证密码不一致");
  92. }
  93. if (param.getOldPass().equals(param.getPassWord())) {
  94. return ResultContent.buildFail("原密码和密码不能一致");
  95. }
  96. ValidateResult validateResult = ValidateUtils.validatePassWord(param.getPassWord());
  97. if (!validateResult.isSuccess()) {
  98. return ResultContent.buildFail(validateResult.getMsg());
  99. }
  100. ResultContent resultContent = checkLoginPassword(userId, param.getOldPass());
  101. if (resultContent.isFailed()) {
  102. return resultContent;
  103. }
  104. user.setPassWord(passwordEncoder.encode(param.getPassWord()));
  105. userDao.save(user);
  106. return ResultContent.buildSuccess();
  107. }
  108. /**
  109. * 得到当前用户信息
  110. *
  111. * @return
  112. */
  113. public ResultContent<UserInfoModel> getCurrentUserInfo() {
  114. UserInfoModel model = new UserInfoModel();
  115. User user = userDao.findTopById(getCurrentUserId());
  116. if (ObjectUtils.isEmpty(user)) {
  117. return ResultContent.buildFail("当前用户信息为空");
  118. }
  119. model = userManagerService.toModel(user);
  120. return ResultContent.buildSuccess(model);
  121. }
  122. public ResultContent updateUserInfo(UserUpdateParam param) {
  123. User user = userDao.findTopById(getCurrentUserId());
  124. if (ObjectUtils.isEmpty(user)) {
  125. return ResultContent.buildFail(ResultState.UserNotExists.getRemark());
  126. }
  127. BeanUtils.copyProperties(param, user);
  128. userDao.save(user);
  129. return ResultContent.buildSuccess();
  130. }
  131. public ResultContent updateUserHead(String url) {
  132. User user = userDao.findTopById(getCurrentUserId());
  133. if (ObjectUtils.isEmpty(user)) {
  134. return ResultContent.buildFail(ResultState.UserNotExists.getRemark());
  135. }
  136. user.setHeadUrl(url);
  137. userDao.save(user);
  138. return ResultContent.buildSuccess();
  139. }
  140. /**
  141. * 验证用户密码是否正确
  142. *
  143. * @param uid
  144. * @param passWord
  145. * @return
  146. */
  147. public ResultContent checkLoginPassword(String uid, String passWord) {
  148. User user = userDao.findTopById(uid);
  149. if (user == null) {
  150. return ResultContent.buildContent(ResultState.UserNotExists);
  151. }
  152. PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
  153. return ResultContent.build(passwordEncoder.matches(passWord, user.getPassWord()) ? ResultState.Success : ResultState.UserPasswordError);
  154. }
  155. /**
  156. * 发送指令
  157. *
  158. * @param param
  159. * @return
  160. */
  161. public ResultContent sendMessage(SendMessageModel param) {
  162. String msg = "发送成功";
  163. try {
  164. JsonObject jsonObject = new JsonObject();
  165. jsonObject.addProperty("id", UUID.randomUUID().toString());
  166. jsonObject.addProperty("data", param.getMessage());
  167. jsonObject.addProperty("time", DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyySSS));
  168. jsonObject.addProperty("ttl", 10 * 1000);
  169. mqClient.sendObject(param.getTopic(), jsonObject.toString());
  170. log.info("mqtt msg 发送成功");
  171. } catch (Exception e) {
  172. e.printStackTrace();
  173. msg = "发送失败: " + e.getMessage();
  174. }
  175. return ResultContent.buildSuccess(msg);
  176. }
  177. // @JmsListener(destination = "#", containerFactory = MQConstant.TopicListenerContainerFactory)
  178. @JmsListener(destination = "v1/#", containerFactory = MQConstant.TopicListenerContainerFactory)
  179. @JmsListener(destination = "v1.#", containerFactory = MQConstant.TopicListenerContainerFactory)
  180. public void receiveMessage(Message message) {
  181. // 处理接收到的消息
  182. try {
  183. ActiveMQTopic activeMQTopic = (ActiveMQTopic) message.getJMSDestination();
  184. String topicName = activeMQTopic.getTopicName();
  185. if (topicName.equals("activemq.notifications")) {
  186. return;
  187. }
  188. log.info("receiveMessage {} 消息监听clientId: {}", message.getJMSMessageID(), message.getStringProperty("__AMQ_CID"));
  189. log.info("Topic: {}", topicName);
  190. if (message instanceof ActiveMQBytesMessage) {
  191. ActiveMQBytesMessage activeMQBytesMessage = (ActiveMQBytesMessage) message;
  192. byte[] messageBody = new byte[(int) activeMQBytesMessage.getBodyLength()];
  193. // 读取消息内容到字节数组
  194. activeMQBytesMessage.readBytes(messageBody);
  195. String msg = new String(messageBody);
  196. JSONObject json = JSONObject.parseObject(msg);
  197. log.info("消息内容:{}", json.getString("msg"));
  198. }
  199. if (message instanceof TextMessage) {
  200. TextMessage textMessage = (TextMessage) message;
  201. log.info("textMessage: {}", textMessage.getText());
  202. }
  203. } catch (Exception e) {
  204. e.printStackTrace();
  205. }
  206. }
  207. }