diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/EhmConfig.java b/sec-api/src/main/java/com/imdroid/secapi/dto/EhmConfig.java index 6a7c205a..ab3e7161 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/EhmConfig.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/EhmConfig.java @@ -11,7 +11,7 @@ import java.time.LocalDateTime; * @author LiGang */ @Data -@TableName(value = "ehm") +@TableName(value = "ehmconfig") public class EhmConfig { private LocalDateTime updatetime; private Short offlinestatdays; diff --git a/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java b/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java index 2dc0ff38..2728b2f1 100644 --- a/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java +++ b/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java @@ -32,7 +32,7 @@ public class EhmTask{ /** * 每半小时转发GNSS解算结果 */ - @Scheduled(cron = "0 24 * * * ?") // 每30分钟执行一次 + @Scheduled(cron = "0 15 7 * * ?") // 每天7点15分钟执行一次 private void check() { // 获取健康检查配置 List ehmConfigList = ehmConfigMapper.selectList(null); @@ -42,7 +42,7 @@ public class EhmTask{ ehmConfig.setUpdatetime(LocalDateTime.now()); ehmConfig.setCalcstathours(24); ehmConfig.setOfflinestatdays((short) 7); - ehmConfigMapper.update(ehmConfig,null); + ehmConfigMapper.insert(ehmConfig); } else{ ehmConfig = ehmConfigList.get(0); @@ -74,7 +74,7 @@ public class EhmTask{ // 从告警消息里查询离线记录 QueryWrapper queryWrapper = new QueryWrapper<>(); 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); List warningMsgList = warningMsgMapper.selectList(queryWrapper); if(warningMsgList==null || warningMsgList.size()==0){ @@ -115,7 +115,7 @@ public class EhmTask{ // 获取过去N小时的解算数据 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("deviceid", ehm.getDeviceid()); - queryWrapper.le("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours())); + queryWrapper.ge("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours())); List gnssCalcDataList = gnssCalcDataMapper.selectList(queryWrapper); // 计算过去N小时标准差,不含有效值 // 计算过去N小时有效解比例 @@ -145,27 +145,27 @@ public class EhmTask{ sedevU += Math.pow(gnssCalcData.getB562d()-avgU,2); } } - ehm.setStdeve((float) (sedevE/validCount)); - ehm.setStdevn((float) (sedevN/validCount)); - ehm.setStdevu((float) (sedevU/validCount)); - ehm.setValidrate((float) (validCount/gnssCalcDataList.size())); + ehm.setStdeve((float) Math.sqrt(sedevE/validCount)); + ehm.setStdevn((float) Math.sqrt(sedevN/validCount)); + ehm.setStdevu((float) Math.sqrt(sedevU/validCount)); + ehm.setValidrate((float) (validCount*100/gnssCalcDataList.size())); } // 计算过去N小时固定解比例 QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("deviceid",ehm.getDeviceid()); - queryWrapper1.le("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours())); + queryWrapper1.ge("createtime", ehm.getCreatetime().minusHours(ehm.getCalcstathours())); List gnssTrxMsgList = gnssTrxMsgMapper.selectList(queryWrapper1); int fixCount = 0; int d341Count = 0; int jumpCount = 0; for(GnssTrxMsg gnssTrxMsg:gnssTrxMsgList){ - fixCount += gnssTrxMsg.getFixnum(); - d341Count += gnssTrxMsg.getB562count(); - jumpCount += gnssTrxMsg.getJumpcount(); + if(gnssTrxMsg.getFixnum()!=null) fixCount += gnssTrxMsg.getFixnum(); + if(gnssTrxMsg.getB562count()!=null) d341Count += gnssTrxMsg.getB562count(); + 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); } } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssEhmController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssEhmController.java new file mode 100644 index 00000000..f0c23933 --- /dev/null +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssEhmController.java @@ -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 { + + @Autowired + EhmMapper ehmMapper; + + final List sortItems = new ArrayList<>(); + final List 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 getEntityClass() { + return Ehm.class; + } + + /** + * 获取实体类对应的mybatis mapper + * + * @return 实体类对应的mybatis mapper + */ + @Override + public BaseMapper getMapper() { + return ehmMapper; + } + + @Override + public String getOrderByColumn() { + return null; + } + + /** + * 获取排序方式,默认降序 + * + * @return 排序方式 + */ + @Override + public String getOrder() { + return null; + } +} diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java b/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java index 7bc8300c..514dc118 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java @@ -119,6 +119,13 @@ public interface CommonExcelService { } } + String sortSql = getSortSql(search); + if(sortSql!=null){ + queryWrapper.last(sortSql); + //String sql = queryWrapper.getSqlSegment(); + //System.out.println(sql); + } + // 查询 IPage cs = null; if (isJoinSelect()) { @@ -182,6 +189,7 @@ public interface CommonExcelService { default void checkSearchParams(JSONObject search){} default void checkSearchParams(Enumeration enu){} + default String getSortSql(JSONObject search){return null;} /** * 设置查询条件 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 d9252f57..89b13842 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 @@ -21,6 +21,12 @@ "icon": "fa fa-home", "target": "_self" }, + { + "title": "健康检查报告", + "href": "page/gnss_ehm", + "icon": "fa fa-tachometer", + "target": "_self" + }, { "title": "运行状态", "href": "page/gnss_status", diff --git a/sec-beidou/src/main/resources/templates/page/gnss_ehm.html b/sec-beidou/src/main/resources/templates/page/gnss_ehm.html new file mode 100644 index 00000000..7ab97b36 --- /dev/null +++ b/sec-beidou/src/main/resources/templates/page/gnss_ehm.html @@ -0,0 +1,134 @@ + + + + + 健康检查报告 + + + + + + + +
+
+ +
+ 搜索信息 +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+
+ + +
+
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file