提交 68bda21a authored 作者: 艾庆国's avatar 艾庆国

车辆轨迹同步

上级 855d1db1
package com.clx.performance.param.mq.trace;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class TruckTraceSyncMqParam {
private String truckNo; //车牌号
private String beginTime; //开始时间
private String endTime; //结束时间
}
...@@ -3,6 +3,7 @@ package com.clx.performance.job; ...@@ -3,6 +3,7 @@ package com.clx.performance.job;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dto.zjxl.TruckTraceDTO; import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.service.trace.TruckTraceMqService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.zjxl.ZjxlGpsService; import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.user.feign.UserClxFeign; import com.clx.user.feign.UserClxFeign;
...@@ -34,6 +35,9 @@ public class TruckTraceJob { ...@@ -34,6 +35,9 @@ public class TruckTraceJob {
@Autowired @Autowired
RedisTemplate redisTemplate; RedisTemplate redisTemplate;
@Autowired
private TruckTraceMqService truckTraceMqService;
/** /**
* 驾驶证过期 * 驾驶证过期
...@@ -99,4 +103,27 @@ public class TruckTraceJob { ...@@ -99,4 +103,27 @@ public class TruckTraceJob {
} }
/**
* 车辆轨迹同步
*/
@XxlJob("truckTraceSync")
public void truckTraceSync() {
try {
List<String> truckNoList = new ArrayList<>();
log.info("车辆轨迹同步, size:{}", truckNoList.size());
for (String truckNo : truckNoList) {
LocalDateTime now = LocalDateTime.now();
// 发送mq (同步车辆轨迹)
truckTraceMqService.truckTracSync(truckNo, LocalDateTimeUtils.formatTime(now.minusSeconds(600)), LocalDateTimeUtils.formatTime(now));
}
} catch (Exception e) {
log.warn("车辆轨迹同步失败,异常原因:{}",e);
JobLog.error("车辆轨迹同步失败,异常原因=====================", e);
}
}
} }
package com.clx.performance.service.impl.trace;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.esplus.mapper.DriverTraceESPlusMapper;
import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper;
import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.utils.zjxl.ZjxlGpsService;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.common.geo.GeoPoint;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerService {
@Autowired
private ZjxlGpsService zjxlGpsService;
@Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper;
@Override
public void truckTracSync(TruckTraceSyncMqParam mq) {
List<TruckTraceDTO> list = zjxlGpsService.getTruckTrace(mq.getTruckNo(), mq.getBeginTime(), mq.getEndTime());
if (list.isEmpty()) {return;}
List<TruckTraceESPlus> esList = new ArrayList<>();
for (TruckTraceDTO item : list) {
TruckTraceESPlus es = new TruckTraceESPlus();
es.setTruckNo(item.getTruckNo());
es.setAngle(item.getAngle());
es.setHeight(item.getHeight());
es.setLocation(new GeoPoint(item.getLocation()[0].doubleValue(), item.getLocation()[1].doubleValue()));
es.setGpsTime(item.getGpsTime());
es.setMileage(item.getMileage());
es.setSpeed(item.getSpeed());
esList.add(es);
}
// 保存
truckTraceESPlusMapper.insertBatch(esList);
}
}
package com.clx.performance.service.impl.trace;
import com.alibaba.fastjson.JSON;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.config.RabbitKeyTraceConstants;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.service.trace.TruckTraceMqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class TruckTraceMqServiceImpl implements TruckTraceMqService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void truckTracSync(String truckNo, String beginTime, String endTime) {
TruckTraceSyncMqParam mq = new TruckTraceSyncMqParam();
mq.setTruckNo(truckNo);
mq.setBeginTime(beginTime);
mq.setEndTime(endTime);
MqDelay delay = new MqDelay<>(RabbitKeyTraceConstants.DEFAULT_EXCHANGE, RabbitKeyTraceConstants.TRUCK_TRACE_SYNC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyTraceConstants.DEFAULT_EXCHANGE, RabbitKeyTraceConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
package com.clx.performance.service.trace;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
public interface TruckTraceMqHandlerService {
void truckTracSync(TruckTraceSyncMqParam mq);
}
package com.clx.performance.service.trace;
public interface TruckTraceMqService {
void truckTracSync(String truckNo, String beginTime, String endTime);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论