From 5393e1b43f7148adc93dd5a29f7b6fd4a054eec6 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 05 六月 2025 16:13:22 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java |  104 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 87 insertions(+), 17 deletions(-)

diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java
index a2a4eef..ea9ab1d 100644
--- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java
+++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java
@@ -1,6 +1,7 @@
 package com.ruoyi.dataInterchange.server;
 
 import com.alibaba.fastjson.JSON;
+import com.ruoyi.dataInterchange.api.vo.GnssDataVo;
 import com.ruoyi.dataInterchange.dao.*;
 import com.ruoyi.dataInterchange.model.*;
 import com.ruoyi.dataInterchange.model.enu.DataType;
@@ -12,12 +13,15 @@
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.util.Iterator;
+import java.util.List;
 
 /**
  * @author zhibing.pu
@@ -45,10 +49,19 @@
 	@Resource
 	private UPExgMsgTakeEwayBillAckDao upExgMsgTakeEwayBillAckDao;
 	
+	@Resource
+	private RedisTemplate redisTemplate;
+	
 	
 	public void up_exg_msg(ChannelHandlerContext ctx, OuterPacket out) {
+		if (!redisTemplate.hasKey("login:" + out.getGnsscenterId())) {
+			log.error("链路还未登录校验,拒绝连接:{}", out.getGnsscenterId());
+			ctx.close();
+			return;
+		}
 		UPExgMsg exgMsg = getExgMsg(out);
 		DataType dataType = DataType.getDataType(exgMsg.getDataType());
+		log.info("主链路车辆动态信息交换子业务({}):{}", dataType.getCode(), out);
 		switch (dataType) {
 			case UP_EXG_MSG_REGISTER:
 				log.info("上传车辆注册信息({}):{}", DataType.UP_EXG_MSG_REGISTER.getCode(), out);
@@ -134,33 +147,42 @@
 		if (null == register) {
 			upExgMsgRegisterDao.save(upExgMsgRegister);
 		}
-		//上报驾驶员身份识别信息请求
-		UPExgMsgReportDriverInfoAck byVehicleNo = upExgMsgReportDriverInfoAckDao.findByVehicleNo(upExgMsgRegister.getVehicleNo());
-		if (null == byVehicleNo) {
-			down_exg_msg_report_driver_info(ctx, inferiorPlatformId, upExgMsgRegister.getVehicleNo(), upExgMsgRegister.getVehicleColor());
+	}
+	
+	
+	/**
+	 * 定时获取司机基础信息
+	 */
+	public void taskReportDriverInfo() {
+		Iterator<UPExgMsgRegister> iterator = upExgMsgRegisterDao.findAll().iterator();
+		while (iterator.hasNext()) {
+			UPExgMsgRegister register = iterator.next();
+			
+			//上报驾驶员身份识别信息请求
+			UPExgMsgReportDriverInfoAck byVehicleNo = upExgMsgReportDriverInfoAckDao.findByVehicleNo(register.getVehicleNo());
+			if (null == byVehicleNo) {
+				down_exg_msg_report_driver_info(register.getInferiorPlatformId(), register.getVehicleNo(), register.getVehicleColor());
+			}
 		}
+		
 	}
 	
 	/**
 	 * 上报驾驶员身份识别信息请求
-	 *
-	 * @param ctx
 	 */
-	public void down_exg_msg_report_driver_info(ChannelHandlerContext ctx, int inferiorPlatformId, String vehicleNo, int VehicleColor) {
+	public void down_exg_msg_report_driver_info(int inferiorPlatformId, String vehicleNo, int VehicleColor) {
 		DOWNExgMsgReportDriverInfo downExgMsgReportDriverInfo = new DOWNExgMsgReportDriverInfo();
 		downExgMsgReportDriverInfo.setVehicleNo(vehicleNo);
 		downExgMsgReportDriverInfo.setVehicleColor(VehicleColor);
 		downExgMsgReportDriverInfo.setDataType(DataType.DOWN_EXG_MSG_REPORT_DRIVER_INFO.getCode());
 		downExgMsgReportDriverInfo.setDataLength(0);
-		log.info("上报驾驶员身份识别信息请求({}):{}", DataType.DOWN_EXG_MSG_REPORT_DRIVER_INFO.getCode(), JSON.toJSONString(downExgMsgReportDriverInfo));
 		byte[] body = downExgMsgReportDriverInfo.encode();
-		OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG_REPORT_DRIVER_INFO.getCode(), body);
+		OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG.getCode(), inferiorPlatformId, body);
 		//获取从链路通道
 		Channel channel = ChannelMap.getClientChannel(inferiorPlatformId);
 		if (null != channel && channel.isActive()) {
 			channel.writeAndFlush(out);
-		} else {
-			ctx.writeAndFlush(out);
+			log.info("上报驾驶员身份识别信息请求({}):{}", DataType.DOWN_EXG_MSG_REPORT_DRIVER_INFO.getCode(), JSON.toJSONString(downExgMsgReportDriverInfo));
 		}
 	}
 	
@@ -175,6 +197,15 @@
 		upExgMsgRealLocation.setInferiorPlatformId(inferiorPlatformId);
 		upExgMsgRealLocation.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
 		upExgMsgRealLocationDao.save(upExgMsgRealLocation);
