diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java index 8f0e5460..e3705061 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java @@ -244,8 +244,8 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { } - // 检查b562有效数,如果过少,产生告警 - warningService.checkB562Num(deviceId, tenantId, focusCalculator.getB562Stat()); + // 检查b562有效数,如果过少,产生告警——改到d341Executor检查 + //warningService.checkB562Num(deviceId, tenantId, focusCalculator.getB562Stat()); focusCalculator.reset(); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java index 5c00fda5..55084c7b 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java @@ -7,7 +7,6 @@ import com.imdroid.sideslope.bd.Gga; import com.imdroid.sideslope.message.D331RtcmMessage; import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.DeviceService; -import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.OnlineChannels; import com.imdroid.sideslope.service.DataPersistService; import io.netty.buffer.ByteBuf; @@ -45,7 +44,7 @@ public class D331RtcmMessageExecutor implements Executor if (logger.isDebugEnabled()) { logger.debug("receive d331 rtcm message of device: "+message.getId()+", seq:"+message.getSeq()+", len:"+message.getLen()); } - + // 推送基站数据 if(device1.getOpMode() == GnssDevice.OP_MODE_USE) { byte[] forwardBytes = message.getSrcData(); // 要求快速转发,因此用缓存,不要每次都查数据库 @@ -67,29 +66,21 @@ public class D331RtcmMessageExecutor implements Executor } } - // trx stat - message.setTenantId(device1.getTenantId()); - LocalDateTime lastTime = device1.getLastRxTime(); - Device lastCycleDevice; - if(LocalDateTime.now().isAfter(lastTime.plusMinutes(1))){ - // new cycle - lastCycleDevice = new Device(); - lastCycleDevice.setDeviceId(device1.getDeviceId()); - lastCycleDevice.setTenantId(device1.getTenantId()); - lastCycleDevice.setD3xxbytes(device1.getD3xxbytes()); - lastCycleDevice.setD341Count(device1.getD341Count()); - lastCycleDevice.setLastRxTime(device1.getLastRxTime()); - lastCycleDevice.setSatelitesInUse(device1.getSatelitesInUse()); - device1.clearStat(); - } else { - lastCycleDevice = null; - } - - // 如果控制通道没连接,则收到不到d3f0和d3f2,则根据UDP最后一个报文触发状态更新和统计 - // 测站的更新和统计放在解算之后进行,因为要统计固定解浮点解等信息 - if(lastCycleDevice != null){ - DeviceChannel channel = OnlineChannels.INSTANCE.getConfigChannel(device1.getDeviceId()); - if(channel == null || !channel.isOnline()){ + // 如果30分钟内收到不到d3f0和d3f2,则根据UDP最后一个报文触发状态更新和统计 + LocalDateTime now = LocalDateTime.now(); + if(device1.getLastRxTime()!=null && + device1.getLastRxTime().isBefore(now.minusMinutes(1))){ + if(device1.getLastD3f0f2Time() == null || + device1.getLastD3f0f2Time().isBefore(now.minusMinutes(30))) { + // new cycle + Device lastCycleDevice = new Device(); + lastCycleDevice.setDeviceId(device1.getDeviceId()); + lastCycleDevice.setTenantId(device1.getTenantId()); + lastCycleDevice.setD3xxbytes(device1.getD3xxbytes()); + lastCycleDevice.setD3xxCount(device1.getD3xxCount()); + lastCycleDevice.setLastRxTime(device1.getLastRxTime()); + lastCycleDevice.setSatelitesInUse(device1.getSatelitesInUse()); + device1.clearStat(); ThreadManager.getFixedThreadPool().submit(() -> { // 通知上线 try { @@ -102,6 +93,7 @@ public class D331RtcmMessageExecutor implements Executor } } + // update trx device1.updateRx(message.getHeader(),message.getLen(),message.getPacketNum()); // update gga Gga gga = message.getGga(); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java index 1cbba4e4..094020df 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java @@ -7,14 +7,14 @@ import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.DeviceService; import com.imdroid.common.util.ThreadManager; -import com.imdroid.sideslope.server.DeviceChannel; -import com.imdroid.sideslope.server.OnlineChannels; +import com.imdroid.sideslope.service.DataPersistService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.time.LocalDateTime; /** * @author Layton @@ -31,6 +31,8 @@ public class D341LocationMessageExecutor implements Executor { + // 通知上线 + try { + beidouClient.onDeviceActive(device.getDeviceId(), device.getTenantId()); + } catch (Exception e) { + + } + dataPersistService.updateDeviceState(lastCycleDevice); + }); + } + } + + // update trx device.updateRx(message.getHeader(), message.getLen(), 1); double[] pos = message.getB562_loc(); device.updateB562Quality((int) pos[3]); @@ -54,20 +87,6 @@ public class D341LocationMessageExecutor implements Executor { gnssCalcService.calcSingle(message,true); }); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java index bb7830dd..23ca41c3 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java @@ -79,6 +79,9 @@ public class D3F2StopIndicationMessageExecutor implements Executor