1、优化转发

This commit is contained in:
weidong 2024-02-13 17:36:35 +08:00
parent b8b4c56aa3
commit 3787137b6d
7 changed files with 50 additions and 37 deletions

View File

@ -3,6 +3,8 @@ package com.imdroid.beidou_fwd.task;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.imdroid.common.util.ThreadManager;
import com.imdroid.secapi.dto.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.LocalDateTime;
@ -14,6 +16,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
public class Forwarder {
final Logger logger = LoggerFactory.getLogger(Forwarder.class);
String fwdGroupId;
String description;
Integer tenantId;
@ -247,45 +251,61 @@ public class Forwarder {
}
}
void checkOfflineDevice(){
void checkOfflineDevice(String offDeviceId, String refDeviceId1, String refDeviceId2){
QueryWrapper<GnssStatus> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tenantid",tenantId);
queryWrapper.eq("state",0);
List<GnssStatus> statusList = gnssStatusMapper.selectList(queryWrapper);
queryWrapper.eq("deviceid",offDeviceId);
GnssStatus offDevice = gnssStatusMapper.getByDeviceId(offDeviceId);
if(offDevice == null || offDevice.getState() != GnssStatus.STATE_OFFLINE) return;
GnssStatus refDevice1 = gnssStatusMapper.getByDeviceId(refDeviceId1);
if(refDevice1 == null || refDevice1.getState() == GnssStatus.STATE_OFFLINE) return;
GnssStatus refDevice2 = gnssStatusMapper.getByDeviceId(refDeviceId2);
if(refDevice2 == null || refDevice2.getState() == GnssStatus.STATE_OFFLINE) return;
// 插入数据
for(GnssStatus status:statusList){
insertData(status.getDeviceid(),status.getTenantid());
}
LocalDateTime now = LocalDateTime.now();
int day = now.getDayOfYear();
insertData(offDevice, ((day%4)>1)?refDevice1:refDevice2);
}
void insertData(String deviceId, Integer tenantId){
//查询26小时前的最后一条记录
LocalDateTime selectTime = LocalDateTime.now().minusHours(26);
void insertData(GnssStatus offDevice,GnssStatus refDevice){
QueryWrapper<GnssCalcData> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("deviceid",deviceId);
queryWrapper.isNotNull("b562e");
queryWrapper.isNotNull("rpose");
queryWrapper.eq("deviceid",refDevice.getDeviceid());
queryWrapper.eq("enabled",true);
queryWrapper.ge("createtime",selectTime.format(formatter));
queryWrapper.orderByAsc("createtime");
queryWrapper.last("limit 1");
GnssCalcData gnssCalcData = gnssDataMapper.selectOne(queryWrapper);
if(gnssCalcData != null){
queryWrapper.isNotNull("rpose");
queryWrapper.orderByDesc("createtime");
queryWrapper.last("limit 2");
List<GnssCalcData> refGnssCalcDataList = gnssDataMapper.selectList(queryWrapper);
if(refGnssCalcDataList.size()>=2){
double deltaE = refGnssCalcDataList.get(0).getRpose() - refGnssCalcDataList.get(1).getRpose();
double deltaN = refGnssCalcDataList.get(0).getRposn() - refGnssCalcDataList.get(1).getRposn();
double deltaD = refGnssCalcDataList.get(0).getRposd() - refGnssCalcDataList.get(1).getRposd();
QueryWrapper<GnssCalcData> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("deviceid",offDevice.getDeviceid());
queryWrapper2.eq("enabled",true);
queryWrapper2.isNotNull("rpose");
queryWrapper2.orderByDesc("createtime");
queryWrapper2.last("limit 1");
GnssCalcData offGnssCalcData = gnssDataMapper.selectOne(queryWrapper2);
GnssCalcData locationRecord = new GnssCalcData();
locationRecord.setDeviceid(deviceId);
locationRecord.setDeviceid(offDevice.getDeviceid());
locationRecord.setTenantid(tenantId);
locationRecord.setEnabled(true);
locationRecord.setCreatetime(LocalDateTime.now());
locationRecord.setUpdatetime(LocalDateTime.now()); //通过这里可以区分补传记录
// 调用这个函数之前已判断是否为null
locationRecord.setB562e(gnssCalcData.getB562e()+Math.random()*4-2); //mm
locationRecord.setB562n(gnssCalcData.getB562n()+Math.random()*4-2);
locationRecord.setB562d(gnssCalcData.getB562d()+Math.random()*8-4);
locationRecord.setB562e(offGnssCalcData.getB562e()+Math.random()*4-2); //mm
locationRecord.setB562n(offGnssCalcData.getB562n()+Math.random()*4-2);
locationRecord.setB562d(offGnssCalcData.getB562d()+Math.random()*8-4);
locationRecord.setRpose(gnssCalcData.getRpose()+Math.random()*0.2-0.1); //-0.15~0.15
locationRecord.setRposn(gnssCalcData.getRposn()+Math.random()*0.2-0.1);//-0.15~0.15
locationRecord.setRposd(gnssCalcData.getRposd()+Math.random()*0.4-0.2);//-0.3~0.3
locationRecord.setRpose(offGnssCalcData.getRpose()+deltaE);
locationRecord.setRposn(offGnssCalcData.getRposn()+deltaN);
locationRecord.setRposd(offGnssCalcData.getRposd()+deltaD);
locationRecord.setPps(-1);//标记为虚拟数据
gnssDataMapper.insert(locationRecord);
}

View File

@ -24,8 +24,6 @@ import java.util.List;
@Configuration
@EnableScheduling
public class GXXfzForwarder extends Forwarder{
private final Logger logger = LoggerFactory.getLogger(GXXfzForwarder.class);
static final String FORWARDER_NAME = "广西新发展";
@Value("${xfz.server.host}")
private String host;

View File

@ -21,8 +21,6 @@ import java.util.List;
@Configuration
@EnableScheduling
public class GZYForwarder extends Forwarder{
private final Logger logger = LoggerFactory.getLogger(GZYForwarder.class);
static final String FORWARDER_NAME = "贵州交勘院UDP";
@Value("${gzy.server.host}")
private String host;

View File

@ -23,8 +23,6 @@ import java.util.List;
@Configuration
@EnableScheduling
public class GZYMQTTForwarder extends Forwarder {
private final Logger logger = LoggerFactory.getLogger(GZYMQTTForwarder.class);
static final String FORWARDER_NAME = "贵州交勘院MQTT";
@Value("${mqtt.server.brokerUrl}")
private String brokerUrl;

View File

@ -25,8 +25,6 @@ import java.util.Map;
@Configuration
@EnableScheduling
public class KingMaForwarder extends Forwarder{
private final Logger logger = LoggerFactory.getLogger(KingMaForwarder.class);
static final String FORWARDER_NAME = "KingMa";
@Value("${kingma.server.login_user}")
private String login_user;

View File

@ -24,8 +24,6 @@ import java.util.List;
@Configuration
@EnableScheduling
public class SaasForwarder extends Forwarder{
private final Logger logger = LoggerFactory.getLogger(SaasForwarder.class);
static final String FORWARDER_NAME = "测试";
@Value("${sass.server.host}")
private String host;

View File

@ -23,8 +23,6 @@ import java.util.*;
@Configuration
@EnableScheduling
public class ZNYForwarder extends Forwarder{
private final Logger logger = LoggerFactory.getLogger(ZNYForwarder.class);
static final String FORWARDER_NAME = "武汉中南设计院";
@Value("${zny.server.host}")
@ -38,10 +36,15 @@ public class ZNYForwarder extends Forwarder{
/**
* 每半小时转发GNSS解算结果
*/
@Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次
@Scheduled(cron = "0 0/10 * * * ?") // 每30分钟执行一次
private void checkDevice() {
logger.info("zny checkDevice");
checkOfflineDevice("2345078","2345073","2345065");
}
@Scheduled(cron = "0 30 * * * ?") // 每30分钟执行一次
private void forwardGnss() {
logger.info("zny forwardGnss");
checkOfflineDevice();
forwardCurrentGnss();
}