1、优化推送重发记录
This commit is contained in:
parent
bfcfdb8249
commit
7e58f92ae3
@ -15,6 +15,9 @@ import java.time.LocalDateTime;
|
|||||||
@Data
|
@Data
|
||||||
@TableName(value = "resendrecords")
|
@TableName(value = "resendrecords")
|
||||||
public class ResendRecord {
|
public class ResendRecord {
|
||||||
|
static public final short STATE_FWD_OK = 0;
|
||||||
|
static public final short STATE_FWD_FAILED = 1;
|
||||||
|
static public final short STATE_BREAK_POINT = 2;
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@TableId(value = "id", type = IdType.AUTO)
|
||||||
Long id;
|
Long id;
|
||||||
Integer tenantid;
|
Integer tenantid;
|
||||||
@ -24,5 +27,6 @@ public class ResendRecord {
|
|||||||
LocalDateTime starttime;
|
LocalDateTime starttime;
|
||||||
LocalDateTime endtime;
|
LocalDateTime endtime;
|
||||||
String fwd_group_id;
|
String fwd_group_id;
|
||||||
|
Short state;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,18 +79,18 @@ public class Forwarder {
|
|||||||
* @param sendTime:要推送的记录的时间
|
* @param sendTime:要推送的记录的时间
|
||||||
* @param deviceId:设备ID,如果没有指定,则推送全部
|
* @param deviceId:设备ID,如果没有指定,则推送全部
|
||||||
*/
|
*/
|
||||||
boolean forwardGnssRecords(LocalDateTime sendTime, String deviceId) {
|
private boolean forwardGnssRecords(LocalDateTime sendTime, String deviceId, ResendRecord resendRecord) {
|
||||||
String endTime = sendTime.format(formatter);
|
String endTime = sendTime.format(formatter);
|
||||||
String beginTime = sendTime.minusMinutes(fwdCycleMinutes).format(formatter);
|
String beginTime = sendTime.minusMinutes(fwdCycleMinutes).format(formatter);
|
||||||
|
|
||||||
// 查找属于指定推送组的设备列表
|
// 查找属于指定推送组的设备列表
|
||||||
QueryWrapper<GnssDevice> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<GnssDevice> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("fwd_group_id", fwdGroupId)
|
|
||||||
.or()
|
|
||||||
.eq("fwd_group_id2", fwdGroupId);
|
|
||||||
if(deviceId != null){
|
if(deviceId != null){
|
||||||
queryWrapper.eq("deviceid", deviceId);
|
queryWrapper.eq("deviceid", deviceId);
|
||||||
}
|
}
|
||||||
|
queryWrapper.eq("fwd_group_id", fwdGroupId)
|
||||||
|
.or()
|
||||||
|
.eq("fwd_group_id2", fwdGroupId);
|
||||||
List<GnssDevice> gnssDeviceList = deviceMapper.selectList(queryWrapper);
|
List<GnssDevice> gnssDeviceList = deviceMapper.selectList(queryWrapper);
|
||||||
|
|
||||||
// 查询最近半小时的GNSS记录
|
// 查询最近半小时的GNSS记录
|
||||||
@ -104,6 +104,7 @@ public class Forwarder {
|
|||||||
gnssQueryWrapper.eq("deviceid", deviceId);
|
gnssQueryWrapper.eq("deviceid", deviceId);
|
||||||
}
|
}
|
||||||
List<GnssCalcData> locationRecords = gnssDataMapper.selectList(gnssQueryWrapper);
|
List<GnssCalcData> locationRecords = gnssDataMapper.selectList(gnssQueryWrapper);
|
||||||
|
if(locationRecords.size() == 0) return false;
|
||||||
|
|
||||||
// 构造按项目id分类的GNSS记录
|
// 构造按项目id分类的GNSS记录
|
||||||
ConcurrentHashMap<String, List<GnssCalcData>> projects = new ConcurrentHashMap<>();
|
ConcurrentHashMap<String, List<GnssCalcData>> projects = new ConcurrentHashMap<>();
|
||||||
@ -164,19 +165,30 @@ public class Forwarder {
|
|||||||
if(sendNum > 0) {
|
if(sendNum > 0) {
|
||||||
totalSendNum += sendNum;
|
totalSendNum += sendNum;
|
||||||
fwdRecord.setResult(FwdRecord.RESULT_OK);
|
fwdRecord.setResult(FwdRecord.RESULT_OK);
|
||||||
|
if(resendRecord != null){
|
||||||
|
resendRecord.setState(ResendRecord.STATE_FWD_OK);
|
||||||
|
resendRecordMapper.updateById(resendRecord);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
fwdResult = false;
|
fwdResult = false;
|
||||||
fwdRecord.setResult(FwdRecord.RESULT_FAILED);
|
fwdRecord.setResult(FwdRecord.RESULT_FAILED);
|
||||||
// 新增重发记录
|
// 新增重发记录
|
||||||
ResendRecord resendRecord = new ResendRecord();
|
if(resendRecord == null) {
|
||||||
resendRecord.setProjectid(projectId);
|
resendRecord = new ResendRecord();
|
||||||
resendRecord.setTenantid(tenantId);
|
resendRecord.setProjectid(projectId);
|
||||||
resendRecord.setCreatetime(LocalDateTime.now());
|
resendRecord.setTenantid(tenantId);
|
||||||
resendRecord.setStarttime(sendTime);
|
resendRecord.setCreatetime(LocalDateTime.now());
|
||||||
resendRecord.setEndtime(sendTime.plusMinutes(10));
|
resendRecord.setStarttime(sendTime);
|
||||||
resendRecord.setFwd_group_id(fwdGroupId);
|
resendRecord.setEndtime(sendTime);
|
||||||
resendRecordMapper.insert(resendRecord);
|
resendRecord.setFwd_group_id(fwdGroupId);
|
||||||
|
resendRecord.setState(ResendRecord.STATE_FWD_FAILED);
|
||||||
|
resendRecordMapper.insert(resendRecord);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
resendRecord.setState(ResendRecord.STATE_FWD_FAILED);
|
||||||
|
resendRecordMapper.updateById(resendRecord);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fwdRecordsMapper.insert(fwdRecord);
|
fwdRecordsMapper.insert(fwdRecord);
|
||||||
}
|
}
|
||||||
@ -189,11 +201,11 @@ public class Forwarder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void forwardCurrentGnss() {
|
void forwardCurrentGnss() {
|
||||||
if(forwardGnssRecords(LocalDateTime.now(),null)) {
|
if(forwardGnssRecords(LocalDateTime.now(),null,null)) {
|
||||||
// 推送失败记录、补发记录
|
// 推送失败记录、补发记录
|
||||||
ThreadManager.getScheduledThreadPool().schedule(() -> {
|
ThreadManager.getScheduledThreadPool().schedule(() -> {
|
||||||
forwardHistoryGnss();
|
this.forwardHistoryGnss();
|
||||||
},300, TimeUnit.SECONDS);
|
},100, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,28 +213,19 @@ public class Forwarder {
|
|||||||
// 1.从转发记录表里检索待补传记录时间表,含设备Id,时间段
|
// 1.从转发记录表里检索待补传记录时间表,含设备Id,时间段
|
||||||
QueryWrapper<ResendRecord> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<ResendRecord> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("fwd_group_id",fwdGroupId);
|
queryWrapper.eq("fwd_group_id",fwdGroupId);
|
||||||
|
queryWrapper.ne("state",ResendRecord.STATE_FWD_OK);
|
||||||
List<ResendRecord> resendRecordsList = resendRecordMapper.selectList(queryWrapper);
|
List<ResendRecord> resendRecordsList = resendRecordMapper.selectList(queryWrapper);
|
||||||
// 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传
|
// 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传
|
||||||
List<Long> ids = new ArrayList<>();
|
|
||||||
for(ResendRecord record:resendRecordsList){
|
for(ResendRecord record:resendRecordsList){
|
||||||
ids.add(record.getId());
|
forwardBatchGnssRecords(record);
|
||||||
forwardBatchGnssRecords(
|
|
||||||
record.getStarttime(), record.getEndtime(), record.getDeviceid());
|
|
||||||
}
|
}
|
||||||
resendRecordMapper.deleteBatchIds(ids);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void forwardBatchGnssRecords(LocalDateTime beginTime, LocalDateTime endTime, String deviceId) {
|
void forwardBatchGnssRecords(ResendRecord record) {
|
||||||
LocalDateTime sendTime = beginTime;
|
LocalDateTime sendTime = record.getStarttime();
|
||||||
while(sendTime.isBefore(endTime)){
|
while(sendTime.isBefore(record.getEndtime()) || sendTime.isEqual(record.getEndtime())){
|
||||||
forwardGnssRecords(sendTime,deviceId);
|
forwardGnssRecords(sendTime,record.getDeviceid(),record);
|
||||||
sendTime = sendTime.plusMinutes(fwdCycleMinutes);
|
sendTime = sendTime.plusMinutes(fwdCycleMinutes);
|
||||||
try {
|
|
||||||
Thread.sleep(500);
|
|
||||||
}
|
|
||||||
catch (Exception e){
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -101,6 +101,7 @@ public class MultiLineGNSSCalcService {
|
|||||||
ResendRecord fwdRecord = fwdRecordMap.get(deviceId);
|
ResendRecord fwdRecord = fwdRecordMap.get(deviceId);
|
||||||
if(fwdRecord != null){
|
if(fwdRecord != null){
|
||||||
fwdRecord.setEndtime(lastDate);
|
fwdRecord.setEndtime(lastDate);
|
||||||
|
fwdRecord.setState(ResendRecord.STATE_BREAK_POINT);
|
||||||
resendRecordMapper.insert(fwdRecord);
|
resendRecordMapper.insert(fwdRecord);
|
||||||
fwdRecordMap.remove(deviceId);
|
fwdRecordMap.remove(deviceId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -266,6 +266,7 @@ CREATE TABLE IF NOT EXISTS `resendrecords` (
|
|||||||
`starttime` datetime DEFAULT NULL,
|
`starttime` datetime DEFAULT NULL,
|
||||||
`endtime` datetime DEFAULT NULL,
|
`endtime` datetime DEFAULT NULL,
|
||||||
`fwd_group_id` varchar(64) DEFAULT NULL,
|
`fwd_group_id` varchar(64) DEFAULT NULL,
|
||||||
|
`state` smallint DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
/***
|
/***
|
||||||
|
|||||||
@ -91,9 +91,10 @@
|
|||||||
{field: 'project_id', title: '项目号', sort: true},
|
{field: 'project_id', title: '项目号', sort: true},
|
||||||
{field: 'deviceid', title: '设备号'},
|
{field: 'deviceid', title: '设备号'},
|
||||||
{field: 'createtime', title: '推送时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
{field: 'createtime', title: '推送时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||||
{field: 'starttime', title: '开始时间', templet: "<div>{{layui.util.toDateString(d.starttime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
{field: 'starttime', title: '数据开始时间', templet: "<div>{{layui.util.toDateString(d.starttime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||||
{field: 'endtime', title: '结束时间', templet: "<div>{{layui.util.toDateString(d.endtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
{field: 'endtime', title: '数据结束时间', templet: "<div>{{layui.util.toDateString(d.endtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||||
{field: 'fwd_group_id', title: '推送组'}
|
{field: 'fwd_group_id', title: '推送组'},
|
||||||
|
{field: 'state', title: '状态',templet: '#stateTrans'}
|
||||||
]],
|
]],
|
||||||
limit: 10,
|
limit: 10,
|
||||||
page: true,
|
page: true,
|
||||||
@ -121,5 +122,15 @@
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script type="text/html" id="stateTrans">
|
||||||
|
{{# if(d.state == 0){ }}
|
||||||
|
<span class="layui-badge layui-bg-green">推送成功</span>
|
||||||
|
{{# } else if(d.state == 1){ }}
|
||||||
|
<span class="layui-badge layui-bg-red">推送失败</span>
|
||||||
|
{{# } else { }}
|
||||||
|
<span class="layui-badge layui-bg-orange">断点补传</span>
|
||||||
|
{{# } }}
|
||||||
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Loading…
x
Reference in New Issue
Block a user