1、命令行增加常用指令
2、部分界面做了优化
This commit is contained in:
parent
e87818248a
commit
2004255275
29
sec-api/src/main/java/com/imdroid/secapi/dto/DeviceCmd.java
Normal file
29
sec-api/src/main/java/com/imdroid/secapi/dto/DeviceCmd.java
Normal file
@ -0,0 +1,29 @@
|
||||
package com.imdroid.secapi.dto;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* GNSS收发统计消息,每个工作周期结束的时候统计一次
|
||||
*
|
||||
* @author LiGang
|
||||
*/
|
||||
@Data
|
||||
@TableName(value = "devicecmd")
|
||||
public class DeviceCmd {
|
||||
// device type definition
|
||||
public static final short TYPE_GNSS = 0;
|
||||
public static final short TYPE_DTU = 1;
|
||||
public static final short TYPE_MPU = 2;
|
||||
public static final short TYPE_DEBUG = 3;
|
||||
|
||||
public static final short MAX_CMD_LEN = 800;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
Long id;
|
||||
String name;
|
||||
Short type;
|
||||
String content;
|
||||
}
|
||||
@ -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 DeviceCmdMapper extends BaseMapper<DeviceCmd> {
|
||||
|
||||
}
|
||||
@ -1,18 +1,17 @@
|
||||
package com.imdroid.beidou.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.imdroid.beidou.common.HttpResult;
|
||||
import com.imdroid.secapi.client.HttpResp;
|
||||
import com.imdroid.secapi.client.RtcmClient;
|
||||
import com.imdroid.secapi.dto.GnssMsg;
|
||||
import com.imdroid.secapi.dto.GnssMsgMapper;
|
||||
import com.imdroid.secapi.dto.*;
|
||||
import com.imdroid.secapi.utils.HexUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.text.SimpleDateFormat;
|
||||
@ -26,6 +25,8 @@ public class CmdLineController extends BasicController{
|
||||
RtcmClient rtcmClient;
|
||||
@Autowired
|
||||
GnssMsgMapper msgMapper;
|
||||
@Autowired
|
||||
DeviceCmdMapper deviceCmdMapper;
|
||||
|
||||
/**** 推送页面 *****/
|
||||
@RequestMapping("/page/cmd_line")
|
||||
@ -35,6 +36,13 @@ public class CmdLineController extends BasicController{
|
||||
return "/page/cmd_line";
|
||||
}
|
||||
|
||||
@RequestMapping("/page/table/frequent_cmd")
|
||||
public String frequentCmd(Model m, HttpSession session) {
|
||||
initModel(m, session);
|
||||
|
||||
return "/page/table/frequent_cmd";
|
||||
}
|
||||
|
||||
/****** 发送指令 *******/
|
||||
@PostMapping(value = "/gnss/config_cmd")
|
||||
@ResponseBody
|
||||
@ -83,4 +91,40 @@ public class CmdLineController extends BasicController{
|
||||
|
||||
return HttpResult.success(txInfo);
|
||||
}
|
||||
|
||||
@RequestMapping("/gnss/cmd/list")
|
||||
@ResponseBody
|
||||
public JSONObject list(int page, int limit) {
|
||||
Page<DeviceCmd> pageable = new Page<>(page, limit);
|
||||
IPage<DeviceCmd> cs = deviceCmdMapper.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("/gnss/cmd/add")
|
||||
@ResponseBody
|
||||
public String add(@RequestBody JSONObject object) throws Exception {
|
||||
DeviceCmd deviceCmd = JSONObject.toJavaObject(object,DeviceCmd.class);
|
||||
int num = deviceCmdMapper.insert(deviceCmd);
|
||||
|
||||
if (num == 0) {
|
||||
return HttpResult.failed();
|
||||
} else{
|
||||
return HttpResult.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/gnss/cmd/delete")
|
||||
@ResponseBody
|
||||
public String delete(@RequestParam int del_id) throws Exception {
|
||||
int num = deviceCmdMapper.deleteById(del_id);
|
||||
if (num == 0) {
|
||||
return HttpResult.failed();
|
||||
} else return HttpResult.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,4 +57,16 @@ public class WebSocketServer {
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendMessage(HttpSession httpSession, String msg) {
|
||||
Session session = webSocketSet.get(httpSession.getId());
|
||||
if(session != null){
|
||||
try {
|
||||
session.getBasicRemote().sendText(msg);
|
||||
}
|
||||
catch (Exception e){
|
||||
log.error("websocket send msg error:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -246,3 +246,14 @@ CREATE TABLE IF NOT EXISTS `fwdrecords` (
|
||||
`fwd_group_id` varchar(64) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/***
|
||||
常用指令
|
||||
*/
|
||||
CREATE TABLE IF NOT EXISTS `devicecmd` (
|
||||
`id` bigint AUTO_INCREMENT,
|
||||
`name` varchar(80) NOT NULL,
|
||||
`type` smallint NOT NULL,
|
||||
`content` varchar(800) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@ -43,7 +43,7 @@
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">指令类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="cmd_type" lay-filter="cmd_type">
|
||||
<select name="cmd_type" id="cmd_type" lay-filter="cmd_type">
|
||||
<option value="0">GNSS</option>
|
||||
<option value="1">DTU</option>
|
||||
<option value="2">MPU</option>
|
||||
@ -56,6 +56,7 @@
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="send_btn">发送</button>
|
||||
<button class="layui-btn" lay-submit="" lay-filter="clear_btn">清屏</button>
|
||||
<button class="layui-btn" lay-submit="" lay-filter="frequent_btn">常用指令</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -63,7 +64,6 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
|
||||
@ -111,7 +111,31 @@
|
||||
rxWin.val("");
|
||||
return false;
|
||||
});
|
||||
|
||||
form.on('submit(frequent_btn)', function (data) {
|
||||
var index = layer.open({
|
||||
title: '常用指令',
|
||||
type: 2,
|
||||
shade: 0.2,
|
||||
maxmin:true,
|
||||
shadeClose: true,
|
||||
offset: 'rb',
|
||||
anim: 2,
|
||||
area: ['70%', '100%'],
|
||||
content: '../page/table/frequent_cmd',
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
function setCmd(type, content){
|
||||
var form = layui.form
|
||||
, $ = layui.$;
|
||||
console.log(type);
|
||||
$('#cmd_type').val(type);
|
||||
$('#tx_win').val(content);
|
||||
form.render();
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Web socket operations-->
|
||||
@ -160,12 +184,13 @@
|
||||
layui.layer.alert("Open web socket failed!");
|
||||
}
|
||||
websocket.onclose = function (){
|
||||
console.log("Socket close");
|
||||
rxWin.val(rxWin.val()+"websocket closed!");
|
||||
clearInterval(intervalId);
|
||||
}
|
||||
//接收信息
|
||||
websocket.onmessage = function (event) {
|
||||
console.log(event.data);
|
||||
//console.log(event.data);
|
||||
rxWin.val(rxWin.val()+event.data + "\r\n");
|
||||
rxWin.scrollTop = rxWin.scrollHeight;
|
||||
}
|
||||
|
||||
@ -12,12 +12,7 @@
|
||||
<body>
|
||||
<div class="layuimini-container">
|
||||
<div class="layuimini-main">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">代理信息</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-hide" id="forwardParaTableId" lay-filter="forwardParaTableFilter"></table>
|
||||
</div>
|
||||
</div>
|
||||
<table class="layui-hide" id="forwardParaTableId" lay-filter="forwardParaTableFilter"></table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -34,7 +29,6 @@
|
||||
table.render({
|
||||
elem: '#forwardParaTableId',
|
||||
url: '/fwd/agents',
|
||||
toolbar: '#toolbarTable',
|
||||
cols: [[
|
||||
{field: 'name', title: '名称'},
|
||||
{field: 'description', title: '描述'},
|
||||
|
||||
@ -12,12 +12,7 @@
|
||||
<body>
|
||||
<div class="layuimini-container">
|
||||
<div class="layuimini-main">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">推送记录</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-hide" id="forwardParaTableId" lay-filter="forwardParaTableFilter"></table>
|
||||
</div>
|
||||
</div>
|
||||
<table class="layui-hide" id="forwardParaTableId" lay-filter="forwardParaTableFilter"></table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@ -82,11 +82,6 @@
|
||||
table.render({
|
||||
elem: '#currentTableId',
|
||||
url: '/gnss/data/list_calc',
|
||||
defaultToolbar: ['filter', 'exports', 'print', {
|
||||
title: '提示',
|
||||
layEvent: 'LAYTABLE_TIPS',
|
||||
icon: 'layui-icon-tips'
|
||||
}],
|
||||
cols: [[
|
||||
{field: 'deviceid', title: '设备号'},
|
||||
{field: 'createtime', title: '上报时间', width:'18%', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
|
||||
@ -39,7 +39,6 @@
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">所属部门</label>
|
||||
<div class="layui-input-inline">
|
||||
</select>
|
||||
<select name="tenantname" id="tenantname" lay-search="">
|
||||
<option value="">全部</option>
|
||||
<option th:each="item : ${tenant_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
||||
|
||||
@ -0,0 +1,152 @@
|
||||
<!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">
|
||||
<style>
|
||||
body {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="layui-form layuimini-form">
|
||||
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
|
||||
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-body">
|
||||
<input type="hidden" name="id" id="id">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label required">指令名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="name" id="name" lay-verify="required" lay-reqtext="不能为空" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">指令类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="type" lay-filter="type">
|
||||
<option value="0">GNSS</option>
|
||||
<option value="1">DTU</option>
|
||||
<option value="2">MPU</option>
|
||||
<option value="3">DEBUG</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label required">指令</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="content" id="content" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
|
||||
|
||||
<script type="text/html" id="currentTableBar">
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs " lay-event="use">使用</a>
|
||||
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
||||
</script>
|
||||
|
||||
<script th:inline="none">
|
||||
layui.use(['form', 'table'], function () {
|
||||
var $ = layui.$,
|
||||
form = layui.form,
|
||||
table = layui.table;
|
||||
var iframeIndex = parent.layer.getFrameIndex(window.name);
|
||||
/**
|
||||
* 初始化表单,要加上,不然刷新部分组件可能会不加载
|
||||
*/
|
||||
form.render();
|
||||
|
||||
table.render({
|
||||
elem: '#currentTableId',
|
||||
url: '/gnss/cmd/list',
|
||||
cols: [[
|
||||
{field: 'name', title: '指令名称'},
|
||||
{field: 'type', title: '类型',templet: '#typeTrans'},
|
||||
{field: 'content', title: '指令',width:'50%'},
|
||||
{title: '操作', toolbar: '#currentTableBar', align: "center", minWidth: 120}
|
||||
]],
|
||||
limits: [10, 15, 20, 25, 50, 100],
|
||||
limit: 10,
|
||||
page: true,
|
||||
skin: 'line'
|
||||
});
|
||||
|
||||
table.on('tool(currentTableFilter)', function (obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'use') {
|
||||
parent.setCmd(data.type, data.content);
|
||||
parent.layer.close(iframeIndex);
|
||||
}
|
||||
else if (obj.event === 'delete') {
|
||||
layer.confirm('确定删除'+data.name+"?", function(index){
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
url:"/gnss/cmd/delete",
|
||||
data:{
|
||||
'del_id':data.id
|
||||
},
|
||||
success: function (data) {
|
||||
//data是cotroller相应处理函数的返回值
|
||||
table.reload('currentTableId');
|
||||
},
|
||||
error: function () {
|
||||
console.log("ajax error");
|
||||
}
|
||||
});
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(saveBtn)', function (data) {
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
url:"/gnss/cmd/add",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
data: JSON.stringify(data.field),
|
||||
success: function (result) {
|
||||
table.reload('currentTableId');
|
||||
},
|
||||
error: function () {
|
||||
console.log("ajax error");
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="typeTrans">
|
||||
{{# if(d.type == 0){ }}
|
||||
<span>GNSS</span>
|
||||
{{# } else if(d.type == 1){ }}
|
||||
<span >DTU</span>
|
||||
{{# } else if(d.type == 2){ }}
|
||||
<span >MPU</span>
|
||||
{{# } else { }}
|
||||
<span >DEBUG</span>
|
||||
{{# } }}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -47,7 +47,6 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label required">所属部门</label>
|
||||
<div class="layui-input-inline">
|
||||
</select>
|
||||
<select name="tenantname" id="tenantname" lay-verify="required" lay-search="">
|
||||
<option th:each="item : ${tenant_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
||||
</select>
|
||||
@ -62,7 +61,6 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label required">基本参数组</label>
|
||||
<div class="layui-input-inline">
|
||||
</select>
|
||||
<select name="group_id" id="group_id" lay-verify="required" lay-search="">
|
||||
<option th:each="item : ${gnss_group_list}" th:text="${item.id}" th:value="${item.id}"></option>
|
||||
</select>
|
||||
|
||||
@ -30,7 +30,6 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label required">告警类型</label>
|
||||
<div class="layui-input-inline">
|
||||
</select>
|
||||
<select name="type" id="type" lay-verify="required" lay-search="">
|
||||
<option th:each="item : ${warn_map}" th:text="${item.value}" th:value="${item.key}"></option>
|
||||
</select>
|
||||
@ -59,7 +58,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
|
||||
<script>
|
||||
layui.use(['form'], function () {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user