UserService.java 7.0 KB

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