diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecordMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecordMapper.java index 0b4bb5aa..fc470a0a 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecordMapper.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecordMapper.java @@ -1,13 +1,9 @@ package com.imdroid.secapi.dto; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; -import java.sql.Timestamp; @Mapper public interface FwdRecordMapper extends BaseMapper { - @Delete({"delete from fwdrecords where createtime <= #{t}"}) - int deleteTimeBefore(Timestamp t); } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java index b7e978ea..210c9da0 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroup.java @@ -18,6 +18,7 @@ public class GnssGroup implements Serializable { public final static short NORMAL_POWER_MODE = 1; Integer id; + String name; Integer work_cycle; Integer active_time; Integer active_offset; diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java index dda625a8..8aa1696e 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssGroupCalc.java @@ -7,6 +7,7 @@ import lombok.Data; @TableName(value = "gnssgroupcalc") public class GnssGroupCalc { Integer id; + String name; Integer filter_hour; Float xy_threshold; Float z_threshold; diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssMsgMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssMsgMapper.java index e2c14bc1..6b4035af 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssMsgMapper.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssMsgMapper.java @@ -1,14 +1,9 @@ package com.imdroid.secapi.dto; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; -import java.sql.Timestamp; - @Mapper public interface GnssMsgMapper extends BaseMapper { - @Delete({"delete from gnssmsg where createtime <= #{t}"}) - int deleteTimeBefore(Timestamp t); } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssRawData.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssRawData.java deleted file mode 100644 index 56de784d..00000000 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssRawData.java +++ /dev/null @@ -1,31 +0,0 @@ -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; - -import java.time.LocalDateTime; - -/** - * GNSS解算结果,每个工作周期解算一次 - * - * @author LiGang - */ - -@Data -@TableName(value = "gnssrawdata") -public class GnssRawData { - @TableId(value = "id", type = IdType.AUTO) - Long id; - Integer tenantid; - LocalDateTime createtime; - String deviceid; - Double b562e; - Double b562n; - Double b562d; - Double roll; - Double pitch; - Double yaw; - Double shock; -} diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssRawDataMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssRawDataMapper.java deleted file mode 100644 index 2fe5d399..00000000 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssRawDataMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.imdroid.secapi.dto; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Delete; -import org.apache.ibatis.annotations.Mapper; - -import java.sql.Timestamp; - -@Mapper -public interface GnssRawDataMapper extends BaseMapper { - @Delete({"delete from gnssrawdata where createtime <= #{t}"}) - int deleteTimeBefore(Timestamp t); -} diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsgMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsgMapper.java index 0ff28575..9507d02d 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsgMapper.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsgMapper.java @@ -1,14 +1,10 @@ package com.imdroid.secapi.dto; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; -import java.sql.Timestamp; - @Mapper public interface GnssStatusMsgMapper extends BaseMapper { - @Delete({"delete from gnssstatusmsg where createtime <= #{t}"}) - int deleteTimeBefore(Timestamp t); + } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java index 1e4a6dc3..b6eaa931 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java @@ -61,4 +61,10 @@ public class GnssTrxMsg { Integer d3xxbytes; @ExcelProperty("使用卫星数") Integer satelliteinuse; + + @ExcelProperty("固定解") + Integer fixnum; + + @ExcelProperty("浮点解") + Integer floatnum; } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsgMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsgMapper.java index 1a575ac5..83d61b4c 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsgMapper.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsgMapper.java @@ -1,14 +1,10 @@ package com.imdroid.secapi.dto; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; -import java.sql.Timestamp; @Mapper public interface GnssTrxMsgMapper extends BaseMapper { - @Delete({"delete from gnsstrxmsg where createtime <= #{t}"}) - int deleteTimeBefore(Timestamp t); } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecordMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecordMapper.java index 18b1e11d..da78557c 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecordMapper.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecordMapper.java @@ -1,13 +1,10 @@ package com.imdroid.secapi.dto; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; -import java.sql.Timestamp; @Mapper public interface ResendRecordMapper extends BaseMapper { - @Delete({"delete from resendrecords where createtime <= #{t}"}) - int deleteTimeBefore(Timestamp t); + } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java index 6804db81..6af84bd2 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java @@ -10,6 +10,7 @@ public interface FocusCalculator { void addXyz(double[] xyz, LocalDateTime dataTime); void addTilt(Tilt tilt); void addDelayMs(int ms); + void addGGA(Gga gga); // 解算:b562位置、惯导位置、融合位置 void setReferPoint(double[] point); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java index 00263f54..d8ad3554 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java @@ -381,6 +381,12 @@ public class FocusCalculator1 implements FocusCalculator{ delay_ms += ms; delay_counter ++; } + + @Override + public void addGGA(Gga gga) { + + } + @Override public int getAvgDelayMs(){ if(delay_counter==0) return -1; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java index 0df10d7d..0d3eeba1 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java @@ -22,21 +22,21 @@ public class FocusCalculator2 extends FocusCalculator1{ int originalReferPointFlag= INIT_REFER_POINT_NOT_SET; // 0:not set; 1:in use; 2:expired LocalDateTime originalReferPointTime; - class EComparator implements Comparator{ + static class EComparator implements Comparator{ @Override public int compare(double[] point1, double[] point2) { return (int) ((point1[0] - point2[0])*100); } } - class NComparator implements Comparator{ + static class NComparator implements Comparator{ @Override public int compare(double[] point1, double[] point2) { return (int) ((point1[1] - point2[1])*100); } } - class DComparator implements Comparator{ + static class DComparator implements Comparator{ @Override public int compare(double[] point1, double[] point2) { return (int) ((point1[2] - point2[2])*100); @@ -89,6 +89,7 @@ public class FocusCalculator2 extends FocusCalculator1{ return sum/(end-begin); } + @Override public double[] resultB562(){ // 把本轮的固定解添加到pointList一起解算 if(counterFixedResult<30) return null; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java new file mode 100644 index 00000000..390dc52c --- /dev/null +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java @@ -0,0 +1,88 @@ +package com.imdroid.sideslope.bd; + +import java.time.LocalDateTime; +import java.util.*; + +/** + * 博通:用GGA绝对坐标代替相对位置 + */ +public class FocusCalculator3 extends FocusCalculator1{ + + final static long scale = 100000000L;//地球1°:111km,放大到mm乘以100,000,000 + static class EComparator implements Comparator{ + @Override + public int compare(double[] point1, double[] point2) { + return (int) ((point1[0] - point2[0])*100); + } + } + + static class NComparator implements Comparator{ + @Override + public int compare(double[] point1, double[] point2) { + return (int) ((point1[1] - point2[1])*100); + } + } + + static class DComparator implements Comparator{ + @Override + public int compare(double[] point1, double[] point2) { + return (int) ((point1[2] - point2[2])*100); + } + } + + @Override + public void addGGA(Gga gga) { + if(gga == null) return; + + double[] xyz = new double[]{gga.getLongitude()*scale, gga.getLatitude()*scale, gga.getAltitude()*1000, gga.getQuality()}; + + if(gga.getQuality() == 4) { + counterFixedResult++; + pointList.add(xyz); + } + else if(gga.getQuality() == 5) counterNoFixed++; + else counterNoB562 ++; + } + + /** + * 加入pointList + * @param xyz + */ + @Override + public void addXyz(double[] xyz, LocalDateTime dataTime){ + + } + + double calcGravity(List list , int index){ + double sum = 0; + int begin = (int) (list.size() * 0.25); + int end = (int) (list.size() * 0.75); + if(end-begin == 0) return 0; + + for(int i=begin; i= 3){ + Collections.sort(pointList, new EComparator()); + double e = calcGravity(pointList,0); + Collections.sort(pointList, new NComparator()); + double n = calcGravity(pointList,1); + Collections.sort(pointList, new DComparator()); + double d = calcGravity(pointList,2); + return new double[]{e,n,d}; + } + + return null; + } + + @Override + public int getVer() { + return 3; + } + +} diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/UBXUtil.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/UBXUtil.java index b13ce653..25ee6902 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/UBXUtil.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/UBXUtil.java @@ -42,7 +42,7 @@ public class UBXUtil { return new double[]{relPosE*10,relPosN*10,relPosD*10,FLOAT_RESULT}; } else{ - return new double[]{0,0,0,FLOAT_RESULT}; + return new double[]{0,0,0,NO_B562}; } } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java index e90a6381..fecec310 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/GNSSDataCalcService.java @@ -12,9 +12,8 @@ public interface GNSSDataCalcService { * * @param message GNSS数据 * @param completeWhenIdle 是否根据空闲时间判断本轮结束 - * @return x,y,z三轴数据 */ - double[] calcSingle(D341LocationMessage message, boolean completeWhenIdle); + void calcSingle(D341LocationMessage message, boolean completeWhenIdle); /** * 单轮解算结束,计算平滑值 diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java index 623ff1a3..cd53016a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java @@ -64,21 +64,23 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { * 处理本轮的固定解,求出重心位置。多线程调用,访问成员变量要考虑多线程安全 * @param message d341报文 * @param completeWhenIdle 是否根据空闲时间判断本轮结束。是则启动30s定时器;否则需显示调用SingleDone函数 - * @return */ @Override - public double[] calcSingle(D341LocationMessage message, boolean completeWhenIdle) { + public void calcSingle(D341LocationMessage message, boolean completeWhenIdle) { String deviceId = message.getId(); Device device = deviceService.findByDeviceId(deviceId); - if(device == null) return null; + if(device == null) return; GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId()); if(completeWhenIdle) resultOutputTimer(device, groupCalc, message.getCreateTime()); //todo 创建FocusCalculator对象需获取该测站的杆长度,上一小时的Tilt平均值,上一小时的测站相对坐标融合值ekfResult FocusCalculator focusCalculator; - if(groupCalc!=null && groupCalc.getVer() == 2){ + if(groupCalc!=null && groupCalc.getVer() == 3){ + focusCalculator = calculatorMap.computeIfAbsent(deviceId,s -> new FocusCalculator3()); + } + else if(groupCalc!=null && groupCalc.getVer() == 2){ focusCalculator = calculatorMap.computeIfAbsent(deviceId,s -> new FocusCalculator2()); } else { @@ -101,7 +103,16 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { if (logger.isDebugEnabled()) { logger.debug("测站" + deviceId + "的b562单次解析结果:{}", Arrays.toString(doubles)); } - return doubles; + + // 单次GGA + Gga gga = message.getGga(); + if(gga != null) { + focusCalculator.addGGA(message.getGga()); + if (logger.isDebugEnabled()) { + logger.debug("测站" + deviceId + "的gga单次解析结果:{},{},{},{}", + gga.getLongitude(), gga.getLatitude(), gga.getAltitude(), gga.getQuality()); + } + } } @Override @@ -202,7 +213,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { // 记录本次位置,作为下次的参考 // 算法1:以上轮位置作为参考,跟随变化速度快 // 算法2:以滤波后的位置作为参考,跟随变化速度慢;如果倾角大于某一门限,则跟随上轮位置 - if(focusCalculator.getVer()==1 || focusCalculator.isShocked()) { + if(focusCalculator.getVer()==1 || focusCalculator.getVer()==3 || focusCalculator.isShocked()) { focusCalculator.setReferPoint(b562Result); } else { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java index 6d00dc18..1eff2b61 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java @@ -41,6 +41,9 @@ public class D341LocationMessageExecutor implements Executor { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java index c5521220..d0ae08d5 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java @@ -93,12 +93,7 @@ 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()); - } - else{ - saveMsg(message, "d331 num: "+device.getD3xxCount()+","+message.getOtherInfo()); - } + saveMsg(message, message.getOtherInfo()); // 检测该对象是否已存在 GnssStatus deviceState = deviceStateRepository.getByDeviceId(message.getId()); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java index a4043dab..377a6ce7 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssGroupController.java @@ -66,7 +66,7 @@ public class GnssGroupController extends BasicController { GnssGroup oldGroup = gnssGroupMapper.selectById(group.getId()); // no changed - if(oldGroup != null && oldGroup.equals(group)) return HttpResult.ok(); + //if(oldGroup != null && oldGroup.equals(group)) return HttpResult.ok(); if(null != oldGroup) { num = gnssGroupMapper.updateById(group); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssRawDataController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssRawDataController.java deleted file mode 100644 index 365ed2b6..00000000 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssRawDataController.java +++ /dev/null @@ -1,67 +0,0 @@ -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.beidou.entity.Tenant; -import com.imdroid.secapi.dto.GnssRawData; -import com.imdroid.secapi.dto.GnssRawDataMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import javax.servlet.http.HttpSession; - -@Controller -public class GnssRawDataController extends BasicController{ - @Autowired - GnssRawDataMapper dataMapper; - @RequestMapping("/page/gnss_data_raw") - public String gnssDataRaw(Model m, HttpSession session) { - initModel(m, session); - return "/page/gnss_data_raw"; - } - - /**** 推送数据 *****/ - @RequestMapping("/gnss/data/list_raw") - @ResponseBody - public JSONObject list(HttpSession session, int page, int limit, String searchParams) { - Page pageable = new Page<>(page, limit); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.orderByDesc("createtime"); - Integer tenantId = getTenantId(session); - if(tenantId != null && tenantId != Tenant.SAAS_PROVIDER_ID) { - queryWrapper.eq("tenantid", tenantId); - } - - // 条件查询 - 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 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; - } -} 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 894160c7..3ecb879e 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 @@ -38,6 +38,7 @@ public class IndexController extends BasicController{ int warning1Num=0;//一般告警 int warning2Num=0;//严重告警 int noGGA = 0; + int noFix = 0; List deviceList; if(tenantId == Tenant.SAAS_PROVIDER_ID){ @@ -53,6 +54,8 @@ public class IndexController extends BasicController{ while(iterator.hasNext()){ GnssStatusJoin status=iterator.next(); if(status.getState() == GnssStatus.STATE_OFFLINE) deviceOfflineNum++; + if((status.getWarningcode()&WarningCfg.TYPE_NO_FIXED_RESULT) != 0) noFix++; + if(status.getWarning() == WarningCfg.LEVEL_1) warning1Num++; else if(status.getWarning() == WarningCfg.LEVEL_2) warning2Num++; @@ -81,6 +84,7 @@ public class IndexController extends BasicController{ m.addAttribute("warning2Num", warning2Num); m.addAttribute("warningTotalNum", warning1Num+warning2Num); m.addAttribute("noGGA", noGGA); + m.addAttribute("noFix", noFix); m.addAttribute("deviceList", deviceList); return "/page/device_overview"; diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/task/DatasetCleaner.java b/sec-beidou/src/main/java/com/imdroid/beidou/task/DatasetCleaner.java index 70540dbf..029eaddc 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/task/DatasetCleaner.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/task/DatasetCleaner.java @@ -1,5 +1,6 @@ package com.imdroid.beidou.task; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.imdroid.secapi.dto.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -7,7 +8,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; -import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; /*** * 定时任务: @@ -22,19 +24,22 @@ import java.sql.Timestamp; @Configuration @EnableScheduling public class DatasetCleaner { + final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + @Autowired GnssMsgMapper gnssMsgMapper; @Autowired GnssStatusMsgMapper statusMsgMapper; @Autowired GnssTrxMsgMapper trxMsgMapper; - @Autowired - GnssRawDataMapper rawDataMapper; - @Autowired + @Autowired ResendRecordMapper resendRecordMapper; @Autowired FwdRecordMapper fwdRecordMapper; + @Autowired + GnssCalcDataMapper calcDataMapper; + //cron表达式格式: //{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} @@ -43,44 +48,52 @@ public class DatasetCleaner { //@Scheduled(cron = "*/5 * * * * ?") // 每5秒执行一次 public void dayTask() { checkMsgDataset(); - checkRawDataset(); checkFwdDataset(); checkStatusDataset(); + checkGnssDataDataset(); } void checkMsgDataset(){ - long before = System.currentTimeMillis() - - (long)30 * 24 * 3600 * 1000; - Timestamp t = new Timestamp(before); - int count = gnssMsgMapper.deleteTimeBefore(t); + long before = 30; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.le("createtime", LocalDateTime.now().minusDays(before).format(dateFormatter)); + int count = gnssMsgMapper.delete(queryWrapper); log.info("clean msg dataset num: "+count); } + void checkGnssDataDataset(){ + long before = 180; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.le("createtime", LocalDateTime.now().minusDays(before).format(dateFormatter)); + int count = calcDataMapper.delete(queryWrapper); + log.info("clean gnss dataset num: "+count); + } + void checkStatusDataset(){ - long before = System.currentTimeMillis() - - (long)90 * 24 * 3600 * 1000; - Timestamp t = new Timestamp(before); - int count = statusMsgMapper.deleteTimeBefore(t); + long before = 90; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.le("createtime", LocalDateTime.now().minusDays(before).format(dateFormatter)); + int count = statusMsgMapper.delete(queryWrapper); log.info("clean status msg dataset num: "+count); - count = trxMsgMapper.deleteTimeBefore(t); + + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.le("createtime", LocalDateTime.now().minusDays(before).format(dateFormatter)); + count = trxMsgMapper.delete(queryWrapper1); log.info("clean trx msg dataset num: "+count); } - void checkRawDataset(){ - long before = System.currentTimeMillis() - - (long)30 * 24 * 3600 * 1000; - Timestamp t = new Timestamp(before); - int count = rawDataMapper.deleteTimeBefore(t); - log.info("clean raw dataset num: "+count); - } - void checkFwdDataset(){ - long before = System.currentTimeMillis() - - (long)180 * 24 * 3600 * 1000; - Timestamp t = new Timestamp(before); - int count = fwdRecordMapper.deleteTimeBefore(t); + long before = 180; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.le("createtime", LocalDateTime.now().minusDays(before).format(dateFormatter)); + int count = fwdRecordMapper.delete(queryWrapper); log.info("clean fwd dataset num: "+count); - count = resendRecordMapper.deleteTimeBefore(t); + + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.le("createtime", LocalDateTime.now().minusDays(before).format(dateFormatter)); + count = resendRecordMapper.delete(queryWrapper1); log.info("clean resend dataset num: "+count); } } \ No newline at end of file diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index c06affcc..3842a61d 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -65,6 +65,7 @@ CREATE TABLE IF NOT EXISTS `gnssdevices` ( CREATE TABLE IF NOT EXISTS `gnssgroup` ( `id` int NOT NULL, + `name` varchar(64) DEFAULT NULL, `work_cycle` int DEFAULT 30, `active_time` int DEFAULT 6, `active_offset` int DEFAULT 0, @@ -76,6 +77,7 @@ CREATE TABLE IF NOT EXISTS `gnssgroup` ( CREATE TABLE IF NOT EXISTS `gnssgroupcalc` ( `id` int NOT NULL, + `name` varchar(64) DEFAULT NULL, `filter_hour` int DEFAULT NULL COMMENT '平滑窗口', `xy_threshold` float DEFAULT NULL COMMENT '坏点水平门限', `z_threshold` float DEFAULT NULL COMMENT '坏点垂直门限', @@ -158,21 +160,6 @@ CREATE TABLE IF NOT EXISTS `gnssdevicelocationrecords` ( KEY `idx_deviceid_time` (`deviceid`,`createtime`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -CREATE TABLE IF NOT EXISTS `gnssrawdata` ( - `id` bigint AUTO_INCREMENT, - `tenantid` int NOT NULL, - `createtime` datetime DEFAULT NULL, - `deviceid` varchar(20) CHARACTER SET utf8 NOT NULL, - `b562e` double DEFAULT NULL COMMENT '原始北斗位置东E', - `b562n` double DEFAULT NULL COMMENT '原始北斗位置北N', - `b562d` double DEFAULT NULL COMMENT '原始北斗位置天D', - `roll` double DEFAULT NULL, - `pitch` double DEFAULT NULL, - `yaw` double DEFAULT NULL, - `shock` double DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - CREATE TABLE IF NOT EXISTS `gnssmsg` ( `id` bigint AUTO_INCREMENT, `tenantid` int NOT NULL, @@ -217,6 +204,8 @@ CREATE TABLE IF NOT EXISTS `gnsstrxmsg` ( `b562bytes` int DEFAULT NULL, `d3xxbytes` int DEFAULT NULL, `satelliteinuse` int DEFAULT 0, + `fixnum` int DEFAULT NULL, + `floatnum` int DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 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 1ce5360d..9783e749 100644 --- a/sec-beidou/src/main/resources/templates/page/device_overview.html +++ b/sec-beidou/src/main/resources/templates/page/device_overview.html @@ -78,7 +78,7 @@
掉线数 0
-
无GGA 0
+
长期无解 0
装机量 2020
@@ -96,6 +96,7 @@
严重 5
一般 20 +
无GGA 0
diff --git a/sec-beidou/src/main/resources/templates/page/gnss_data_raw.html b/sec-beidou/src/main/resources/templates/page/gnss_data_raw.html deleted file mode 100644 index 728362c3..00000000 --- a/sec-beidou/src/main/resources/templates/page/gnss_data_raw.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - 原始数据 - - - - - - - -
-
- -
- 搜索信息 -
-
-
-
- -
- -
-
-
- -
- -
-
- -
-
- -
- -
-
-
-
-
- -
- - - -
-
- - - - - \ No newline at end of file diff --git a/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html b/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html index 41961538..c7812750 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_group_cfg.html @@ -49,6 +49,7 @@ var cfg_cols = [ {field: 'id', title: '组号', sort: true}, + {field: 'name', title: '描述'}, {field: 'work_cycle', title: '工作周期(分钟)'}, {field: 'active_time', title: '激活时长(分钟)'}, {field: 'active_offset', title: '偏置(分钟)'}, @@ -58,9 +59,9 @@ {title: '操作', toolbar: '#currentTableBar', align: "center"} ]; if([[${role}]] != "ADMIN" && [[${role}]] != "SUPER_ADMIN") { - cfg_cols[3].hide = true; cfg_cols[4].hide = true; - cfg_cols[7].hide = true; + cfg_cols[5].hide = true; + cfg_cols[8].hide = true; } @@ -143,6 +144,7 @@ **/ var cfg2_cols = [ {field: 'id', title: '组号', sort: true}, + {field: 'name', title: '描述'}, {field: 'ver', title: '算法版本'}, {field: 'filter_hour', title: '滤波周期(小时)'}, {field: 'xy_threshold', title: '水平异常门限(mm)'}, @@ -156,7 +158,7 @@ {title: '操作', toolbar: '#currentTableBar', align: "center"} ]; if([[${role}]] != "ADMIN" && [[${role}]] != "SUPER_ADMIN") { - cfg2_cols[9].hide = true; + cfg2_cols[12].hide = true; } table.render({ elem: '#calcParaTableId', diff --git a/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html b/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html index 2856bc70..4b191568 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html @@ -78,6 +78,8 @@ {field: 'devicetime', title: '设备时间'}, {field: 'd3xxbytes', title: 'D3XX'}, {field: 'b562bytes', title: 'B562'}, + {field: 'fixnum', title: '固定解'}, + {field: 'floatnum', title: '浮点解'}, {field: 'uart1txbytes', title: '串口1发'}, {field: 'uart1rxbytes', title: '串口1收'}, {field: 'uart1unknown', title: '串口1未知'}, diff --git a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html index 3dd9f07a..f398ac66 100644 --- a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html +++ b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html @@ -55,7 +55,7 @@
@@ -63,7 +63,7 @@
diff --git a/sec-beidou/src/main/resources/templates/page/table/gnss_add_group.html b/sec-beidou/src/main/resources/templates/page/table/gnss_add_group.html index a359e62b..74c36702 100644 --- a/sec-beidou/src/main/resources/templates/page/table/gnss_add_group.html +++ b/sec-beidou/src/main/resources/templates/page/table/gnss_add_group.html @@ -23,6 +23,12 @@ +
+ +
+ +
+
@@ -104,6 +110,7 @@ $('#active_offset').val(data.active_offset); $('#rs_adv').val(data.rs_adv); $('#power_mode').val(data.power_mode); + $('#name').val(data.name); form.render(); } diff --git a/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html b/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html index f09f58cc..71c18b71 100644 --- a/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html +++ b/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html @@ -23,12 +23,19 @@
+
+ +
+ +
+
@@ -141,6 +148,7 @@ $('#auto_threshold').val(data.auto_threshold); $('#auto_upload').val(data.auto_upload?'1':'0'); $('#ver').val(data.ver); + $('#name').val(data.name); form.render(); } diff --git a/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java b/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java index 752d4ab3..0a3afaa0 100644 --- a/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java +++ b/sec-test-device/src/main/java/com/imdroid/beidou/test_device/task/BeidouDevice.java @@ -43,7 +43,7 @@ public class BeidouDevice { execute("C:\\Users\\wd\\Desktop\\log\\b562_2412254_0416_6xx.log"); */ - executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412254_1xx.log"); + /* executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412254_1xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412254_2xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412254_3xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412254_4xx.log"); @@ -66,10 +66,12 @@ public class BeidouDevice { executeAsD342("C:\\Users\\wd\\Desktop\\log\\2412254_0424_3xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2412254_0424_4xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2412254_0424_5xx.log"); - //execute("C:\\Users\\wd\\Desktop\\log\\b562_2412270_1.log"); + */ + execute("C:\\Users\\wd\\Desktop\\log\\2345076_0424_5xx.log"); //executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412270_1xx.log"); //executeAsD342("C:\\Users\\wd\\Desktop\\log\\b562_2412270_2xx.log"); -/* executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_1.log"); + + /* executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_1.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_2.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_1xx.log"); executeAsD342("C:\\Users\\wd\\Desktop\\log\\2345076_0424_2xx.log"); @@ -117,6 +119,10 @@ public class BeidouDevice { Thread.sleep(30 * 1000); cycleCount++; } + if(arrs[2].contains("24474e47")){ + System.out.println(time+" 24474e47"); + } + udpClient.sendData(ByteUtil.hexStringTobyte(arrs[2])); b562Count++; lastTime = time.getTime();