| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- package com.zy.bms.service;
- import com.zy.bms.common.Constant;
- import com.zy.bms.common.dto.MqttMsgDto;
- import com.zy.bms.config.mqtt.MqttGateway;
- import com.zy.bms.model.Device;
- import com.zy.bms.model.SetBase;
- import com.zy.bms.model.News;
- import com.zy.bms.utils.BeanUtil;
- import com.zy.bms.common.io.wechat.*;
- import com.zy.bms.websocket.WebSocketServer;
- import org.springframework.stereotype.Component;
- import javax.annotation.Resource;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 设备设置 Service
- *
- * @author chen_yi
- * Create on 2021/3/27
- */
- @Component
- public class SetService {
- @Resource
- private SetBaseService setBaseService;
- @Resource
- private SetNewsService setNewsService;
- @Resource
- private MqttGateway mqttGateway;
- @Resource
- private MqttLogService mqttLogService;
- @Resource
- private WebSocketServer webSocketServer;
- /**
- * 设置设备
- *
- * @param code 设置指令
- * @param io 设置信息
- */
- public void set(String code, SetIO io) {
- MqttMsgDto msgDto = getMqttMsgDtoByCode(code, io);
- // 1. 向设备发送设置指令
- mqttGateway.sendMsgToMqtt(msgDto.toJson(), io.getTopic());
- // 2. 设置信息保存至数据库
- saveToDataBase(code, io);
- // 3. 存储消息日志
- mqttLogService.saveLog(io.getTopic(), msgDto.toJson(), 1);
- // 4. 消息转发前端webSocket
- String deviceId = io.getTopic().split("/")[1];
- webSocketServer.massMessage(deviceId, msgDto.toJson());
- }
- /**
- * 服务器返回授权码
- */
- public void returnCodeToDevice(Device device) {
- //发送模板消息给设备
- MqttMsgDto msgDto = new MqttMsgDto();
- msgDto.setM(Constant.M_CODE_RETURN_CODE);
- msgDto.setR(Constant.TOPIC_REGISTER_CLIENT);
- msgDto.setT(Constant.TOPIC_REGISTER_SERVER);
- Map<String, Object> data = new HashMap<>();
- data.put("regnum", device.getNum());
- data.put("deviceid", device.getClientId());
- data.put("password", device.getPassword());
- msgDto.setData(data);
- // 3. 存储消息日志
- mqttLogService.saveLog(Constant.TOPIC_REGISTER_CLIENT, msgDto.toJson(), 1);
- }
- /**
- * 存储至数据库
- */
- private void saveToDataBase(String code, SetIO io) {
- //发送语音播报单独处理
- if (code.equals(Constant.M_CODE_NEWS)) {
- News entity = BeanUtil.cast(io, News.class);
- setNewsService.save(entity);
- } else {
- SetBase entity = BeanUtil.cast(io, SetBase.class);
- setBaseService.updateByDeviceId(entity);
- }
- }
- /**
- * 组装需要发送的模板消息
- *
- * @param code 协议中 M 值
- * @param io 设置信息
- * @return 模板消息对象
- */
- private MqttMsgDto getMqttMsgDtoByCode(String code, SetIO io) {
- MqttMsgDto result = new MqttMsgDto(code, io.getDeviceId());
- switch (code) {
- //自动接听
- case Constant.M_CODE_AUTO_ANSWER: {
- result.set("autoanswer", io.getAutoAnswer());
- break;
- }
- //音量
- case Constant.M_CODE_VOLUME: {
- result.set("msgvol", io.getMsgVol()).set("phonevol", io.getPhoneVol()).set("msgtype", 1);
- break;
- }
- //定位频率
- case Constant.M_CODE_GPS_RATE: {
- result.set("GPS_rate", io.getGpsRate());
- break;
- }
- //语音播报
- case Constant.M_CODE_NEWS: {
- result.set("newstype", io.getNewsType()).set("newstime", io.getNewsTime()).set("news", io.getNews());
- break;
- }
- //SOS紧急呼叫
- case Constant.M_CODE_SOS: {
- result.set("key0_name", io.getKey0Name()).set("key0_phone", io.getKey0Phone())
- .set("key1_name", io.getKey1Name()).set("key1_phone", io.getKey1Phone())
- .set("key2_name", io.getKey2Name()).set("key2_phone", io.getKey2Phone());
- break;
- }
- //持续定位
- case Constant.M_CODE_CONTINUE_GPS: {
- result.set("highfreq", io.getHighFreq());
- break;
- }
- }
- return result;
- }
- }
|