diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/SurfaceInclineData.java b/sec-api/src/main/java/com/imdroid/secapi/dto/SurfaceInclineData.java new file mode 100644 index 00000000..0ebcfd9a --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/SurfaceInclineData.java @@ -0,0 +1,72 @@ +package com.imdroid.secapi.dto; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * GNSS状态消息,每个工作周期开始时上报一次 + * + * @author LiGang + */ +@Data +@TableName(value = "surface_incline_data") +public class SurfaceInclineData { + @TableId(value = "id", type = IdType.AUTO) + @ExcelIgnore + Long id; + + @ExcelProperty("租户id") + Integer tenantid; + + @ExcelProperty("上报时间") + LocalDateTime createtime; + + @ExcelProperty("设备编号") + String deviceid; + + @ExcelProperty("传感器号") + Short sensorid; + + @ExcelProperty("倾角X") + Float anglex; + + @ExcelProperty("倾角Y") + Float angley; + + @ExcelProperty("倾角Z") + Float anglez; + + @ExcelProperty("加速度X") + Float accx; + + @ExcelProperty("加速度Y") + Float accy; + + @ExcelProperty("加速度Z") + Float accz; + + @ExcelProperty("MaxX") + Float maxaccx; + + @ExcelProperty("MaxY") + Float maxaccy; + + @ExcelProperty("MaxZ") + Float maxaccz; + + @ExcelProperty("MinX") + Float minaccx; + + @ExcelProperty("MinY") + Float minaccy; + + @ExcelProperty("MinZ") + Float minaccz; + +} diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/SurfaceInclineDataMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/SurfaceInclineDataMapper.java new file mode 100644 index 00000000..dc0a45b1 --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/SurfaceInclineDataMapper.java @@ -0,0 +1,10 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + + +@Mapper +public interface SurfaceInclineDataMapper extends BaseMapper { + +} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D350SurfaceInclineMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D350SurfaceInclineMessageExecutor.java new file mode 100644 index 00000000..802f3ab0 --- /dev/null +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D350SurfaceInclineMessageExecutor.java @@ -0,0 +1,51 @@ +package com.imdroid.sideslope.executor; + +import com.imdroid.common.util.ThreadManager; +import com.imdroid.secapi.dto.*; +import com.imdroid.sideslope.message.D350SurfaceInclineMessage; +import com.imdroid.sideslope.service.DataPersistService; +import com.imdroid.sideslope.service.Device; +import com.imdroid.sideslope.service.DeviceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + + +/** + * @author Layton + * @date 2023/2/2 20:40 + * 1、回ACK,以便终端判断是否连接上服务器后台 + * 2、同步参数 + * 3、判断是否发冷启动指令 + * 4、保存状态信息,判断是否有低电压等告警,清除离线告警 + */ +@Component +public class D350SurfaceInclineMessageExecutor implements Executor { + + @Autowired + private DataPersistService dataPersistService; + @Autowired + SurfaceInclineDataMapper dataMapper; + @Autowired + private DeviceService deviceService; + @Override + public Void execute(D350SurfaceInclineMessage message) { + Device device = deviceService.findByDeviceId(message.getId()); + if(device == null) return null; + // 补齐tenantId + message.setTenantId(device.getTenantId()); + + ThreadManager.getFixedThreadPool().submit(() -> { + + //保存状态信息,判断是否有低电压等告警,清除离线告警 + dataMapper.insert(message.getInclineData()); + }); + + return null; + } + + @Override + public Class getMessageType() { + return D350SurfaceInclineMessage.class; + } + +} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D350TestMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D350TestMessageExecutor.java deleted file mode 100644 index 805721bc..00000000 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D350TestMessageExecutor.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.imdroid.sideslope.executor; - -import com.imdroid.sideslope.message.D350TestMessage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -/** - * @author Layton - * @date 2023/2/2 20:40 - */ -@Component -public class D350TestMessageExecutor implements Executor { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Override - public Void execute(D350TestMessage message) { - if (logger.isDebugEnabled()) { - logger.debug("device {} max acc(g) in 1s: x={},y={},z={}",message.getId(), - message.getAccX(),message.getAccY(),message.getAccZ()); - } - - - return null; - } - - - @Override - public Class getMessageType() { - return D350TestMessage.class; - } -} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/MessageParser.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/MessageParser.java index f5a24581..502e2652 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/MessageParser.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/MessageParser.java @@ -36,7 +36,7 @@ public class MessageParser { types.put((short)0xd31A, D31xConfigAckMessage.class);//DTU配置应答 types.put((short)0xd31B, D31xConfigAckMessage.class);//LORA配置应答 types.put((short)0xd320, D31xConfigAckMessage.class);//v3.2 DTU配置应答 - types.put((short)0xd350, D350TestMessage.class);//ACC上报 + types.put((short)0xd350, D350SurfaceInclineMessage.class);//ACC上报 types.put((short)0xd314, D314PingMessage.class);//ping } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D350SurfaceInclineMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D350SurfaceInclineMessage.java new file mode 100644 index 00000000..fd23ba3c --- /dev/null +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D350SurfaceInclineMessage.java @@ -0,0 +1,50 @@ +package com.imdroid.sideslope.message; + +import com.imdroid.secapi.dto.SurfaceInclineData; +import io.netty.buffer.ByteBuf; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 自检消息 + * + * @author Layton + * @date 2023/2/2 20:38 + */ +@EqualsAndHashCode(callSuper=true) +@Data +public class D350SurfaceInclineMessage extends BaseMessage { + + SurfaceInclineData inclineData = new SurfaceInclineData(); + + @Override + public void decodeBody(ByteBuf src) { + // d3 50 length(2bytes) device_id(4bytes) seq(2bytes) data + this.len = src.readableBytes(); // total length + this.header = src.readUnsignedShort();// flag + src.readUnsignedShort();// d342 length + this.id = String.valueOf(src.readUnsignedInt());//id + this.seq = src.readUnsignedShort(); + + inclineData.setDeviceid(getId()); + inclineData.setCreatetime(createTime); + + inclineData.setSensorid(src.readUnsignedByte()); + inclineData.setAnglex(src.readFloat()); + inclineData.setAngley(src.readFloat()); + inclineData.setAnglez(src.readFloat()); + inclineData.setAccx(src.readFloat()); + inclineData.setAccy(src.readFloat()); + inclineData.setAccz(src.readFloat()); + inclineData.setMaxaccx(src.readFloat()); + inclineData.setMaxaccy(src.readFloat()); + inclineData.setMaxaccz(src.readFloat()); + inclineData.setMinaccx(src.readFloat()); + inclineData.setMinaccy(src.readFloat()); + inclineData.setMinaccz(src.readFloat()); + } + @Override + public boolean shouldDecodeHeader() { + return false; + } +} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D350TestMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D350TestMessage.java deleted file mode 100644 index 5790d882..00000000 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D350TestMessage.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.imdroid.sideslope.message; - -import com.imdroid.sideslope.bd.Gga; -import io.netty.buffer.ByteBuf; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * @author Layton - * @date 2023/2/2 20:50 - */ -@Data -@EqualsAndHashCode(callSuper=true) -public class D350TestMessage extends BaseMessage { - double accX; - double accY; - double accZ; - Gga gga; - @Override - public void decodeBody(ByteBuf src) { - accX = src.readFloat(); - accY = src.readFloat(); - accZ = src.readFloat(); - } -} diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/SurfaceInclineController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/SurfaceInclineController.java new file mode 100644 index 00000000..1e75e351 --- /dev/null +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/SurfaceInclineController.java @@ -0,0 +1,75 @@ +package com.imdroid.beidou.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.imdroid.beidou.service.CommonExcelService; +import com.imdroid.secapi.dto.*; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +/** + * 状态消息 控制器 + * + * @author LiGang + * @date 2024/1/6 14:37 + */ +@Controller +@RequiredArgsConstructor +public class SurfaceInclineController extends BasicController implements CommonExcelService { + @Autowired + SurfaceInclineDataMapper dataMapper; + + @RequestMapping("/page/surface_incline_data") + public String surfaceInclineData(Model m, HttpSession session) { + initModel(m, session); + return "/page/surface_incline_data"; + } + + @RequestMapping("/surface_incline/data/list") + @ResponseBody + public JSONObject listData(HttpSession session, Integer page, Integer limit, String searchParams) { + return this.pageList(session, page, limit, searchParams); + } + + /** + * 导出excel + * + * @param session HttpSession + * @param request HttpServletRequest + * @param response HttpServletResponse + * @throws Exception + */ + @RequestMapping("/surface_incline/data/export") + @ResponseBody + public void exportData(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception { + this.export(session, request, response); + } + + /** + * 获取实体类的class + * + * @return 实体类的class + */ + @Override + public Class getEntityClass() { + return SurfaceInclineData.class; + } + + /** + * 获取实体类对应的mybatis mapper + * + * @return 实体类对应的mybatis mapper + */ + @Override + public BaseMapper getMapper() { + return dataMapper; + } +} diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index 27ba6c51..6362dcd5 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -403,3 +403,28 @@ CREATE TABLE IF NOT EXISTS `traffic_records` ( KEY `idx_iccid` (`iccid`), KEY `idx_recordtime` (`recordtime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流量使用记录表'; + +/*** + 倾角计 + */ +CREATE TABLE IF NOT EXISTS `surface_incline_data` ( + `id` bigint AUTO_INCREMENT, + `tenantid` int NOT NULL, + `createtime` datetime DEFAULT NULL, + `devicetime` time DEFAULT NULL, + `deviceid` varchar(20) NOT NULL, + `sensorid` smallint DEFAULT NULL, + `anglex` float DEFAULT NULL, + `angley` float DEFAULT NULL, + `anglez` float DEFAULT NULL, + `accx` float DEFAULT NULL, + `accy` float DEFAULT NULL, + `accz` float DEFAULT NULL, + `maxaccx` float DEFAULT NULL, + `maxaccy` float DEFAULT NULL, + `maxaccz` float DEFAULT NULL, + `minaccx` float DEFAULT NULL, + `minaccy` float DEFAULT NULL, + `minaccz` float DEFAULT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/sec-beidou/src/main/resources/static/api/init_enterprise.json b/sec-beidou/src/main/resources/static/api/init_enterprise.json index 979b2ba1..47739ac7 100644 --- a/sec-beidou/src/main/resources/static/api/init_enterprise.json +++ b/sec-beidou/src/main/resources/static/api/init_enterprise.json @@ -4,7 +4,7 @@ "href": "page/device_overview" }, "logoInfo": { - "title": "北斗管理平台", + "title": "地质监测平台", "image": "images/logo.png", "href": "" }, @@ -41,12 +41,6 @@ } ] }, - { - "title": "解算结果", - "href": "page/gnss_data_calc", - "icon": "fa fa-calculator", - "target": "_self" - }, { "title": "配置管理", "href": "", @@ -82,6 +76,32 @@ ] } ] + }, + { + "title": "监测数据", + "icon": "fa fa-address-book", + "href": "", + "target": "_self", + "child": [ + { + "title": "北斗", + "href": "page/gnss_data_calc", + "icon": "fa fa-calculator", + "target": "_self" + }, + { + "title": "倾角计", + "href": "page/surface_incline_data", + "icon": "fa fa-calculator", + "target": "_self" + }, + { + "title": "测斜仪", + "href": "", + "icon": "fa fa-calculator", + "target": "_self" + } + ] } ] } \ No newline at end of file diff --git a/sec-beidou/src/main/resources/static/api/init_super_admin.json b/sec-beidou/src/main/resources/static/api/init_super_admin.json index 34368275..ddbf2f63 100644 --- a/sec-beidou/src/main/resources/static/api/init_super_admin.json +++ b/sec-beidou/src/main/resources/static/api/init_super_admin.json @@ -4,7 +4,7 @@ "href": "page/device_overview" }, "logoInfo": { - "title": "北斗管理平台", + "title": "地质监测平台", "image": "images/logo.png", "href": "" }, @@ -53,12 +53,6 @@ } ] }, - { - "title": "解算结果", - "href": "page/gnss_data_calc", - "icon": "fa fa-calculator", - "target": "_self" - }, { "title": "日志", "href": "page/gnss_single_data", @@ -177,6 +171,32 @@ } ] }, + { + "title": "监测数据", + "icon": "fa fa-address-book", + "href": "", + "target": "_self", + "child": [ + { + "title": "北斗", + "href": "page/gnss_data_calc", + "icon": "fa fa-calculator", + "target": "_self" + }, + { + "title": "倾角计", + "href": "page/surface_incline_data", + "icon": "fa fa-calculator", + "target": "_self" + }, + { + "title": "测斜仪", + "href": "", + "icon": "fa fa-calculator", + "target": "_self" + } + ] + }, { "title": "系统管理", "icon": "fa fa-lemon-o", diff --git a/sec-beidou/src/main/resources/static/api/init_sys_admin.json b/sec-beidou/src/main/resources/static/api/init_sys_admin.json index caba7f78..02a17d91 100644 --- a/sec-beidou/src/main/resources/static/api/init_sys_admin.json +++ b/sec-beidou/src/main/resources/static/api/init_sys_admin.json @@ -4,7 +4,7 @@ "href": "page/device_overview" }, "logoInfo": { - "title": "北斗管理平台", + "title": "地质监测平台", "image": "images/logo.png", "href": "" }, @@ -47,12 +47,6 @@ } ] }, - { - "title": "解算结果", - "href": "page/gnss_data_calc", - "icon": "fa fa-calculator", - "target": "_self" - }, { "title": "配置管理", "href": "", @@ -135,6 +129,32 @@ } ] }, + { + "title": "监测数据", + "icon": "fa fa-address-book", + "href": "", + "target": "_self", + "child": [ + { + "title": "北斗", + "href": "page/gnss_data_calc", + "icon": "fa fa-calculator", + "target": "_self" + }, + { + "title": "倾角计", + "href": "page/surface_incline_data", + "icon": "fa fa-calculator", + "target": "_self" + }, + { + "title": "测斜仪", + "href": "", + "icon": "fa fa-calculator", + "target": "_self" + } + ] + }, { "title": "系统管理", "icon": "fa fa-lemon-o", diff --git a/sec-beidou/src/main/resources/templates/index.html b/sec-beidou/src/main/resources/templates/index.html index 5208eefa..9d0b0c0b 100644 --- a/sec-beidou/src/main/resources/templates/index.html +++ b/sec-beidou/src/main/resources/templates/index.html @@ -2,7 +2,7 @@ - 北斗管理系统 + 地质监测平台 diff --git a/sec-beidou/src/main/resources/templates/login.html b/sec-beidou/src/main/resources/templates/login.html index 80e44f75..62f1c884 100644 --- a/sec-beidou/src/main/resources/templates/login.html +++ b/sec-beidou/src/main/resources/templates/login.html @@ -59,7 +59,7 @@