| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- package com.zswl.dataservice.service.user;
- import com.alibaba.fastjson.JSONObject;
- import com.google.gson.JsonObject;
- import com.zswl.dataservice.config.SystemDefaultConfig;
- import com.zswl.dataservice.dao.UserDao;
- import com.zswl.dataservice.domain.user.User;
- import com.zswl.dataservice.model.mqtt.SendMessageModel;
- import com.zswl.dataservice.model.user.UpdateUserPassWordParam;
- import com.zswl.dataservice.service.base.RedisService;
- import com.zswl.dataservice.service.base.SuperService;
- import com.zswl.dataservice.type.ResultState;
- import com.zswl.dataservice.type.UserState;
- import com.zswl.dataservice.type.UserType;
- import com.zswl.dataservice.utils.DateUtils;
- import com.zswl.dataservice.utils.ValidateResult;
- import com.zswl.dataservice.utils.ValidateUtils;
- import com.zswl.dataservice.utils.mqtt.mqttConfig.client.MQClient;
- import com.zswl.dataservice.utils.mqtt.mqttConfig.constant.MQConstant;
- import com.zswl.dataservice.utils.result.ResultContent;
- import jakarta.jms.Message;
- import jakarta.jms.TextMessage;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.activemq.artemis.jms.client.ActiveMQBytesMessage;
- import org.apache.activemq.artemis.jms.client.ActiveMQTopic;
- import org.apache.commons.lang3.ObjectUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.jms.annotation.JmsListener;
- import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
- import org.springframework.security.crypto.password.PasswordEncoder;
- import org.springframework.stereotype.Service;
- import java.util.UUID;
- /**
- * @author TRX
- * @date 2024/3/20
- */
- @Slf4j
- @Service
- public class UserService extends SuperService {
- @Autowired
- UserDao userDao;
- @Autowired
- RedisService redisService;
- @Autowired
- MQClient mqClient;
- /**
- * 初始超级管理员
- *
- * @return
- */
- public ResultContent initAdmin() {
- PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
- String loginName = "admin";
- User user = userDao.findByLoginName(loginName);
- if (ObjectUtils.isEmpty(user)) {
- user = new User();
- String defaultPassWord = SystemDefaultConfig.defaultPassWord;
- user.setLoginName(loginName);
- user.setUserName("超级管理员");
- user.setPassWord(passwordEncoder.encode(defaultPassWord));
- user.setUserType(UserType.SuperAdmin);
- user.setIsAdmin(Boolean.TRUE);
- user.setUserState(UserState.Enable);
- user.setPhone("");
- user.setHeadUrl("");
- userDao.save(user);
- } else {
- log.info("admin 用户已存在");
- }
- return ResultContent.buildSuccess();
- }
- /**
- * 编辑当前用户密码
- *
- * @param param
- * @return
- */
- public ResultContent updateUserPassWord(UpdateUserPassWordParam param) {
- PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
- String userId = getCurrentUserId();
- User user = userDao.findTopById(userId);
- if (ObjectUtils.isEmpty(user)) {
- return ResultContent.buildFail("当前用户信息为空");
- }
- if (!param.getConfirmPass().equals(param.getPassWord())) {
- return ResultContent.buildFail("密码和验证密码不一致");
- }
- if (param.getOldPass().equals(param.getPassWord())) {
- return ResultContent.buildFail("原密码和密码不能一致");
- }
- ValidateResult validateResult = ValidateUtils.validatePassWord(param.getPassWord());
- if (!validateResult.isSuccess()) {
- return ResultContent.buildFail(validateResult.getMsg());
- }
- ResultContent resultContent = checkLoginPassword(userId, param.getOldPass());
- if (resultContent.isFailed()) {
- return resultContent;
- }
- user.setPassWord(passwordEncoder.encode(param.getPassWord()));
- userDao.save(user);
- return ResultContent.buildSuccess();
- }
- /**
- * 验证用户密码是否正确
- *
- * @param uid
- * @param passWord
- * @return
- */
- public ResultContent checkLoginPassword(String uid, String passWord) {
- User user = userDao.findTopById(uid);
- if (user == null) {
- return ResultContent.buildContent(ResultState.UserNotExists);
- }
- PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
- return ResultContent.build(passwordEncoder.matches(passWord, user.getPassWord()) ? ResultState.Success : ResultState.UserPasswordError);
- }
- /**
- * 发送指令
- *
- * @param param
- * @return
- */
- public ResultContent sendMessage(SendMessageModel param) {
- String msg = "发送成功";
- try {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty("id", UUID.randomUUID().toString());
- jsonObject.addProperty("data", param.getMessage());
- jsonObject.addProperty("time", DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyySSS));
- jsonObject.addProperty("ttl", 10 * 1000);
- mqClient.sendObject(param.getTopic(), jsonObject.toString());
- log.info("mqtt msg 发送成功");
- } catch (Exception e) {
- e.printStackTrace();
- msg = "发送失败: " + e.getMessage();
- }
- return ResultContent.buildSuccess(msg);
- }
- // @JmsListener(destination = "#", containerFactory = MQConstant.TopicListenerContainerFactory)
- @JmsListener(destination = "v1/#", containerFactory = MQConstant.TopicListenerContainerFactory)
- @JmsListener(destination = "v1.#", containerFactory = MQConstant.TopicListenerContainerFactory)
- public void receiveMessage(Message message) {
- // 处理接收到的消息
- try {
- ActiveMQTopic activeMQTopic = (ActiveMQTopic) message.getJMSDestination();
- String topicName = activeMQTopic.getTopicName();
- if (topicName.equals("activemq.notifications")) {
- return;
- }
- log.info("receiveMessage {} 消息监听clientId: {}", message.getJMSMessageID(), message.getStringProperty("__AMQ_CID"));
- log.info("Topic: {}", topicName);
- if (message instanceof ActiveMQBytesMessage) {
- ActiveMQBytesMessage activeMQBytesMessage = (ActiveMQBytesMessage) message;
- byte[] messageBody = new byte[(int) activeMQBytesMessage.getBodyLength()];
- // 读取消息内容到字节数组
- activeMQBytesMessage.readBytes(messageBody);
- String msg = new String(messageBody);
- JSONObject json = JSONObject.parseObject(msg);
- log.info("消息内容:{}", json.getString("msg"));
- }
- if (message instanceof TextMessage) {
- TextMessage textMessage = (TextMessage) message;
- log.info("textMessage: {}", textMessage.getText());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
|