优化推送历史数据
This commit is contained in:
parent
877c107625
commit
440d8aebb2
@ -61,34 +61,46 @@ public class Forwarder {
|
||||
}
|
||||
}
|
||||
|
||||
void forwardCurrentGnss(String fwdGroupId) {
|
||||
LocalDateTime nowTime = LocalDateTime.now();
|
||||
ConcurrentHashMap<String, List<GnssCalcData>> 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<GnssDevice> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("fwd_group_id", fwdGroupId)
|
||||
.or()
|
||||
.eq("fwd_group_id2", fwdGroupId);
|
||||
if(deviceId != null){
|
||||
queryWrapper.eq("deviceid", deviceId);
|
||||
}
|
||||
List<GnssDevice> gnssDeviceList = deviceMapper.selectList(queryWrapper);
|
||||
List<GnssCalcData> recordsToSend;
|
||||
|
||||
// 查询最近半小时的记录
|
||||
// 查询最近半小时的GNSS记录
|
||||
QueryWrapper<GnssCalcData> 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<GnssCalcData> locationRecords = gnssDataMapper.selectList(gnssQueryWrapper);
|
||||
|
||||
// 构造按项目id分类的GNSS记录
|
||||
ConcurrentHashMap<String, List<GnssCalcData>> 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<GnssCalcData> recordsToSend = projects.get(projectId);
|
||||
if(recordsToSend == null){
|
||||
recordsToSend = new ArrayList<>();
|
||||
projects.put(projectId,recordsToSend);
|
||||
@ -121,14 +133,14 @@ public class Forwarder {
|
||||
List<GnssCalcData> 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<FwdRecord> fwdRecordsList = fwdRecordsMapper.selectList(queryWrapper);
|
||||
// 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传
|
||||
totalSendNum = 0;
|
||||
fwdFailed = false;
|
||||
List<FwdRecord> fwdRecordList = new ArrayList<>();
|
||||
for(FwdRecord fwdRecord:fwdRecordsList){
|
||||
// 查找device
|
||||
QueryWrapper<GnssDevice> deviceQueryWrapper = new QueryWrapper<>();
|
||||
deviceQueryWrapper.eq("fwd_group_id", fwdGroupId);
|
||||
deviceQueryWrapper.eq("deviceid", fwdRecord.getDeviceid());
|
||||
GnssDevice device = deviceMapper.selectOne(deviceQueryWrapper);
|
||||
if(device == null) continue;
|
||||
|
||||
// 查找位置记录
|
||||
QueryWrapper<GnssCalcData> 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<GnssCalcData> calcDataList = gnssDataMapper.selectList(calcDataQueryWrapper);
|
||||
// 推送记录
|
||||
int sendNum = sendBatch(device, fwdRecord.getProject_id(), calcDataList);
|
||||
if(sendNum > 0) {
|
||||
// 记录推送结果
|
||||
forwardBatchGnssRecords(fwdRecord.getFwd_group_id(), fwdRecord.getDeviceid(),
|
||||
fwdRecord.getStarttime(), fwdRecord.getEndtime());
|
||||
fwdRecord.setState(FwdRecord.STATE_FWD_DONE);
|
||||
totalSendNum += sendNum;
|
||||
}
|
||||
else{
|
||||
fwdRecord.setState(FwdRecord.STATE_FWD_FAILED);
|
||||
fwdFailed = true;
|
||||
}
|
||||
fwdRecordList.add(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<GnssCalcData> 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);//借用来表示不推送,不会保存到数据库
|
||||
fwdRecordsMapper.updateById(fwdRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return send(projectId, records);
|
||||
}
|
||||
|
||||
int send(String projectId, List<GnssCalcData> records) {
|
||||
int send(String projectId, List<GnssCalcData> records, LocalDateTime sentTime) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -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<GnssCalcData> records){
|
||||
int send(String projectId, List<GnssCalcData> records, LocalDateTime sentTime){
|
||||
int sendNum = 0;
|
||||
if(records.size() == 0) return 0;
|
||||
|
||||
|
||||
@ -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<GnssCalcData> records){
|
||||
int send(String projectId, List<GnssCalcData> records, LocalDateTime sentTime){
|
||||
int sendNum = 0;
|
||||
if(records.size() == 0) return 0;
|
||||
|
||||
|
||||
@ -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<GnssCalcData> records) {
|
||||
int send(String projectId, List<GnssCalcData> records, LocalDateTime sentTime) {
|
||||
int sendNum = 0;
|
||||
|
||||
for (GnssCalcData locationRecord : records) {
|
||||
|
||||
@ -82,7 +82,7 @@ public class KingMaForwarder extends Forwarder{
|
||||
}
|
||||
|
||||
@Override
|
||||
int send(String projectId, List<GnssCalcData> records){
|
||||
int send(String projectId, List<GnssCalcData> records, LocalDateTime sentTime){
|
||||
int sendNum = 0;
|
||||
|
||||
// 检查token是否过期
|
||||
|
||||
@ -51,10 +51,10 @@ public class ZNYForwarder extends Forwarder{
|
||||
}
|
||||
|
||||
@Override
|
||||
int send(String projectId, List<GnssCalcData> records){
|
||||
int send(String projectId, List<GnssCalcData> 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);
|
||||
//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;
|
||||
if (msg.contains("成功")) return sendNum;
|
||||
else return 0;
|
||||
}
|
||||
catch (Exception e){
|
||||
logger.error(e.toString());
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user