From a34b83c1a2db0f76d7e57792e9ff1ba77a729ab1 Mon Sep 17 00:00:00 2001 From: weidong Date: Sun, 12 Nov 2023 10:14:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=8A=E8=AD=A6=E5=8A=9F=E8=83=BDbug=20fixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/imdroid/secapi/dto/GnssGroup.java | 1 - .../com/imdroid/secapi/dto/GnssGroupCalc.java | 1 - .../com/imdroid/secapi/dto/GnssGroupFwd.java | 1 - .../com/imdroid/secapi/dto/WarningCfg.java | 15 ++- .../com/imdroid/secapi/dto/WarningMsg.java | 2 - .../D31xConfigAckMessageExecutor.java | 10 ++ .../executor/D331RtcmMessageExecutor.java | 5 + .../executor/D341LocationMessageExecutor.java | 12 ++ .../D3F0SelfCheckMessageExecutor.java | 13 +- .../D3F2StopIndicationMessageExecutor.java | 7 + .../sideslope/message/BaseMessage.java | 2 + .../message/D3F0SelfCheckMessage.java | 6 +- .../message/D3F2StopIndicationMessage.java | 6 +- .../sideslope/sal/DbDeviceServiceImpl.java | 1 + .../com/imdroid/sideslope/sal/Device.java | 1 + .../service/DataPersistServiceImpl.java | 11 +- .../GNSSDeviceLocationRecordServiceImpl.java | 8 +- .../sideslope/service/WarningServiceImpl.java | 1 + .../beidou/controller/WarningController.java | 88 ++++++++++-- .../beidou/service/ServiceEnvInit.java | 6 +- sec-beidou/src/main/resources/db/schema.sql | 10 +- .../src/main/resources/static/api/init.json | 18 ++- .../resources/static/api/warning_data.json | 28 ---- .../templates/page/gnss_group_cfg.html | 10 +- .../page/table/gnss_add_group_calc.html | 16 +-- .../templates/page/table/warning_add.html | 85 ++++++++++++ .../resources/templates/page/warning.html | 4 +- .../resources/templates/page/warning_cfg.html | 127 ++++++++++++++++++ 28 files changed, 412 insertions(+), 83 deletions(-) delete mode 100644 sec-beidou/src/main/resources/static/api/warning_data.json create mode 100644 sec-beidou/src/main/resources/templates/page/table/warning_add.html create mode 100644 sec-beidou/src/main/resources/templates/page/warning_cfg.html diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java index 3a7eb8a3..f97d5650 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java @@ -17,7 +17,6 @@ public class GnssGroup implements Serializable { public final static short LOW_POWER_MODE = 0; public final static short NORMAL_POWER_MODE = 1; Integer id; - Integer tenantid; Integer work_cycle; Integer active_time; diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java index 787f2375..5dc600ad 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java @@ -7,7 +7,6 @@ import lombok.Data; @TableName(value = "gnssgroupcalc") public class GnssGroupCalc { Integer id; - Integer tenantid; Integer filter_hour; Float xy_threshold; Float z_threshold; diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupFwd.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupFwd.java index f8a476d5..c036ef03 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupFwd.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupFwd.java @@ -11,7 +11,6 @@ public class GnssGroupFwd { public static final short FWD_TYPE_RAW = 2; //转发原始数据(D331/D341) public static final short FWD_TYPE_NTRIP = 3; //按ntrip协议转发 Integer id; - Integer tenantid; String description; Short type1; String addr1; diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java index 450aaa16..33d01216 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; +import java.util.HashMap; +import java.util.Map; + /** * GNSS收发统计消息,每个工作周期结束的时候统计一次 * @@ -20,24 +23,28 @@ public class WarningCfg { // warning code definition public static final int TYPE_LOW_VOLTAGE = 0x01; + public static final String TYPE_NAME_LOW_VOLTAGE = "电压低"; public static final int TYPE_LOW_RSSI = 0x02; + public static final String TYPE_NAME_LOW_RSSI = "信号弱"; public static final int TYPE_DEVICE_OFF_LINE = 0x04; + public static final String TYPE_NAME_DEVICE_OFF_LINE = "设备离线"; public static final int TYPE_RX_MUCH_UNKNOWN = 0x10; + public static final String TYPE_NAME_RX_MUCH_UNKNOWN = "未知报文过多"; public static final int TYPE_LESS_INUSE_SAT = 0x20; + public static final String TYPE_NAME_LESS_INUSE_SAT = "可用卫星少"; public static final int TYPE_LESS_D3XX = 0x40; + public static final String TYPE_NAME_LESS_D3XX = "RTCM少"; public static final int TYPE_LESS_B562 = 0x80; + public static final String TYPE_NAME_LESS_B562 = "B562少"; // warning level definition public static final short LEVEL_0 = 0; //正常 public static final short LEVEL_1 = 1; //一般 public static final short LEVEL_2 = 2; //严重 - @TableId(value = "id", type = IdType.AUTO) - Long id; - Integer tenantid; Short devicetype; - Short level; Integer type; String typename; Integer value; + Short level; } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningMsg.java b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningMsg.java index 1c646190..cd48fe9a 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningMsg.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningMsg.java @@ -15,8 +15,6 @@ import java.util.Date; @Data @TableName(value = "warninginfo") public class WarningMsg { - // device type definition - @TableId(value = "id", type = IdType.AUTO) Long id; Integer tenantid; 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 71945d18..aab42d9e 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,9 +3,13 @@ package com.imdroid.sideslope.executor; import com.imdroid.secapi.client.BeidouClient; import com.imdroid.sideslope.bd.ByteUtil; import com.imdroid.sideslope.message.D31xConfigAckMessage; +import com.imdroid.sideslope.sal.Device; +import com.imdroid.sideslope.sal.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 @@ -14,9 +18,15 @@ import org.springframework.stereotype.Component; public class D31xConfigAckMessageExecutor implements Executor { @Autowired private BeidouClient beidouClient; + @Resource(name = "local") + private DeviceService deviceService; @Override public Void execute(D31xConfigAckMessage message) { + // 补齐tenantId + Device device = deviceService.findByDeviceId(message.getId()); + if(device == null) return null; + message.setTenantId(device.getTenantId()); // 转发应答 beidouClient.onConfigAck(message.getId(), ByteUtil.bytesToHexString(message.getSrcData())); return null; 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 7623dd36..0148751c 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 @@ -32,6 +32,11 @@ public class D331RtcmMessageExecutor implements Executor if (logger.isDebugEnabled()) { logger.debug("receive d331 rtcm message of device:{}", message.getId()); } + // 补齐tenantId + Device device1 = deviceService.findByDeviceId(message.getId()); + if(device1 == null) return null; + message.setTenantId(device1.getTenantId()); + String id = message.getId(); byte[] forwardBytes = message.getSrcData(); List deviceList = deviceService.findByParentId(id); 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 6f095120..91ae57be 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 @@ -2,6 +2,8 @@ package com.imdroid.sideslope.executor; import com.imdroid.sideslope.calc.GNSSCalcService; import com.imdroid.sideslope.message.D341LocationMessage; +import com.imdroid.sideslope.sal.Device; +import com.imdroid.sideslope.sal.DeviceService; import com.imdroid.sideslope.service.GNSSDeviceLocationRecordService; import com.imdroid.sideslope.util.ThreadManager; import org.slf4j.Logger; @@ -9,6 +11,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; + /** * @author Layton * @date 2023/2/2 20:50 @@ -22,11 +26,19 @@ public class D341LocationMessageExecutor implements Executor { gnssCalcService.calcSingle(message); dataPersistService.saveRawData(message); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java index 12157110..e0b2ebdd 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java @@ -2,12 +2,15 @@ package com.imdroid.sideslope.executor; import com.imdroid.secapi.client.BeidouClient; import com.imdroid.sideslope.message.D3F0SelfCheckMessage; +import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.service.DataPersistService; -import com.imdroid.sideslope.service.WarningService; import com.imdroid.sideslope.util.ThreadManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; + /** * @author Layton * @date 2023/2/2 20:40 @@ -20,10 +23,16 @@ public class D3F0SelfCheckMessageExecutor implements Executor { dataPersistService.saveDeviceTrxStat(message); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java index 0fcea9fa..75e04ca2 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java @@ -15,6 +15,8 @@ public abstract class BaseMessage { protected int len; protected int pps; + protected int tenantId;//消息所属的租户,在executor里获取 + protected byte[] srcData;//message在线程中处理,需要把channel传递过来的数据拷贝出来 public void decode(ByteBuf src) { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java index 344493f1..9ef3f604 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java @@ -5,7 +5,7 @@ import io.netty.buffer.ByteBuf; import lombok.Data; import lombok.EqualsAndHashCode; -import java.sql.Timestamp; +import java.util.Date; /** * 自检消息 @@ -22,8 +22,8 @@ public class D3F0SelfCheckMessage extends BaseMessage { @Override public void decodeBody(ByteBuf src) { statusMsg.setDeviceid(getId()); - statusMsg.setCreatetime(new Timestamp(System.currentTimeMillis())); - statusMsg.setDevicetime(new Timestamp(getPps()*1000)); + statusMsg.setCreatetime(new Date()); + statusMsg.setDevicetime(new Date(getPps()*1000)); statusMsg.setPitch(src.readFloat()); statusMsg.setRoll(src.readFloat()); statusMsg.setYaw(src.readFloat()); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java index e231858e..8fcf9f09 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java @@ -5,7 +5,7 @@ import io.netty.buffer.ByteBuf; import lombok.Data; import lombok.EqualsAndHashCode; -import java.sql.Timestamp; +import java.util.Date; /** * 停止指示消息 @@ -21,8 +21,8 @@ public class D3F2StopIndicationMessage extends BaseMessage { @Override public void decodeBody(ByteBuf src) { trxMsg.setDeviceid(getId()); - trxMsg.setCreatetime(new Timestamp(System.currentTimeMillis())); - trxMsg.setDevicetime(new Timestamp(getPps()*1000)); + trxMsg.setCreatetime(new Date()); + trxMsg.setDevicetime(new Date(getPps()*1000)); int keys = (this.len - 6) / 5; for (int i = 0; i < keys; i++) { int key = src.readUnsignedByte(); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java index 6b9ef4d9..d8599254 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java @@ -38,6 +38,7 @@ public class DbDeviceServiceImpl implements DeviceService { return null; } Device device = new Device(); + device.setTenantId(gnssDevice.getTenantid()); device.setDeviceId(gnssDevice.getDeviceid()); device.setDeviceType(gnssDevice.getDevicetype()); device.setParentId(gnssDevice.getParentid()); 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/sal/Device.java index 06fbce92..2cda4295 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java @@ -22,6 +22,7 @@ public class Device { public static final int DEVICE_ROVER = 0; private String name; + private Integer tenantId; private String deviceId; 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 e9c4f80a..f419a9f8 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 @@ -7,7 +7,7 @@ import com.imdroid.sideslope.message.D3F2StopIndicationMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.sql.Timestamp; +import java.util.Date; /** * 设备数据持久化实现 @@ -35,6 +35,7 @@ public class DataPersistServiceImpl implements DataPersistService { try { // 保存到statusmsg数据表里 GnssStatusMsg statusMsg = message.getStatusMsg(); + statusMsg.setTenantid(message.getTenantId()); statusMsgMapper.insert(statusMsg); //新增或更新到status数据表里 @@ -45,6 +46,7 @@ public class DataPersistServiceImpl implements DataPersistService { new_flag = true; } //deviceState.setId(SequenceUtil.getSequence()); + deviceState.setTenantid(message.getTenantId()); deviceState.setDeviceid(message.getId()); deviceState.setUpdatetime(statusMsg.getCreatetime()); deviceState.setRoll(statusMsg.getRoll()); @@ -74,7 +76,9 @@ public class DataPersistServiceImpl implements DataPersistService { public void saveDeviceTrxStat(D3F2StopIndicationMessage message) { try { // 添加到trxmsg里 - trxMsgMapper.insert(message.getTrxMsg()); + GnssTrxMsg trxMsg = message.getTrxMsg(); + trxMsg.setTenantid(message.getTenantId()); + trxMsgMapper.insert(trxMsg); // 保存消息摘要 saveMsg(message); @@ -97,7 +101,8 @@ public class DataPersistServiceImpl implements DataPersistService { void saveMsg(BaseMessage message){ GnssMsg gnssMsg = new GnssMsg(); - gnssMsg.setCreatetime(new Timestamp(System.currentTimeMillis())); + gnssMsg.setTenantid(message.getTenantId()); + gnssMsg.setCreatetime(new Date()); gnssMsg.setDeviceid(message.getId()); gnssMsg.setMsgtype(((int)message.getHeader())&0xFFFF); gnssMsg.setMsglen(message.getLen()); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java index fd2d4bcc..f2513e4a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java @@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.sql.Timestamp; +import java.util.Date; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @@ -71,9 +71,8 @@ public class GNSSDeviceLocationRecordServiceImpl implements GNSSDeviceLocationRe GnssDevice gnssDevice = gnssDeviceRepository.queryByDeviceId(locationRecord.getDeviceid()); if(gnssDevice == null) return; //补充解算记录的设备信息 - long now = System.currentTimeMillis(); locationRecord.setTenantid(gnssDevice.getTenantid()); - locationRecord.setCreatetime(new Timestamp(now)); + locationRecord.setCreatetime(new Date()); locationRecord.setEnabled(true); // 获取平滑参数 @@ -174,8 +173,9 @@ public class GNSSDeviceLocationRecordServiceImpl implements GNSSDeviceLocationRe @Override public void saveRawData(D341LocationMessage message){ GnssRawData data = new GnssRawData(); + data.setTenantid(message.getTenantId()); data.setDeviceid(message.getId()); - data.setCreatetime(new Timestamp(System.currentTimeMillis())); + data.setCreatetime(new Date()); Tilt tilt = message.getTilt(); data.setRoll(tilt.getRoll()); data.setPitch(tilt.getPitch()); 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 c20e711b..bcaa46be 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 @@ -50,6 +50,7 @@ public class WarningServiceImpl implements WarningService { public void checkDeviceStatus(GnssStatusMsg statusMsg, GnssStatus curStatus){ if(cfgMap.size() == 0) refreshCfg(); // 清除离线告警 + if(curStatus.getWarningcode() == null) curStatus.setWarningcode(0); curStatus.setWarningcode(curStatus.getWarningcode() & ~WarningCfg.TYPE_DEVICE_OFF_LINE); // 检测电压和RSSI diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java index 1d857c60..9487daa7 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java @@ -4,42 +4,76 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.imdroid.beidou.common.HttpResult; import com.imdroid.beidou.entity.Tenant; import com.imdroid.secapi.dto.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; @Controller -public class WarningController extends BasicController{ +public class WarningController extends BasicController { @Autowired - WarningMsgMapper warningMapper; + WarningMsgMapper warningMsgMapper; + + @Autowired + WarningCfgMapper warningCfgMapper; + + public static final Map warningMap = new HashMap<>(); + + @PostConstruct + public static void init() { + warningMap.put(WarningCfg.TYPE_LOW_VOLTAGE, WarningCfg.TYPE_NAME_LOW_VOLTAGE); + warningMap.put(WarningCfg.TYPE_LOW_RSSI, WarningCfg.TYPE_NAME_LOW_RSSI); + warningMap.put(WarningCfg.TYPE_DEVICE_OFF_LINE, WarningCfg.TYPE_NAME_DEVICE_OFF_LINE); + warningMap.put(WarningCfg.TYPE_RX_MUCH_UNKNOWN, WarningCfg.TYPE_NAME_RX_MUCH_UNKNOWN); + warningMap.put(WarningCfg.TYPE_LESS_INUSE_SAT, WarningCfg.TYPE_NAME_LESS_INUSE_SAT); + warningMap.put(WarningCfg.TYPE_LESS_D3XX, WarningCfg.TYPE_NAME_LESS_D3XX); + warningMap.put(WarningCfg.TYPE_LESS_B562, WarningCfg.TYPE_NAME_LESS_B562); + } /**** 推送页面 *****/ @RequestMapping("/page/warning") - public String warning()throws Exception { + public String warning() throws Exception { return "/page/warning"; } + @RequestMapping("/page/warning_cfg") + public String warningCfg() throws Exception { + return "/page/warning_cfg"; + } + + @RequestMapping("/page/table/warning_add") + public String warningUpdate(Model m) throws Exception { + m.addAttribute("warn_map", warningMap); + return "/page/table/warning_add"; + } + /**** 推送数据 *****/ - @RequestMapping("/warning/list") + @RequestMapping("/warning/msg") @ResponseBody public JSONObject listMsg(HttpSession session, int page, int limit, String searchParams) { Page pageable = new Page<>(page, limit); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByDesc("createtime"); Integer tenantId = getTenantId(session); - if(tenantId != null && tenantId != Tenant.SAAS_PROVIDER_ID) { + if (tenantId != null && tenantId != Tenant.SAAS_PROVIDER_ID) { queryWrapper.eq("tenantid", tenantId); } // 条件查询 - if(searchParams != null) { + if (searchParams != null) { JSONObject search = (JSONObject) JSONObject.parse(searchParams); //设备号 String deviceid = search.getString("deviceid"); @@ -53,11 +87,11 @@ public class WarningController extends BasicController{ } String q_end = search.getString("q_end"); if (!StringUtils.isEmpty(q_end)) { - queryWrapper.le("createtime", q_end+" 23:59:59"); + queryWrapper.le("createtime", q_end + " 23:59:59"); } } - IPage cs = warningMapper.selectPage(pageable, queryWrapper); + IPage cs = warningMsgMapper.selectPage(pageable, queryWrapper); JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 0); @@ -67,4 +101,42 @@ public class WarningController extends BasicController{ return jsonObject; } + @RequestMapping("/warning/cfg") + @ResponseBody + public JSONObject listCfg(int page, int limit, String searchParams) { + Page pageable = new Page<>(page, limit); + + IPage cs = warningCfgMapper.selectPage(pageable, null); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("code", 0); + jsonObject.put("msg", ""); + jsonObject.put("count", cs.getTotal()); + jsonObject.put("data", cs.getRecords()); + return jsonObject; + } + + @PostMapping("/warning/update") + @ResponseBody + public String update(@RequestBody JSONObject object) throws Exception { + // 从请求参数中创建对象 + WarningCfg cfg = JSONObject.toJavaObject(object, WarningCfg.class); + cfg.setTypename(warningMap.get(cfg.getType())); + + // 检测该对象是否已存在 + int num = 0; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devicetype", cfg.getDevicetype()); + queryWrapper.eq("type", cfg.getType()); + if (warningCfgMapper.selectCount(queryWrapper) == 0) { + num = warningCfgMapper.insert(cfg); + } else num = warningCfgMapper.update(cfg, queryWrapper); + + if (num == 0) { + return HttpResult.failed(); + } else { + return HttpResult.ok(); + } + + } } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/service/ServiceEnvInit.java b/sec-beidou/src/main/java/com/imdroid/beidou/service/ServiceEnvInit.java index 8e08ff39..6717e618 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/service/ServiceEnvInit.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/service/ServiceEnvInit.java @@ -73,20 +73,18 @@ public class ServiceEnvInit implements ApplicationRunner { private void createDefaultWarningCfg() { WarningCfg warningCfg = new WarningCfg(); - warningCfg.setTenantid(Tenant.SAAS_PROVIDER_ID); warningCfg.setDevicetype(WarningCfg.TYPE_GNSS); warningCfg.setLevel(WarningCfg.LEVEL_2); warningCfg.setType(WarningCfg.TYPE_LOW_VOLTAGE); - warningCfg.setTypename("低电压"); + warningCfg.setTypename(WarningCfg.TYPE_NAME_LOW_VOLTAGE); warningCfg.setValue(9500); warningCfgMapper.insert(warningCfg); warningCfg = new WarningCfg(); - warningCfg.setTenantid(Tenant.SAAS_PROVIDER_ID); warningCfg.setDevicetype(WarningCfg.TYPE_GNSS); warningCfg.setLevel(WarningCfg.LEVEL_2); warningCfg.setType(WarningCfg.TYPE_DEVICE_OFF_LINE); - warningCfg.setTypename("离线"); + warningCfg.setTypename(WarningCfg.TYPE_NAME_DEVICE_OFF_LINE); warningCfg.setValue(0); warningCfgMapper.insert(warningCfg); } diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index 61acddc9..5523e2a1 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -248,12 +248,10 @@ CREATE TABLE IF NOT EXISTS `warninginfo` ( 0x10、终端收到未知报文多;0x20,使用卫星数少;0x40,基站d331少于d341; 0x80、测站b562比例少; */ CREATE TABLE IF NOT EXISTS `warningcfg` ( - `id` bigint AUTO_INCREMENT, - `tenantid` int NOT NULL, - `devicetype` smallint DEFAULT NULL, + `devicetype` smallint NOT NULL, + `type` int NOT NULL, `level` smallint DEFAULT 0, - `type` int DEFAULT NULL, `typename` varchar(50) NOT NULL, - `value` int DEFAULT NULL, - PRIMARY KEY (`id`) + `value` int NOT NULL, + PRIMARY KEY (`devicetype`,`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/sec-beidou/src/main/resources/static/api/init.json b/sec-beidou/src/main/resources/static/api/init.json index ea7d6255..18e8756b 100644 --- a/sec-beidou/src/main/resources/static/api/init.json +++ b/sec-beidou/src/main/resources/static/api/init.json @@ -23,9 +23,23 @@ }, { "title": "告警管理", - "href": "page/warning", + "href": "", "icon": "fa fa-bell-o", - "target": "_self" + "target": "", + "child": [ + { + "title": "告警消息", + "href": "page/warning", + "icon": "fa fa-minus", + "target": "_self" + }, + { + "title": "告警参数", + "href": "page/warning_cfg", + "icon": "fa fa-minus", + "target": "_self" + } + ] }, { "title": "北斗", diff --git a/sec-beidou/src/main/resources/static/api/warning_data.json b/sec-beidou/src/main/resources/static/api/warning_data.json deleted file mode 100644 index 4e207f78..00000000 --- a/sec-beidou/src/main/resources/static/api/warning_data.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "code": 0, - "msg": "", - "count": 1000, - "data": [ - { - "rp_time": "2023-01-01 12:23:56", - "device_id": "2307001", - "device_type": "北斗", - "level": "一般", - "content": "位移加速" - }, - { - "rp_time": "2023-02-01 12:23:56", - "device_id": "1602301001", - "device_type": "测斜仪", - "level": "一般", - "content": "位移加速" - }, - { - "rp_time": "2023-03-01 12:23:56", - "device_id": "861380138000", - "device_type": "光伏DTU", - "level": "严重", - "content": "低电压" - } - ] -} \ No newline at end of file diff --git a/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html b/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html index 250837be..39663e7d 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html @@ -150,7 +150,7 @@ {field: 'filter_hour', title: '平滑窗口(小时)'}, {field: 'xy_threshold', title: '水平异常门限(cm)'}, {field: 'z_threshold', title: '垂直异常门限(cm)'}, - {field: 'auto_filter', title: '自适应平滑'}, + {field: 'auto_filter', title: '自适应平滑', templet: '#autoFilterTrans'}, {field: 'filter_max_hour', title: '最大平滑窗口'}, {field: 'shock', title: 'shock'}, {field: 'device_num', title: '关联设备数'}, @@ -347,6 +347,14 @@ } + + \ No newline at end of file diff --git a/sec-beidou/src/main/resources/templates/page/warning.html b/sec-beidou/src/main/resources/templates/page/warning.html index 97e73069..15777cbb 100644 --- a/sec-beidou/src/main/resources/templates/page/warning.html +++ b/sec-beidou/src/main/resources/templates/page/warning.html @@ -59,14 +59,14 @@ table.render({ elem: '#currentTableId', - url: 'warning/list', + url: '/warning/msg', defaultToolbar: ['filter', 'exports', 'print', { title: '提示', layEvent: 'LAYTABLE_TIPS', icon: 'layui-icon-tips' }], cols: [[ - {field: 'createtime', title: '时间', sort: true}, + {field: 'createtime', title: '上报时间', templet: "
{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}
"}, {field: 'deviceid', title: '设备号'}, {field: 'devicetype', title: '设备类型'}, {field: 'level', title: '告警级别'}, diff --git a/sec-beidou/src/main/resources/templates/page/warning_cfg.html b/sec-beidou/src/main/resources/templates/page/warning_cfg.html new file mode 100644 index 00000000..d0abba01 --- /dev/null +++ b/sec-beidou/src/main/resources/templates/page/warning_cfg.html @@ -0,0 +1,127 @@ +
+
+
+ + + +
+
+ + \ No newline at end of file