puzhibing
119 分钟以前 4ad32c37e3317fb6cb7cbfb034b53d3220c27db4
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));
      }
   }
}