贵州院增加角度推送

This commit is contained in:
weidong 2024-09-10 10:46:22 +08:00
parent bb575eab8f
commit 7123cbe572
3 changed files with 71 additions and 88 deletions

View File

@ -0,0 +1,24 @@
package com.imdroid.beidou_fwd.entity;
import lombok.Data;
/**
* MQTT数据推送 api
*
* @author LiGang
*/
@Data
public class GZYMQTTAngle {
private String deviceSn;
private String collectTime;
private int deviceType = 8;
// gnss数据
private double angleX = 0;
private double angleY = 0;
private double angleZ = 0;
private double angleIn = 0;
private double angleAz = 0;
}

View File

@ -1,12 +1,17 @@
package com.imdroid.beidou_fwd.task; package com.imdroid.beidou_fwd.task;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.imdroid.beidou_fwd.entity.GZYMQTTAngle;
import com.imdroid.beidou_fwd.entity.GZYMQTTData; import com.imdroid.beidou_fwd.entity.GZYMQTTData;
import com.imdroid.beidou_fwd.service.MQTTClient; import com.imdroid.beidou_fwd.service.MQTTClient;
import com.imdroid.common.util.GsonUtil; import com.imdroid.common.util.GsonUtil;
import com.imdroid.common.util.NumberUtils; import com.imdroid.common.util.NumberUtils;
import com.imdroid.secapi.dto.GnssCalcData; import com.imdroid.secapi.dto.GnssCalcData;
import com.imdroid.secapi.dto.GnssStatusMsg;
import com.imdroid.secapi.dto.GnssStatusMsgMapper;
import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@ -15,6 +20,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List; import java.util.List;
@Component @Component
@ -33,7 +39,8 @@ public class GZYMQTTForwarder extends Forwarder {
@Value("${mqtt.server.topic}") @Value("${mqtt.server.topic}")
private String topic; private String topic;
@Autowired
GnssStatusMsgMapper statusMsgMapper;
MQTTClient mqttClient; MQTTClient mqttClient;
@PostConstruct @PostConstruct
@ -50,6 +57,7 @@ public class GZYMQTTForwarder extends Forwarder {
private void forwardGnss() { private void forwardGnss() {
logger.info("gzy mqtt forwardGnss"); logger.info("gzy mqtt forwardGnss");
forwardCurrentGnss(); forwardCurrentGnss();
forwardAngleData();
} }
@Override @Override
@ -68,11 +76,10 @@ public class GZYMQTTForwarder extends Forwarder {
tranData.setDeviceType(2); tranData.setDeviceType(2);
tranData.setDeviceSn(locationRecord.getDeviceid()); tranData.setDeviceSn(locationRecord.getDeviceid());
String json = GsonUtil.toJson(tranData); String json = GsonUtil.toJson(tranData);
logger.info("forward to GZY mqtt"); logger.info("forward to GZY mqtt: {}",json);
logger.info(json);
try { try {
if(!mqttClient.publish(topic, json)) break; if(!mqttClient.publish(topic, json)) break;
Thread.sleep(200); Thread.sleep(50);
} catch (Exception e1) { } catch (Exception e1) {
e1.printStackTrace(); e1.printStackTrace();
} }
@ -82,4 +89,40 @@ public class GZYMQTTForwarder extends Forwarder {
return sendNum; return sendNum;
} }
void forwardAngleData() {
// 获取最近半小时的状态消息
LocalDateTime sentTime = LocalDateTime.now();
QueryWrapper<GnssStatusMsg> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tenantid",tenantId);
queryWrapper.le("createtime",sentTime);
queryWrapper.ge("createtime",sentTime.minusMinutes(fwdCycleMinutes));
queryWrapper.orderByDesc("createtime");
HashMap<String,String> sendDeviceMap = new HashMap<>();
List<GnssStatusMsg> statusMsgs = statusMsgMapper.selectList(queryWrapper);
int sendNum = 0;
for(GnssStatusMsg msg:statusMsgs){
if(sendDeviceMap.get(msg.getDeviceid())!=null) continue;
sendDeviceMap.put(msg.getDeviceid(),msg.getDeviceid());
GZYMQTTAngle tranData = new GZYMQTTAngle();
tranData.setDeviceSn(msg.getDeviceid());
tranData.setCollectTime(msg.getCreatetime().format(formatter));
tranData.setAngleX(msg.getRoll());
tranData.setAngleY(msg.getPitch());
tranData.setAngleAz(msg.getYaw());
String json = GsonUtil.toJson(tranData);
logger.info("forward to GZY mqtt angles: {}",json);
try {
if(!mqttClient.publish(topic, json)) break;
Thread.sleep(10);
} catch (Exception e1) {
e1.printStackTrace();
}
sendNum++;
}
logger.info("total number of angles sent to GZY: {}",sendNum);
}
} }

View File

@ -1,84 +0,0 @@
package com.imdroid.beidou_fwd.task;
import com.imdroid.beidou_fwd.entity.GZYMQTTData;
import com.imdroid.beidou_fwd.service.MQTTClient;
import com.imdroid.common.util.GsonUtil;
import com.imdroid.common.util.NumberUtils;
import com.imdroid.secapi.dto.GnssCalcData;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.util.List;
@Component
@Configuration
@EnableScheduling
public class GZYMQTTForwarder2 extends Forwarder {
static final String FORWARDER_NAME = "贵州交勘院MQTT10分钟";
@Value("${mqtt.server.brokerUrl}")
private String brokerUrl;
@Value("${mqtt.server.username}")
private String username;
@Value("${mqtt.server.password}")
private String password;
@Value("${mqtt.server.clientid}")
private String clientid;
@Value("${mqtt.server.topic}")
private String topic;
MQTTClient mqttClient;
//@PostConstruct
void registerMe() throws MqttException {
init(FORWARDER_NAME, "MQTT "+brokerUrl,2,FWD_DEVICE_ALIAS_NAME,10);
mqttClient = new MQTTClient(brokerUrl, username, password,clientid);
mqttClient.connect();
}
/**
* 每半小时转发GNSS解算结果
*/
//@Scheduled(cron = "0 0/10 * * * ?") // 每10分钟执行一次
private void forwardGnss() {
logger.info("gzy mqtt forwardGnss");
forwardCurrentGnss();
}
@Override
int send(String projectId, List<GnssCalcData> records, LocalDateTime sentTime) {
int sendNum = 0;
for (GnssCalcData locationRecord : records) {
GZYMQTTData tranData = new GZYMQTTData();
tranData.setCollectTime(locationRecord.getCreatetime().format(formatter));
double n = NumberUtils.scale(locationRecord.getRposn(), 2);
double e = NumberUtils.scale(locationRecord.getRpose(), 2);
double d = NumberUtils.scale(locationRecord.getRposd(), 2);
tranData.setX(n);
tranData.setY(e);
tranData.setZ(d);
tranData.setDeviceType(2);
tranData.setDeviceSn(locationRecord.getDeviceid());
String json = GsonUtil.toJson(tranData);
logger.info("forward to GZY mqtt");
logger.info(json);
try {
if(!mqttClient.publish(topic, json)) break;
Thread.sleep(200);
} catch (Exception e1) {
e1.printStackTrace();
}
sendNum++;
}
return sendNum;
}
}