1、修改device修改和增加页面的机制
2、优化rtcm服务里device缓存代码,原代码基站关联的device和device缓存里的device不是同一个对象 3、增加基站按基站采样率推送的功能
This commit is contained in:
parent
22bb0f656d
commit
d3904cd016
@ -52,4 +52,9 @@ beidou-ehm 9912 健康检查、SIM卡检查
|
|||||||
|
|
||||||
2025-04
|
2025-04
|
||||||
1)告警参数配置增加一个字段:单位
|
1)告警参数配置增加一个字段:单位
|
||||||
2)健康检查增加连续无有效解的时长之和统计
|
2)健康检查增加连续无有效解的时长之和统计
|
||||||
|
|
||||||
|
3)批量升级:
|
||||||
|
a)在设备页面增加勾选框和“准备升级”、“完成升级”按钮
|
||||||
|
b)点击“准备升级”,把模式改为“待升级”,同时发连接版本服务器指令
|
||||||
|
c)点击“完成升级”,把模式改为“正常”
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.imdroid.sideslope.bd;
|
package com.imdroid.sideslope.bd;
|
||||||
|
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package com.imdroid.sideslope.calc;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.imdroid.common.util.NumberUtils;
|
import com.imdroid.common.util.NumberUtils;
|
||||||
import com.imdroid.secapi.dto.*;
|
import com.imdroid.secapi.dto.*;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|||||||
@ -2,7 +2,7 @@ package com.imdroid.sideslope.calc;
|
|||||||
|
|
||||||
import com.imdroid.secapi.dto.GnssGroupCalc;
|
import com.imdroid.secapi.dto.GnssGroupCalc;
|
||||||
import com.imdroid.sideslope.message.D341LocationMessage;
|
import com.imdroid.sideslope.message.D341LocationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
|||||||
@ -5,17 +5,15 @@ import com.imdroid.secapi.dto.*;
|
|||||||
import com.imdroid.sideslope.message.BaseMessage;
|
import com.imdroid.sideslope.message.BaseMessage;
|
||||||
import com.imdroid.sideslope.message.D341LocationMessage;
|
import com.imdroid.sideslope.message.D341LocationMessage;
|
||||||
import com.imdroid.sideslope.message.D342LocationMessage;
|
import com.imdroid.sideslope.message.D342LocationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.service.DataPersistService;
|
import com.imdroid.sideslope.service.DataPersistService;
|
||||||
|
import com.imdroid.sideslope.service.GroupParaService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
@ -40,24 +38,11 @@ public class MultiLineGNSSCalcService {
|
|||||||
private BeidouClient beidouClient;
|
private BeidouClient beidouClient;
|
||||||
@Autowired
|
@Autowired
|
||||||
DataPersistService dataPersistService;
|
DataPersistService dataPersistService;
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
GnssGroupCalcMapper groupCalcMapper;
|
GroupParaService groupParaService;
|
||||||
List<GnssGroupCalc> 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void calc(D342LocationMessage d342Message){
|
public void calc(D342LocationMessage d342Message){
|
||||||
// 如果时间跨度大于1分钟,或者不含d341,则计算平滑值
|
// 如果时间跨度大于1分钟,或者不含d341,则计算平滑值
|
||||||
@ -79,7 +64,7 @@ public class MultiLineGNSSCalcService {
|
|||||||
logger.info(deviceId + " d341 cycle done!");
|
logger.info(deviceId + " d341 cycle done!");
|
||||||
// 计算上轮结果
|
// 计算上轮结果
|
||||||
Device device = deviceService.findByDeviceId(deviceId);
|
Device device = deviceService.findByDeviceId(deviceId);
|
||||||
GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId());
|
GnssGroupCalc groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId());
|
||||||
calcService.calSingleDone(device, groupCalc, lastD342Time.createTime);
|
calcService.calSingleDone(device, groupCalc, lastD342Time.createTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +115,7 @@ public class MultiLineGNSSCalcService {
|
|||||||
}
|
}
|
||||||
// 计算上轮结果
|
// 计算上轮结果
|
||||||
Device device = deviceService.findByDeviceId(deviceId);
|
Device device = deviceService.findByDeviceId(deviceId);
|
||||||
GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId());
|
GnssGroupCalc groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId());
|
||||||
calcService.calSingleDone(device, groupCalc, lastDate);
|
calcService.calSingleDone(device, groupCalc, lastDate);
|
||||||
// 重算最近的
|
// 重算最近的
|
||||||
lastDate = gnssCalcFilterService.updateRpos(device,groupCalc,lastDate);
|
lastDate = gnssCalcFilterService.updateRpos(device,groupCalc,lastDate);
|
||||||
@ -185,10 +170,4 @@ public class MultiLineGNSSCalcService {
|
|||||||
}
|
}
|
||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshGroupCalc(){
|
|
||||||
if(groupCalcList!=null) groupCalcList.clear();
|
|
||||||
groupCalcList = groupCalcMapper.selectList(null);
|
|
||||||
logger.info("group paras changed");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,11 +6,12 @@ import com.imdroid.common.util.ThreadManager;
|
|||||||
import com.imdroid.secapi.dto.*;
|
import com.imdroid.secapi.dto.*;
|
||||||
import com.imdroid.sideslope.bd.*;
|
import com.imdroid.sideslope.bd.*;
|
||||||
import com.imdroid.sideslope.message.D341LocationMessage;
|
import com.imdroid.sideslope.message.D341LocationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.server.DeviceChannel;
|
import com.imdroid.sideslope.server.DeviceChannel;
|
||||||
import com.imdroid.sideslope.server.OnlineChannels;
|
import com.imdroid.sideslope.server.OnlineChannels;
|
||||||
import com.imdroid.sideslope.service.GnssSingleBufferService;
|
import com.imdroid.sideslope.service.GnssSingleBufferService;
|
||||||
|
import com.imdroid.sideslope.service.GroupParaService;
|
||||||
import com.imdroid.sideslope.service.WarningService;
|
import com.imdroid.sideslope.service.WarningService;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
@ -18,8 +19,6 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -46,31 +45,17 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
GNSSCalcFilterService gnssCalcFilterService;
|
GNSSCalcFilterService gnssCalcFilterService;
|
||||||
|
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
GnssGroupCalcMapper groupCalcMapper;
|
GroupParaService groupParaService;
|
||||||
@Autowired
|
@Autowired
|
||||||
GnssCalcDataMapper dataMapper;
|
GnssCalcDataMapper dataMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private GnssSingleBufferService gnssSingleDataService;
|
private GnssSingleBufferService gnssSingleDataService;
|
||||||
|
|
||||||
// 非线程安全,需加同步保护
|
|
||||||
List<GnssGroupCalc> 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();
|
String deviceId = message.getId();
|
||||||
Device device = deviceService.findByDeviceId(deviceId);
|
Device device = deviceService.findByDeviceId(deviceId);
|
||||||
if(device == null) return;
|
if(device == null) return;
|
||||||
GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId());
|
GnssGroupCalc groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId());
|
||||||
if(groupCalc==null) return;
|
if(groupCalc==null) return;
|
||||||
device.setB562AsCalc(groupCalc.getVer()!=3);
|
device.setB562AsCalc(groupCalc.getVer()!=3);
|
||||||
|
|
||||||
@ -182,7 +167,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
|||||||
future = null;
|
future = null;
|
||||||
}
|
}
|
||||||
if(null == groupCalc){
|
if(null == groupCalc){
|
||||||
groupCalc = getGroupCalc(device.getCalcGroupId());
|
groupCalc = groupParaService.getCalcGroup(device.getCalcGroupId());
|
||||||
if(groupCalc == null) return;
|
if(groupCalc == null) return;
|
||||||
}
|
}
|
||||||
calCycleResult(device, groupCalc, resultTime);
|
calCycleResult(device, groupCalc, resultTime);
|
||||||
@ -353,13 +338,6 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
|||||||
focusCalculator.reset();
|
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){
|
public void refreshDeviceCalc(String deviceId){
|
||||||
Device device = deviceService.findByDeviceId(deviceId);
|
Device device = deviceService.findByDeviceId(deviceId);
|
||||||
if(device == null) return;
|
if(device == null) return;
|
||||||
|
|||||||
@ -3,13 +3,11 @@ package com.imdroid.sideslope.executor;
|
|||||||
import com.imdroid.common.util.ByteUtil;
|
import com.imdroid.common.util.ByteUtil;
|
||||||
import com.imdroid.secapi.client.BeidouClient;
|
import com.imdroid.secapi.client.BeidouClient;
|
||||||
import com.imdroid.sideslope.message.D31xConfigAckMessage;
|
import com.imdroid.sideslope.message.D31xConfigAckMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Layton
|
* @author Layton
|
||||||
* @date 2023/2/2 20:40
|
* @date 2023/2/2 20:40
|
||||||
@ -18,7 +16,7 @@ import javax.annotation.Resource;
|
|||||||
public class D31xConfigAckMessageExecutor implements Executor<D31xConfigAckMessage, Void> {
|
public class D31xConfigAckMessageExecutor implements Executor<D31xConfigAckMessage, Void> {
|
||||||
@Autowired
|
@Autowired
|
||||||
private BeidouClient beidouClient;
|
private BeidouClient beidouClient;
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -8,8 +8,8 @@ import com.imdroid.common.util.ByteUtil;
|
|||||||
import com.imdroid.sideslope.bd.Gga;
|
import com.imdroid.sideslope.bd.Gga;
|
||||||
import com.imdroid.sideslope.message.D331RtcmMessage;
|
import com.imdroid.sideslope.message.D331RtcmMessage;
|
||||||
import com.imdroid.sideslope.ntrip.UdpNtripServer;
|
import com.imdroid.sideslope.ntrip.UdpNtripServer;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.server.DeviceChannel;
|
import com.imdroid.sideslope.server.DeviceChannel;
|
||||||
import com.imdroid.sideslope.server.OnlineChannels;
|
import com.imdroid.sideslope.server.OnlineChannels;
|
||||||
import com.imdroid.sideslope.service.DataPersistService;
|
import com.imdroid.sideslope.service.DataPersistService;
|
||||||
@ -21,8 +21,6 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -37,7 +35,7 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
|
|||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private BeidouClient beidouClient;
|
private BeidouClient beidouClient;
|
||||||
@ -62,6 +60,7 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
|
|||||||
DeviceChannel deviceChannel = null;
|
DeviceChannel deviceChannel = null;
|
||||||
for (Device device : deviceList) {
|
for (Device device : deviceList) {
|
||||||
if (device.getOpMode() != GnssDevice.OP_MODE_USE) continue;
|
if (device.getOpMode() != GnssDevice.OP_MODE_USE) continue;
|
||||||
|
if ((deviceBs.getD3xxCount()%device.getGnssSampleRate()) != 0) continue;
|
||||||
String deviceId = device.getDeviceId();
|
String deviceId = device.getDeviceId();
|
||||||
if(device.getDataChannelType() == Device.CHANNEL_TYPE_UDP) {
|
if(device.getDataChannelType() == Device.CHANNEL_TYPE_UDP) {
|
||||||
deviceChannel = OnlineChannels.INSTANCE.getDataChannel(deviceId);
|
deviceChannel = OnlineChannels.INSTANCE.getDataChannel(deviceId);
|
||||||
|
|||||||
@ -7,15 +7,13 @@ import com.imdroid.secapi.dto.GnssDevice;
|
|||||||
import com.imdroid.sideslope.bd.Gga;
|
import com.imdroid.sideslope.bd.Gga;
|
||||||
import com.imdroid.sideslope.calc.GNSSDataCalcService;
|
import com.imdroid.sideslope.calc.GNSSDataCalcService;
|
||||||
import com.imdroid.sideslope.message.D341LocationMessage;
|
import com.imdroid.sideslope.message.D341LocationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.service.DataPersistService;
|
import com.imdroid.sideslope.service.DataPersistService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,7 +27,7 @@ public class D341LocationMessageExecutor implements Executor<D341LocationMessage
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private GNSSDataCalcService gnssCalcService;
|
private GNSSDataCalcService gnssCalcService;
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private BeidouClient beidouClient;
|
private BeidouClient beidouClient;
|
||||||
|
|||||||
@ -3,14 +3,12 @@ package com.imdroid.sideslope.executor;
|
|||||||
import com.imdroid.common.util.ThreadManager;
|
import com.imdroid.common.util.ThreadManager;
|
||||||
import com.imdroid.sideslope.calc.MultiLineGNSSCalcService;
|
import com.imdroid.sideslope.calc.MultiLineGNSSCalcService;
|
||||||
import com.imdroid.sideslope.message.D342LocationMessage;
|
import com.imdroid.sideslope.message.D342LocationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.service.DataPersistService;
|
import com.imdroid.sideslope.service.DataPersistService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Layton
|
* @author Layton
|
||||||
* @date 2023/2/2 20:50
|
* @date 2023/2/2 20:50
|
||||||
@ -20,7 +18,7 @@ public class D342LocationMessageExecutor implements Executor<D342LocationMessage
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MultiLineGNSSCalcService gnssCalcService;
|
private MultiLineGNSSCalcService gnssCalcService;
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private DataPersistService dataPersistService;
|
private DataPersistService dataPersistService;
|
||||||
|
|||||||
@ -6,16 +6,15 @@ import com.imdroid.common.util.ThreadManager;
|
|||||||
import com.imdroid.secapi.client.BeidouClient;
|
import com.imdroid.secapi.client.BeidouClient;
|
||||||
import com.imdroid.secapi.dto.*;
|
import com.imdroid.secapi.dto.*;
|
||||||
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.service.DataPersistService;
|
import com.imdroid.sideslope.service.DataPersistService;
|
||||||
|
import com.imdroid.sideslope.service.GroupParaService;
|
||||||
import com.imdroid.sideslope.web.ApiController;
|
import com.imdroid.sideslope.web.ApiController;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
@ -46,10 +45,12 @@ public class D3F0SelfCheckMessageExecutor implements Executor<D3F0SelfCheckMessa
|
|||||||
@Autowired
|
@Autowired
|
||||||
private BeidouClient beidouClient;
|
private BeidouClient beidouClient;
|
||||||
// 由于消息数据大,从缓存查询设备信息效率更高
|
// 由于消息数据大,从缓存查询设备信息效率更高
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
@Autowired
|
@Autowired
|
||||||
ApiController rtcmClient;
|
ApiController rtcmClient;
|
||||||
|
@Autowired
|
||||||
|
GroupParaService groupParaService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void execute(D3F0SelfCheckMessage message) {
|
public Void execute(D3F0SelfCheckMessage message) {
|
||||||
@ -64,6 +65,11 @@ public class D3F0SelfCheckMessageExecutor implements Executor<D3F0SelfCheckMessa
|
|||||||
sendD3F1Ack(device);
|
sendD3F1Ack(device);
|
||||||
//更新统计
|
//更新统计
|
||||||
device.updateRx(message.getHeader(),message.getLen(),1);
|
device.updateRx(message.getHeader(),message.getLen(),1);
|
||||||
|
//更新采样率
|
||||||
|
GnssGroup group = groupParaService.getBasicGroup(device.getBasicGroupId());
|
||||||
|
if(group!=null) {
|
||||||
|
device.setGnssSampleRate(group.getGnss_sample_s());
|
||||||
|
}
|
||||||
|
|
||||||
ThreadManager.getFixedThreadPool().submit(() -> {
|
ThreadManager.getFixedThreadPool().submit(() -> {
|
||||||
// 检查是否需要对设备的F9P进行冷启动操作
|
// 检查是否需要对设备的F9P进行冷启动操作
|
||||||
|
|||||||
@ -7,8 +7,8 @@ import com.imdroid.secapi.dto.GnssTrxMsg;
|
|||||||
import com.imdroid.sideslope.calc.GNSSDataCalcService;
|
import com.imdroid.sideslope.calc.GNSSDataCalcService;
|
||||||
import com.imdroid.sideslope.calc.MultiLineGNSSCalcService;
|
import com.imdroid.sideslope.calc.MultiLineGNSSCalcService;
|
||||||
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.service.DataPersistService;
|
import com.imdroid.sideslope.service.DataPersistService;
|
||||||
import com.imdroid.sideslope.service.GnssSingleBufferServiceImpl;
|
import com.imdroid.sideslope.service.GnssSingleBufferServiceImpl;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -16,7 +16,6 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,7 +33,7 @@ public class D3F2StopIndicationMessageExecutor implements Executor<D3F2StopIndic
|
|||||||
@Autowired
|
@Autowired
|
||||||
private DataPersistService dataPersistService;
|
private DataPersistService dataPersistService;
|
||||||
|
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private BeidouClient beidouClient;
|
private BeidouClient beidouClient;
|
||||||
|
|||||||
@ -1,77 +0,0 @@
|
|||||||
package com.imdroid.sideslope.sal;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 描述
|
|
||||||
*
|
|
||||||
* @author LiGang
|
|
||||||
*/
|
|
||||||
@Component(value = "db")
|
|
||||||
public class DbDeviceServiceImpl implements DeviceService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GnssDeviceMapper gnssDeviceRepository;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Device findByDeviceId(String deviceId) {
|
|
||||||
GnssDevice gnssDevice = gnssDeviceRepository.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.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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Device> findByParentId(String parentId) {
|
|
||||||
QueryWrapper<GnssDevice> query = new QueryWrapper();
|
|
||||||
query.eq("parentid", parentId);
|
|
||||||
List<GnssDevice> gnssDeviceList = gnssDeviceRepository.selectList(query);
|
|
||||||
List<Device> 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -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<String, Device> removalListener = new RemovalListener<String, Device>() {
|
|
||||||
public void onRemoval(RemovalNotification<String, Device> removal) {
|
|
||||||
|
|
||||||
}
|
|
||||||
};*/
|
|
||||||
private static final Cache<String, Device> deviceCache = CacheBuilder.newBuilder().
|
|
||||||
expireAfterAccess(20, TimeUnit.MINUTES).build();
|
|
||||||
|
|
||||||
private static final Cache<String, List<Device>> 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<Device> findByParentId(String parentId) {
|
|
||||||
List<Device> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -4,7 +4,6 @@ import com.imdroid.secapi.dto.GnssStatus;
|
|||||||
import com.imdroid.sideslope.message.D342LocationMessage;
|
import com.imdroid.sideslope.message.D342LocationMessage;
|
||||||
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
||||||
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备数据持久化接口,保存:
|
* 设备数据持久化接口,保存:
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import com.imdroid.sideslope.message.BaseMessage;
|
|||||||
import com.imdroid.sideslope.message.D342LocationMessage;
|
import com.imdroid.sideslope.message.D342LocationMessage;
|
||||||
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
||||||
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package com.imdroid.sideslope.sal;
|
package com.imdroid.sideslope.service;
|
||||||
|
|
||||||
import com.imdroid.secapi.dto.GnssDevice;
|
import com.imdroid.secapi.dto.GnssDevice;
|
||||||
import com.imdroid.sideslope.bd.Gga;
|
import com.imdroid.sideslope.bd.Gga;
|
||||||
@ -45,6 +45,8 @@ public class Device {
|
|||||||
private Integer calcGroupId;
|
private Integer calcGroupId;
|
||||||
private Short opMode;
|
private Short opMode;
|
||||||
private boolean b562AsCalc = true;//算法版本
|
private boolean b562AsCalc = true;//算法版本
|
||||||
|
private Integer basicGroupId;
|
||||||
|
private short gnssSampleRate = 1;
|
||||||
|
|
||||||
int d3xxCount = 0;
|
int d3xxCount = 0;
|
||||||
int d3xxbytes = 0;
|
int d3xxbytes = 0;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.imdroid.sideslope.sal;
|
package com.imdroid.sideslope.service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -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<Integer, GnssGroup> basicGroupMap;
|
||||||
|
private ConcurrentHashMap<Integer, GnssGroupCalc> 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<GnssGroup> gnssGroupList = basicGroupMapper.selectList(null);
|
||||||
|
for(GnssGroup group:gnssGroupList){
|
||||||
|
basicGroupMap.put(group.getId(),group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void refreshCalcGroup(){
|
||||||
|
if(calcGroupMap==null){
|
||||||
|
calcGroupMap = new ConcurrentHashMap<>();
|
||||||
|
}
|
||||||
|
calcGroupMap.clear();
|
||||||
|
List<GnssGroupCalc> gnssGroupList = calcGroupMapper.selectList(null);
|
||||||
|
for(GnssGroupCalc group:gnssGroupList){
|
||||||
|
calcGroupMap.put(group.getId(),group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<String, Device> deviceCache = CacheBuilder.newBuilder().
|
||||||
|
expireAfterAccess(20, TimeUnit.MINUTES).build();
|
||||||
|
|
||||||
|
private static final Cache<String, List<Device>> 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<Device> getDeviceListFromDBByParentId(String parentId) {
|
||||||
|
QueryWrapper<GnssDevice> query = new QueryWrapper();
|
||||||
|
query.eq("parentid", parentId);
|
||||||
|
List<GnssDevice> gnssDeviceList = gnssDeviceMapper.selectList(query);
|
||||||
|
List<Device> 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<Device> findByParentId(String parentId) {
|
||||||
|
List<Device> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,7 +3,6 @@ package com.imdroid.sideslope.service;
|
|||||||
import com.imdroid.secapi.dto.GnssCalcData;
|
import com.imdroid.secapi.dto.GnssCalcData;
|
||||||
import com.imdroid.secapi.dto.GnssStatus;
|
import com.imdroid.secapi.dto.GnssStatus;
|
||||||
import com.imdroid.secapi.dto.GnssStatusMsg;
|
import com.imdroid.secapi.dto.GnssStatusMsg;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
|
||||||
|
|
||||||
public interface WarningService {
|
public interface WarningService {
|
||||||
void refreshCfg();
|
void refreshCfg();
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import com.imdroid.common.util.NumberUtils;
|
import com.imdroid.common.util.NumberUtils;
|
||||||
import com.imdroid.common.util.WarningLogExecutor;
|
import com.imdroid.common.util.WarningLogExecutor;
|
||||||
import com.imdroid.secapi.dto.*;
|
import com.imdroid.secapi.dto.*;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|||||||
@ -3,8 +3,8 @@ package com.imdroid.sideslope.task;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.imdroid.secapi.dto.*;
|
import com.imdroid.secapi.dto.*;
|
||||||
import com.imdroid.sideslope.calc.GNSSCalcFilterService;
|
import com.imdroid.sideslope.calc.GNSSCalcFilterService;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
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.stereotype.Component;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -30,7 +29,7 @@ public class AbnormalDeviceProcessor{
|
|||||||
private GnssStatusMapper gnssStatusMapper;
|
private GnssStatusMapper gnssStatusMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
GNSSCalcFilterService filterService;
|
GNSSCalcFilterService filterService;
|
||||||
@Resource(name = "local")
|
@Autowired
|
||||||
private DeviceService deviceService;
|
private DeviceService deviceService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|||||||
@ -4,10 +4,11 @@ import com.imdroid.common.util.DataTypeUtil;
|
|||||||
import com.imdroid.secapi.client.HttpResp;
|
import com.imdroid.secapi.client.HttpResp;
|
||||||
import com.imdroid.sideslope.calc.MultiLineGNSSCalcService;
|
import com.imdroid.sideslope.calc.MultiLineGNSSCalcService;
|
||||||
import com.imdroid.sideslope.calc.SingleLineGNSSCalcService;
|
import com.imdroid.sideslope.calc.SingleLineGNSSCalcService;
|
||||||
import com.imdroid.sideslope.sal.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.sal.LocalDeviceServiceImpl;
|
import com.imdroid.sideslope.service.LocalDeviceServiceImpl;
|
||||||
import com.imdroid.sideslope.server.DeviceChannel;
|
import com.imdroid.sideslope.server.DeviceChannel;
|
||||||
import com.imdroid.sideslope.server.OnlineChannels;
|
import com.imdroid.sideslope.server.OnlineChannels;
|
||||||
|
import com.imdroid.sideslope.service.GroupParaService;
|
||||||
import com.imdroid.sideslope.service.WarningService;
|
import com.imdroid.sideslope.service.WarningService;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
@ -41,6 +42,8 @@ public class ApiController {
|
|||||||
SingleLineGNSSCalcService calcService;
|
SingleLineGNSSCalcService calcService;
|
||||||
@Autowired
|
@Autowired
|
||||||
MultiLineGNSSCalcService multiCalcService;
|
MultiLineGNSSCalcService multiCalcService;
|
||||||
|
@Autowired
|
||||||
|
GroupParaService groupParaService;
|
||||||
|
|
||||||
@PostMapping(value = "/config")
|
@PostMapping(value = "/config")
|
||||||
public HttpResp config(String deviceId, String configuration) {
|
public HttpResp config(String deviceId, String configuration) {
|
||||||
@ -163,14 +166,12 @@ public class ApiController {
|
|||||||
|
|
||||||
@PostMapping("/group_param_changed")
|
@PostMapping("/group_param_changed")
|
||||||
public HttpResp groupParamChanged(){
|
public HttpResp groupParamChanged(){
|
||||||
calcService.refreshGroupCalc();
|
groupParaService.refreshGroup();
|
||||||
multiCalcService.refreshGroupCalc();
|
|
||||||
HttpResp resp = new HttpResp();
|
HttpResp resp = new HttpResp();
|
||||||
resp.setResponseMessage("succeed");
|
resp.setResponseMessage("succeed");
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/warning_param_changed")
|
@PostMapping("/warning_param_changed")
|
||||||
public HttpResp warningParamChanged(){
|
public HttpResp warningParamChanged(){
|
||||||
warningService.refreshCfg();
|
warningService.refreshCfg();
|
||||||
|
|||||||
@ -66,7 +66,7 @@ public class GnssDeviceController extends BasicController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping("/page/table/gnss_add_dev")
|
@RequestMapping("/page/table/gnss_add_dev")
|
||||||
public String gnssUpdateDev(Model m, HttpSession session) {
|
public String gnssAddDev(Model m, HttpSession session) {
|
||||||
initModel(m, session);
|
initModel(m, session);
|
||||||
//以下用于下拉框数据
|
//以下用于下拉框数据
|
||||||
List<GnssGroup> gnssGroups = gnssGroupMapper.selectList(null);
|
List<GnssGroup> gnssGroups = gnssGroupMapper.selectList(null);
|
||||||
@ -86,6 +86,34 @@ public class GnssDeviceController extends BasicController{
|
|||||||
m.addAttribute("gnss_group_list", gnssGroups);
|
m.addAttribute("gnss_group_list", gnssGroups);
|
||||||
m.addAttribute("gnss_group_calc_list", gnssGroupCalcs);
|
m.addAttribute("gnss_group_calc_list", gnssGroupCalcs);
|
||||||
m.addAttribute("gnss_group_fwd_list", gnssGroupFwds);
|
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<GnssGroup> gnssGroups = gnssGroupMapper.selectList(null);
|
||||||
|
List<GnssGroupCalc> gnssGroupCalcs = gnssGroupCalcMapper.selectList(null);
|
||||||
|
List<GnssGroupFwd> gnssGroupFwds = gnssGroupFwdMapper.selectList(null);
|
||||||
|
|
||||||
|
List<Tenant> tenants;
|
||||||
|
if(loginRole.equals(Role.SUPER_ADMIN) || loginRole.equals(Role.ADMIN)) {
|
||||||
|
tenants = tenantMapper.selectList(null);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
QueryWrapper<Tenant> 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";
|
return "/page/table/gnss_add_dev";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -94,6 +94,7 @@ public class GnssGroupController extends BasicController {
|
|||||||
} else{
|
} else{
|
||||||
// 更新所有的device同步标志
|
// 更新所有的device同步标志
|
||||||
deviceMapper.setSynFlagByGroupId(group.getId());
|
deviceMapper.setSynFlagByGroupId(group.getId());
|
||||||
|
rtcmClient.groupParamChanged();
|
||||||
return HttpResult.ok();
|
return HttpResult.ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,7 +116,10 @@ public class GnssGroupController extends BasicController {
|
|||||||
group.getName());
|
group.getName());
|
||||||
if (num == 0) {
|
if (num == 0) {
|
||||||
return HttpResult.failed();
|
return HttpResult.failed();
|
||||||
} else return HttpResult.ok();
|
} else {
|
||||||
|
rtcmClient.groupParamChanged();
|
||||||
|
return HttpResult.ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/********* 解算参数组 *********/
|
/********* 解算参数组 *********/
|
||||||
|
|||||||
BIN
sec-beidou/src/main/resources/static/images/loc_blue.png
Normal file
BIN
sec-beidou/src/main/resources/static/images/loc_blue.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 538 B |
@ -142,8 +142,10 @@
|
|||||||
var loc_green = new BMapGL.Icon("../images/loc1_green.png", new BMapGL.Size(18, 24));
|
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_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_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();
|
initialize();
|
||||||
|
myLocation();
|
||||||
|
|
||||||
function initialize() {
|
function initialize() {
|
||||||
var point = new BMapGL.Point(116.404, 39.915);
|
var point = new BMapGL.Point(116.404, 39.915);
|
||||||
@ -233,7 +235,19 @@
|
|||||||
// 启动函数
|
// 启动函数
|
||||||
timer();
|
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(){
|
function showAll(){
|
||||||
if(marker_state == 2){
|
if(marker_state == 2){
|
||||||
|
|||||||
@ -219,11 +219,7 @@
|
|||||||
maxmin:true,
|
maxmin:true,
|
||||||
shadeClose: true,
|
shadeClose: true,
|
||||||
area: ['100%', '100%'],
|
area: ['100%', '100%'],
|
||||||
content: '../page/table/gnss_add_dev',
|
content: '../page/table/gnss_edit_dev?id='+data.id
|
||||||
success: function(layero, index) {
|
|
||||||
var iframe = window['layui-layer-iframe' + index];
|
|
||||||
iframe.setParams(data);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
$(window).on("resize", function () {
|
$(window).on("resize", function () {
|
||||||
layer.full(index);
|
layer.full(index);
|
||||||
|
|||||||
@ -16,18 +16,19 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="layui-form layuimini-form">
|
<div class="layui-form layuimini-form" th:object="${device}">
|
||||||
|
<input type="hidden" name="id" id="id" th:field="*{id}">
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">设备编号</label>
|
<label class="layui-form-label required">设备编号</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="deviceid" id="deviceid" lay-verify="required" lay-reqtext="不能为空" placeholder="请输入设备编号" value="" class="layui-input">
|
<input type="text" name="deviceid" id="deviceid" th:field="*{deviceid}" lay-verify="required" lay-reqtext="不能为空" placeholder="请输入设备编号" value="" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">使用状态</label>
|
<label class="layui-form-label required">使用状态</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="opmode" id="opmode" lay-verify="required" lay-search="">
|
<select name="opmode" id="opmode" th:field="*{opmode}" lay-verify="required" lay-search="">
|
||||||
<option value="0">正常</option>
|
<option value="0">正常</option>
|
||||||
<option value="1">维护</option>
|
<option value="1">维护</option>
|
||||||
<option value="2">停用</option>
|
<option value="2">停用</option>
|
||||||
@ -38,7 +39,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">日志记录</label>
|
<label class="layui-form-label required">日志记录</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="loggingmode" id="loggingmode" lay-verify="required" lay-search="">
|
<select name="loggingmode" id="loggingmode" th:field="*{loggingmode}" lay-verify="required" lay-search="">
|
||||||
<option value="0">不记录(除了自检和停止消息)</option>
|
<option value="0">不记录(除了自检和停止消息)</option>
|
||||||
<option value="1">记录</option>
|
<option value="1">记录</option>
|
||||||
</select>
|
</select>
|
||||||
@ -49,7 +50,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">产品型号</label>
|
<label class="layui-form-label required">产品型号</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="model" id="model" lay-verify="required" lay-search="" lay-filter="device_model">
|
<select name="model" id="model" th:field="*{model}" lay-verify="required" lay-search="" lay-filter="device_model">
|
||||||
<option value="0">G505</option>
|
<option value="0">G505</option>
|
||||||
<option value="1">G510</option>
|
<option value="1">G510</option>
|
||||||
</select>
|
</select>
|
||||||
@ -69,7 +70,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">设备类型</label>
|
<label class="layui-form-label required">设备类型</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="devicetype" id="devicetype" lay-verify="required" lay-search="" lay-filter="device_type">
|
<select name="devicetype" id="devicetype" th:field="*{devicetype}" lay-verify="required" lay-search="" lay-filter="device_type">
|
||||||
<option value="0">监测站</option>
|
<option value="0">监测站</option>
|
||||||
<option value="1">基准站</option>
|
<option value="1">基准站</option>
|
||||||
</select>
|
</select>
|
||||||
@ -78,7 +79,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">基站编号</label>
|
<label class="layui-form-label">基站编号</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="number" name="parentid" id="parentid" placeholder="请输入关联基准站编号" value="" class="layui-input">
|
<input type="number" name="parentid" id="parentid" th:field="*{parentid}" placeholder="请输入关联基准站编号" value="" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -86,19 +87,19 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">ECEF X</label>
|
<label class="layui-form-label">ECEF X</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="ecefx" id="ecefx" class="layui-input">
|
<input type="text" name="ecefx" id="ecefx" th:field="*{ecefx}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">Y</label>
|
<label class="layui-form-label">Y</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="ecefy" id="ecefy" class="layui-input">
|
<input type="text" name="ecefy" id="ecefy" th:field="*{ecefy}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">Z</label>
|
<label class="layui-form-label">Z</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="ecefz" id="ecefz" class="layui-input">
|
<input type="text" name="ecefz" id="ecefz" th:field="*{ecefz}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -106,7 +107,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">基本参数组</label>
|
<label class="layui-form-label required">基本参数组</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="group_id" id="group_id" lay-verify="required" lay-search="">
|
<select name="group_id" id="group_id" th:field="*{group_id}" lay-verify="required" lay-search="">
|
||||||
<option th:each="item : ${gnss_group_list}" th:text="${item.name}" th:value="${item.id}"></option>
|
<option th:each="item : ${gnss_group_list}" th:text="${item.name}" th:value="${item.id}"></option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -114,7 +115,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">解算参数组</label>
|
<label class="layui-form-label required">解算参数组</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="calc_group_id" id="calc_group_id" lay-verify="required" lay-search="">
|
<select name="calc_group_id" id="calc_group_id" th:field="*{calc_group_id}" lay-verify="required" lay-search="">
|
||||||
<option th:each="item : ${gnss_group_calc_list}" th:text="${item.name}" th:value="${item.id}"></option>
|
<option th:each="item : ${gnss_group_calc_list}" th:text="${item.name}" th:value="${item.id}"></option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -126,7 +127,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">所属部门</label>
|
<label class="layui-form-label required">所属部门</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="tenantname" id="tenantname" lay-verify="required" lay-search="">
|
<select name="tenantname" id="tenantname" th:field="*{tenantname}" lay-verify="required" lay-search="">
|
||||||
<option th:each="item : ${tenant_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
<option th:each="item : ${tenant_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -134,13 +135,13 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">项目号</label>
|
<label class="layui-form-label">项目号</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="project_id" id="project_id" placeholder="请输入项目编号" value="" class="layui-input">
|
<input type="text" name="project_id" id="project_id" th:field="*{project_id}" placeholder="请输入项目编号" value="" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline" th:if="${tenant_id==0}">
|
<div class="layui-inline" th:if="${tenant_id==0}">
|
||||||
<label class="layui-form-label">项目2号</label>
|
<label class="layui-form-label">项目2号</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="project2_id" id="project2_id" placeholder="请输入项目编号" value="" class="layui-input">
|
<input type="text" name="project2_id" id="project2_id" th:field="*{project2_id}" placeholder="请输入项目编号" value="" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -148,13 +149,13 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">桩号</label>
|
<label class="layui-form-label required">桩号</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="sector" id="sector" value="" class="layui-input">
|
<input type="text" name="sector" id="sector" th:field="*{sector}" value="" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label required">监测点号</label>
|
<label class="layui-form-label required">监测点号</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="name" id="name" value="" class="layui-input">
|
<input type="text" name="name" id="name" th:field="*{name}" value="" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -164,7 +165,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">推送至</label>
|
<label class="layui-form-label">推送至</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="fwd_group_id" id="fwd_group_id" lay-search="">
|
<select name="fwd_group_id" id="fwd_group_id" th:field="*{fwd_group_id}" lay-search="">
|
||||||
<option value="不推送">不推送</option>
|
<option value="不推送">不推送</option>
|
||||||
<option th:each="item : ${gnss_group_fwd_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
<option th:each="item : ${gnss_group_fwd_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
||||||
</select>
|
</select>
|
||||||
@ -173,7 +174,7 @@
|
|||||||
<div class="layui-inline" th:if="${tenant_id==0}">
|
<div class="layui-inline" th:if="${tenant_id==0}">
|
||||||
<label class="layui-form-label">推送2</label>
|
<label class="layui-form-label">推送2</label>
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<select name="fwd_group_id2" id="fwd_group_id2" lay-search="">
|
<select name="fwd_group_id2" id="fwd_group_id2" th:field="*{fwd_group_id2}" lay-search="">
|
||||||
<option value="不推送">不推送</option>
|
<option value="不推送">不推送</option>
|
||||||
<option th:each="item : ${gnss_group_fwd_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
<option th:each="item : ${gnss_group_fwd_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
||||||
</select>
|
</select>
|
||||||
@ -182,7 +183,7 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">推送名称</label>
|
<label class="layui-form-label">推送名称</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="fwddeviceid" id="fwddeviceid" class="layui-input">
|
<input type="text" name="fwddeviceid" id="fwddeviceid" th:field="*{fwddeviceid}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -190,19 +191,19 @@
|
|||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">初始位置(mm) 东</label>
|
<label class="layui-form-label">初始位置(mm) 东</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="ipose" id="ipose" class="layui-input">
|
<input type="text" name="ipose" id="ipose" th:field="*{ipose}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">北</label>
|
<label class="layui-form-label">北</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="iposn" id="iposn" class="layui-input">
|
<input type="text" name="iposn" id="iposn" th:field="*{iposn}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline">
|
<div class="layui-inline">
|
||||||
<label class="layui-form-label">天</label>
|
<label class="layui-form-label">天</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="iposd" id="iposd" class="layui-input">
|
<input type="text" name="iposd" id="iposd" th:field="*{iposd}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -210,13 +211,13 @@
|
|||||||
<div class="layui-form-item" th:if="${role=='SUPER_ADMIN'}">
|
<div class="layui-form-item" th:if="${role=='SUPER_ADMIN'}">
|
||||||
<label class="layui-form-label">ICCID</label>
|
<label class="layui-form-label">ICCID</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="iccid" id="iccid" class="layui-input" placeholder="请输入19-20位的ICCID号码">
|
<input type="text" name="iccid" id="iccid" th:field="*{iccid}" class="layui-input" placeholder="请输入19-20位的ICCID号码">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item" th:if="${role=='SUPER_ADMIN'}">
|
<div class="layui-form-item" th:if="${role=='SUPER_ADMIN'}">
|
||||||
<label class="layui-form-label">备注</label>
|
<label class="layui-form-label">备注</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="remark" id="remark" class="layui-input">
|
<input type="text" name="remark" id="remark" th:field="*{remark}" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr th:if="${role=='SUPER_ADMIN'}">
|
<hr th:if="${role=='SUPER_ADMIN'}">
|
||||||
@ -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();
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user