优化了单次解算;增加了解算结果界面

This commit is contained in:
weidong 2023-11-03 15:03:37 +08:00
parent c669070cbd
commit 73bffd2ce5
26 changed files with 483 additions and 392 deletions

View File

@ -34,4 +34,5 @@ public class GnssCalcData {
double rb562e; double rb562e;
double rb562d; double rb562d;
double rb562n; double rb562n;
int pps;
} }

View File

@ -17,7 +17,7 @@ import java.sql.Timestamp;
public class GnssStatusMsg { public class GnssStatusMsg {
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
Long id; Long id;
Timestamp updatetime; Timestamp createtime;
Timestamp devicetime; Timestamp devicetime;
String deviceid; String deviceid;
float roll; float roll;

View File

@ -17,7 +17,7 @@ import java.sql.Timestamp;
public class GnssTrxMsg { public class GnssTrxMsg {
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
Long id; Long id;
Timestamp updatetime; Timestamp createtime;
Timestamp devicetime; Timestamp devicetime;
String deviceid; String deviceid;
long uart1txbytes; long uart1txbytes;

View File

@ -127,6 +127,12 @@
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<!-- 矩阵工具 -->
<dependency>
<groupId>org.ejml</groupId>
<artifactId>ejml-all</artifactId>
<version>0.41</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -20,6 +20,8 @@ public class FocusCalculator {
private boolean flag = false; // 是否是第一次计算 private boolean flag = false; // 是否是第一次计算
private List<Point> pointList = new ArrayList<>(); private List<Point> pointList = new ArrayList<>();
public static double[] lastFocus = null;// public static double[] lastFocus = null;//
private int delay_ms = 0;
private int counter = 0;
/** /**
@ -322,4 +324,13 @@ public class FocusCalculator {
return r; return r;
} }
public void addDelayMs(int ms){
delay_ms += ms;
counter ++;
}
public int getAvgDelayMs(){
return delay_ms/counter;
}
} }

View File

@ -1,5 +1,6 @@
package com.imdroid.sideslope.calc; package com.imdroid.sideslope.calc;
import com.imdroid.secapi.dto.GnssCalcData;
import com.imdroid.sideslope.bd.*; import com.imdroid.sideslope.bd.*;
import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.message.D341LocationMessage;
import com.imdroid.sideslope.sal.*; import com.imdroid.sideslope.sal.*;
@ -82,9 +83,12 @@ public class SingleLineGNSSCalcService implements GNSSCalcService {
} }
focusCalculator.addTilt(tilt); focusCalculator.addTilt(tilt);
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "的9250单次解析结果:{}", tilt.toString() + "," + Arrays.toString(TiltUtil.toPosition(tilt, focusCalculator.getTilt0(), focusCalculator.getPosition0(), focusCalculator.getR()))); logger.debug("测站" + deviceId + "的9250单次解析结果:{}", tilt + "," + Arrays.toString(TiltUtil.toPosition(tilt, focusCalculator.getTilt0(), focusCalculator.getPosition0(), focusCalculator.getR())));
} }
// 计算延迟
focusCalculator.addDelayMs(message.getPps());
//计算到单次相对位置xyz并记录 //计算到单次相对位置xyz并记录
//tilt共16个字节从后边开始找b562 //tilt共16个字节从后边开始找b562
double[] doubles = message.getB562_loc(); double[] doubles = message.getB562_loc();
@ -127,6 +131,7 @@ public class SingleLineGNSSCalcService implements GNSSCalcService {
logger.info("测站 {} 的9250相对坐标:{}", deviceId, Arrays.toString(r9250Result)); logger.info("测站 {} 的9250相对坐标:{}", deviceId, Arrays.toString(r9250Result));
logger.info("测站 {} 的相对坐标融合值:{}", deviceId, Arrays.toString(result)); logger.info("测站 {} 的相对坐标融合值:{}", deviceId, Arrays.toString(result));
logger.info("测站 {} 的Tilt平均值:{}", deviceId, tilt); logger.info("测站 {} 的Tilt平均值:{}", deviceId, tilt);
logger.info("测站 {} 的平均延迟:{}ms", deviceId, focusCalculator.getAvgDelayMs());
if (tilt != null) { if (tilt != null) {
if (Boolean.TRUE.equals(cleanTiltStatusMap.get(deviceId))) { if (Boolean.TRUE.equals(cleanTiltStatusMap.get(deviceId))) {
@ -147,7 +152,7 @@ public class SingleLineGNSSCalcService implements GNSSCalcService {
} else { } else {
positionMap.put(deviceId, result); positionMap.put(deviceId, result);
} }
postLocationRecord(deviceId, b562Result, r9250Result, result); postLocationRecord(deviceId, b562Result, r9250Result, result, focusCalculator.getAvgDelayMs());
}else{ }else{
logger.error("融合值异常"); logger.error("融合值异常");
} }
@ -159,18 +164,33 @@ public class SingleLineGNSSCalcService implements GNSSCalcService {
timerMap.put(deviceId, future); timerMap.put(deviceId, future);
} }
private void postLocationRecord(String deviceId, double[] b562Result, double[] r9250Result, double[] result) { private void postLocationRecord(String deviceId, double[] b562Result, double[] r9250Result, double[] result, int delay) {
LocationRecordDTO locationRecord = new LocationRecordDTO(deviceId, NumberUtils.doubleArrayToString(b562Result), GnssCalcData locationRecord = new GnssCalcData();
NumberUtils.doubleArrayToString(r9250Result), NumberUtils.doubleArrayToString(result),String.valueOf(isExceedMap.get(deviceId))); locationRecord.setDeviceid(deviceId);
deviceService.postLocationRecord(locationRecord); if(b562Result!=null) {
locationRecord.setB562e(b562Result[0] * 10); //cm->mm
locationRecord.setB562n(b562Result[1] * 10);
locationRecord.setB562d(b562Result[2] * 10);
}
if(r9250Result!=null) {
locationRecord.setR9250e(r9250Result[0]);
locationRecord.setR9250n(r9250Result[1]);
locationRecord.setR9250d(r9250Result[2]);
}
if(result!=null) {
locationRecord.setResulte(result[0]);
locationRecord.setResultn(result[1]);
locationRecord.setResultd(result[2]);
}
locationRecord.setPps(delay);
deviceService.postLocationRecord(locationRecord, isExceedMap.get(deviceId));
} }
@Override @Override
public double[] calcResult(String deviceId,double[] b562Xyz, double[] tiltXyz) { public double[] calcResult(String deviceId,double[] b562Xyz, double[] tiltXyz) {
FocusCalculator focusCalculator = calculatorMap.get(deviceId); FocusCalculator focusCalculator = calculatorMap.get(deviceId);
if (focusCalculator != null) { if (focusCalculator != null) {
double[] result = focusCalculator.ekfResult(b562Xyz,tiltXyz); return focusCalculator.ekfResult(b562Xyz,tiltXyz);
return result;
} }
return null; return null;
} }
@ -179,8 +199,7 @@ public class SingleLineGNSSCalcService implements GNSSCalcService {
public Tilt calcAvgTilt(String deviceId) { public Tilt calcAvgTilt(String deviceId) {
FocusCalculator focusCalculator = calculatorMap.get(deviceId); FocusCalculator focusCalculator = calculatorMap.get(deviceId);
if (focusCalculator != null) { if (focusCalculator != null) {
Tilt tilt = focusCalculator.avgTilt(); return focusCalculator.avgTilt();
return tilt;
} }
return null; return null;
} }

View File

@ -2,11 +2,13 @@ package com.imdroid.sideslope.message;
import com.imdroid.sideslope.util.WrongMessageRecorder; import com.imdroid.sideslope.util.WrongMessageRecorder;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import lombok.Data;
/** /**
* @author Layton * @author Layton
* @date 2023/2/2 20:32 * @date 2023/2/2 20:32
*/ */
@Data
public abstract class BaseMessage { public abstract class BaseMessage {
protected short header; protected short header;
protected String id; protected String id;
@ -37,44 +39,4 @@ public abstract class BaseMessage {
public boolean shouldDecodeHeader() { public boolean shouldDecodeHeader() {
return true; return true;
} }
public short getHeader() {
return header;
}
public void setHeader(short header) {
this.header = header;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getLen() {
return len;
}
public void setLen(int len) {
this.len = len;
}
public int getPps() {
return pps;
}
public void setPps(int pps) {
this.pps = pps;
}
public byte[] getSrcData() {
return srcData;
}
public void setSrcData(byte[] srcData) {
this.srcData = srcData;
}
} }

View File

@ -3,6 +3,7 @@ package com.imdroid.sideslope.message;
import com.imdroid.secapi.dto.GnssStatusMsg; import com.imdroid.secapi.dto.GnssStatusMsg;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Timestamp; import java.sql.Timestamp;
@ -12,6 +13,7 @@ import java.sql.Timestamp;
* @author Layton * @author Layton
* @date 2023/2/2 20:38 * @date 2023/2/2 20:38
*/ */
@EqualsAndHashCode(callSuper=true)
@Data @Data
public class D3F0SelfCheckMessage extends BaseMessage { public class D3F0SelfCheckMessage extends BaseMessage {
@ -20,7 +22,7 @@ public class D3F0SelfCheckMessage extends BaseMessage {
@Override @Override
public void decodeBody(ByteBuf src) { public void decodeBody(ByteBuf src) {
statusMsg.setDeviceid(getId()); statusMsg.setDeviceid(getId());
statusMsg.setUpdatetime(new Timestamp(System.currentTimeMillis())); statusMsg.setCreatetime(new Timestamp(System.currentTimeMillis()));
statusMsg.setDevicetime(new Timestamp(getPps()*1000)); statusMsg.setDevicetime(new Timestamp(getPps()*1000));
statusMsg.setPitch(src.readFloat()); statusMsg.setPitch(src.readFloat());
statusMsg.setRoll(src.readFloat()); statusMsg.setRoll(src.readFloat());

View File

@ -3,6 +3,7 @@ package com.imdroid.sideslope.message;
import com.imdroid.secapi.dto.GnssTrxMsg; import com.imdroid.secapi.dto.GnssTrxMsg;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Timestamp; import java.sql.Timestamp;
@ -12,14 +13,15 @@ import java.sql.Timestamp;
* @author LiGang * @author LiGang
*/ */
@Data @Data
@EqualsAndHashCode(callSuper=true)
public class D3F2StopIndicationMessage extends BaseMessage { public class D3F2StopIndicationMessage extends BaseMessage {
private GnssTrxMsg trxMsg = new GnssTrxMsg();; private GnssTrxMsg trxMsg = new GnssTrxMsg();
@Override @Override
public void decodeBody(ByteBuf src) { public void decodeBody(ByteBuf src) {
trxMsg.setDeviceid(getId()); trxMsg.setDeviceid(getId());
trxMsg.setUpdatetime(new Timestamp(System.currentTimeMillis())); trxMsg.setCreatetime(new Timestamp(System.currentTimeMillis()));
trxMsg.setDevicetime(new Timestamp(getPps()*1000)); trxMsg.setDevicetime(new Timestamp(getPps()*1000));
int keys = (this.len - 6) / 5; int keys = (this.len - 6) / 5;
for (int i = 0; i < keys; i++) { for (int i = 0; i < keys; i++) {

View File

@ -1,6 +1,7 @@
package com.imdroid.sideslope.sal; package com.imdroid.sideslope.sal;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.imdroid.secapi.dto.GnssCalcData;
import com.imdroid.secapi.dto.GnssDevice; import com.imdroid.secapi.dto.GnssDevice;
import com.imdroid.secapi.dto.GnssDeviceMapper; import com.imdroid.secapi.dto.GnssDeviceMapper;
import com.imdroid.sideslope.service.GNSSDeviceLocationRecordService; import com.imdroid.sideslope.service.GNSSDeviceLocationRecordService;
@ -62,10 +63,10 @@ public class DbDeviceServiceImpl implements DeviceService {
} }
@Override @Override
public boolean postLocationRecord(LocationRecordDTO locationRecord) { public boolean postLocationRecord(GnssCalcData locationRecord, boolean isExceed) {
ThreadManager.getFixedThreadPool().submit(() -> { ThreadManager.getFixedThreadPool().submit(() -> {
try { try {
gnssDeviceLocationRecordService.save(locationRecord); gnssDeviceLocationRecordService.save(locationRecord, isExceed);
} catch (Exception e) { } catch (Exception e) {
logger.error(e.toString()); logger.error(e.toString());
} }

View File

@ -1,5 +1,7 @@
package com.imdroid.sideslope.sal; package com.imdroid.sideslope.sal;
import com.imdroid.secapi.dto.GnssCalcData;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -13,7 +15,7 @@ public interface DeviceService {
List<Device> findByParentId(String parentId); List<Device> findByParentId(String parentId);
boolean postLocationRecord(LocationRecordDTO locationRecord); boolean postLocationRecord(GnssCalcData locationRecord, boolean isExceed);
void updateLatestDataTime(String deviceId, Date latestDataTime); void updateLatestDataTime(String deviceId, Date latestDataTime);
} }

View File

@ -2,6 +2,7 @@ package com.imdroid.sideslope.sal;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.imdroid.secapi.dto.GnssCalcData;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -50,8 +51,8 @@ public class LocalDeviceServiceImpl implements DeviceService {
} }
@Override @Override
public boolean postLocationRecord(LocationRecordDTO locationRecord) { public boolean postLocationRecord(GnssCalcData locationRecord, boolean isExceed) {
return delegate.postLocationRecord(locationRecord); return delegate.postLocationRecord(locationRecord, isExceed);
} }
@Override @Override

View File

@ -1,81 +0,0 @@
package com.imdroid.sideslope.sal;
/**
* @author Layton
* @date 2023/2/15 20:58
*/
public class LocationRecordDTO {
private String deviceId;
/**
* 北斗位置(b562)相对坐标
*/
private String b562;
/**
* 惯导位置(9250)相对坐标
*/
private String r9250;
/**
* 融合位置相对坐标
*/
private String result;
private String flag;
public LocationRecordDTO() {
}
public LocationRecordDTO(String deviceId, String b562, String r9250, String result, String flag) {
this.deviceId = deviceId;
this.b562 = b562;
this.r9250 = r9250;
this.result = result;
this.flag = flag;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getB562() {
return b562;
}
public void setB562(String b562) {
this.b562 = b562;
}
public String getR9250() {
return r9250;
}
public void setR9250(String r9250) {
this.r9250 = r9250;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}

View File

@ -44,7 +44,7 @@ public class DataPersistServiceImpl implements DataPersistService {
} }
//deviceState.setId(SequenceUtil.getSequence()); //deviceState.setId(SequenceUtil.getSequence());
deviceState.setDeviceid(message.getId()); deviceState.setDeviceid(message.getId());
deviceState.setUpdatetime(statusMsg.getUpdatetime()); deviceState.setUpdatetime(statusMsg.getCreatetime());
deviceState.setRoll(statusMsg.getRoll()); deviceState.setRoll(statusMsg.getRoll());
deviceState.setPitch(statusMsg.getPitch()); deviceState.setPitch(statusMsg.getPitch());
deviceState.setYaw(statusMsg.getYaw()); deviceState.setYaw(statusMsg.getYaw());

View File

@ -1,7 +1,7 @@
package com.imdroid.sideslope.service; package com.imdroid.sideslope.service;
import com.imdroid.secapi.dto.GnssCalcData;
import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.message.D341LocationMessage;
import com.imdroid.sideslope.sal.LocationRecordDTO;
/** /**
@ -10,6 +10,6 @@ import com.imdroid.sideslope.sal.LocationRecordDTO;
*/ */
public interface GNSSDeviceLocationRecordService { public interface GNSSDeviceLocationRecordService {
public void save(LocationRecordDTO importRecord) throws Exception; void save(GnssCalcData locationRecord, boolean isExceed) throws Exception;
public void saveSingleCalcData(D341LocationMessage message); void saveSingleCalcData(D341LocationMessage message);
} }

View File

@ -5,13 +5,10 @@ import com.imdroid.secapi.dto.*;
import com.imdroid.sideslope.bd.Tilt; import com.imdroid.sideslope.bd.Tilt;
import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.message.D341LocationMessage;
import com.imdroid.sideslope.rabbitmq.RabbitmqConfig; import com.imdroid.sideslope.rabbitmq.RabbitmqConfig;
import com.imdroid.sideslope.sal.LocationRecordDTO;
import com.imdroid.sideslope.util.GsonUtil; import com.imdroid.sideslope.util.GsonUtil;
import com.imdroid.sideslope.util.NumberUtils; import com.imdroid.sideslope.util.NumberUtils;
import io.dt20.common.persistence.Attribute; import io.dt20.common.persistence.Attribute;
import io.dt20.common.repo.AttributeRepository; import io.dt20.common.repo.AttributeRepository;
import io.dt20.util.SequenceUtil;
import io.dt20.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
@ -53,64 +50,41 @@ public class GNSSDeviceLocationRecordServiceImpl implements GNSSDeviceLocationRe
} }
@Override @Override
public void save(LocationRecordDTO importRecord) throws Exception { public void save(GnssCalcData locationRecord, boolean isExceed) {
GnssDevice gnssDevice = gnssDeviceRepository.queryByDeviceId(importRecord.getDeviceId()); GnssDevice gnssDevice = gnssDeviceRepository.queryByDeviceId(locationRecord.getDeviceid());
if(gnssDevice == null) return;
GnssCalcData locationRecord = new GnssCalcData(); locationRecord.setTenantid(gnssDevice.getTenantid());
locationRecord.setDeviceid(importRecord.getDeviceId());
locationRecord.setCreatetime(new Timestamp(System.currentTimeMillis())); locationRecord.setCreatetime(new Timestamp(System.currentTimeMillis()));
locationRecord.setEnabled(true); locationRecord.setEnabled(true);
locationRecord.setId(SequenceUtil.getSequence());
if (!StringUtil.isEmpty(importRecord.getB562())) {
String resultStr = NumberUtils.removeBrackets(importRecord.getB562());
String[] arr = resultStr.split(",");
// 由cm转化为mm
locationRecord.setB562e(NumberUtils.scaleTwo(Double.parseDouble(arr[0]) * 10));
locationRecord.setB562n(NumberUtils.scaleTwo(Double.parseDouble(arr[1]) * 10));
locationRecord.setB562d(NumberUtils.scaleTwo(Double.parseDouble(arr[2]) * 10));
}
if (!StringUtil.isEmpty(importRecord.getR9250())) {
String resultStr = NumberUtils.removeBrackets(importRecord.getR9250());
String[] arr = resultStr.split(",");
locationRecord.setR9250e(NumberUtils.scaleTwo(arr[0]));
locationRecord.setR9250n(NumberUtils.scaleTwo(arr[1]));
locationRecord.setR9250d(NumberUtils.scaleTwo(arr[2]));
}
if (!StringUtil.isEmpty(importRecord.getResult())) {
String resultStr = NumberUtils.removeBrackets(importRecord.getResult());
String[] arr = resultStr.split(",");
locationRecord.setResulte(NumberUtils.scaleTwo(arr[0]));
locationRecord.setResultn(NumberUtils.scaleTwo(arr[1]));
locationRecord.setResultd(NumberUtils.scaleTwo(arr[2]));
// 做滤波 水平方向按照shock >1.5 用6h滤波 否则用25h // 做滤波 水平方向按照shock >1.5 用6h滤波 否则用25h
// 垂直方向 用6+12 // 垂直方向 用6+12
List<Attribute> attributes = attributeRepository.findByObjectAndPid(gnssDevice.getObjectName(), gnssDevice.getId()); List<Attribute> attributes = attributeRepository.findByObjectAndPid(gnssDevice.getObjectName(), gnssDevice.getId());
if (!StringUtil.isEmpty(importRecord.getFlag()) && Boolean.parseBoolean(importRecord.getFlag())) { if (isExceed) {
a = 6 * 60 * 60 * 1000; a = 6 * 60 * 60 * 1000;
b = 6 * 60 * 60 * 1000; b = 6 * 60 * 60 * 1000;
}
for (Attribute attribute : attributes) {
if (attribute.getValueNumber() == null) {
continue;
}
double[] avgEND = avgEND(gnssDevice.getDeviceid(), locationRecord, a, b);
if (ATTR_B562E.equals(attribute.getKey())) {
locationRecord.setRb562e(NumberUtils.scaleTwo(avgEND[0] * 10 - attribute.getValueNumber()));
}
if (ATTR_B562N.equals(attribute.getKey())) {
locationRecord.setRb562n(NumberUtils.scaleTwo(avgEND[1] * 10 - attribute.getValueNumber()));
}
if (ATTR_B562D.equals(attribute.getKey())) {
locationRecord.setRb562d(NumberUtils.scaleTwo(avgEND[2] * 10 - attribute.getValueNumber()));
}
}
a = 25 * 60 * 60 * 1000;
b = 25 * 60 * 60 * 1000;
} }
sendDataToMq(locationRecord); for (Attribute attribute : attributes) {
if (attribute.getValueNumber() == null) {
continue;
}
double[] avgEND = avgEND(gnssDevice.getDeviceid(), locationRecord, a, b);
if (ATTR_B562E.equals(attribute.getKey())) {
locationRecord.setRb562e(NumberUtils.scaleTwo(avgEND[0] * 10 - attribute.getValueNumber()));
}
if (ATTR_B562N.equals(attribute.getKey())) {
locationRecord.setRb562n(NumberUtils.scaleTwo(avgEND[1] * 10 - attribute.getValueNumber()));
}
if (ATTR_B562D.equals(attribute.getKey())) {
locationRecord.setRb562d(NumberUtils.scaleTwo(avgEND[2] * 10 - attribute.getValueNumber()));
}
}
a = 25 * 60 * 60 * 1000;
b = 25 * 60 * 60 * 1000;
repository.insert(locationRecord); repository.insert(locationRecord);
//sendDataToMq(locationRecord);
} }
public static final String ATTR_B562E = "b562e"; public static final String ATTR_B562E = "b562e";

View File

@ -0,0 +1,58 @@
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.imdroid.secapi.dto.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class GnssCalcDataController extends BasicController{
@Autowired
GnssCalcDataMapper dataMapper;
@RequestMapping("/page/gnss_data_calc")
public String gnssDataRaw() {
return "/page/gnss_data_calc";
}
/**** 推送数据 *****/
@RequestMapping("/gnss/data/list_calc")
@ResponseBody
public JSONObject listMsg(int page, int limit, String searchParams) {
Page<GnssCalcData> pageable = new Page<>(page, limit);
QueryWrapper<GnssCalcData> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("createtime");
// 条件查询
if(searchParams != null) {
JSONObject search = (JSONObject) JSONObject.parse(searchParams);
//设备号
String deviceid = search.getString("deviceid");
if (!StringUtils.isEmpty(deviceid)) {
queryWrapper.like("deviceid", deviceid);
}
//时间范围
String q_start = search.getString("q_start");
if (!StringUtils.isEmpty(q_start)) {
queryWrapper.ge("createtime", q_start);
}
String q_end = search.getString("q_end");
if (!StringUtils.isEmpty(q_end)) {
queryWrapper.le("createtime", q_end+" 23:59:59");
}
}
IPage<GnssCalcData> cs = dataMapper.selectPage(pageable, queryWrapper);
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 0);
jsonObject.put("msg", "");
jsonObject.put("count", cs.getTotal());
jsonObject.put("data", cs.getRecords());
return jsonObject;
}
}

View File

@ -1,11 +1,13 @@
package com.imdroid.beidou.controller; package com.imdroid.beidou.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.imdroid.secapi.dto.*; import com.imdroid.secapi.dto.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
@ -38,9 +40,31 @@ public class GnssMsgController extends BasicController{
/**** 推送数据 *****/ /**** 推送数据 *****/
@RequestMapping("/gnss/msg/list_all") @RequestMapping("/gnss/msg/list_all")
@ResponseBody @ResponseBody
public JSONObject listMsg(int page, int limit) { public JSONObject listMsg(int page, int limit, String searchParams) {
Page<GnssMsg> pageable = new Page<>(page, limit); Page<GnssMsg> pageable = new Page<>(page, limit);
IPage<GnssMsg> cs = msgMapper.selectPage(pageable, null); QueryWrapper<GnssMsg> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("createtime");
// 条件查询
if(searchParams != null) {
JSONObject search = (JSONObject) JSONObject.parse(searchParams);
//设备号
String deviceid = search.getString("deviceid");
if (!StringUtils.isEmpty(deviceid)) {
queryWrapper.like("deviceid", deviceid);
}
//时间范围
String q_start = search.getString("q_start");
if (!StringUtils.isEmpty(q_start)) {
queryWrapper.ge("createtime", q_start);
}
String q_end = search.getString("q_end");
if (!StringUtils.isEmpty(q_end)) {
queryWrapper.le("createtime", q_end+" 23:59:59");
}
}
IPage<GnssMsg> cs = msgMapper.selectPage(pageable, queryWrapper);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 0); jsonObject.put("code", 0);
@ -52,9 +76,30 @@ public class GnssMsgController extends BasicController{
@RequestMapping("/gnss/msg/list_status") @RequestMapping("/gnss/msg/list_status")
@ResponseBody @ResponseBody
public JSONObject listStatusMsg(int page, int limit) { public JSONObject listStatusMsg(int page, int limit, String searchParams) {
Page<GnssStatusMsg> pageable = new Page<>(page, limit); Page<GnssStatusMsg> pageable = new Page<>(page, limit);
IPage<GnssStatusMsg> cs = statusMsgMapper.selectPage(pageable, null); QueryWrapper<GnssStatusMsg> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("createtime");
// 条件查询
if(searchParams != null) {
JSONObject search = (JSONObject) JSONObject.parse(searchParams);
//设备号
String deviceid = search.getString("deviceid");
if (!StringUtils.isEmpty(deviceid)) {
queryWrapper.like("deviceid", deviceid);
}
//时间范围
String q_start = search.getString("q_start");
if (!StringUtils.isEmpty(q_start)) {
queryWrapper.ge("createtime", q_start);
}
String q_end = search.getString("q_end");
if (!StringUtils.isEmpty(q_end)) {
queryWrapper.le("createtime", q_end+" 23:59:59");
}
}
IPage<GnssStatusMsg> cs = statusMsgMapper.selectPage(pageable, queryWrapper);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 0); jsonObject.put("code", 0);
@ -66,9 +111,30 @@ public class GnssMsgController extends BasicController{
@RequestMapping("/gnss/msg/list_trx") @RequestMapping("/gnss/msg/list_trx")
@ResponseBody @ResponseBody
public JSONObject listTrxMsg(int page, int limit) { public JSONObject listTrxMsg(int page, int limit, String searchParams) {
Page<GnssTrxMsg> pageable = new Page<>(page, limit); Page<GnssTrxMsg> pageable = new Page<>(page, limit);
IPage<GnssTrxMsg> cs = trxMsgMapper.selectPage(pageable, null); QueryWrapper<GnssTrxMsg> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("createtime");
// 条件查询
if(searchParams != null) {
JSONObject search = (JSONObject) JSONObject.parse(searchParams);
//设备号
String deviceid = search.getString("deviceid");
if (!StringUtils.isEmpty(deviceid)) {
queryWrapper.like("deviceid", deviceid);
}
//时间范围
String q_start = search.getString("q_start");
if (!StringUtils.isEmpty(q_start)) {
queryWrapper.ge("createtime", q_start);
}
String q_end = search.getString("q_end");
if (!StringUtils.isEmpty(q_end)) {
queryWrapper.le("createtime", q_end+" 23:59:59");
}
}
IPage<GnssTrxMsg> cs = trxMsgMapper.selectPage(pageable, queryWrapper);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 0); jsonObject.put("code", 0);

View File

@ -1,13 +1,14 @@
package com.imdroid.beidou.controller; package com.imdroid.beidou.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.imdroid.secapi.dto.GnssMsg;
import com.imdroid.secapi.dto.GnssSingleCalcData; import com.imdroid.secapi.dto.GnssSingleCalcData;
import com.imdroid.secapi.dto.GnssSingleCalcDataMapper; import com.imdroid.secapi.dto.GnssSingleCalcDataMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
@ -16,17 +17,37 @@ public class GnssSingleCalcDataController extends BasicController{
@Autowired @Autowired
GnssSingleCalcDataMapper dataMapper; GnssSingleCalcDataMapper dataMapper;
@RequestMapping("/page/gnss_data_raw") @RequestMapping("/page/gnss_data_raw")
public String gnssDataRaw()throws Exception { public String gnssDataRaw() {
return "/page/gnss_data_raw"; return "/page/gnss_data_raw";
} }
/**** 推送数据 *****/ /**** 推送数据 *****/
@RequestMapping("/gnss/data/list_raw") @RequestMapping("/gnss/data/list_raw")
@ResponseBody @ResponseBody
public JSONObject listMsg(int page, int limit) { public JSONObject listMsg(int page, int limit, String searchParams) {
Page<GnssSingleCalcData> pageable = new Page<>(page, limit); Page<GnssSingleCalcData> pageable = new Page<>(page, limit);
IPage<GnssSingleCalcData> cs = dataMapper.selectPage(pageable, null); QueryWrapper<GnssSingleCalcData> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("createtime");
// 条件查询
if(searchParams != null) {
JSONObject search = (JSONObject) JSONObject.parse(searchParams);
//设备号
String deviceid = search.getString("deviceid");
if (!StringUtils.isEmpty(deviceid)) {
queryWrapper.like("deviceid", deviceid);
}
//时间范围
String q_start = search.getString("q_start");
if (!StringUtils.isEmpty(q_start)) {
queryWrapper.ge("createtime", q_start);
}
String q_end = search.getString("q_end");
if (!StringUtils.isEmpty(q_end)) {
queryWrapper.le("createtime", q_end+" 23:59:59");
}
}
IPage<GnssSingleCalcData> cs = dataMapper.selectPage(pageable, queryWrapper);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("code", 0); jsonObject.put("code", 0);
jsonObject.put("msg", ""); jsonObject.put("msg", "");

View File

@ -6,32 +6,27 @@ import org.springframework.web.bind.annotation.RequestMapping;
@Controller @Controller
public class LayuiController extends BasicController{ public class LayuiController extends BasicController{
@RequestMapping("/login") @RequestMapping("/login")
public String login() throws Exception { public String login(){
return "/login"; return "/login";
} }
@RequestMapping("/") @RequestMapping("/")
public String index0()throws Exception { public String index0() {
return "/index"; return "/index";
} }
@RequestMapping("/index") @RequestMapping("/index")
public String index()throws Exception { public String index() {
return "/index"; return "/index";
} }
@RequestMapping("/page/device_overview") @RequestMapping("/page/device_overview")
public String deviceOverview()throws Exception { public String deviceOverview() {
return "/page/device_overview"; return "/page/device_overview";
} }
@RequestMapping("/page/gnss_data_calc")
public String gnssDataCalc()throws Exception {
return "/page/gnss_data_calc";
}
@RequestMapping("/page/gnss_data_tools") @RequestMapping("/page/gnss_data_tools")
public String gnssDataTools()throws Exception { public String gnssDataTools() {
return "/page/gnss_data_tools"; return "/page/gnss_data_tools";
} }

View File

@ -124,6 +124,7 @@ CREATE TABLE IF NOT EXISTS `gnssdevicelocationrecords` (
`rb562e` double DEFAULT NULL COMMENT '相对北斗位置东E', `rb562e` double DEFAULT NULL COMMENT '相对北斗位置东E',
`rb562d` double DEFAULT NULL COMMENT '相对北斗位置北N', `rb562d` double DEFAULT NULL COMMENT '相对北斗位置北N',
`rb562n` double DEFAULT NULL COMMENT '相对北斗位置天D', `rb562n` double DEFAULT NULL COMMENT '相对北斗位置天D',
`pps` int DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `idx_deviceid_time` (`deviceid`,`createtime`) USING BTREE KEY `idx_deviceid_time` (`deviceid`,`createtime`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
@ -154,7 +155,7 @@ CREATE TABLE IF NOT EXISTS `gnssmsg` (
CREATE TABLE IF NOT EXISTS `gnssstatusmsg` ( CREATE TABLE IF NOT EXISTS `gnssstatusmsg` (
`id` bigint AUTO_INCREMENT, `id` bigint AUTO_INCREMENT,
`updatetime` datetime DEFAULT NULL, `createtime` datetime DEFAULT NULL,
`devicetime` datetime DEFAULT NULL, `devicetime` datetime DEFAULT NULL,
`deviceid` varchar(20) NOT NULL, `deviceid` varchar(20) NOT NULL,
`roll` float DEFAULT 0, `roll` float DEFAULT 0,
@ -170,7 +171,7 @@ CREATE TABLE IF NOT EXISTS `gnssstatusmsg` (
CREATE TABLE IF NOT EXISTS `gnsstrxmsg` ( CREATE TABLE IF NOT EXISTS `gnsstrxmsg` (
`id` bigint AUTO_INCREMENT, `id` bigint AUTO_INCREMENT,
`updatetime` datetime DEFAULT NULL, `createtime` datetime DEFAULT NULL,
`devicetime` datetime DEFAULT NULL, `devicetime` datetime DEFAULT NULL,
`deviceid` varchar(20) NOT NULL, `deviceid` varchar(20) NOT NULL,
`uart1txbytes` int DEFAULT 0, `uart1txbytes` int DEFAULT 0,
@ -185,3 +186,29 @@ CREATE TABLE IF NOT EXISTS `gnsstrxmsg` (
`d3xxbytes` int DEFAULT 0, `d3xxbytes` int DEFAULT 0,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `metadatas` (
`id` bigint NOT NULL,
`object` varchar(32) NOT NULL,
`keyname` varchar(32) NOT NULL,
`type` varchar(1) NOT NULL,
`mandatory` int NOT NULL,
`message` varchar(64) DEFAULT NULL,
`notes` varchar(256) DEFAULT NULL,
`format` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `object` (`object`,`keyname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
CREATE TABLE IF NOT EXISTS `attributes` (
`id` bigint NOT NULL,
`object` varchar(32) NOT NULL,
`pid` bigint NOT NULL,
`keyname` varchar(32) NOT NULL,
`type` varchar(1) NOT NULL,
`valuestring` varchar(255) DEFAULT NULL,
`valuenumber` double DEFAULT NULL,
`valuedate` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `object` (`object`,`pid`,`keyname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

View File

@ -9,7 +9,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">设备号</label> <label class="layui-form-label">设备号</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="username" autocomplete="off" class="layui-input"> <input type="text" name="deviceid" id="deviceid" autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
@ -45,12 +45,12 @@
</div> </div>
<script th:inline="none"> <script th:inline="none">
layui.use(['form', 'table','miniPage','element'], function () { layui.use(['form', 'table','miniPage','element','echarts'], function () {
var $ = layui.jquery, var $ = layui.jquery,
form = layui.form, form = layui.form,
table = layui.table, table = layui.table,
miniPage = layui.miniPage; echarts = layui.echarts;
var searchDeviceId = false;
/** /**
* 初始化表单,要加上,不然刷新部分组件可能会不加载 * 初始化表单,要加上,不然刷新部分组件可能会不加载
*/ */
@ -58,7 +58,7 @@
table.render({ table.render({
elem: '#currentTableId', elem: '#currentTableId',
url: 'api/gnss_data_calc.json',//假数据 url: '/gnss/data/list_calc',
defaultToolbar: ['filter', 'exports', 'print', { defaultToolbar: ['filter', 'exports', 'print', {
title: '提示', title: '提示',
layEvent: 'LAYTABLE_TIPS', layEvent: 'LAYTABLE_TIPS',
@ -66,35 +66,33 @@
}], }],
cols: [[ cols: [[
{field: 'deviceid', title: '设备号'}, {field: 'deviceid', title: '设备号'},
{field: 'report_time', title: '时间'}, {field: 'createtime', title: '上报时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
{field: 'b562e', title: '原始东'}, {field: 'b562e', title: '原始东'},
{field: 'b562n', title: '原始北'}, {field: 'b562n', title: '原始北'},
{field: 'b562d', title: '原始天'}, {field: 'b562d', title: '原始天'},
{field: 'roll', title: 'roll'},
{field: 'pitch', title: 'pitch'},
{field: 'yaw', title: 'yaw'},
{field: 'resulte', title: '融合东'},
{field: 'resultn', title: '融合北'},
{field: 'resultd', title: '融合天'},
{field: 'rb562e', title: '相对东'}, {field: 'rb562e', title: '相对东'},
{field: 'rb562n', title: '相对北'}, {field: 'rb562n', title: '相对北'},
{field: 'rb562d', title: '相对天'}, {field: 'rb562d', title: '相对天'},
{field: 'pps', title: '平均延迟'}, {field: 'pps', title: '平均延迟'}
{field: 'sat_count', title: '卫星数'},
{field: 'sat_used', title: '使用卫星数'},
]], ]],
limits: [10, 15, 20, 25, 50, 100], limits: [10, 15, 20, 25, 50, 100],
limit: 15, limit: 15,
page: true, page: true,
skin: 'line' skin: 'line',
done: function (result, curr, count) {
console.log(searchDeviceId);
if(searchDeviceId){
showChart(result.data);
}
}
}); });
// 监听搜索操作 // 监听搜索操作
form.on('submit(data-search-btn)', function (data) { form.on('submit(data-search-btn)', function (data) {
var result = JSON.stringify(data.field); var result = JSON.stringify(data.field);
layer.alert(result, { var deviceId = $('#deviceid').val();
title: '最终的搜索信息' searchDeviceId = !isNaN(parseFloat(deviceId));
}); console.log(searchDeviceId);
//执行搜索重载 //执行搜索重载
table.reload('currentTableId', { table.reload('currentTableId', {
@ -109,7 +107,104 @@
return false; return false;
}); });
function showChart(chartData){
var echartsDevice = layui.echarts.init(document.getElementById('echarts-gnss'), 'walden');
var t = [];
var e = [];
var n = [];
var d = [];
var fe = [];
var fn = [];
var fd = [];
for(var i=0; i<chartData.length; i++){
t[i] = chartData[i].createtime;
e[i] = chartData[i].b562e;
n[i] = chartData[i].b562n;
d[i] = chartData[i].b562d;
}
var optionDevice = {
title: {
text: '位移曲线'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: ['东', '北', '天','平滑东', '平滑北', '平滑天']
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: t
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '东',
type: 'line',
data: e
},
{
name: '北',
type: 'line',
data: n
},
{
name: '天',
type: 'line',
data: d
},
{
name: '平滑东',
type: 'line',
data: fe
},
{
name: '平滑北',
type: 'line',
data: fn
},
{
name: '平滑天',
type: 'line',
data: fd
}
]
};
echartsDevice.setOption(optionDevice);
// echarts 窗口缩放自适应
window.onresize = function () {
echartsDevice.resize();
}
}
}); });
</script> </script>
<script> <script>
@ -125,95 +220,3 @@
}); });
</script> </script>
<script>
layui.use(['layer','echarts'], function () {
var $ = layui.jquery,
layer = layui.layer,
echarts = layui.echarts;
/**
* 设备告警
*/
var echartsDevice = echarts.init(document.getElementById('echarts-gnss'), 'walden');
var optionDevice = {
title: {
text: '累计位移'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: ['原始x', '原始y', '原始z','相对x', '相对y', '相对z']
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '原始x',
type: 'line',
data: [1, 1.2, 1.3, 1.5, 1.4, 1.3, 1.3]
},
{
name: '原始y',
type: 'line',
data: [0.1, 0.2, 0.3, 0.9, 0.6, 0.4, 0.5]
},
{
name: '原始z',
type: 'line',
data: [1.5, 1.8, 1.7, 1.8, 1.4, 1.6, 1.6]
},
{
name: '相对x',
type: 'line',
data: [1, 1.1, 1.1, 1.2, 1.2, 1.2, 1.2]
},
{
name: '相对y',
type: 'line',
data: [0.1, 0.1, 0.2, 0.5, 0.4, 0.4, 0.4]
},
{
name: '相对z',
type: 'line',
data: [1.3, 1.4, 1.4, 1.5, 1.4, 1.5, 1.5]
}
]
};
echartsDevice.setOption(optionDevice);
// echarts 窗口缩放自适应
window.onresize = function () {
echartsDevice.resize();
}
});
</script>

View File

@ -9,7 +9,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">设备号</label> <label class="layui-form-label">设备号</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="username" autocomplete="off" class="layui-input"> <input type="text" name="deviceid" autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
@ -53,7 +53,7 @@
table.render({ table.render({
elem: '#currentTableId', elem: '#currentTableId',
url: '/gnss/data/list_raw',//假数据 url: '/gnss/data/list_raw',
defaultToolbar: ['filter', 'exports', 'print', { defaultToolbar: ['filter', 'exports', 'print', {
title: '提示', title: '提示',
layEvent: 'LAYTABLE_TIPS', layEvent: 'LAYTABLE_TIPS',
@ -73,15 +73,17 @@
limits: [10, 15, 20, 25, 50, 100], limits: [10, 15, 20, 25, 50, 100],
limit: 15, limit: 15,
page: true, page: true,
skin: 'line' skin: 'line',
done: function (result, curr, count) {
//回调渲染折线图
console.log(curr, count);
console.log(result);
}
}); });
// 监听搜索操作 // 监听搜索操作
form.on('submit(data-search-btn)', function (data) { form.on('submit(data-search-btn)', function (data) {
var result = JSON.stringify(data.field); var result = JSON.stringify(data.field);
layer.alert(result, {
title: '最终的搜索信息'
});
//执行搜索重载 //执行搜索重载
table.reload('currentTableId', { table.reload('currentTableId', {

View File

@ -9,19 +9,18 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">设备号</label> <label class="layui-form-label">设备号</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="username" autocomplete="off" class="layui-input"> <input type="text" name="deviceid" autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">消息类型</label> <label class="layui-form-label">范围</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<select name="device_type" lay-verify="required" lay-search=""> <input type="text" name="q_start" autocomplete="off" id="ID-laydate-start-date" class="layui-input" placeholder="开始日期">
<option value="">选择或搜索</option> </div>
<option value="1">配置消息</option> <div class="layui-input-inline">
<option value="2">状态消息</option> <input type="text" name="q_end" autocomplete="off" id="ID-laydate-end-date" class="layui-input" placeholder="结束日期">
</select> </div>
</div> </div>
</div>
<div class="layui-inline"> <div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button> <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button>
</div> </div>
@ -36,16 +35,23 @@
</div> </div>
<script th:inline="none"> <script th:inline="none">
layui.use(['form', 'table','miniPage','element'], function () { layui.use(['form', 'table', 'laydate'], function () {
var $ = layui.jquery, var $ = layui.jquery,
form = layui.form, form = layui.form,
table = layui.table, table = layui.table,
miniPage = layui.miniPage; laydate = layui.laydate;
/** /**
* 初始化表单,要加上,不然刷新部分组件可能会不加载 * 初始化表单,要加上,不然刷新部分组件可能会不加载
*/ */
form.render(); form.render();
laydate.render({
elem: '#ID-laydate-start-date'
});
laydate.render({
elem: '#ID-laydate-end-date'
});
table.render({ table.render({
elem: '#currentTableId', elem: '#currentTableId',
url: '/gnss/msg/list_all', url: '/gnss/msg/list_all',
@ -65,9 +71,6 @@
// 监听搜索操作 // 监听搜索操作
form.on('submit(data-search-btn)', function (data) { form.on('submit(data-search-btn)', function (data) {
var result = JSON.stringify(data.field); var result = JSON.stringify(data.field);
layer.alert(result, {
title: '最终的搜索信息'
});
//执行搜索重载 //执行搜索重载
table.reload('currentTableId', { table.reload('currentTableId', {
@ -83,4 +86,4 @@
}); });
}); });
</script> </script>

View File

@ -9,7 +9,16 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">设备号</label> <label class="layui-form-label">设备号</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="username" autocomplete="off" class="layui-input"> <input type="text" name="deviceid" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">范围</label>
<div class="layui-input-inline">
<input type="text" name="q_start" autocomplete="off" id="ID-laydate-start-date" class="layui-input" placeholder="开始日期">
</div>
<div class="layui-input-inline">
<input type="text" name="q_end" autocomplete="off" id="ID-laydate-end-date" class="layui-input" placeholder="结束日期">
</div> </div>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
@ -26,22 +35,29 @@
</div> </div>
<script th:inline="none"> <script th:inline="none">
layui.use(['form', 'table','miniPage','element'], function () { layui.use(['form', 'table', 'laydate'], function () {
var $ = layui.jquery, var $ = layui.jquery,
form = layui.form, form = layui.form,
table = layui.table, table = layui.table,
miniPage = layui.miniPage; laydate = layui.laydate;
/** /**
* 初始化表单,要加上,不然刷新部分组件可能会不加载 * 初始化表单,要加上,不然刷新部分组件可能会不加载
*/ */
form.render(); form.render();
laydate.render({
elem: '#ID-laydate-start-date'
});
laydate.render({
elem: '#ID-laydate-end-date'
});
table.render({ table.render({
elem: '#currentTableId', elem: '#currentTableId',
url: '/gnss/msg/list_status', url: '/gnss/msg/list_status',
cols: [[ cols: [[
{field: 'deviceid', title: '设备号'}, {field: 'deviceid', title: '设备号'},
{field: 'updatetime', title: '上报时间', templet: "<div>{{layui.util.toDateString(d.updatetime, 'yyyy-MM-dd HH:mm:ss')}}</div>"}, {field: 'createtime', title: '上报时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
{field: 'devicetime', title: '设备时间', templet: "<div>{{layui.util.toDateString(d.devicetime, 'HH:mm:ss')}}</div>"}, {field: 'devicetime', title: '设备时间', templet: "<div>{{layui.util.toDateString(d.devicetime, 'HH:mm:ss')}}</div>"},
{field: 'roll', title: 'roll'}, {field: 'roll', title: 'roll'},
{field: 'pitch', title: 'pitch'}, {field: 'pitch', title: 'pitch'},
@ -60,9 +76,6 @@
// 监听搜索操作 // 监听搜索操作
form.on('submit(data-search-btn)', function (data) { form.on('submit(data-search-btn)', function (data) {
var result = JSON.stringify(data.field); var result = JSON.stringify(data.field);
layer.alert(result, {
title: '最终的搜索信息'
});
//执行搜索重载 //执行搜索重载
table.reload('currentTableId', { table.reload('currentTableId', {
@ -78,4 +91,4 @@
}); });
}); });
</script> </script>

View File

@ -9,19 +9,18 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">设备号</label> <label class="layui-form-label">设备号</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="username" autocomplete="off" class="layui-input"> <input type="text" name="deviceid" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">范围</label>
<div class="layui-input-inline">
<input type="text" name="q_start" autocomplete="off" id="ID-laydate-start-date" class="layui-input" placeholder="开始日期">
</div>
<div class="layui-input-inline">
<input type="text" name="q_end" autocomplete="off" id="ID-laydate-end-date" class="layui-input" placeholder="结束日期">
</div> </div>
</div> </div>
<div class="layui-inline">
<label class="layui-form-label">统计</label>
<div class="layui-input-inline">
<select name="device_type" lay-verify="required" lay-search="">
<option value="">选择或搜索</option>
<option value="1"></option>
<option value="2"></option>
</select>
</div>
</div>
<div class="layui-inline"> <div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button> <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button>
</div> </div>
@ -36,22 +35,29 @@
</div> </div>
<script th:inline="none"> <script th:inline="none">
layui.use(['form', 'table','miniPage','element'], function () { layui.use(['form', 'table', 'laydate'], function () {
var $ = layui.jquery, var $ = layui.jquery,
form = layui.form, form = layui.form,
table = layui.table, table = layui.table,
miniPage = layui.miniPage; laydate = layui.laydate;
/** /**
* 初始化表单,要加上,不然刷新部分组件可能会不加载 * 初始化表单,要加上,不然刷新部分组件可能会不加载
*/ */
form.render(); form.render();
laydate.render({
elem: '#ID-laydate-start-date'
});
laydate.render({
elem: '#ID-laydate-end-date'
});
table.render({ table.render({
elem: '#currentTableId', elem: '#currentTableId',
url: '/gnss/msg/list_trx', url: '/gnss/msg/list_trx',
cols: [[ cols: [[
{field: 'deviceid', title: '设备号'}, {field: 'deviceid', title: '设备号'},
{field: 'updatetime', title: '上报时间', templet: "<div>{{layui.util.toDateString(d.updatetime, 'yyyy-MM-dd HH:mm:ss')}}</div>"}, {field: 'createtime', title: '上报时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
{field: 'devicetime', title: '设备时间', templet: "<div>{{layui.util.toDateString(d.devicetime, 'HH:mm:ss')}}</div>"}, {field: 'devicetime', title: '设备时间', templet: "<div>{{layui.util.toDateString(d.devicetime, 'HH:mm:ss')}}</div>"},
{field: 'd3xxbytes', title: 'D3XX'}, {field: 'd3xxbytes', title: 'D3XX'},
{field: 'b562bytes', title: 'B562'}, {field: 'b562bytes', title: 'B562'},
@ -73,9 +79,6 @@
// 监听搜索操作 // 监听搜索操作
form.on('submit(data-search-btn)', function (data) { form.on('submit(data-search-btn)', function (data) {
var result = JSON.stringify(data.field); var result = JSON.stringify(data.field);
layer.alert(result, {
title: '最终的搜索信息'
});
//执行搜索重载 //执行搜索重载
table.reload('currentTableId', { table.reload('currentTableId', {
@ -91,4 +94,4 @@
}); });
}); });
</script> </script>