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