1、优化推送逻辑

This commit is contained in:
weidong 2025-06-28 14:00:17 +08:00
parent eed05660ab
commit d62777bc91

View File

@ -62,7 +62,7 @@ public class Forwarder {
* @param fwdNameType推送设备名deviceid或fwdid或projectid-sector-name * @param fwdNameType推送设备名deviceid或fwdid或projectid-sector-name
* @param cycle发送周期 * @param cycle发送周期
*/ */
void init(String fwdGroupId, String desc, Integer tenantId, byte fwdNameType, int cycle){ public void init(String fwdGroupId, String desc, Integer tenantId, byte fwdNameType, int cycle){
this.fwdGroupId = fwdGroupId; this.fwdGroupId = fwdGroupId;
this.description = desc; this.description = desc;
this.tenantId = tenantId; this.tenantId = tenantId;
@ -90,10 +90,18 @@ public class Forwarder {
} }
} }
public void forwardCurrentGnss() {
if(forwardGnssRecords(LocalDateTime.now(), null)){
// 推送失败记录补发记录
ThreadManager.getScheduledThreadPool().schedule(() -> {
this.forwardHistoryGnss();
},100, TimeUnit.SECONDS);
}
}
/*** /***
* 推送指定企业设备ID时间的GNSS记录查找指定时间前cycle分钟的有效数据推送 * 推送指定企业设备ID时间的GNSS记录查找指定时间前cycle分钟的有效数据推送
* @param sendTime要推送的记录的时间 * @param sendTime要推送的记录的时间
* @param resendRecord重发记录
*/ */
private boolean forwardGnssRecords(LocalDateTime sendTime, ResendRecord resendRecord) { private boolean forwardGnssRecords(LocalDateTime sendTime, ResendRecord resendRecord) {
@ -101,24 +109,45 @@ public class Forwarder {
String beginTime = sendTime.minusMinutes(fwdCycleMinutes).format(formatter); String beginTime = sendTime.minusMinutes(fwdCycleMinutes).format(formatter);
// 查找属于指定推送组的设备列表 // 查找属于指定推送组的设备列表
/* QueryWrapper<GnssDevice> queryWrapper = new QueryWrapper<>(); List<GnssDeviceJoin> gnssDeviceList;
if(deviceId != null){ MPJQueryWrapper jquery = null;
queryWrapper.eq("deviceid", deviceId);
if(resendRecord!=null && resendRecord.getDeviceid()!=null){
jquery = new MPJQueryWrapper<GnssDevice> ()
.selectAll(GnssDevice.class)
.select("d.latitude as latitude")
.select("d.longitude as longitude")
.leftJoin("gnssstatus d on t.deviceid = d.deviceid")
.and(warpper->warpper.eq("fwd_group_id", fwdGroupId)
.or()
.eq("fwd_group_id2", fwdGroupId)).
eq("deviceid", resendRecord.getDeviceid());
} }
queryWrapper.eq("fwd_group_id", fwdGroupId) else if(resendRecord!=null && resendRecord.getProjectid()!=null){
.or() jquery = new MPJQueryWrapper<GnssDevice> ()
.eq("fwd_group_id2", fwdGroupId); .selectAll(GnssDevice.class)
List<GnssDevice> gnssDeviceList = deviceMapper.selectList(queryWrapper); .select("d.latitude as latitude")
*/ .select("d.longitude as longitude")
MPJQueryWrapper jquery = new MPJQueryWrapper<GnssDevice> () .leftJoin("gnssstatus d on t.deviceid = d.deviceid")
.selectAll(GnssDevice.class) .and(warpper->warpper.eq("fwd_group_id", fwdGroupId)
.select("d.latitude as latitude") .or()
.select("d.longitude as longitude") .eq("fwd_group_id2", fwdGroupId))
.leftJoin("gnssstatus d on t.deviceid = d.deviceid") .and(warpper->warpper.eq("project_id",resendRecord.getProjectid())
.eq("fwd_group_id", fwdGroupId) .or()
.or() .eq("project2_id",resendRecord.getProjectid()));
.eq("fwd_group_id2", fwdGroupId); }
List<GnssDeviceJoin> gnssDeviceList = deviceMapper.selectJoinList(GnssDeviceJoin.class, jquery); else{
jquery = new MPJQueryWrapper<GnssDevice> ()
.selectAll(GnssDevice.class)
.select("d.latitude as latitude")
.select("d.longitude as longitude")
.leftJoin("gnssstatus d on t.deviceid = d.deviceid")
.and(warpper->warpper.eq("fwd_group_id", fwdGroupId)
.or()
.eq("fwd_group_id2", fwdGroupId));
}
gnssDeviceList = deviceMapper.selectJoinList(GnssDeviceJoin.class, jquery);
logger.debug("candidate fwd devices {}", gnssDeviceList.size());
// 查询最近半小时的GNSS记录 // 查询最近半小时的GNSS记录
QueryWrapper<GnssCalcData> gnssQueryWrapper = new QueryWrapper<>(); QueryWrapper<GnssCalcData> gnssQueryWrapper = new QueryWrapper<>();
@ -131,7 +160,9 @@ public class Forwarder {
if(resendRecord != null && resendRecord.getDeviceid()!=null){ if(resendRecord != null && resendRecord.getDeviceid()!=null){
gnssQueryWrapper.eq("deviceid", resendRecord.getDeviceid()); gnssQueryWrapper.eq("deviceid", resendRecord.getDeviceid());
} }
List<GnssCalcData> locationRecords = gnssDataMapper.selectList(gnssQueryWrapper); List<GnssCalcData> locationRecords = gnssDataMapper.selectList(gnssQueryWrapper);
logger.debug("candidate fwd records {}", locationRecords.size());
if(locationRecords.size() == 0) return false; if(locationRecords.size() == 0) return false;
// 构造按项目id分类的GNSS记录 // 构造按项目id分类的GNSS记录
@ -216,15 +247,15 @@ public class Forwarder {
fwdResult = false; fwdResult = false;
fwdRecord.setResult(FwdRecord.RESULT_FAILED); fwdRecord.setResult(FwdRecord.RESULT_FAILED);
// 新增重发记录 // 新增重发记录
resendRecord = new ResendRecord(); ResendRecord resendRecord1 = new ResendRecord();
resendRecord.setProjectid(projectId); resendRecord1.setProjectid(projectId);
resendRecord.setTenantid(tenantId); resendRecord1.setTenantid(tenantId);
resendRecord.setCreatetime(LocalDateTime.now()); resendRecord1.setCreatetime(LocalDateTime.now());
resendRecord.setStarttime(sendTime); resendRecord1.setStarttime(sendTime);
resendRecord.setEndtime(sendTime); resendRecord1.setEndtime(sendTime);
resendRecord.setFwd_group_id(fwdGroupId); resendRecord1.setFwd_group_id(fwdGroupId);
resendRecord.setState(ResendRecord.STATE_FWD_FAILED); resendRecord1.setState(ResendRecord.STATE_FWD_FAILED);
resendRecordMapper.insert(resendRecord); resendRecordMapper.insert(resendRecord1);
} }
fwdRecordsMapper.insert(fwdRecord); fwdRecordsMapper.insert(fwdRecord);
} }
@ -239,14 +270,6 @@ public class Forwarder {
return fwdResult; return fwdResult;
} }
void forwardCurrentGnss() {
if(forwardGnssRecords(LocalDateTime.now(),null)) {
// 推送失败记录补发记录
ThreadManager.getScheduledThreadPool().schedule(() -> {
this.forwardHistoryGnss();
},100, TimeUnit.SECONDS);
}
}
void forwardHistoryGnss() { void forwardHistoryGnss() {
// 1.从转发记录表里检索待补传记录时间表含设备Id时间段 // 1.从转发记录表里检索待补传记录时间表含设备Id时间段
@ -257,7 +280,7 @@ public class Forwarder {
queryWrapper.ge("createtime", LocalDateTime.now().minusDays(30)); queryWrapper.ge("createtime", LocalDateTime.now().minusDays(30));
List<ResendRecord> resendRecordsList = resendRecordMapper.selectList(queryWrapper); List<ResendRecord> resendRecordsList = resendRecordMapper.selectList(queryWrapper);
if(resendRecordsList!=null){ if(resendRecordsList!=null && resendRecordsList.size()>0){
//修改状态 //修改状态
UpdateWrapper<ResendRecord> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<ResendRecord> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("fwd_group_id",fwdGroupId); updateWrapper.eq("fwd_group_id",fwdGroupId);