1、增加推送到金马平台功能
This commit is contained in:
parent
624a3ce687
commit
c67b4b4e22
@ -119,11 +119,10 @@
|
|||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- 矩阵工具 -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.ejml</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
<artifactId>ejml-all</artifactId>
|
<artifactId>fastjson</artifactId>
|
||||||
<version>0.41</version>
|
<version>1.2.76</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,46 @@
|
|||||||
|
package com.imdroid.beidou_fwd.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Layton
|
||||||
|
* @date 2023/2/19 9:16
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class KingMaData {
|
||||||
|
String dataTime;
|
||||||
|
String deviceId;
|
||||||
|
Integer flag;
|
||||||
|
String projectId;
|
||||||
|
|
||||||
|
Phys phys;
|
||||||
|
|
||||||
|
@lombok.Data
|
||||||
|
public static class Data {
|
||||||
|
private String sign;
|
||||||
|
|
||||||
|
private String unit;
|
||||||
|
|
||||||
|
private Double value;
|
||||||
|
|
||||||
|
public Data(String sign, String unit, Double value) {
|
||||||
|
this.sign = sign;
|
||||||
|
this.unit = unit;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@lombok.Data
|
||||||
|
public static class Phys{
|
||||||
|
Data data1;
|
||||||
|
Data data2;
|
||||||
|
Data data3;
|
||||||
|
|
||||||
|
public Phys(Double e, Double n, Double d){
|
||||||
|
data1 = new Data("data1","mm",e);
|
||||||
|
data2 = new Data("data2","mm",n);
|
||||||
|
data3 = new Data("data3","mm",d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
package com.imdroid.beidou_fwd.service;
|
|
||||||
|
|
||||||
public class HTTPClient {
|
|
||||||
}
|
|
||||||
@ -1,19 +1,35 @@
|
|||||||
package com.imdroid.beidou_fwd.task;
|
package com.imdroid.beidou_fwd.task;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.imdroid.secapi.dto.GnssGroupFwd;
|
import com.imdroid.secapi.dto.*;
|
||||||
import com.imdroid.secapi.dto.GnssGroupFwdMapper;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class Forwarder {
|
public class Forwarder {
|
||||||
String name;
|
String name;
|
||||||
String description;
|
String description;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private GnssDeviceMapper deviceMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private GnssCalcDataMapper gnssDataMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FwdRecordMapper fwdRecordsMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
GnssGroupFwdMapper fwdMapper;
|
GnssGroupFwdMapper fwdMapper;
|
||||||
void init(String name, String desc, GnssGroupFwdMapper fwdMapper){
|
|
||||||
|
void init(String name, String desc){
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.description = desc;
|
this.description = desc;
|
||||||
this.fwdMapper = fwdMapper;
|
|
||||||
QueryWrapper<GnssGroupFwd> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<GnssGroupFwd> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("name",name);
|
queryWrapper.eq("name",name);
|
||||||
GnssGroupFwd gnssGroupFwd = fwdMapper.selectOne(queryWrapper);
|
GnssGroupFwd gnssGroupFwd = fwdMapper.selectOne(queryWrapper);
|
||||||
@ -30,6 +46,110 @@ public class Forwarder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void forwardCurrentGnss(String fwdGroupId) {
|
||||||
|
LocalDateTime nowTime = LocalDateTime.now();
|
||||||
|
ConcurrentHashMap<String, List<GnssCalcData>> projects = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
// 转发数据
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
String sendAfterTime = nowTime.minusMinutes(30).format(formatter);
|
||||||
|
|
||||||
|
QueryWrapper<GnssDevice> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("fwd_group_id", fwdGroupId);
|
||||||
|
List<GnssDevice> gnssDeviceList = deviceMapper.selectList(queryWrapper);
|
||||||
|
List<GnssCalcData> recordsToSend;
|
||||||
|
for(GnssDevice device:gnssDeviceList){
|
||||||
|
String projectId = device.getProject_id();
|
||||||
|
if(projectId == null) continue;
|
||||||
|
|
||||||
|
recordsToSend = projects.get(projectId);
|
||||||
|
if(recordsToSend == null){
|
||||||
|
recordsToSend = new ArrayList<>();
|
||||||
|
projects.put(projectId,recordsToSend);
|
||||||
|
}
|
||||||
|
QueryWrapper<GnssCalcData> gnssQueryWrapper = new QueryWrapper<>();
|
||||||
|
gnssQueryWrapper.eq("deviceid",device.getDeviceid());
|
||||||
|
gnssQueryWrapper.ge("createtime",sendAfterTime);
|
||||||
|
gnssQueryWrapper.orderByDesc("createtime");
|
||||||
|
List<GnssCalcData> records = gnssDataMapper.selectList(gnssQueryWrapper);
|
||||||
|
for(GnssCalcData record:records) {
|
||||||
|
if (record.getEnabled()) {
|
||||||
|
recordsToSend.add(record);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 按项目打包推送
|
||||||
|
int totalSendNum = 0;
|
||||||
|
for (Map.Entry<String, List<GnssCalcData>> entry: projects.entrySet()){
|
||||||
|
int sendNum = send(entry.getKey(), entry.getValue());
|
||||||
|
|
||||||
|
if(sendNum > 0) {
|
||||||
|
totalSendNum += sendNum;
|
||||||
|
// 记录推送
|
||||||
|
FwdRecord fwdRecord = new FwdRecord();
|
||||||
|
fwdRecord.setProject_id(entry.getKey());
|
||||||
|
fwdRecord.setTenantid(1);
|
||||||
|
fwdRecord.setDevicenum((short) entry.getValue().size());
|
||||||
|
fwdRecord.setStarttime(nowTime);
|
||||||
|
fwdRecord.setState(FwdRecord.STATE_FWD_DONE);
|
||||||
|
fwdRecord.setFwd_group_id(fwdGroupId);
|
||||||
|
fwdRecordsMapper.insert(fwdRecord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新推送信息
|
||||||
|
if(totalSendNum>0) updateFwd(totalSendNum, true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void forwardHistoryGnss(String fwdGroupId) {
|
||||||
|
// 1.从转发记录表里检索待补传记录时间表,含设备Id,时间段
|
||||||
|
QueryWrapper<FwdRecord> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("fwd_group_id",fwdGroupId);
|
||||||
|
queryWrapper.eq("state",FwdRecord.STATE_UPLOAD_DONE);
|
||||||
|
List<FwdRecord> fwdRecordsList = fwdRecordsMapper.selectList(queryWrapper);
|
||||||
|
// 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传
|
||||||
|
for(FwdRecord fwdRecord:fwdRecordsList){
|
||||||
|
QueryWrapper<GnssCalcData> calcDataQueryWrapper = new QueryWrapper<>();
|
||||||
|
calcDataQueryWrapper.eq("deviceid", fwdRecord.getDeviceid());
|
||||||
|
calcDataQueryWrapper.ge("createtime", fwdRecord.getStarttime());
|
||||||
|
calcDataQueryWrapper.le("createtime", fwdRecord.getEndtime());
|
||||||
|
calcDataQueryWrapper.orderByAsc("createtime");
|
||||||
|
List<GnssCalcData> calcDataList = gnssDataMapper.selectList(calcDataQueryWrapper);
|
||||||
|
// 推送记录
|
||||||
|
sendBatch(fwdRecord.getProject_id(),calcDataList);
|
||||||
|
// 记录推送结果
|
||||||
|
fwdRecord.setState(FwdRecord.STATE_FWD_DONE);
|
||||||
|
fwdRecordsMapper.updateById(fwdRecord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sendBatch(String projectId, List<GnssCalcData> records){
|
||||||
|
if(records.size() == 0) return;
|
||||||
|
|
||||||
|
LocalDateTime lastTime = records.get(0).getCreatetime();
|
||||||
|
|
||||||
|
for(GnssCalcData calcData:records){
|
||||||
|
if(calcData.getEnabled() &&
|
||||||
|
calcData.getCreatetime().isAfter(lastTime.plusMinutes(28))){
|
||||||
|
// 推送
|
||||||
|
lastTime = calcData.getCreatetime();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
calcData.setEnabled(false);//借用来表示不推送,不会保存到数据库
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
send(projectId, records);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int send(String projectId, List<GnssCalcData> records) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void updateFwd(int fwd_num, boolean isFwdOK){
|
void updateFwd(int fwd_num, boolean isFwdOK){
|
||||||
QueryWrapper<GnssGroupFwd> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<GnssGroupFwd> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("name",name);
|
queryWrapper.eq("name",name);
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
package com.imdroid.beidou_fwd.task;
|
package com.imdroid.beidou_fwd.task;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.imdroid.beidou_fwd.entity.XFZData;
|
import com.imdroid.beidou_fwd.entity.XFZData;
|
||||||
import com.imdroid.beidou_fwd.service.TCPClient;
|
import com.imdroid.beidou_fwd.service.TCPClient;
|
||||||
import com.imdroid.common.util.GsonUtil;
|
import com.imdroid.common.util.GsonUtil;
|
||||||
@ -16,12 +15,9 @@ import org.springframework.scheduling.annotation.Scheduled;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Configuration
|
@Configuration
|
||||||
@ -29,30 +25,20 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
public class GXXfzForwarder extends Forwarder{
|
public class GXXfzForwarder extends Forwarder{
|
||||||
private final Logger logger = LoggerFactory.getLogger(GXXfzForwarder.class);
|
private final Logger logger = LoggerFactory.getLogger(GXXfzForwarder.class);
|
||||||
|
|
||||||
static final String forwarderName = "广西新发展";
|
static final String FORWARDER_NAME = "广西新发展";
|
||||||
@Value("${xfz.server.host}")
|
@Value("${xfz.server.host}")
|
||||||
private String host;
|
private String host;
|
||||||
|
|
||||||
@Value("${xfz.server.port}")
|
@Value("${xfz.server.port}")
|
||||||
private int port;
|
private int port;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GnssDeviceMapper deviceMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GnssCalcDataMapper gnssDataMapper;
|
|
||||||
private TCPClient xfzTcpClient;
|
private TCPClient xfzTcpClient;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private FwdRecordMapper fwdRecordsMapper;
|
|
||||||
final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GnssGroupFwdMapper fwdMapper;
|
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
void registerMe(){
|
void registerMe(){
|
||||||
init(forwarderName, "TCP "+host+":"+port, fwdMapper);
|
init(FORWARDER_NAME, "TCP "+host+":"+port);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 每半小时转发GNSS解算结果
|
* 每半小时转发GNSS解算结果
|
||||||
@ -66,91 +52,22 @@ public class GXXfzForwarder extends Forwarder{
|
|||||||
xfzTcpClient.init(host, port);
|
xfzTcpClient.init(host, port);
|
||||||
xfzTcpClient.start();
|
xfzTcpClient.start();
|
||||||
}
|
}
|
||||||
forwardGnssToXFZ(forwarderName);
|
forwardCurrentGnss(FORWARDER_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次
|
@Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次
|
||||||
//@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次
|
//@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次
|
||||||
private void forwardHistoryGnss() {
|
private void forwardHistoryGnss() {
|
||||||
// 1.从转发记录表里检索待补传记录时间表,含设备Id,时间段
|
if(xfzTcpClient == null){
|
||||||
QueryWrapper<FwdRecord> queryWrapper = new QueryWrapper<>();
|
xfzTcpClient = new TCPClient();
|
||||||
queryWrapper.eq("fwd_group_id",forwarderName);
|
xfzTcpClient.init(host, port);
|
||||||
queryWrapper.eq("state",FwdRecord.STATE_UPLOAD_DONE);
|
xfzTcpClient.start();
|
||||||
List<FwdRecord> fwdRecordsList = fwdRecordsMapper.selectList(queryWrapper);
|
|
||||||
// 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传
|
|
||||||
for(FwdRecord fwdRecord:fwdRecordsList){
|
|
||||||
QueryWrapper<GnssCalcData> calcDataQueryWrapper = new QueryWrapper<>();
|
|
||||||
calcDataQueryWrapper.eq("deviceid", fwdRecord.getDeviceid());
|
|
||||||
calcDataQueryWrapper.ge("createtime", fwdRecord.getStarttime());
|
|
||||||
calcDataQueryWrapper.le("createtime", fwdRecord.getEndtime());
|
|
||||||
calcDataQueryWrapper.orderByAsc("createtime");
|
|
||||||
List<GnssCalcData> calcDataList = gnssDataMapper.selectList(calcDataQueryWrapper);
|
|
||||||
// 推送记录
|
|
||||||
BatchToXFZ(fwdRecord.getProject_id(),calcDataList);
|
|
||||||
// 记录推送结果
|
|
||||||
fwdRecord.setState(FwdRecord.STATE_FWD_DONE);
|
|
||||||
fwdRecordsMapper.updateById(fwdRecord);
|
|
||||||
}
|
}
|
||||||
|
forwardHistoryGnss(FORWARDER_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void forwardGnssToXFZ(String fwdGroupId) {
|
@Override
|
||||||
LocalDateTime nowTime = LocalDateTime.now();
|
int send(String projectId, List<GnssCalcData> records){
|
||||||
ConcurrentHashMap<String, List<GnssCalcData>> projects = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
// 转发新发展数据
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
||||||
String sendAfterTime = nowTime.minusMinutes(30).format(formatter);
|
|
||||||
|
|
||||||
QueryWrapper<GnssDevice> queryWrapper = new QueryWrapper<>();
|
|
||||||
queryWrapper.eq("fwd_group_id", fwdGroupId);
|
|
||||||
List<GnssDevice> gnssDeviceList = deviceMapper.selectList(queryWrapper);
|
|
||||||
List<GnssCalcData> recordsToSend;
|
|
||||||
for(GnssDevice device:gnssDeviceList){
|
|
||||||
String projectId = device.getProject_id();
|
|
||||||
if(projectId == null) continue;
|
|
||||||
|
|
||||||
recordsToSend = projects.get(projectId);
|
|
||||||
if(recordsToSend == null){
|
|
||||||
recordsToSend = new ArrayList<>();
|
|
||||||
projects.put(projectId,recordsToSend);
|
|
||||||
}
|
|
||||||
QueryWrapper<GnssCalcData> gnssQueryWrapper = new QueryWrapper<>();
|
|
||||||
gnssQueryWrapper.eq("deviceid",device.getDeviceid());
|
|
||||||
gnssQueryWrapper.ge("createtime",sendAfterTime);
|
|
||||||
gnssQueryWrapper.orderByDesc("createtime");
|
|
||||||
List<GnssCalcData> records = gnssDataMapper.selectList(gnssQueryWrapper);
|
|
||||||
for(GnssCalcData record:records) {
|
|
||||||
if (record.getEnabled()) {
|
|
||||||
recordsToSend.add(record);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 按项目打包推送
|
|
||||||
int totalSendNum = 0;
|
|
||||||
for (Map.Entry<String, List<GnssCalcData>> entry: projects.entrySet()){
|
|
||||||
int sendNum = SendToXFZ(entry.getKey(), entry.getValue());
|
|
||||||
|
|
||||||
if(sendNum > 0) {
|
|
||||||
totalSendNum += sendNum;
|
|
||||||
// 记录推送
|
|
||||||
FwdRecord fwdRecord = new FwdRecord();
|
|
||||||
fwdRecord.setProject_id(entry.getKey());
|
|
||||||
fwdRecord.setTenantid(1);
|
|
||||||
fwdRecord.setDevicenum((short) entry.getValue().size());
|
|
||||||
fwdRecord.setStarttime(nowTime);
|
|
||||||
fwdRecord.setState(FwdRecord.STATE_FWD_DONE);
|
|
||||||
fwdRecordsMapper.insert(fwdRecord);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新推送信息
|
|
||||||
if(totalSendNum>0) updateFwd(totalSendNum, true);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int SendToXFZ(String projectId, List<GnssCalcData> records){
|
|
||||||
int sendNum = 0;
|
int sendNum = 0;
|
||||||
if(records.size() == 0) return 0;
|
if(records.size() == 0) return 0;
|
||||||
|
|
||||||
@ -181,24 +98,4 @@ public class GXXfzForwarder extends Forwarder{
|
|||||||
return sendNum;
|
return sendNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BatchToXFZ(String projectId, List<GnssCalcData> records){
|
|
||||||
if(records.size() == 0) return;
|
|
||||||
|
|
||||||
LocalDateTime lastTime = records.get(0).getCreatetime();
|
|
||||||
|
|
||||||
for(GnssCalcData calcData:records){
|
|
||||||
if(calcData.getEnabled() &&
|
|
||||||
calcData.getCreatetime().isAfter(lastTime.plusMinutes(28))){
|
|
||||||
// 推送
|
|
||||||
lastTime = calcData.getCreatetime();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
calcData.setEnabled(false);//借用来表示不推送,不会保存到数据库
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SendToXFZ(projectId, records);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,122 @@
|
|||||||
|
package com.imdroid.beidou_fwd.task;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.imdroid.beidou_fwd.entity.KingMaData;
|
||||||
|
import com.imdroid.common.util.GsonUtil;
|
||||||
|
import com.imdroid.common.util.HttpUtils;
|
||||||
|
import com.imdroid.secapi.dto.*;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Configuration
|
||||||
|
@EnableScheduling
|
||||||
|
public class KingMaForwarder extends Forwarder{
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(KingMaForwarder.class);
|
||||||
|
|
||||||
|
static final String FORWARDER_NAME = "KingMa";
|
||||||
|
@Value("${kingma.server.login_user}")
|
||||||
|
private String login_user;
|
||||||
|
|
||||||
|
@Value("${kingma.server.login_pwd}")
|
||||||
|
private String login_pwd;
|
||||||
|
|
||||||
|
@Value("${kingma.server.login_host}")
|
||||||
|
private String login_host;
|
||||||
|
|
||||||
|
@Value("${kingma.server.data_host}")
|
||||||
|
private String data_host;
|
||||||
|
Map<String, String> header;
|
||||||
|
LocalDateTime lastTokenTime = LocalDateTime.now();
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
void registerMe(){
|
||||||
|
init(FORWARDER_NAME, data_host);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 每半小时转发GNSS解算结果
|
||||||
|
*/
|
||||||
|
@Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次
|
||||||
|
private void forwardGnss() {
|
||||||
|
forwardCurrentGnss(FORWARDER_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次
|
||||||
|
//@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次
|
||||||
|
private void forwardHistoryGnss() {
|
||||||
|
forwardHistoryGnss(FORWARDER_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean updateToken(){
|
||||||
|
String jsonLogin = "{\"username\":\""+login_user+"\"," +
|
||||||
|
"\"password\":\""+login_pwd+"\"}";
|
||||||
|
String result = HttpUtils.postJson(login_host, jsonLogin);
|
||||||
|
if(result == null) return false;
|
||||||
|
|
||||||
|
String token = null;
|
||||||
|
try {
|
||||||
|
JSONObject obj = (JSONObject) JSONObject.parse(result);
|
||||||
|
obj = obj.getJSONObject("data");
|
||||||
|
token = obj.getString("token");
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
|
||||||
|
}
|
||||||
|
if(token == null) return false;
|
||||||
|
|
||||||
|
if(header == null){
|
||||||
|
header = new HashMap<>();
|
||||||
|
}
|
||||||
|
header.put("Authorization", token);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
int send(String projectId, List<GnssCalcData> records){
|
||||||
|
int sendNum = 0;
|
||||||
|
if(records.size() == 0) return 0;
|
||||||
|
|
||||||
|
// 检查token是否过期
|
||||||
|
LocalDateTime nowTime = LocalDateTime.now();
|
||||||
|
if(header == null || nowTime.isAfter(lastTokenTime.plusMinutes(59))){
|
||||||
|
if(!updateToken()){
|
||||||
|
logger.info("update token failed!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
lastTokenTime = nowTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<KingMaData> dataList = new ArrayList<>(records.size());
|
||||||
|
|
||||||
|
for(GnssCalcData locationRecord: records) {
|
||||||
|
if(!locationRecord.getEnabled()) continue;
|
||||||
|
KingMaData data = new KingMaData();
|
||||||
|
data.setDataTime(locationRecord.getCreatetime().toString());
|
||||||
|
data.setProjectId(projectId);
|
||||||
|
data.setDeviceId(locationRecord.getDeviceid());
|
||||||
|
data.setFlag(1);
|
||||||
|
data.setPhys(new KingMaData.Phys(locationRecord.getRb562e(),locationRecord.getRb562n(),locationRecord.getRb562d()));
|
||||||
|
dataList.add(data);
|
||||||
|
sendNum++;
|
||||||
|
}
|
||||||
|
String json = GsonUtil.toJson(dataList);
|
||||||
|
String result = HttpUtils.postJson(data_host,header,json);
|
||||||
|
logger.info("project " + projectId + ": push calculation result to Kingma");
|
||||||
|
logger.info(json);
|
||||||
|
logger.info("result: "+result);
|
||||||
|
return sendNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -24,4 +24,9 @@ mybatis-plus.configuration.map-underscore-to-camel-case=false
|
|||||||
#xfz.server.host = 171.106.48.63
|
#xfz.server.host = 171.106.48.63
|
||||||
#xfz.server.port = 52000
|
#xfz.server.port = 52000
|
||||||
xfz.server.host = 115.236.153.174
|
xfz.server.host = 115.236.153.174
|
||||||
xfz.server.port = 31035
|
xfz.server.port = 31035
|
||||||
|
|
||||||
|
kingma.server.login_user = ceshi
|
||||||
|
kingma.server.login_pwd = ceshi!123
|
||||||
|
kingma.server.login_host = https://www.everiaction.com/IOT-ADAPTER-CUSTOM/auth/anon/login
|
||||||
|
kingma.server.data_host = https://www.everiaction.com/IOT-DATA-GATHER/receive/data/formula
|
||||||
@ -36,9 +36,9 @@
|
|||||||
url: '/fwd/records',
|
url: '/fwd/records',
|
||||||
toolbar: '#toolbarTable',
|
toolbar: '#toolbarTable',
|
||||||
cols: [[
|
cols: [[
|
||||||
{field: 'deviceid', title: '设备号', sort: true},
|
{field: 'project_id', title: '项目号', sort: true},
|
||||||
{field: 'project_id', title: '项目号'},
|
|
||||||
{field: 'devicenum', title: '推送设备数'},
|
{field: 'devicenum', title: '推送设备数'},
|
||||||
|
{field: 'deviceid', title: '设备号'},
|
||||||
{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: '推送组'},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user