From 3fd43578e89ec25a68430b63b4c0c9ee53e042ac Mon Sep 17 00:00:00 2001 From: weidong Date: Mon, 5 Feb 2024 14:03:41 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E8=BD=AC=E5=8F=91?= =?UTF-8?q?=E5=88=B0=E6=B5=8B=E8=AF=95=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdroid/beidou_fwd/service/TCPClient.java | 14 ++- .../beidou_fwd/task/SaasForwarder.java | 92 +++++++++++++++++++ 2 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/SaasForwarder.java diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java index 1d3ec83e..12288963 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java @@ -18,10 +18,8 @@ import java.util.concurrent.TimeUnit; public class TCPClient { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - //@Value("${xfz.server.host}") private String host; - //@Value("${xfz.server.port}") private int port; private Bootstrap bootstrap; @@ -30,7 +28,7 @@ public class TCPClient { LocalDateTime connectTime = LocalDateTime.now(); public void start() { - new Thread(this::connect, "xfz-tcp-client").start(); + new Thread(this::connect, "forwarder tcp-client").start(); } public void init(String dest_addr, int dest_port) { @@ -64,7 +62,7 @@ public class TCPClient { if (!future.isSuccess()) { //重连交给后端线程执行 future.channel().eventLoop().schedule(() -> { - logger.info("xfz tcp client reconnect"); + logger.info("tcp client reconnect"); try { connect(); } catch (Exception e) { @@ -72,7 +70,7 @@ public class TCPClient { } }, 5000, TimeUnit.MILLISECONDS); } else { - logger.info("xfz tcp client start success!"); + logger.info("tcp client start success!"); } } }); @@ -80,7 +78,7 @@ public class TCPClient { this.channel = cf.channel(); this.channel.closeFuture().sync(); } catch (Exception e) { - logger.error("xfz netty client error:", e); + logger.error("netty client error:", e); } } @@ -89,9 +87,9 @@ public class TCPClient { sendBuffer.writeBytes(json.getBytes(StandardCharsets.UTF_8)); channel.writeAndFlush(sendBuffer).addListener(future -> { if (future.isSuccess()) { - logger.info("send to xfz server succeed."); + logger.info("send to tcp:"+host+" succeed."); } else { - logger.info("send to xfz server failed."); + logger.info("send to tcp:"+host+" failed."); } }); } diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/SaasForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/SaasForwarder.java new file mode 100644 index 00000000..e12e157a --- /dev/null +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/SaasForwarder.java @@ -0,0 +1,92 @@ +package com.imdroid.beidou_fwd.task; + +import com.imdroid.beidou_fwd.entity.XFZData; +import com.imdroid.beidou_fwd.service.TCPClient; +import com.imdroid.common.util.GsonUtil; +import com.imdroid.common.util.NumberUtils; +import com.imdroid.secapi.dto.GnssCalcData; +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.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Component +@Configuration +@EnableScheduling +public class SaasForwarder extends Forwarder{ + private final Logger logger = LoggerFactory.getLogger(SaasForwarder.class); + + static final String FORWARDER_NAME = "测试"; + @Value("${sass.server.host}") + private String host; + + @Value("${sass.server.host}") + private int port; + + private TCPClient tcpClient; + + final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @PostConstruct + void registerMe(){ + init(FORWARDER_NAME, "TCP "+host+":"+port,1,false,30); + tcpClient = new TCPClient(); + tcpClient.init(host, port); + tcpClient.start(); + } + + /** + * 每半小时转发GNSS解算结果 + */ + @Scheduled(cron = "0 20,50 * * * ?") // 每30分钟执行一次 + private void forwardGnss() { + logger.info("saas forwardGnss"); + forwardCurrentGnss(); + } + + @Override + int send(String projectId, List records, LocalDateTime sentTime){ + int sendNum = 0; + if(records.size() == 0) return 0; + + XFZData tcpMessage = new XFZData(); + tcpMessage.setProjectID(projectId); + tcpMessage.setWorkPointID(projectId); + + List dataList = new ArrayList<>(records.size()); + tcpMessage.setData(dataList); + + for(GnssCalcData locationRecord: records) { + XFZData.Data data = new XFZData.Data(); + dataList.add(data); + data.setDataTime(locationRecord.getCreatetime().format(dateFormatter)); + data.setDevNum(locationRecord.getDeviceid()); + data.setDevtype("GNSS"); + // 单位由mm转化为m + data.setX(NumberUtils.scale(locationRecord.getRpose() * 0.001, 5)); + data.setY(NumberUtils.scale(locationRecord.getRposn() * 0.001, 5)); + data.setZ(NumberUtils.scale(locationRecord.getRposd() * 0.001, 5)); + sendNum++; + } + String json = "#" + GsonUtil.toJson(tcpMessage) + "!"; + logger.info("project " + projectId + ": push calculation result to SAAS"); + logger.info(json); + try { + tcpClient.writeAndFlush(json); + Thread.sleep(1000); + } catch (Exception e1) { + e1.printStackTrace(); + } + return sendNum; + } + +}