From 440d8aebb2c10e8b85b8995886fec4dfec944f0b Mon Sep 17 00:00:00 2001 From: weidong Date: Sun, 4 Feb 2024 17:24:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A8=E9=80=81=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdroid/beidou_fwd/task/Forwarder.java | 129 +++++++----------- .../beidou_fwd/task/GXXfzForwarder.java | 3 +- .../imdroid/beidou_fwd/task/GZYForwarder.java | 3 +- .../beidou_fwd/task/GZYMQTTForwarder.java | 3 +- .../beidou_fwd/task/KingMaForwarder.java | 2 +- .../imdroid/beidou_fwd/task/ZNYForwarder.java | 24 ++-- 6 files changed, 69 insertions(+), 95 deletions(-) diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java index b0d83916..f738e05b 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java @@ -61,34 +61,46 @@ public class Forwarder { } } - void forwardCurrentGnss(String fwdGroupId) { - LocalDateTime nowTime = LocalDateTime.now(); - ConcurrentHashMap> projects = new ConcurrentHashMap<>(); - - // 转发数据 - String sendAfterTime = nowTime.minusMinutes(30).format(formatter); + /*** + * 推送指定推送组、设备ID、时间的GNSS记录,查找指定时间前半小时的有效数据推送 + * @param fwdGroupId:推送组 + * @param deviceId:设备ID,如果没有指定,则推送全部 + * @param sendTime:要推送的记录的时间 + */ + void forwardGnssRecords(String fwdGroupId, String deviceId, LocalDateTime sendTime) { + String endTime = sendTime.format(formatter); + String beginTime = sendTime.minusMinutes(30).format(formatter); + // 查找属于指定推送组的设备列表 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("fwd_group_id", fwdGroupId) .or() .eq("fwd_group_id2", fwdGroupId); + if(deviceId != null){ + queryWrapper.eq("deviceid", deviceId); + } List gnssDeviceList = deviceMapper.selectList(queryWrapper); - List recordsToSend; - // 查询最近半小时的记录 + // 查询最近半小时的GNSS记录 QueryWrapper gnssQueryWrapper = new QueryWrapper<>(); - gnssQueryWrapper.ge("createtime",sendAfterTime); + gnssQueryWrapper.ge("createtime",beginTime); + gnssQueryWrapper.le("createtime",endTime); gnssQueryWrapper.orderByDesc("createtime"); gnssQueryWrapper.eq("enabled",true); gnssQueryWrapper.isNotNull("rpose"); + if(deviceId != null){ + gnssQueryWrapper.eq("deviceid", deviceId); + } List locationRecords = gnssDataMapper.selectList(gnssQueryWrapper); + // 构造按项目id分类的GNSS记录 + ConcurrentHashMap> projects = new ConcurrentHashMap<>(); for(GnssDevice device:gnssDeviceList){ if(device.getOpmode() != GnssDevice.OP_MODE_USE) continue; String projectId = device.getProject_id(); if(projectId == null) continue; - recordsToSend = projects.get(projectId); + List recordsToSend = projects.get(projectId); if(recordsToSend == null){ recordsToSend = new ArrayList<>(); projects.put(projectId,recordsToSend); @@ -121,14 +133,14 @@ public class Forwarder { List records = entry.getValue(); if(records.size() == 0) continue; - int sendNum = send(projectId, records); + int sendNum = send(projectId, records, sendTime); FwdRecord fwdRecord = new FwdRecord(); fwdRecord.setProject_id(projectId); fwdRecord.setTenantid(tenantId); fwdRecord.setDevicenum((short) records.size()); - fwdRecord.setStarttime(nowTime); - fwdRecord.setEndtime(nowTime); + fwdRecord.setStarttime(sendTime); + fwdRecord.setEndtime(sendTime); fwdRecord.setFwd_group_id(fwdGroupId); if(sendNum > 0) { @@ -151,8 +163,24 @@ public class Forwarder { if(totalSendNum>0) updateFwd(totalSendNum, true); else if(fwdFailed) updateFwd(totalSendNum, false); }); + } + void forwardCurrentGnss(String fwdGroupId) { + forwardGnssRecords(fwdGroupId,null,LocalDateTime.now()); + } + void forwardBatchGnssRecords(String fwdGroupId, String deviceId, LocalDateTime beginTime, LocalDateTime endTime) { + LocalDateTime sendTime = beginTime; + while(sendTime.isBefore(endTime)){ + forwardGnssRecords(fwdGroupId,deviceId,sendTime); + sendTime = sendTime.plusMinutes(30); + try { + Thread.sleep(500); + } + catch (Exception e){ + + } + } } void forwardHistoryGnss(String fwdGroupId) { @@ -162,80 +190,15 @@ public class Forwarder { queryWrapper.eq("state",FwdRecord.STATE_UPLOAD_DONE); List fwdRecordsList = fwdRecordsMapper.selectList(queryWrapper); // 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传 - totalSendNum = 0; - fwdFailed = false; - List fwdRecordList = new ArrayList<>(); for(FwdRecord fwdRecord:fwdRecordsList){ - // 查找device - QueryWrapper deviceQueryWrapper = new QueryWrapper<>(); - deviceQueryWrapper.eq("fwd_group_id", fwdGroupId); - deviceQueryWrapper.eq("deviceid", fwdRecord.getDeviceid()); - GnssDevice device = deviceMapper.selectOne(deviceQueryWrapper); - if(device == null) continue; - - // 查找位置记录 - QueryWrapper calcDataQueryWrapper = new QueryWrapper<>(); - calcDataQueryWrapper.eq("deviceid", fwdRecord.getDeviceid()); - calcDataQueryWrapper.ge("createtime", fwdRecord.getStarttime()); - calcDataQueryWrapper.le("createtime", fwdRecord.getEndtime()); - calcDataQueryWrapper.orderByAsc("createtime"); - calcDataQueryWrapper.eq("enabled",true); - calcDataQueryWrapper.isNotNull("rpose"); - List calcDataList = gnssDataMapper.selectList(calcDataQueryWrapper); - // 推送记录 - int sendNum = sendBatch(device, fwdRecord.getProject_id(), calcDataList); - if(sendNum > 0) { - // 记录推送结果 - fwdRecord.setState(FwdRecord.STATE_FWD_DONE); - totalSendNum += sendNum; - } - else{ - fwdRecord.setState(FwdRecord.STATE_FWD_FAILED); - fwdFailed = true; - } - fwdRecordList.add(fwdRecord); + forwardBatchGnssRecords(fwdRecord.getFwd_group_id(), fwdRecord.getDeviceid(), + fwdRecord.getStarttime(), fwdRecord.getEndtime()); + fwdRecord.setState(FwdRecord.STATE_FWD_DONE); + fwdRecordsMapper.updateById(fwdRecord); } - - // 更新推送信息 - ThreadManager.getFixedThreadPool().submit(() -> { - for(FwdRecord record:fwdRecordList){ - fwdRecordsMapper.updateById(record); - } - if(totalSendNum>0) updateFwd(totalSendNum, true); - else if(fwdFailed) updateFwd(totalSendNum, false); - }); } - int sendBatch(GnssDevice device, String projectId, List records){ - if(records.size() == 0) return 0; - - LocalDateTime lastTime = records.get(0).getCreatetime(); - - for(GnssCalcData calcData:records){ - if(calcData.getCreatetime().isAfter(lastTime.plusMinutes(28))){ - // 推送 - lastTime = calcData.getCreatetime(); - // 替换推送名和值 - if(useFwdId && device.getFwddeviceid()!=null && device.getFwddeviceid().trim().length()>0) { - calcData.setDeviceid(device.getFwddeviceid()); - } - if(device.getIpose()!=null && - device.getIposn()!=null && - device.getIposd()!=null){ - calcData.setRpose(calcData.getRpose()-device.getIpose()); - calcData.setRposn(calcData.getRposn()-device.getIposn()); - calcData.setRposd(calcData.getRposd()-device.getIposd()); - } - } - else{ - calcData.setEnabled(false);//借用来表示不推送,不会保存到数据库 - } - } - - return send(projectId, records); - } - - int send(String projectId, List records) { + int send(String projectId, List records, LocalDateTime sentTime) { return 0; } diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java index 2c70e625..80b42080 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java @@ -14,6 +14,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -59,7 +60,7 @@ public class GXXfzForwarder extends Forwarder{ } @Override - int send(String projectId, List records){ + int send(String projectId, List records, LocalDateTime sentTime){ int sendNum = 0; if(records.size() == 0) return 0; diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java index da889012..e0175679 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java @@ -14,6 +14,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import java.time.LocalDateTime; import java.util.List; @Component @@ -53,7 +54,7 @@ public class GZYForwarder extends Forwarder{ } @Override - int send(String projectId, List records){ + int send(String projectId, List records, LocalDateTime sentTime){ int sendNum = 0; if(records.size() == 0) return 0; diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java index bfcc3143..865d321d 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java @@ -16,6 +16,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import java.time.LocalDateTime; import java.util.List; @Component @@ -62,7 +63,7 @@ public class GZYMQTTForwarder extends Forwarder { } @Override - int send(String projectId, List records) { + int send(String projectId, List records, LocalDateTime sentTime) { int sendNum = 0; for (GnssCalcData locationRecord : records) { diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java index 6cab5736..3de716e0 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java @@ -82,7 +82,7 @@ public class KingMaForwarder extends Forwarder{ } @Override - int send(String projectId, List records){ + int send(String projectId, List records, LocalDateTime sentTime){ int sendNum = 0; // 检查token是否过期 diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java index de3f48ab..a6235229 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java @@ -51,10 +51,10 @@ public class ZNYForwarder extends Forwarder{ } @Override - int send(String projectId, List records){ + int send(String projectId, List records, LocalDateTime sentTime){ int sendNum = 0; // 单位:米 - DefoData defoData = new DefoData(projectId, LocalDateTime.now().format(dateFormatter), records.size()); + DefoData defoData = new DefoData(projectId, sentTime.format(dateFormatter), records.size()); for(GnssCalcData locationRecord:records) { double n = NumberUtils.scale(locationRecord.getRposn() * 0.001, 5); double e = NumberUtils.scale(locationRecord.getRpose() * 0.001, 5); @@ -66,12 +66,20 @@ public class ZNYForwarder extends Forwarder{ } String json = GsonUtil.toJson(defoData); logger.info("发送数据到武汉中南设计院平台:{}", json); - String result = HttpUtils.postJson(data_host,json); - logger.info("发送数据到武汉中南设计院平台返回结果:{}", result); - JSONObject obj = (JSONObject) JSONObject.parse(result); - String msg = obj.getString("msg"); - if(msg.contains("成功")) return sendNum; - else return 0; + //return sendNum; + + try { + String result = HttpUtils.postJson(data_host, json); + logger.info("发送数据到武汉中南设计院平台返回结果:{}", result); + JSONObject obj = (JSONObject) JSONObject.parse(result); + String msg = obj.getString("msg"); + if (msg.contains("成功")) return sendNum; + else return 0; + } + catch (Exception e){ + logger.error(e.toString()); + return 0; + } } }