feat: 优化事务管理命令行控制

This commit is contained in:
yarnom 2025-11-19 17:03:17 +08:00
parent 12eb4471f9
commit 9d41de8d70
3 changed files with 49 additions and 11 deletions

View File

@ -530,6 +530,9 @@ public class GnssDeviceController extends BasicController{
}
}
/**
* 设备现场安装
*

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.imdroid.secapi.dto.RtkTransaction;
import com.imdroid.secapi.dto.RtkTransactionMapper;
import com.imdroid.secapi.dto.GnssDevice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
@Controller
public class RtkTransactionController extends BasicController {
@ -46,13 +48,25 @@ public class RtkTransactionController extends BasicController {
@RequestMapping("/rtk/transaction/check")
@ResponseBody
public String check(Integer id, Boolean apply){
public String check(HttpSession session, Integer id, Boolean apply){
RtkTransaction t = mapper.selectById(id);
if(t==null) return com.imdroid.beidou.common.HttpResult.failed();
t.setChecked((short)1);
mapper.updateById(t);
if(Boolean.TRUE.equals(apply)){
try{ gnssDeviceMapper.updateEcefByDeviceId(t.getDevice_id(), t.getEcef_x(), t.getEcef_y(), t.getEcef_z()); }catch(Exception ignored){}
try{
GnssDevice exist = gnssDeviceMapper.queryByDeviceId(t.getDevice_id());
if(exist != null){
GnssDevice upd = new GnssDevice();
upd.setId(exist.getId());
upd.setEcefx(t.getEcef_x());
upd.setEcefy(t.getEcef_y());
upd.setEcefz(t.getEcef_z());
upd.setUpdatetime(LocalDateTime.now());
upd.setUpdateuser(getLoginUser(session));
gnssDeviceMapper.updateById(upd);
}
}catch(Exception ignored){}
}
return com.imdroid.beidou.common.HttpResult.ok();
}

View File

@ -37,6 +37,10 @@
</div>
</div>
<script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<style>
#tx-btn-bar .layui-btn{ margin-right:8px; }
#tx-btn-bar{ margin-bottom:8px; }
</style>
<script>
layui.use(['form','table'], function(){
var $=layui.$, form=layui.form, table=layui.table;
@ -51,6 +55,7 @@ layui.use(['form','table'], function(){
cmdWs.onerror=function(){ if(onmsg) onmsg('通讯通道连接失败'); };
}
function sendDebugCmd(dev, content, onres){ if(!dev){layer.msg('无设备号');return;} $.ajax({ type:'POST', url:'/gnss/config_cmd', data:{ tx_win: content, device_id: dev, cmd_type: 3, send_channel: 0 }, success:function(res){ if(onres) onres(res); }, error:function(){ layer.alert('请求失败'); } }); }
function sendGnssHex(dev, hex, onres){ if(!dev){layer.msg('无设备号');return;} $.ajax({ type:'POST', url:'/gnss/config_cmd', data:{ tx_win: hex, device_id: dev, cmd_type: 0, send_channel: 0 }, success:function(res){ if(onres) onres(res); }, error:function(){ layer.alert('请求失败'); } }); }
function toHexSp(str){
var s=''; for(var i=0;i<str.length;i++){ var h=str.charCodeAt(i).toString(16).toUpperCase(); if(h.length<2) h='0'+h; s+=h+(i<str.length-1?' ':''); } return s;
}
@ -84,10 +89,11 @@ layui.use(['form','table'], function(){
'<div class="layui-row">'+
'<div class="layui-col-md12">'+
'<div class="layui-text">设备号:<b>'+ (d.device_id||'') +'</b></div><hr/>'+
'<div class="layui-btn-group" style="margin-bottom:8px;">'+
'<button class="layui-btn layui-btn-primary" id="btn-tx-connect">连接通道</button>'+
'<button class="layui-btn" id="btn-tx-0100">发送 0100</button>'+
'<button class="layui-btn" id="btn-tx-0102">发送 0102</button>'+
'<div class="layui-form-item" id="tx-btn-bar">'+
'<button class="layui-btn layui-btn-warm" type="button" id="btn-tx-connect">连接设备通讯通道</button>'+
'<button class="layui-btn" type="button" id="btn-tx-0102">发送 0102</button>'+
'<button class="layui-btn layui-btn-normal" type="button" id="btn-tx-1005">配置1005</button>'+
'<button class="layui-btn" type="button" id="btn-tx-0100">发送 0100</button>'+
'</div>'+
'<div class="layui-text">生效命令</div><pre class="layui-code">'+cmd.replace(/</g,'&lt;')+'</pre>'+
'<div class="layui-text">十六进制</div><pre class="layui-code">'+hex+'</pre>'+
@ -95,21 +101,36 @@ layui.use(['form','table'], function(){
'</div>'+
'</div>'+
'</div>';
var idx = layer.open({ title:'检查', type:1, area:['680px','560px'], content: html, btn:['生效','取消'],
var idx = layer.open({ title:'检查', type:1, area:['680px','560px'], content: html, btn:['写入ECEF坐标到数据库','检查','取消'],
success:function(){
var info = layui.$('#tx-cmd-info');
var deviceId = d.device_id;
layui.$('#btn-tx-connect').on('click', function(){ connectCmdWs(function(m){ info.text(info.text()+m+'\n'); var el=info.get(0); el.scrollTop=el.scrollHeight; }); });
layui.$('#btn-tx-0100').on('click', function(){ sendDebugCmd(deviceId,'0100', function(res){ var s=(res&&res.data)||''; info.text(info.text()+s+'\n'); var el=info.get(0); el.scrollTop=el.scrollHeight; }); });
layui.$('#btn-tx-0102').on('click', function(){ sendDebugCmd(deviceId,'0102', function(res){ var s=(res&&res.data)||''; info.text(info.text()+s+'\n'); var el=info.get(0); el.scrollTop=el.scrollHeight; }); });
function appendMsg(s){ info.text(info.text()+s+'\n'); var el=info.get(0); el.scrollTop=el.scrollHeight; }
function updateConnectBtn(){ var b=layui.$('#btn-tx-connect'); if(cmdConnected){ b.text('关闭设备通讯通道'); } else { b.text('连接设备通讯通道'); } }
layui.$('#btn-tx-connect').on('click', function(){
if(!cmdConnected){
connectCmdWs(function(m){ appendMsg(m); updateConnectBtn(); });
try{
if(cmdWs){ cmdWs.onmessage=function(e){ var msg=e.data||''; var parts=msg.trim().split(/\s+/); if(parts[0]==='RX' && parts.length>3){ if(deviceId && parts[3]!==deviceId) return; } appendMsg(msg); }; }
}catch(e){}
} else {
try{ if(cmdWs){ cmdWs.close(); cmdWs=null; } }catch(e){}
updateConnectBtn();
}
}); updateConnectBtn();
layui.$('#btn-tx-0100').on('click', function(){ sendDebugCmd(deviceId,'0100', function(res){ var s=(res&&res.data)||''; appendMsg(s); }); });
layui.$('#btn-tx-0102').on('click', function(){ sendDebugCmd(deviceId,'0102', function(res){ var s=(res&&res.data)||''; appendMsg(s); }); });
layui.$('#btn-tx-1005').on('click', function(){ sendGnssHex(deviceId, hex, function(res){ var s=(res&&res.data)||''; appendMsg(s); }); });
// 监听 WebSocket 输出
try{
connectCmdWs(function(){});
if(cmdWs){ cmdWs.onmessage=function(e){ var msg=e.data||''; var parts=msg.trim().split(/\s+/); if(parts[0]==='RX' && parts.length>3){ if(deviceId && parts[3]!==deviceId) return; } info.text(info.text()+msg+'\n'); var el=info.get(0); el.scrollTop=el.scrollHeight; }; }
if(cmdWs){ cmdWs.onmessage=function(e){ var msg=e.data||''; var parts=msg.trim().split(/\s+/); if(parts[0]==='RX' && parts.length>3){ if(deviceId && parts[3]!==deviceId) return; } appendMsg(msg); }; }
}catch(e){}
},
yes: function(index){ $.post('/rtk/transaction/check',{id:d.id, apply:true}, function(){ layer.close(index); table.reload('txTable'); }); },
btn2: function(index){ $.post('/rtk/transaction/check',{id:d.id, apply:false}, function(){ layer.close(index); table.reload('txTable'); }); return false; },
btn3: function(index){ layer.close(index); },
end:function(){ try{ if(cmdWs){ cmdWs.close(); cmdWs=null; } }catch(e){} }
});
}