diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/DeviceCmd.java b/sec-api/src/main/java/com/imdroid/secapi/dto/DeviceCmd.java index fd54a627..01368d0f 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/DeviceCmd.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/DeviceCmd.java @@ -26,4 +26,6 @@ public class DeviceCmd { String name; Short type; String content; + Integer sort; + } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java index 4993057e..5b70f9cb 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java @@ -183,7 +183,7 @@ public class CmdLineController extends BasicController{ public JSONObject listCmd(int page, int limit) { Page pageable = new Page<>(page, limit); QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.orderByDesc("id"); + queryWrapper.orderByAsc("sort"); IPage cs = deviceCmdMapper.selectPage(pageable, queryWrapper); JSONObject jsonObject = new JSONObject(); @@ -208,10 +208,19 @@ public class CmdLineController extends BasicController{ return jsonObject; } + private int getMaxSort() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("sort"); + queryWrapper.last("limit 1"); + DeviceCmd maxSortCmd = deviceCmdMapper.selectOne(queryWrapper); + return maxSortCmd != null ? maxSortCmd.getSort() : 0; + } + @PostMapping("/gnss/cmd/add") @ResponseBody public String addCmd(@RequestBody JSONObject object) throws Exception { - DeviceCmd deviceCmd = JSONObject.toJavaObject(object,DeviceCmd.class); + DeviceCmd deviceCmd = JSONObject.toJavaObject(object, DeviceCmd.class); + deviceCmd.setSort(getMaxSort() + 1); int num = deviceCmdMapper.insert(deviceCmd); if (num == 0) { @@ -229,6 +238,7 @@ public class CmdLineController extends BasicController{ return HttpResult.failed(); } else return HttpResult.ok(); } + @PostMapping("/gnss/cmd/go_top") @ResponseBody public String topCmd(@RequestParam int id) throws Exception { @@ -236,14 +246,75 @@ public class CmdLineController extends BasicController{ if(cmd == null) return HttpResult.failed(); QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.orderByDesc("id"); + queryWrapper.orderByAsc("sort"); queryWrapper.last("limit 1"); - DeviceCmd cmdMaxId = deviceCmdMapper.selectOne(queryWrapper); - if(!cmdMaxId.getId().equals(cmd.getId())){ - deviceCmdMapper.deleteById(cmd.getId()); - cmd.setId(cmdMaxId.getId()+1); - deviceCmdMapper.insert(cmd); + DeviceCmd minSortCmd = deviceCmdMapper.selectOne(queryWrapper); + + if(minSortCmd != null && !minSortCmd.getId().equals(cmd.getId())) { + cmd.setSort(minSortCmd.getSort() - 1); + deviceCmdMapper.updateById(cmd); } + + return HttpResult.ok(); + } + + @PostMapping("/gnss/cmd/go_bottom") + @ResponseBody + public String bottomCmd(@RequestParam int id) throws Exception { + DeviceCmd cmd = deviceCmdMapper.selectById(id); + if(cmd == null) return HttpResult.failed(); + + cmd.setSort(getMaxSort() + 1); + deviceCmdMapper.updateById(cmd); + + return HttpResult.ok(); + } + + @PostMapping("/gnss/cmd/move_up") + @ResponseBody + public String moveUpCmd(@RequestParam int id) throws Exception { + DeviceCmd cmd = deviceCmdMapper.selectById(id); + if(cmd == null) return HttpResult.failed(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lt("sort", cmd.getSort()); + queryWrapper.orderByDesc("sort"); + queryWrapper.last("limit 1"); + DeviceCmd prevCmd = deviceCmdMapper.selectOne(queryWrapper); + + if(prevCmd != null) { + int tempSort = cmd.getSort(); + cmd.setSort(prevCmd.getSort()); + prevCmd.setSort(tempSort); + + deviceCmdMapper.updateById(cmd); + deviceCmdMapper.updateById(prevCmd); + } + + return HttpResult.ok(); + } + + @PostMapping("/gnss/cmd/move_down") + @ResponseBody + public String moveDownCmd(@RequestParam int id) throws Exception { + DeviceCmd cmd = deviceCmdMapper.selectById(id); + if(cmd == null) return HttpResult.failed(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.gt("sort", cmd.getSort()); + queryWrapper.orderByAsc("sort"); + queryWrapper.last("limit 1"); + DeviceCmd nextCmd = deviceCmdMapper.selectOne(queryWrapper); + + if(nextCmd != null) { + int tempSort = cmd.getSort(); + cmd.setSort(nextCmd.getSort()); + nextCmd.setSort(tempSort); + + deviceCmdMapper.updateById(cmd); + deviceCmdMapper.updateById(nextCmd); + } + return HttpResult.ok(); } @@ -255,4 +326,17 @@ public class CmdLineController extends BasicController{ return HttpResult.failed(); } else return HttpResult.ok(); } + + @PostMapping("/gnss/cmd/update") + @ResponseBody + public String updateCmd(@RequestBody JSONObject object) throws Exception { + DeviceCmd deviceCmd = JSONObject.toJavaObject(object, DeviceCmd.class); + int num = deviceCmdMapper.updateById(deviceCmd); + + if (num == 0) { + return HttpResult.failed(); + } else { + return HttpResult.ok(); + } + } } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/IndexController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/IndexController.java index ffda326d..c0500ed1 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/IndexController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/IndexController.java @@ -1,6 +1,7 @@ package com.imdroid.beidou.controller; 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.github.yulichang.query.MPJQueryWrapper; @@ -45,6 +46,26 @@ public class IndexController extends BasicController{ int noGGA = 0; int noFix = 0; + //未推送设备数(同时满足:非SAAS服务商、使用状态正常、fwd_group_id和fwd_group_id2都为"不推送"的设备) + Long deviceNoFwdNum; + QueryWrapper noFwdQueryWrapper = new QueryWrapper<>(); + if (tenantId != Tenant.SAAS_PROVIDER_ID) { + // 非SAAS服务商查询当前租户 + noFwdQueryWrapper.eq("tenantid", tenantId); + } else { + // SAAS服务商查询所有非SAAS的租户 + noFwdQueryWrapper.ne("tenantid", Tenant.SAAS_PROVIDER_ID); + } + // 使用状态正常 + noFwdQueryWrapper.eq("opmode", GnssDevice.OP_MODE_USE); + // 设备类型为测站(非基站) + noFwdQueryWrapper.eq("devicetype", GnssDevice.TYPE_ROVER); + // fwd_group_id为"不推送" + noFwdQueryWrapper.eq("fwd_group_id", GnssGroupFwd.FWD_TYPE_NONE); + // fwd_group_id2为"不推送"或为null + noFwdQueryWrapper.and(wrapper -> wrapper.eq("fwd_group_id2", GnssGroupFwd.FWD_TYPE_NONE).or().isNull("fwd_group_id2")); + deviceNoFwdNum = gnssDeviceMapper.selectCount(noFwdQueryWrapper); + List deviceList; if(tenantId == Tenant.SAAS_PROVIDER_ID){ deviceList = statusMapper.queryDeployed(); @@ -94,6 +115,7 @@ public class IndexController extends BasicController{ m.addAttribute("warningTotalNum", warning1Num+warning2Num); m.addAttribute("noGGA", noGGA); m.addAttribute("noFix", noFix); + m.addAttribute("deviceNoFwdNum", deviceNoFwdNum); m.addAttribute("deviceList", deviceList); return "/page/device_overview"; @@ -149,6 +171,13 @@ public class IndexController extends BasicController{ else if(query.equals("nogga")){ queryWrapper.isNull("latitude"); } + else if(query.equals("no_fwd")){ + // 查询同时满足:使用状态正常、设备类型为测站、fwd_group_id和fwd_group_id2都为"不推送"的设备 + queryWrapper.eq("d.opmode", GnssDevice.OP_MODE_USE) + .eq("d.devicetype", GnssDevice.TYPE_ROVER) + .eq("d.fwd_group_id", GnssGroupFwd.FWD_TYPE_NONE) + .and(wrapper -> wrapper.eq("d.fwd_group_id2", GnssGroupFwd.FWD_TYPE_NONE).or().isNull("d.fwd_group_id2")); + } session.setAttribute("query",query); } diff --git a/sec-beidou/src/main/resources/templates/page/device_overview.html b/sec-beidou/src/main/resources/templates/page/device_overview.html index 64e550df..0c95066f 100644 --- a/sec-beidou/src/main/resources/templates/page/device_overview.html +++ b/sec-beidou/src/main/resources/templates/page/device_overview.html @@ -6,28 +6,64 @@ + + - - + +
-
+
-
+
设备数量
@@ -77,8 +163,9 @@ 2,020
- 0
- + 0 + + 2020
@@ -86,7 +173,7 @@
-
+
告警统计
@@ -94,9 +181,9 @@ 20
- 5
+ 5 20 - +
@@ -107,244 +194,620 @@
    -
  • 全部
  • -
  • 一般告警
  • -
  • 严重告警
  • +
  • 全部
  • +
  • 一般告警
  • +
  • 严重告警
  • +
-
+
+
+ +
+
+
+ +
+
+
+ +
+
+ - - diff --git a/sec-beidou/src/main/resources/templates/page/table/frequent_cmd.html b/sec-beidou/src/main/resources/templates/page/table/frequent_cmd.html index bf7fd308..6f9ea007 100644 --- a/sec-beidou/src/main/resources/templates/page/table/frequent_cmd.html +++ b/sec-beidou/src/main/resources/templates/page/table/frequent_cmd.html @@ -12,165 +12,522 @@ body { background-color: #ffffff; } + .ctx-menu-container { + position: absolute; + background: #fff; + border: 1px solid #d2d2d2; + border-radius: 2px; + box-shadow: 0 2px 4px rgba(0,0,0,.12); + z-index: 999; + display: none; + } + .ctx-menu-container li { + padding: 7px 15px; + cursor: pointer; + } + .ctx-menu-container li:hover { + background-color: #f2f2f2; + } + .ctx-submenu { + padding-left: 20px; + display: none; + } + .active-row { + background-color: #f2f2f2 !important; + } + .highlight-row { + background-color: #fffdd1 !important; + transition: background-color 0.5s; + }
- - + + +
-
-
- - -
-
- -
- -
-
-
- -
- -
+