1、增加断点续传统计
2、增加消息按类型查询
This commit is contained in:
parent
0206d6c097
commit
d47958546f
@ -29,7 +29,8 @@ public interface BeidouClient {
|
||||
@PostMapping("/gnss_upload")
|
||||
String onGnssUpload(@RequestParam(name = "deviceId") String deviceId,
|
||||
@RequestParam(name = "tenantId") Integer tenantId,
|
||||
@RequestParam(name = "uploadTime") LocalDateTime uploadTime);
|
||||
@RequestParam(name = "uploadTime") LocalDateTime uploadTime,
|
||||
@RequestParam(name = "info") String info);
|
||||
|
||||
@PostMapping("/gnss_upload_pause")
|
||||
String onGnssUploadPause(@RequestParam(name = "deviceId") String deviceId,
|
||||
|
||||
@ -5,6 +5,7 @@ import com.imdroid.sideslope.message.D342LocationMessage;
|
||||
import com.imdroid.sideslope.sal.Device;
|
||||
import com.imdroid.sideslope.sal.DeviceService;
|
||||
import com.imdroid.common.util.ThreadManager;
|
||||
import com.imdroid.sideslope.service.DataPersistService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -21,6 +22,8 @@ public class D342LocationMessageExecutor implements Executor<D342LocationMessage
|
||||
private MultiLineGNSSCalcService gnssCalcService;
|
||||
@Resource(name = "local")
|
||||
private DeviceService deviceService;
|
||||
@Autowired
|
||||
private DataPersistService dataPersistService;
|
||||
|
||||
@Override
|
||||
public Void execute(D342LocationMessage message) {
|
||||
@ -31,9 +34,14 @@ public class D342LocationMessageExecutor implements Executor<D342LocationMessage
|
||||
message.setTenantId(device.getTenantId());
|
||||
message.setProjectId(device.getProjectId());
|
||||
message.setFwdId(device.getFwdId());
|
||||
device.updateD342Bytes(message.getLen(),message.getMessageList().size());
|
||||
|
||||
ThreadManager.getFixedThreadPool().submit(() -> {
|
||||
gnssCalcService.calc(message);
|
||||
if(message.getMessageList().size()==0){
|
||||
dataPersistService.saveD342Stat(message, device);
|
||||
device.clearD342Stat();
|
||||
}
|
||||
});
|
||||
|
||||
return null;
|
||||
|
||||
@ -62,7 +62,10 @@ public class D3F2StopIndicationMessageExecutor implements Executor<D3F2StopIndic
|
||||
// 通知beidou服务设备休眠
|
||||
beidouClient.onDeviceStop(deviceId,device.getTenantId());
|
||||
if(uploadTime!=null){
|
||||
beidouClient.onGnssUpload(deviceId,device.getTenantId(),uploadTime);
|
||||
String info = "d342 num:"+device.getD342Count()+
|
||||
", bytes:"+device.getD342Bytes()+
|
||||
", d341 included:"+device.getD341In42Count();
|
||||
beidouClient.onGnssUpload(deviceId,device.getTenantId(),uploadTime,info);
|
||||
}
|
||||
// 检查告警
|
||||
if(device.getDeviceType() == Device.DEVICE_BASE_STATION) {
|
||||
|
||||
@ -22,13 +22,13 @@ public class D342LocationMessage extends BaseMessage {
|
||||
@Override
|
||||
public void decodeBody(ByteBuf src) {
|
||||
// d3 51 length(2048+6) device_id(4bytes) seq(2bytes) data
|
||||
this.header = src.readUnsignedShort(); // flag
|
||||
this.len = src.readUnsignedShort();
|
||||
this.id = String.valueOf(src.readUnsignedInt()); //id
|
||||
this.len = src.readableBytes(); // total length
|
||||
this.header = src.readUnsignedShort();// flag
|
||||
src.readUnsignedShort();// d342 length
|
||||
this.id = String.valueOf(src.readUnsignedInt());//id
|
||||
this.seq = src.readUnsignedShort();
|
||||
|
||||
if(this.len<=15) return;
|
||||
|
||||
short year = src.readUnsignedByte();
|
||||
short month = src.readUnsignedByte();
|
||||
short day = src.readUnsignedByte();
|
||||
@ -37,33 +37,30 @@ public class D342LocationMessage extends BaseMessage {
|
||||
originalTime = LocalDateTime.of(2000+year,month,day,hour,minute,0);
|
||||
|
||||
// 拆分D341,指针已移动到d341了
|
||||
int totalLen = src.readableBytes();
|
||||
int begin = 15; // d341 head: 10, date: 5
|
||||
if(totalLen + begin - 4 > this.len) totalLen = this.len + 4 - begin;
|
||||
|
||||
int pos = 15; // head 10,date 5
|
||||
int msgLen = 0;
|
||||
while(begin+2 < totalLen){
|
||||
int flag = src.getUnsignedShort(begin);
|
||||
while(pos+2 < this.len){
|
||||
int flag = src.getUnsignedShort(pos);
|
||||
// 有时候两个d341会多一些字节,原因未明
|
||||
if(flag != 0xD341){
|
||||
if(begin+msgLen > totalLen) break;
|
||||
if(pos+msgLen > this.len) break;
|
||||
else {
|
||||
begin++;
|
||||
pos++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
msgLen = src.getUnsignedShort(begin+2);
|
||||
msgLen = src.getUnsignedShort(pos+2);
|
||||
msgLen = (msgLen&0x07FF) + 4;
|
||||
if(begin+msgLen > totalLen) break; //error
|
||||
if(pos+msgLen > this.len) break; //error
|
||||
|
||||
ByteBuf msgBuf = src.slice(begin,msgLen);
|
||||
ByteBuf msgBuf = src.slice(pos,msgLen);
|
||||
BaseMessage message = new D341LocationMessage();
|
||||
message.decode(msgBuf);
|
||||
message.setCreateTime(originalTime);
|
||||
messageList.add(message);
|
||||
|
||||
// next data
|
||||
begin += msgLen;
|
||||
pos += msgLen;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -39,6 +39,9 @@ public class Device {
|
||||
int d3xxbytes = 0;
|
||||
int d341Count = 0;
|
||||
int d341bytes = 0;
|
||||
int d342Bytes = 0;
|
||||
int d342Count = 0;
|
||||
int d341In42Count = 0;
|
||||
int satelitesInUse = 0;//平均卫星数
|
||||
int sataStatCount = 0;
|
||||
|
||||
@ -56,6 +59,12 @@ public class Device {
|
||||
d341bytes += bytes;
|
||||
}
|
||||
|
||||
public void updateD342Bytes(int bytes, int d341Num){
|
||||
d342Count ++;
|
||||
d342Bytes += bytes;
|
||||
d341In42Count += d341Num;
|
||||
}
|
||||
|
||||
public void updateSatelitesNum(int num){
|
||||
if(num>0) {
|
||||
sataStatCount++;
|
||||
@ -72,4 +81,9 @@ public class Device {
|
||||
satelitesInUse = 0;
|
||||
}
|
||||
|
||||
public void clearD342Stat(){
|
||||
d342Count = 0;
|
||||
d342Bytes = 0;
|
||||
d341In42Count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.imdroid.sideslope.service;
|
||||
|
||||
import com.imdroid.secapi.dto.GnssStatus;
|
||||
import com.imdroid.sideslope.message.D342LocationMessage;
|
||||
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
||||
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
||||
import com.imdroid.sideslope.sal.Device;
|
||||
@ -20,4 +21,5 @@ public interface DataPersistService {
|
||||
void saveDeviceState(D3F0SelfCheckMessage d3F0SelfCheckMessage);
|
||||
void saveDeviceTrxStat(D3F2StopIndicationMessage d3F2StopIndicationMessage, boolean isUploading, Device device);
|
||||
|
||||
void saveD342Stat(D342LocationMessage message, Device device);
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package com.imdroid.sideslope.service;
|
||||
|
||||
import com.imdroid.secapi.dto.*;
|
||||
import com.imdroid.sideslope.message.BaseMessage;
|
||||
import com.imdroid.sideslope.message.D342LocationMessage;
|
||||
import com.imdroid.sideslope.message.D3F0SelfCheckMessage;
|
||||
import com.imdroid.sideslope.message.D3F2StopIndicationMessage;
|
||||
import com.imdroid.sideslope.sal.Device;
|
||||
@ -92,7 +93,6 @@ public class DataPersistServiceImpl implements DataPersistService {
|
||||
// 添加到trxmsg里
|
||||
GnssTrxMsg trxMsg = message.getTrxMsg();
|
||||
trxMsgMapper.insert(trxMsg);
|
||||
// 保存消息摘要
|
||||
if(device.getDeviceType() == GnssDevice.TYPE_ROVER) {
|
||||
saveMsg(message, "d341 num: "+device.getD341Count()+","+message.getOtherInfo());
|
||||
}
|
||||
@ -135,4 +135,10 @@ public class DataPersistServiceImpl implements DataPersistService {
|
||||
msgMapper.insert(gnssMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveD342Stat(D342LocationMessage message, Device device){
|
||||
saveMsg(message, "d342 num:"+device.getD342Count()+
|
||||
", bytes:"+device.getD342Bytes()+
|
||||
", total d341 num:"+device.getD341In42Count()+"session done");
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,8 +131,9 @@ public class APIController extends BasicController{
|
||||
/****** gnss upload *******/
|
||||
@PostMapping(value = "/api/gnss_upload")
|
||||
@ResponseBody
|
||||
public String onGnssUpload(String deviceId, Integer tenantId,LocalDateTime uploadTime) {
|
||||
saveMsg(deviceId, tenantId,0xd342, "gnss data upload from "+uploadTime,false);
|
||||
public String onGnssUpload(String deviceId, Integer tenantId,LocalDateTime uploadTime,String info) {
|
||||
saveMsg(deviceId, tenantId,0xd342,
|
||||
"gnss data upload from "+uploadTime+", "+info,false);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -10,9 +10,12 @@ import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 消息摘要 控制器
|
||||
@ -23,10 +26,24 @@ public class GnssMsgController extends BasicController implements CommonExcelSer
|
||||
|
||||
private final GnssMsgMapper msgMapper;
|
||||
|
||||
public static final Map<Integer, String> msgTypeMap = new HashMap<>();
|
||||
|
||||
@PostConstruct
|
||||
public static void init() {
|
||||
msgTypeMap.put(0xd3f0,"自检消息");
|
||||
msgTypeMap.put(0xd3f2,"休眠消息");
|
||||
msgTypeMap.put(0xd310,"GNSS配置");
|
||||
msgTypeMap.put(0xd311,"工作时间配置");
|
||||
msgTypeMap.put(0xd312,"单片机配置");
|
||||
msgTypeMap.put(0xd313,"DEBUG");
|
||||
msgTypeMap.put(0xd31A,"DTU配置");
|
||||
msgTypeMap.put(0xd342,"断点续传");
|
||||
}
|
||||
/**** 推送页面 *****/
|
||||
@RequestMapping("/page/gnss_msg")
|
||||
public String gnssMsg(Model m, HttpSession session) {
|
||||
initModel(m, session);
|
||||
m.addAttribute("type_map", msgTypeMap);
|
||||
return "/page/gnss_msg";
|
||||
}
|
||||
|
||||
|
||||
@ -25,6 +25,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">消息类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="n_msgtype" id="msg_type" lay-search="">
|
||||
<option value="">全部</option>
|
||||
<option th:each="item : ${type_map}" th:text="${item.value}" th:value="${item.key}"></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="开始日期">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user