+		//修改车辆实时定位
+		GnssDataVo vo = new GnssDataVo();
+		BeanUtils.copyProperties(upExgMsgRealLocation.getGnssData(), vo);
+		redisTemplate.opsForValue().set("location:" + upExgMsgRealLocation.getVehicleNo(), vo);
+		//查询车辆信息,没有则主动发起请求
+		UPExgMsgRegister msgRegister = upExgMsgRegisterDao.findByVehicleNo(upExgMsgRealLocation.getVehicleNo());
+		if (null == msgRegister) {
+			down_base_msg_vehicle_added(inferiorPlatformId, upExgMsgRealLocation.getVehicleNo(), upExgMsgRealLocation.getVehicleColor());
+		}
 	}
 	
 	
@@ -196,22 +227,23 @@
 	 * @param inferiorPlatformId
 	 */
 	public void down_exg_msg_take_ewaybill_req(int inferiorPlatformId, String vehicleNo, int VehicleColor) {
+		if (!redisTemplate.hasKey("login:" + inferiorPlatformId)) {
+			log.error("链路还未登录校验,拒绝连接:{}", inferiorPlatformId);
+			return;
+		}
 		DOWNExgMsgTakeEwaybillReq downExgMsgTakeEwaybillReq = new DOWNExgMsgTakeEwaybillReq();
 		downExgMsgTakeEwaybillReq.setVehicleNo(vehicleNo);
 		downExgMsgTakeEwaybillReq.setVehicleColor(VehicleColor);
-		downExgMsgTakeEwaybillReq.setDataType(DataType.DOWN_EXG_MSG_REPORT_DRIVER_INFO.getCode());
+		downExgMsgTakeEwaybillReq.setDataType(DataType.DOWN_EXG_MSG_TAKE_EWAYBILL_REQ.getCode());
 		downExgMsgTakeEwaybillReq.setDataLength(0);
 		
-		log.info("上报车辆电子运单请求({}):{}", DataType.DOWN_EXG_MSG_TAKE_EWAYBILL_REQ.getCode(), JSON.toJSONString(downExgMsgTakeEwaybillReq));
 		byte[] body = downExgMsgTakeEwaybillReq.encode();
-		OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG_TAKE_EWAYBILL_REQ.getCode(), body);
+		OuterPacket out = new OuterPacket(DataType.DOWN_EXG_MSG.getCode(), inferiorPlatformId, body);
 		//获取从链路通道
 		Channel channel = ChannelMap.getClientChannel(inferiorPlatformId);
 		if (null != channel && channel.isActive()) {
 			channel.writeAndFlush(out);
-		} else {
-			channel = ChannelMap.getServerChannel(inferiorPlatformId);
-			channel.writeAndFlush(out);
+			log.info("上报车辆电子运单请求({}):{}", DataType.DOWN_EXG_MSG_TAKE_EWAYBILL_REQ.getCode(), JSON.toJSONString(downExgMsgTakeEwaybillReq));
 		}
 	}
 	
@@ -228,6 +260,19 @@
 		upExgMsgHistoryLocation.setInferiorPlatformId(inferiorPlatformId);
 		upExgMsgHistoryLocation.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
 		upExgMsgHistoryLocationDao.save(upExgMsgHistoryLocation);
+		
+		//将数据存储实时定位数据表中
+		List<GnssData> gnssData = upExgMsgHistoryLocation.getGnssData();
+		for (GnssData gnssDatum : gnssData) {
+			UPExgMsgRealLocation upExgMsgRealLocation = new UPExgMsgRealLocation();
+			upExgMsgRealLocation.setVehicleNo(upExgMsgHistoryLocation.getVehicleNo());
+			upExgMsgRealLocation.setVehicleColor(upExgMsgHistoryLocation.getVehicleColor());
+			upExgMsgRealLocation.setInferiorPlatformId(inferiorPlatformId);
+			upExgMsgRealLocation.setDataType(DataType.UP_EXG_MSG_REAL_LOCATION.getCode());
+			upExgMsgRealLocation.setGnssData(gnssDatum);
+			upExgMsgRealLocation.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
+			upExgMsgRealLocationDao.save(upExgMsgRealLocation);
+		}
 	}
 	
 	
@@ -263,4 +308,29 @@
 		}
 	}
 	
+	
+	/**
+	 * 补报车辆静态信息
+	 */
+	public void down_base_msg_vehicle_added(int inferiorPlatformId, String vehicleNo, int VehicleColor) {
+		if (!redisTemplate.hasKey("login:" + inferiorPlatformId)) {
+			log.error("链路还未登录校验,拒绝连接:{}", inferiorPlatformId);
+			return;
+		}
+		DOWNBaseMsgVehicleAdded downBaseMsgVehicleAdded = new DOWNBaseMsgVehicleAdded();
+		downBaseMsgVehicleAdded.setVehicleNo(vehicleNo);
+		downBaseMsgVehicleAdded.setVehicleColor(VehicleColor);
+		downBaseMsgVehicleAdded.setDataType(DataType.DOWN_BASE_MSG_VEHICLE_ADDED.getCode());
+		downBaseMsgVehicleAdded.setDataLength(0);
+		
+		byte[] body = downBaseMsgVehicleAdded.encode();
+		OuterPacket out = new OuterPacket(DataType.DOWN_BASE_MSG.getCode(), inferiorPlatformId, body);
+		//获取从链路通道
+		Channel channel = ChannelMap.getClientChannel(inferiorPlatformId);
+		if (null != channel && channel.isActive()) {
+			channel.writeAndFlush(out);
+			log.info("补报车辆静态信息请求({}):{}", DataType.DOWN_BASE_MSG_VEHICLE_ADDED.getCode(), JSON.toJSONString(downBaseMsgVehicleAdded));
+		}
+	}
+	
 }

--
Gitblit v1.7.1