1、增加健康检查页面
This commit is contained in:
parent
2461427314
commit
706eb20398
@ -11,7 +11,7 @@ import java.time.LocalDateTime;
|
|||||||
* @author LiGang
|
* @author LiGang
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@TableName(value = "ehm")
|
@TableName(value = "ehmconfig")
|
||||||
public class EhmConfig {
|
public class EhmConfig {
|
||||||
private LocalDateTime updatetime;
|
private LocalDateTime updatetime;
|
||||||
private Short offlinestatdays;
|
private Short offlinestatdays;
|
||||||
|
|||||||
@ -32,7 +32,7 @@ public class EhmTask{
|
|||||||
/**
|
/**
|
||||||
* 每半小时转发GNSS解算结果
|
* 每半小时转发GNSS解算结果
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 24 * * * ?") // 每30分钟执行一次
|
@Scheduled(cron = "0 15 7 * * ?") // 每天7点15分钟执行一次
|
||||||
private void check() {
|
private void check() {
|
||||||
// 获取健康检查配置
|
// 获取健康检查配置
|
||||||
List<EhmConfig> ehmConfigList = ehmConfigMapper.selectList(null);
|
List<EhmConfig> ehmConfigList = ehmConfigMapper.selectList(null);
|
||||||
@ -42,7 +42,7 @@ public class EhmTask{
|
|||||||
ehmConfig.setUpdatetime(LocalDateTime.now());
|
ehmConfig.setUpdatetime(LocalDateTime.now());
|
||||||
ehmConfig.setCalcstathours(24);
|
ehmConfig.setCalcstathours(24);
|
||||||
ehmConfig.setOfflinestatdays((short) 7);
|
ehmConfig.setOfflinestatdays((short) 7);
|
||||||
ehmConfigMapper.update(ehmConfig,null);
|
ehmConfigMapper.insert(ehmConfig);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
ehmConfig = ehmConfigList.get(0);
|
ehmConfig = ehmConfigList.get(0);
|
||||||
@ -74,7 +74,7 @@ public class EhmTask{
|
|||||||
// 从告警消息里查询离线记录
|
// 从告警消息里查询离线记录
|
||||||
QueryWrapper<WarningMsg> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<WarningMsg> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("deviceid",ehm.getDeviceid());
|
queryWrapper.eq("deviceid",ehm.getDeviceid());
|
||||||
queryWrapper.le("createtime",now.minusDays(ehm.getOfflinestatdays()));
|
queryWrapper.ge("createtime",now.minusDays(ehm.getOfflinestatdays()));
|
||||||
queryWrapper.eq("code",WarningCfg.TYPE_DEVICE_OFF_LINE);
|
queryWrapper.eq("code",WarningCfg.TYPE_DEVICE_OFF_LINE);
|
||||||
List<WarningMsg> warningMsgList = warningMsgMapper.selectList(queryWrapper);
|
List<WarningMsg> warningMsgList = warningMsgMapper.selectList(queryWrapper);
|
||||||
if(warningMsgList==null || warningMsgList.size()==0){
|
if(warningMsgList==null || warningMsgList.size()==0){
|
||||||
@ -115,7 +115,7 @@ public class EhmTask{
|
|||||||
// 获取过去N小时的解算数据
|
// 获取过去N小时的解算数据
|
||||||
QueryWrapper<GnssCalcData> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<GnssCalcData> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("deviceid", ehm.getDeviceid());
|
queryWrapper.eq("deviceid", ehm.getDeviceid());
|
||||||
queryWrapper.le("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours()));
|
queryWrapper.ge("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours()));
|
||||||
List<GnssCalcData> gnssCalcDataList = gnssCalcDataMapper.selectList(queryWrapper);
|
List<GnssCalcData> gnssCalcDataList = gnssCalcDataMapper.selectList(queryWrapper);
|
||||||
// 计算过去N小时标准差,不含有效值
|
// 计算过去N小时标准差,不含有效值
|
||||||
// 计算过去N小时有效解比例
|
// 计算过去N小时有效解比例
|
||||||
@ -145,27 +145,27 @@ public class EhmTask{
|
|||||||
sedevU += Math.pow(gnssCalcData.getB562d()-avgU,2);
|
sedevU += Math.pow(gnssCalcData.getB562d()-avgU,2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ehm.setStdeve((float) (sedevE/validCount));
|
ehm.setStdeve((float) Math.sqrt(sedevE/validCount));
|
||||||
ehm.setStdevn((float) (sedevN/validCount));
|
ehm.setStdevn((float) Math.sqrt(sedevN/validCount));
|
||||||
ehm.setStdevu((float) (sedevU/validCount));
|
ehm.setStdevu((float) Math.sqrt(sedevU/validCount));
|
||||||
ehm.setValidrate((float) (validCount/gnssCalcDataList.size()));
|
ehm.setValidrate((float) (validCount*100/gnssCalcDataList.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 计算过去N小时固定解比例
|
// 计算过去N小时固定解比例
|
||||||
QueryWrapper<GnssTrxMsg> queryWrapper1 = new QueryWrapper<>();
|
QueryWrapper<GnssTrxMsg> queryWrapper1 = new QueryWrapper<>();
|
||||||
queryWrapper1.eq("deviceid",ehm.getDeviceid());
|
queryWrapper1.eq("deviceid",ehm.getDeviceid());
|
||||||
queryWrapper1.le("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours()));
|
queryWrapper1.ge("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours()));
|
||||||
List<GnssTrxMsg> gnssTrxMsgList = gnssTrxMsgMapper.selectList(queryWrapper1);
|
List<GnssTrxMsg> gnssTrxMsgList = gnssTrxMsgMapper.selectList(queryWrapper1);
|
||||||
int fixCount = 0;
|
int fixCount = 0;
|
||||||
int d341Count = 0;
|
int d341Count = 0;
|
||||||
int jumpCount = 0;
|
int jumpCount = 0;
|
||||||
for(GnssTrxMsg gnssTrxMsg:gnssTrxMsgList){
|
for(GnssTrxMsg gnssTrxMsg:gnssTrxMsgList){
|
||||||
fixCount += gnssTrxMsg.getFixnum();
|
if(gnssTrxMsg.getFixnum()!=null) fixCount += gnssTrxMsg.getFixnum();
|
||||||
d341Count += gnssTrxMsg.getB562count();
|
if(gnssTrxMsg.getB562count()!=null) d341Count += gnssTrxMsg.getB562count();
|
||||||
jumpCount += gnssTrxMsg.getJumpcount();
|
if(gnssTrxMsg.getJumpcount()!=null) jumpCount += gnssTrxMsg.getJumpcount();
|
||||||
}
|
}
|
||||||
if(d341Count>0) ehm.setFixrate((float) (fixCount/d341Count));
|
if(d341Count>0) ehm.setFixrate((float) (fixCount*100/d341Count));
|
||||||
ehm.setJumpcount(jumpCount);
|
ehm.setJumpcount(jumpCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,122 @@
|
|||||||
|
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;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gnss统计消息 控制器
|
||||||
|
*
|
||||||
|
* @author LiGang
|
||||||
|
* @date 2024/1/6 15:29
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class GnssEhmController extends BasicController implements CommonExcelService<Ehm, Ehm> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
EhmMapper ehmMapper;
|
||||||
|
|
||||||
|
final List<String> sortItems = new ArrayList<>();
|
||||||
|
final List<String> sortSqls = new ArrayList<>();
|
||||||
|
@RequestMapping("/page/gnss_ehm")
|
||||||
|
public String gnssTrxMsg(Model m, HttpSession session) {
|
||||||
|
initModel(m, session);
|
||||||
|
if(sortItems.size()==0) {
|
||||||
|
sortItems.add("离线次数");sortSqls.add("order by offlinecount desc");
|
||||||
|
sortItems.add("离线时长");sortSqls.add("order by offlineminutes desc");
|
||||||
|
sortItems.add("东标准差");sortSqls.add("order by stdeve desc");
|
||||||
|
sortItems.add("北标准差");sortSqls.add("order by stdevn desc");
|
||||||
|
sortItems.add("天标准差");sortSqls.add("order by stdevu desc");
|
||||||
|
sortItems.add("有效率");sortSqls.add("order by validrate");
|
||||||
|
sortItems.add("固定率");sortSqls.add("order by fixrate");
|
||||||
|
sortItems.add("周跳次数");sortSqls.add("order by jumpcount desc");
|
||||||
|
}
|
||||||
|
m.addAttribute("sort_items", sortItems);
|
||||||
|
return "/page/gnss_ehm";
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/gnss/ehm/list")
|
||||||
|
@ResponseBody
|
||||||
|
public JSONObject listTrxMsg(HttpSession session, int page, int limit, String searchParams) {
|
||||||
|
return this.pageList(session, page, limit, searchParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSortSql(JSONObject search){
|
||||||
|
if(search != null) {
|
||||||
|
String sortItem = search.getString("_sorttype");
|
||||||
|
int id = 0;
|
||||||
|
for(String item:sortItems){
|
||||||
|
if(item.equals(sortItem)){
|
||||||
|
return sortSqls.get(id);
|
||||||
|
}
|
||||||
|
id++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出excel
|
||||||
|
*
|
||||||
|
* @param session HttpSession
|
||||||
|
* @param request HttpServletRequest
|
||||||
|
* @param response HttpServletResponse
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@RequestMapping("/gnss/ehm/export")
|
||||||
|
@ResponseBody
|
||||||
|
public void exportData(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||||
|
this.export(session, request, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取实体类的class
|
||||||
|
*
|
||||||
|
* @return 实体类的class
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Class<Ehm> getEntityClass() {
|
||||||
|
return Ehm.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取实体类对应的mybatis mapper
|
||||||
|
*
|
||||||
|
* @return 实体类对应的mybatis mapper
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public BaseMapper<Ehm> getMapper() {
|
||||||
|
return ehmMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getOrderByColumn() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取排序方式,默认降序
|
||||||
|
*
|
||||||
|
* @return 排序方式
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getOrder() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -119,6 +119,13 @@ public interface CommonExcelService<T, R> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String sortSql = getSortSql(search);
|
||||||
|
if(sortSql!=null){
|
||||||
|
queryWrapper.last(sortSql);
|
||||||
|
//String sql = queryWrapper.getSqlSegment();
|
||||||
|
//System.out.println(sql);
|
||||||
|
}
|
||||||
|
|
||||||
// 查询
|
// 查询
|
||||||
IPage<R> cs = null;
|
IPage<R> cs = null;
|
||||||
if (isJoinSelect()) {
|
if (isJoinSelect()) {
|
||||||
@ -182,6 +189,7 @@ public interface CommonExcelService<T, R> {
|
|||||||
|
|
||||||
default void checkSearchParams(JSONObject search){}
|
default void checkSearchParams(JSONObject search){}
|
||||||
default void checkSearchParams(Enumeration<String> enu){}
|
default void checkSearchParams(Enumeration<String> enu){}
|
||||||
|
default String getSortSql(JSONObject search){return null;}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置查询条件
|
* 设置查询条件
|
||||||
|
|||||||
@ -21,6 +21,12 @@
|
|||||||
"icon": "fa fa-home",
|
"icon": "fa fa-home",
|
||||||
"target": "_self"
|
"target": "_self"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "健康检查报告",
|
||||||
|
"href": "page/gnss_ehm",
|
||||||
|
"icon": "fa fa-tachometer",
|
||||||
|
"target": "_self"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"title": "运行状态",
|
"title": "运行状态",
|
||||||
"href": "page/gnss_status",
|
"href": "page/gnss_status",
|
||||||
|
|||||||
134
sec-beidou/src/main/resources/templates/page/gnss_ehm.html
Normal file
134
sec-beidou/src/main/resources/templates/page/gnss_ehm.html
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>健康检查报告</title>
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
|
<link rel="stylesheet" href="../lib/layui-v2.6.3/css/layui.css" media="all">
|
||||||
|
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="layuimini-container">
|
||||||
|
<div class="layuimini-main">
|
||||||
|
|
||||||
|
<fieldset class="table-search-fieldset">
|
||||||
|
<legend>搜索信息</legend>
|
||||||
|
<div style="margin: 10px 10px 10px 10px">
|
||||||
|
<form class="layui-form layui-form-pane" action="" id="searchFrm">
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<div class="layui-inline">
|
||||||
|
<label class="layui-form-label">设备号</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="sl_deviceid" autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-inline" >
|
||||||
|
<label class="layui-form-label">TopN排序方法</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<select name="_sorttype" id="_sorttype" lay-search="">
|
||||||
|
<option th:each="item : ${sort_items}" th:text="${item}" th:value="${item}"></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-inline">
|
||||||
|
<label class="layui-form-label">范围</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="dgt_createtime" autocomplete="off" id="ID-laydate-start-date" class="layui-input" placeholder="开始日期">
|
||||||
|
</div>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="dlt_createtime" autocomplete="off" id="ID-laydate-end-date" class="layui-input" placeholder="结束日期">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-inline">
|
||||||
|
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button>
|
||||||
|
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-export-btn"><i class="layui-icon"></i>导出</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
|
||||||
|
<script th:inline="javascript">
|
||||||
|
layui.use(['form', 'table', 'laydate'], function () {
|
||||||
|
var $ = layui.$;
|
||||||
|
var form = layui.form,
|
||||||
|
table = layui.table,
|
||||||
|
laydate = layui.laydate;
|
||||||
|
|
||||||
|
var cfg_cols = [
|
||||||
|
{field: 'deviceid', title: '设备号', width: 100},
|
||||||
|
{field: 'createtime', title: '创建时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||||
|
{field: 'offlinestatdays', title: '离线统计周期(天)'},
|
||||||
|
{field: 'calcstathours', title: '数据分析周期(小时)'},
|
||||||
|
{field: 'offlinecount', title: '离线次数'},
|
||||||
|
{field: 'offlineminutes', title: '离线分钟数'},
|
||||||
|
{field: 'stdeve', title: '东标准差'},
|
||||||
|
{field: 'stdevn', title: '北标准差'},
|
||||||
|
{field: 'stdevu', title: '天标准差'},
|
||||||
|
{field: 'fixrate', title: '固定率%'},
|
||||||
|
{field: 'validrate', title: '有效率%'},
|
||||||
|
{field: 'jumpcount', title: '周跳次数'}
|
||||||
|
];
|
||||||
|
/**
|
||||||
|
* 初始化表单,要加上,不然刷新部分组件可能会不加载
|
||||||
|
*/
|
||||||
|
form.render();
|
||||||
|
|
||||||
|
laydate.render({
|
||||||
|
elem: '#ID-laydate-start-date',
|
||||||
|
type: 'datetime'
|
||||||
|
});
|
||||||
|
laydate.render({
|
||||||
|
elem: '#ID-laydate-end-date',
|
||||||
|
type: 'datetime'
|
||||||
|
});
|
||||||
|
|
||||||
|
table.render({
|
||||||
|
elem: '#currentTableId',
|
||||||
|
url: '/gnss/ehm/list',
|
||||||
|
toolbar: '#toolbarDemo',//开启头部工具栏
|
||||||
|
defaultToolbar: ['filter'],
|
||||||
|
cols: [
|
||||||
|
cfg_cols
|
||||||
|
],
|
||||||
|
limits: [50, 100, 200, 300],
|
||||||
|
limit: 50,
|
||||||
|
page: true,
|
||||||
|
skin: 'line'
|
||||||
|
});
|
||||||
|
|
||||||
|
// 监听搜索操作
|
||||||
|
form.on('submit(data-search-btn)', function (data) {
|
||||||
|
var result = JSON.stringify(data.field);
|
||||||
|
|
||||||
|
//执行搜索重载
|
||||||
|
table.reload('currentTableId', {
|
||||||
|
page: {
|
||||||
|
curr: 1
|
||||||
|
}
|
||||||
|
, where: {
|
||||||
|
searchParams: result
|
||||||
|
}
|
||||||
|
}, 'data');
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 监听导出操作
|
||||||
|
form.on('submit(data-export-btn)', function (data) {
|
||||||
|
var result = $('#searchFrm').serialize();
|
||||||
|
var u = "/gnss/ehm/export?" + result;
|
||||||
|
window.open(u, "_blank");
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
x
Reference in New Issue
Block a user