diff --git a/readme.txt b/readme.txt index ae460e46..5d54a31d 100644 --- a/readme.txt +++ b/readme.txt @@ -52,4 +52,9 @@ beidou-ehm 9912 健康检查、SIM卡检查 2025-04 1)告警参数配置增加一个字段:单位 -2)健康检查增加连续无有效解的时长之和统计 \ No newline at end of file +2)健康检查增加连续无有效解的时长之和统计 + +3)批量升级: +a)在设备页面增加勾选框和“准备升级”、“完成升级”按钮 +b)点击“准备升级”,把模式改为“待升级”,同时发连接版本服务器指令 +c)点击“完成升级”,把模式改为“正常” \ No newline at end of file diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java index d7125242..3ae22ede 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java @@ -1,6 +1,6 @@ package com.imdroid.sideslope.bd; -import com.imdroid.sideslope.sal.Device; +import com.imdroid.sideslope.service.Device; import java.time.LocalDateTime; import java.util.ArrayList; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java index ef0a6775..1bf1e79a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSCalcFilterService.java @@ -3,7 +3,7 @@ package com.imdroid.sideslope.calc; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.imdroid.common.util.NumberUtils; import com.imdroid.secapi.dto.*; -import com.imdroid.sideslope.sal.Device; +import com.imdroid.sideslope.service.Device; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java index fecec310..e8fa445e 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java @@ -2,7 +2,7 @@ package com.imdroid.sideslope.calc; import com.imdroid.secapi.dto.GnssGroupCalc; import com.imdroid.sideslope.message.D341LocationMessage; -import com.imdroid.sideslope.sal.Device; +import com.imdroid.sideslope.service.Device; import java.time.LocalDateTime; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java index fd075de6..a9e1ed36 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java @@ -5,17 +5,15 @@ import com.imdroid.secapi.dto.*; import com.imdroid.sideslope.message.BaseMessage; import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.message.D342LocationMessage; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; import com.imdroid.sideslope.service.DataPersistService; +import com.imdroid.sideslope.service.GroupParaService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -40,24 +38,11 @@ public class MultiLineGNSSCalcService { private BeidouClient beidouClient; @Autowired DataPersistService dataPersistService; - @Resource(name = "local") + @Autowired private DeviceService deviceService; @Autowired - GnssGroupCalcMapper groupCalcMapper; - List groupCalcList; - - synchronized GnssGroupCalc getGroupCalc(int groupId){ - if(groupCalcList == null){ - groupCalcList = groupCalcMapper.selectList(null); - } - if(groupCalcList != null){ - for(GnssGroupCalc groupCalc:groupCalcList){ - if(groupCalc.getId() == groupId) return groupCalc; - } - } - return null; - } + GroupParaService groupParaService; public void calc(D342LocationMessage d342Message){ // 如果时间跨度大于1分钟,或者不含d341,则计算平滑值 @@ -79,7 +64,7 @@ public class MultiLineGNSSCalcService { logger.info(deviceId + " d341 cycle done!"); // 计算上轮结果 Device device = deviceService.findByDeviceId(deviceId); - GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId()); + GnssGroupCalc groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId()); calcService.calSingleDone(device, groupCalc, lastD342Time.createTime); } } @@ -130,7 +115,7 @@ public class MultiLineGNSSCalcService { } // 计算上轮结果 Device device = deviceService.findByDeviceId(deviceId); - GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId()); + GnssGroupCalc groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId()); calcService.calSingleDone(device, groupCalc, lastDate); // 重算最近的 lastDate = gnssCalcFilterService.updateRpos(device,groupCalc,lastDate); @@ -185,10 +170,4 @@ public class MultiLineGNSSCalcService { } else return null; } - - public void refreshGroupCalc(){ - if(groupCalcList!=null) groupCalcList.clear(); - groupCalcList = groupCalcMapper.selectList(null); - logger.info("group paras changed"); - } } 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 d683555b..bae6a5c8 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 @@ -6,11 +6,12 @@ import com.imdroid.common.util.ThreadManager; import com.imdroid.secapi.dto.*; import com.imdroid.sideslope.bd.*; import com.imdroid.sideslope.message.D341LocationMessage; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.OnlineChannels; import com.imdroid.sideslope.service.GnssSingleBufferService; +import com.imdroid.sideslope.service.GroupParaService; import com.imdroid.sideslope.service.WarningService; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -18,8 +19,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; @@ -46,31 +45,17 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { @Autowired GNSSCalcFilterService gnssCalcFilterService; - @Resource(name = "local") + @Autowired private DeviceService deviceService; @Autowired - GnssGroupCalcMapper groupCalcMapper; + GroupParaService groupParaService; @Autowired GnssCalcDataMapper dataMapper; @Autowired private GnssSingleBufferService gnssSingleDataService; - // 非线程安全,需加同步保护 - List groupCalcList; - - synchronized GnssGroupCalc getGroupCalc(int groupId){ - if(groupCalcList == null){ - groupCalcList = groupCalcMapper.selectList(null); - } - if(groupCalcList != null){ - for(GnssGroupCalc groupCalc:groupCalcList){ - if(groupCalc.getId() == groupId) return groupCalc; - } - } - return null; - } /*** * 处理本轮的固定解,求出重心位置。多线程调用,访问成员变量要考虑多线程安全 @@ -83,7 +68,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { String deviceId = message.getId(); Device device = deviceService.findByDeviceId(deviceId); if(device == null) return; - GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId()); + GnssGroupCalc groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId()); if(groupCalc==null) return; device.setB562AsCalc(groupCalc.getVer()!=3); @@ -182,7 +167,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { future = null; } if(null == groupCalc){ - groupCalc = getGroupCalc(device.getCalcGroupId()); + groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId()); if(groupCalc == null) return; } calCycleResult(device, groupCalc, resultTime); @@ -353,13 +338,6 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { focusCalculator.reset(); } - public void refreshGroupCalc(){ - if(groupCalcList!=null) groupCalcList.clear(); - groupCalcList = groupCalcMapper.selectList(null); - calculatorMap.clear(); - logger.info("group paras changed"); - } - public void refreshDeviceCalc(String deviceId){ Device device = deviceService.findByDeviceId(deviceId); if(device == null) return; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D31xConfigAckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D31xConfigAckMessageExecutor.java index af71cb09..fd86630d 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D31xConfigAckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D31xConfigAckMessageExecutor.java @@ -3,13 +3,11 @@ package com.imdroid.sideslope.executor; import com.imdroid.common.util.ByteUtil; import com.imdroid.secapi.client.BeidouClient; import com.imdroid.sideslope.message.D31xConfigAckMessage; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.Resource; - /** * @author Layton * @date 2023/2/2 20:40 @@ -18,7 +16,7 @@ import javax.annotation.Resource; public class D31xConfigAckMessageExecutor implements Executor { @Autowired private BeidouClient beidouClient; - @Resource(name = "local") + @Autowired private DeviceService deviceService; @Override 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 8d643ea0..0a311165 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 @@ -8,8 +8,8 @@ import com.imdroid.common.util.ByteUtil; import com.imdroid.sideslope.bd.Gga; import com.imdroid.sideslope.message.D331RtcmMessage; import com.imdroid.sideslope.ntrip.UdpNtripServer; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.OnlineChannels; import com.imdroid.sideslope.service.DataPersistService; @@ -21,8 +21,6 @@ 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; import java.util.List; import java.util.Optional; @@ -37,7 +35,7 @@ public class D331RtcmMessageExecutor implements Executor private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Resource(name = "local") + @Autowired private DeviceService deviceService; @Autowired private BeidouClient beidouClient; @@ -62,6 +60,7 @@ public class D331RtcmMessageExecutor implements Executor DeviceChannel deviceChannel = null; for (Device device : deviceList) { if (device.getOpMode() != GnssDevice.OP_MODE_USE) continue; + if ((deviceBs.getD3xxCount()%device.getGnssSampleRate()) != 0) continue; String deviceId = device.getDeviceId(); if(device.getDataChannelType() == Device.CHANNEL_TYPE_UDP) { deviceChannel = OnlineChannels.INSTANCE.getDataChannel(deviceId); 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 45f8fa91..659681dc 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,15 +7,13 @@ import com.imdroid.secapi.dto.GnssDevice; import com.imdroid.sideslope.bd.Gga; import com.imdroid.sideslope.calc.GNSSDataCalcService; import com.imdroid.sideslope.message.D341LocationMessage; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; 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; /** @@ -29,7 +27,7 @@ public class D341LocationMessageExecutor implements Executor { // 检查是否需要对设备的F9P进行冷启动操作 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 1f0faa83..c5f8f71b 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 @@ -7,8 +7,8 @@ import com.imdroid.secapi.dto.GnssTrxMsg; import com.imdroid.sideslope.calc.GNSSDataCalcService; import com.imdroid.sideslope.calc.MultiLineGNSSCalcService; import com.imdroid.sideslope.message.D3F2StopIndicationMessage; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; import com.imdroid.sideslope.service.DataPersistService; import com.imdroid.sideslope.service.GnssSingleBufferServiceImpl; import org.slf4j.Logger; @@ -16,7 +16,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.time.LocalDateTime; /** @@ -34,7 +33,7 @@ public class D3F2StopIndicationMessageExecutor implements Executor findByParentId(String parentId) { - QueryWrapper query = new QueryWrapper(); - query.eq("parentid", parentId); - List gnssDeviceList = gnssDeviceRepository.selectList(query); - List deviceList = new ArrayList<>(gnssDeviceList.size()); - for (GnssDevice gnssDevice : gnssDeviceList) { - Device device = new Device(); - device.setDeviceId(gnssDevice.getDeviceid()); - device.setDeviceType(gnssDevice.getDevicetype()); - device.setParentId(gnssDevice.getParentid()); - device.setName(gnssDevice.getName()); - device.setProjectId(gnssDevice.getProject_id()); - device.setCalcGroupId(gnssDevice.getCalc_group_id()); - device.setOpMode(gnssDevice.getOpmode()); - device.setFwdId(gnssDevice.getFwd_group_id()); - device.setIPose(gnssDevice.getIpose()); - device.setIPosn(gnssDevice.getIposn()); - device.setIPosd(gnssDevice.getIposd()); - device.setEcefx(gnssDevice.getEcefx()); - device.setEcefy(gnssDevice.getEcefy()); - device.setEcefz(gnssDevice.getEcefz()); - deviceList.add(device); - } - return deviceList; - } - -} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocalDeviceServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocalDeviceServiceImpl.java deleted file mode 100644 index 43693fb0..00000000 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocalDeviceServiceImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.imdroid.sideslope.sal; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.List; -import java.util.concurrent.TimeUnit; - -/** - * @author Layton - * @date 2023/2/3 20:46 - */ -@Component(value = "local") -public class LocalDeviceServiceImpl implements DeviceService { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - /*static RemovalListener removalListener = new RemovalListener() { - public void onRemoval(RemovalNotification removal) { - - } - };*/ - private static final Cache deviceCache = CacheBuilder.newBuilder(). - expireAfterAccess(20, TimeUnit.MINUTES).build(); - - private static final Cache> subDeviceCache = CacheBuilder.newBuilder(). - expireAfterAccess(10, TimeUnit.MINUTES).build(); - - @Resource(name = "db") - private DeviceService delegate; - - @Override - public Device findByDeviceId(String deviceId) { - Device device = deviceCache.getIfPresent(deviceId); - if (device == null) { - device = delegate.findByDeviceId(deviceId); - if (device != null) { - deviceCache.put(deviceId, device); - } - } - return device; - } - - @Override - public List findByParentId(String parentId) { - List device = subDeviceCache.getIfPresent(parentId); - if (device == null) { - logger.debug("base station {} refresh: "+parentId); - device = delegate.findByParentId(parentId); - if (device != null) { - subDeviceCache.put(parentId, device); - } - } - return device; - } - - public void refresh(String deviceId, String oldParentId){ - Device device = deviceCache.getIfPresent(deviceId); - if (device != null) { - if(device.getParentId()!=null) { - subDeviceCache.invalidate(device.getParentId()); - if(oldParentId!=null && !oldParentId.equals(device.getParentId())){ - subDeviceCache.invalidate(oldParentId); - } - } - deviceCache.invalidate(deviceId); - } - } -} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java index 6196c914..1c2770f9 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java @@ -4,7 +4,6 @@ import com.imdroid.secapi.dto.GnssStatus; import com.imdroid.sideslope.message.D342LocationMessage; import com.imdroid.sideslope.message.D3F0SelfCheckMessage; import com.imdroid.sideslope.message.D3F2StopIndicationMessage; -import com.imdroid.sideslope.sal.Device; /** * 设备数据持久化接口,保存: diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java index 79eaa307..96b09f36 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java @@ -5,7 +5,6 @@ import com.imdroid.sideslope.message.BaseMessage; import com.imdroid.sideslope.message.D342LocationMessage; import com.imdroid.sideslope.message.D3F0SelfCheckMessage; import com.imdroid.sideslope.message.D3F2StopIndicationMessage; -import com.imdroid.sideslope.sal.Device; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/Device.java similarity index 97% rename from sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java rename to sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/Device.java index 70bad0b6..af1c692c 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/Device.java @@ -1,4 +1,4 @@ -package com.imdroid.sideslope.sal; +package com.imdroid.sideslope.service; import com.imdroid.secapi.dto.GnssDevice; import com.imdroid.sideslope.bd.Gga; @@ -45,6 +45,8 @@ public class Device { private Integer calcGroupId; private Short opMode; private boolean b562AsCalc = true;//算法版本 + private Integer basicGroupId; + private short gnssSampleRate = 1; int d3xxCount = 0; int d3xxbytes = 0; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DeviceService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DeviceService.java similarity index 84% rename from sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DeviceService.java rename to sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DeviceService.java index 6d0f65e6..7d927672 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DeviceService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DeviceService.java @@ -1,4 +1,4 @@ -package com.imdroid.sideslope.sal; +package com.imdroid.sideslope.service; import java.util.List; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GroupParaService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GroupParaService.java new file mode 100644 index 00000000..05297d1a --- /dev/null +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GroupParaService.java @@ -0,0 +1,58 @@ +package com.imdroid.sideslope.service; + +import com.imdroid.secapi.dto.GnssGroup; +import com.imdroid.secapi.dto.GnssGroupCalc; +import com.imdroid.secapi.dto.GnssGroupCalcMapper; +import com.imdroid.secapi.dto.GnssGroupMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +@Service +public class GroupParaService { + @Autowired + GnssGroupMapper basicGroupMapper; + @Autowired + GnssGroupCalcMapper calcGroupMapper; + private ConcurrentHashMap basicGroupMap; + private ConcurrentHashMap calcGroupMap; + + public GnssGroup getBasicGroup(Integer groupId){ + if(basicGroupMap==null){ + refreshBasicGroup(); + } + return basicGroupMap.get(groupId); + } + public GnssGroupCalc getCalcGroup(Integer groupId){ + if(calcGroupMap==null){ + refreshCalcGroup(); + } + return calcGroupMap.get(groupId); + } + public void refreshGroup(){ + refreshBasicGroup(); + refreshCalcGroup(); + } + void refreshBasicGroup(){ + if(basicGroupMap==null){ + basicGroupMap = new ConcurrentHashMap<>(); + } + basicGroupMap.clear(); + List gnssGroupList = basicGroupMapper.selectList(null); + for(GnssGroup group:gnssGroupList){ + basicGroupMap.put(group.getId(),group); + } + } + void refreshCalcGroup(){ + if(calcGroupMap==null){ + calcGroupMap = new ConcurrentHashMap<>(); + } + calcGroupMap.clear(); + List gnssGroupList = calcGroupMapper.selectList(null); + for(GnssGroupCalc group:gnssGroupList){ + calcGroupMap.put(group.getId(),group); + } + } +} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/LocalDeviceServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/LocalDeviceServiceImpl.java new file mode 100644 index 00000000..21329cfc --- /dev/null +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/LocalDeviceServiceImpl.java @@ -0,0 +1,104 @@ +package com.imdroid.sideslope.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.imdroid.secapi.dto.GnssDevice; +import com.imdroid.secapi.dto.GnssDeviceMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * @author Layton + * @date 2023/2/3 20:46 + */ +@Component +public class LocalDeviceServiceImpl implements DeviceService { + @Autowired + private GnssDeviceMapper gnssDeviceMapper; + + private static final Cache deviceCache = CacheBuilder.newBuilder(). + expireAfterAccess(20, TimeUnit.MINUTES).build(); + + private static final Cache> subDeviceCache = CacheBuilder.newBuilder(). + expireAfterAccess(10, TimeUnit.MINUTES).build(); + + Device getDeviceFromDB(String deviceId){ + GnssDevice gnssDevice = gnssDeviceMapper.queryByDeviceId(deviceId); + if (gnssDevice == null) { + return null; + } + Device device = new Device(); + device.setTenantId(gnssDevice.getTenantid()); + device.setDeviceId(gnssDevice.getDeviceid()); + device.setDeviceType(gnssDevice.getDevicetype()); + device.setModel(gnssDevice.getModel()); + device.setParentId(gnssDevice.getParentid()); + device.setName(gnssDevice.getName()); + device.setProjectId(gnssDevice.getProject_id()); + device.setCalcGroupId(gnssDevice.getCalc_group_id()); + device.setBasicGroupId(gnssDevice.getGroup_id()); + device.setOpMode(gnssDevice.getOpmode()); + device.setFwdId(gnssDevice.getFwd_group_id()); + device.setIPose(gnssDevice.getIpose()); + device.setIPosn(gnssDevice.getIposn()); + device.setIPosd(gnssDevice.getIposd()); + device.setEcefx(gnssDevice.getEcefx()); + device.setEcefy(gnssDevice.getEcefy()); + device.setEcefz(gnssDevice.getEcefz()); + device.setLoggingmode(gnssDevice.getLoggingmode()); + return device; + } + + public List getDeviceListFromDBByParentId(String parentId) { + QueryWrapper query = new QueryWrapper(); + query.eq("parentid", parentId); + List gnssDeviceList = gnssDeviceMapper.selectList(query); + List deviceList = new ArrayList<>(gnssDeviceList.size()); + for (GnssDevice gnssDevice : gnssDeviceList) { + Device device = findByDeviceId(gnssDevice.getDeviceid()); + if(device!=null) deviceList.add(device); + } + return deviceList; + } + @Override + public Device findByDeviceId(String deviceId) { + Device device = deviceCache.getIfPresent(deviceId); + if (device == null) { + device = getDeviceFromDB(deviceId); + if (device != null) { + deviceCache.put(deviceId, device); + } + } + return device; + } + + @Override + public List findByParentId(String parentId) { + List devices = subDeviceCache.getIfPresent(parentId); + if (devices == null) { + devices = getDeviceListFromDBByParentId(parentId); + if (devices != null) { + subDeviceCache.put(parentId, devices); + } + } + return devices; + } + + public void refresh(String deviceId, String oldParentId){ + Device device = deviceCache.getIfPresent(deviceId); + if (device != null) { + if(device.getParentId()!=null) { + subDeviceCache.invalidate(device.getParentId()); + if(oldParentId!=null && !oldParentId.equals(device.getParentId())){ + subDeviceCache.invalidate(oldParentId); + } + } + deviceCache.invalidate(deviceId); + } + } +} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningService.java index 40be0eca..f4d9845c 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningService.java @@ -3,7 +3,6 @@ package com.imdroid.sideslope.service; import com.imdroid.secapi.dto.GnssCalcData; import com.imdroid.secapi.dto.GnssStatus; import com.imdroid.secapi.dto.GnssStatusMsg; -import com.imdroid.sideslope.sal.Device; public interface WarningService { void refreshCfg(); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java index 88ecc70c..90c0f610 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.imdroid.common.util.NumberUtils; import com.imdroid.common.util.WarningLogExecutor; import com.imdroid.secapi.dto.*; -import com.imdroid.sideslope.sal.Device; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/task/AbnormalDeviceProcessor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/task/AbnormalDeviceProcessor.java index 80701a29..daaf3ff4 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/task/AbnormalDeviceProcessor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/task/AbnormalDeviceProcessor.java @@ -3,8 +3,8 @@ package com.imdroid.sideslope.task; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.imdroid.secapi.dto.*; import com.imdroid.sideslope.calc.GNSSCalcFilterService; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +15,6 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; -import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; @@ -30,7 +29,7 @@ public class AbnormalDeviceProcessor{ private GnssStatusMapper gnssStatusMapper; @Autowired GNSSCalcFilterService filterService; - @Resource(name = "local") + @Autowired private DeviceService deviceService; @Autowired diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java index 1b2075ce..d0dc17bf 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java @@ -4,10 +4,11 @@ import com.imdroid.common.util.DataTypeUtil; import com.imdroid.secapi.client.HttpResp; import com.imdroid.sideslope.calc.MultiLineGNSSCalcService; import com.imdroid.sideslope.calc.SingleLineGNSSCalcService; -import com.imdroid.sideslope.sal.Device; -import com.imdroid.sideslope.sal.LocalDeviceServiceImpl; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.LocalDeviceServiceImpl; import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.OnlineChannels; +import com.imdroid.sideslope.service.GroupParaService; import com.imdroid.sideslope.service.WarningService; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -41,6 +42,8 @@ public class ApiController { SingleLineGNSSCalcService calcService; @Autowired MultiLineGNSSCalcService multiCalcService; + @Autowired + GroupParaService groupParaService; @PostMapping(value = "/config") public HttpResp config(String deviceId, String configuration) { @@ -163,14 +166,12 @@ public class ApiController { @PostMapping("/group_param_changed") public HttpResp groupParamChanged(){ - calcService.refreshGroupCalc(); - multiCalcService.refreshGroupCalc(); + groupParaService.refreshGroup(); HttpResp resp = new HttpResp(); resp.setResponseMessage("succeed"); return resp; } - @PostMapping("/warning_param_changed") public HttpResp warningParamChanged(){ warningService.refreshCfg(); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java index 832d3905..28986a21 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java @@ -66,7 +66,7 @@ public class GnssDeviceController extends BasicController{ } @RequestMapping("/page/table/gnss_add_dev") - public String gnssUpdateDev(Model m, HttpSession session) { + public String gnssAddDev(Model m, HttpSession session) { initModel(m, session); //以下用于下拉框数据 List gnssGroups = gnssGroupMapper.selectList(null); @@ -86,6 +86,34 @@ public class GnssDeviceController extends BasicController{ m.addAttribute("gnss_group_list", gnssGroups); m.addAttribute("gnss_group_calc_list", gnssGroupCalcs); m.addAttribute("gnss_group_fwd_list", gnssGroupFwds); + m.addAttribute("device", new GnssDevice()); + + return "/page/table/gnss_add_dev"; + } + + @RequestMapping("/page/table/gnss_edit_dev") + public String gnssEditDev(Model m, HttpSession session, Integer id) { + initModel(m, session); + //以下用于下拉框数据 + List gnssGroups = gnssGroupMapper.selectList(null); + List gnssGroupCalcs = gnssGroupCalcMapper.selectList(null); + List gnssGroupFwds = gnssGroupFwdMapper.selectList(null); + + List tenants; + if(loginRole.equals(Role.SUPER_ADMIN) || loginRole.equals(Role.ADMIN)) { + tenants = tenantMapper.selectList(null); + } + else{ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("id", tenantId); + tenants = tenantMapper.selectList(queryWrapper); + } + GnssDevice device = gnssDeviceMapper.selectById(id); + m.addAttribute("tenant_list", tenants); + m.addAttribute("gnss_group_list", gnssGroups); + m.addAttribute("gnss_group_calc_list", gnssGroupCalcs); + m.addAttribute("gnss_group_fwd_list", gnssGroupFwds); + m.addAttribute("device", device); return "/page/table/gnss_add_dev"; } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java index 4653325d..d6a702a0 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java @@ -94,6 +94,7 @@ public class GnssGroupController extends BasicController { } else{ // 更新所有的device同步标志 deviceMapper.setSynFlagByGroupId(group.getId()); + rtcmClient.groupParamChanged(); return HttpResult.ok(); } } @@ -115,7 +116,10 @@ public class GnssGroupController extends BasicController { group.getName()); if (num == 0) { return HttpResult.failed(); - } else return HttpResult.ok(); + } else { + rtcmClient.groupParamChanged(); + return HttpResult.ok(); + } } /********* 解算参数组 *********/ diff --git a/sec-beidou/src/main/resources/static/images/loc_blue.png b/sec-beidou/src/main/resources/static/images/loc_blue.png new file mode 100644 index 00000000..7b26205c Binary files /dev/null and b/sec-beidou/src/main/resources/static/images/loc_blue.png differ diff --git a/sec-beidou/src/main/resources/templates/page/device_overview.html b/sec-beidou/src/main/resources/templates/page/device_overview.html index c2ad2c1b..64e550df 100644 --- a/sec-beidou/src/main/resources/templates/page/device_overview.html +++ b/sec-beidou/src/main/resources/templates/page/device_overview.html @@ -142,8 +142,10 @@ var loc_green = new BMapGL.Icon("../images/loc1_green.png", new BMapGL.Size(18, 24)); var loc_red = new BMapGL.Icon("../images/loc1_red.png", new BMapGL.Size(18, 24)); var loc_orange = new BMapGL.Icon("../images/loc1_orange.png", new BMapGL.Size(18, 24)); - + var loc_blue = new BMapGL.Icon("../images/loc_blue.png", new BMapGL.Size(18, 24)); + initialize(); + myLocation(); function initialize() { var point = new BMapGL.Point(116.404, 39.915); @@ -233,7 +235,19 @@ // 启动函数 timer(); } - + + function myLocation(){ + var geolocation = new BMapGL.Geolocation(); + geolocation.getCurrentPosition(function(r){ + if(this.getStatus() == BMAP_STATUS_SUCCESS){ + var mk = new BMapGL.Marker(r.point, { + icon: loc_blue + }); + map.addOverlay(mk); + map.panTo(r.point); + } + }); + } function showAll(){ if(marker_state == 2){ diff --git a/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html b/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html index cb248163..eec193d9 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html @@ -219,11 +219,7 @@ maxmin:true, shadeClose: true, area: ['100%', '100%'], - content: '../page/table/gnss_add_dev', - success: function(layero, index) { - var iframe = window['layui-layer-iframe' + index]; - iframe.setParams(data); - } + content: '../page/table/gnss_edit_dev?id='+data.id }); $(window).on("resize", function () { layer.full(index); diff --git a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html index 68214b0b..5e311686 100644 --- a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html +++ b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html @@ -16,18 +16,19 @@ -
+
+
- +
- @@ -38,7 +39,7 @@
- @@ -49,7 +50,7 @@
- @@ -69,7 +70,7 @@
- @@ -78,7 +79,7 @@
- +
@@ -86,19 +87,19 @@
- +
- +
- +
@@ -106,7 +107,7 @@
-
@@ -114,7 +115,7 @@
-
@@ -126,7 +127,7 @@
-
@@ -134,13 +135,13 @@
- +
- +
@@ -148,13 +149,13 @@
- +
- +
@@ -164,7 +165,7 @@
- @@ -173,7 +174,7 @@
- @@ -182,7 +183,7 @@
- +
@@ -190,19 +191,19 @@
- +
- +
- +
@@ -210,13 +211,13 @@
- +
- +

@@ -298,38 +299,6 @@ } } - function setParams(data){ - var form = layui.form, - $ = layui.$; - var device_id = $('#deviceid'); - device_id.val(data.deviceid); - device_id.attr('readonly',true); - $('#name').val(data.name); - $('#devicetype').val(data.devicetype); - $('#parentid').val(data.parentid); - $('#tenantname').val(data.tenantname); - $('#project_id').val(data.project_id); - $('#project2_id').val(data.project2_id); - $('#group_id').val(data.group_id); - $('#calc_group_id').val(data.calc_group_id); - $('#fwd_group_id').val(data.fwd_group_id); - $('#fwd_group_id2').val(data.fwd_group_id2); - $('#opmode').val(data.opmode); - $('#loggingmode').val(data.loggingmode); - $('#fwddeviceid').val(data.fwddeviceid); - $('#ipose').val(data.ipose); - $('#iposn').val(data.iposn); - $('#iposd').val(data.iposd); - $('#ecefx').val(data.ecefx); - $('#ecefy').val(data.ecefy); - $('#ecefz').val(data.ecefz); - $('#model').val(data.model); - $('#sector').val(data.sector); - $('#remark').val(data.remark); - $('#iccid').val(data.iccid); - setEcefEditor(); - form.render(); - }