From 2b3305bea683e6f7a68fb02e10adcd30207db095 Mon Sep 17 00:00:00 2001
From: Yang Haoyu <2241399212@qq.com>
Date: Sun, 26 Nov 2023 18:35:58 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/shiyi/internet/domain/Car.java | 4 +-
.../internet/domain/VehicleStatusEntity.java | 23 ++++++
fance-menghang-service/pom.xml | 13 +++
.../shiyi/internet/config/RabbitConfig.java | 82 +++++++++++++++++++
.../shiyi/internet/config/RunnerAfter.java | 44 ++++++++++
.../internet/mapper/DrivingRecordMapper.java | 4 +
.../shiyi/internet/mapper/VehicleMapper.java | 2 +
.../resources/mapper/DrivingRecordMapper.xml | 14 +++-
.../main/resources/mapper/VehicleMapper.xml | 35 ++++++--
9 files changed, 210 insertions(+), 11 deletions(-)
create mode 100644 fance-menghang-common/src/main/java/com/shiyi/internet/domain/VehicleStatusEntity.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/config/RabbitConfig.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/config/RunnerAfter.java
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Car.java b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Car.java
index c28a465..8e063be 100644
--- a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Car.java
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Car.java
@@ -13,7 +13,7 @@ import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
- * @Description : 车辆基类
+ * @Description : 车辆信息管理对象
* @Author : YHY
* @Date: 2023-11-19 20:56
*/
@@ -43,7 +43,7 @@ public class Car extends BaseEntity {
@ApiModelProperty("车辆状态")
@TableField("car_status")
- private String car_status;
+ private String carStatus;
@ApiModelProperty("车辆类型")
@TableField("type_id")
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/VehicleStatusEntity.java b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/VehicleStatusEntity.java
new file mode 100644
index 0000000..8045a9c
--- /dev/null
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/VehicleStatusEntity.java
@@ -0,0 +1,23 @@
+package com.shiyi.internet.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Yanghaoyu
+ * @Date 2023/11/27 09:41
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class VehicleStatusEntity {
+ /**
+ * vin
+ */
+ private String carVin;
+ /**
+ * 车辆状态
+ */
+ private Integer status;
+}
diff --git a/fance-menghang-service/pom.xml b/fance-menghang-service/pom.xml
index 9e8feb1..8cfa241 100644
--- a/fance-menghang-service/pom.xml
+++ b/fance-menghang-service/pom.xml
@@ -50,6 +50,19 @@
3.15
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+
+ org.springframework.kafka
+ spring-kafka
+
+
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/config/RabbitConfig.java b/fance-menghang-service/src/main/java/com/shiyi/internet/config/RabbitConfig.java
new file mode 100644
index 0000000..96e2058
--- /dev/null
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/config/RabbitConfig.java
@@ -0,0 +1,82 @@
+package com.shiyi.internet.config;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.TypeReference;
+import com.rabbitmq.client.Channel;
+import com.shiyi.internet.constants.VehicleConstant;
+import com.shiyi.internet.domain.DrivingRecord;
+import com.shiyi.internet.domain.VehicleStatusEntity;
+import com.shiyi.internet.mapper.DrivingRecordMapper;
+import com.shiyi.internet.mapper.VehicleMapper;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+import org.springframework.amqp.core.Queue;
+
+import java.util.Date;
+
+
+/**
+ * @Description :
+ * @Author : YangHaoYu
+ * @Date: 2023-11-25 18:49
+ */
+@Log4j2
+@Component
+public class RabbitConfig {
+ @Autowired
+ private VehicleMapper vehicleMapper;
+
+ @Autowired
+ private DrivingRecordMapper drivingRecordMapper;
+
+ @Bean
+ public Queue initVehicleUpdateStatusQueue(){
+ return new Queue(VehicleConstant.VEHICLE_STATUS_UPDATE_QUEUE,true);
+ }
+
+ @RabbitListener(queues = {VehicleConstant.VEHICLE_STATUS_UPDATE_QUEUE})
+ public void vehicleUpdateStatusHandler(String info, Message message, Channel channel){
+ log.info("队列:{},接收到的消息:{}",VehicleConstant.VEHICLE_STATUS_UPDATE_QUEUE,true);
+ VehicleStatusEntity statusEntity = JSON.parseObject(info, new TypeReference(){
+ });
+
+ }
+
+
+ public void updateVehicleStatus(String carVin, Integer status, long timestamp){
+ vehicleMapper.updateVehicleStatus(carVin,status);
+ //判断车辆状态
+ if (status.equals(VehicleConstant.VEHICLE_START)){
+ DrivingRecord drivingRecord =drivingRecordMapper.selectLastByVin(carVin);
+ //车辆此前从未有过记录
+ if (drivingRecord == null){
+ DrivingRecord record = new DrivingRecord();
+ record.setCarVin(carVin);
+ record.setStartTime(new Date()); //开始时间
+ record.setStartKey(String.valueOf(timestamp)); //开始标识
+ log.info("车辆启动:{},时间:{}",carVin,timestamp);
+ drivingRecordMapper.insertDriving(record);
+ }
+ //车辆此前记录不为空并且启动和结束时间也不为空
+ if (drivingRecord != null && drivingRecord.getStartTime() != null && drivingRecord.getEndTime() != null){
+ DrivingRecord record = new DrivingRecord();
+ record.setCarVin(carVin);
+ record.setStartTime(new Date(timestamp));
+ record.setStartKey(String.valueOf(timestamp));
+ log.info("车辆启动:{},time:{}",carVin,timestamp);
+ drivingRecordMapper.insertDrivingRecord(record);
+ }
+ }else {
+ //车辆停止
+ Integer id = drivingRecordMapper.selectLastId(carVin);
+ String endKey =String.valueOf(timestamp);
+ log.info("车辆停止:{},时间:{}",carVin,timestamp);
+ drivingRecordMapper.endVehicle(id, new Date(timestamp),endKey);
+ }
+ }
+
+}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/config/RunnerAfter.java b/fance-menghang-service/src/main/java/com/shiyi/internet/config/RunnerAfter.java
new file mode 100644
index 0000000..96300f4
--- /dev/null
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/config/RunnerAfter.java
@@ -0,0 +1,44 @@
+package com.shiyi.internet.config;
+
+import com.shiyi.internet.constants.VehicleConstant;
+import com.shiyi.internet.domain.Car;
+import com.shiyi.internet.mapper.VehicleMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description :
+ * @Author : YangHaoYu
+ * @Date: 2023-11-25 19:59
+ */
+@Component
+@Slf4j
+public class RunnerAfter implements ApplicationRunner {
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Autowired
+ private VehicleMapper vehicleMapper;
+
+
+ /**
+ * @param args
+ * @throws Exception
+ */
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ log.info("启动:初始化车辆数据到Redis");
+ List carList = vehicleMapper.selectVehicleInfoList(null);
+ Map collect = carList.stream().collect(Collectors.toMap(Car::getCarVin, car -> car));
+ redisTemplate.opsForHash().putAll(VehicleConstant.VEHICLE_INFO_MAP, collect);
+ }
+}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/DrivingRecordMapper.java b/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/DrivingRecordMapper.java
index 76505d6..e940482 100644
--- a/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/DrivingRecordMapper.java
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/DrivingRecordMapper.java
@@ -43,4 +43,8 @@ public interface DrivingRecordMapper extends BaseMapper {
void endVehicle(@Param("id") Integer id, @Param("date") Date date, @Param("endKey") String endKey);
+ DrivingRecord selectLastByVin(@Param("carVin") String carVin);
+
+ void insertDrivingRecord(@Param("record") DrivingRecord record);
+
}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/VehicleMapper.java b/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/VehicleMapper.java
index 7e4c372..83e30d3 100644
--- a/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/VehicleMapper.java
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/mapper/VehicleMapper.java
@@ -39,4 +39,6 @@ public interface VehicleMapper extends BaseMapper {
Integer getOnlineCount();
Integer getUnOnlineCount();
+
+ List selectVehicleInfoList(Car car);
}
diff --git a/fance-menghang-service/src/main/resources/mapper/DrivingRecordMapper.xml b/fance-menghang-service/src/main/resources/mapper/DrivingRecordMapper.xml
index 4dfd3d4..fa3ed36 100644
--- a/fance-menghang-service/src/main/resources/mapper/DrivingRecordMapper.xml
+++ b/fance-menghang-service/src/main/resources/mapper/DrivingRecordMapper.xml
@@ -14,17 +14,24 @@
insert into car_record (
+ record_id,
car_vin,
start_time,
end_time,
start_key,
end_key) values(
+ #{recordId},
#{carVin},
#{startTime},
#{endTime},
#{startKey},
#{endKey})
+
+ insert into car_record (
+ record_id,car_vin,start_time,end_time, start_key,end_key) values(
+ #{recordId},#{carVin},#{startTime},#{endTime},#{startKey},#{endKey})
+
update car_record set
car_vin=#{carVin},
@@ -34,7 +41,7 @@
end_key=#{endKey} where record_id=#{recordId}
- update driving_record set
+ update car_record set
end_time=#{date},end_key=#{endKey}
where record_id=#{id}
@@ -50,6 +57,9 @@
select * from car_record where record_id=#{recordId}
+
diff --git a/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml b/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml
index bb6f7cf..f2ead5b 100644
--- a/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml
+++ b/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml
@@ -2,18 +2,22 @@
- insert into (
+ insert into t_car (
car_id,
car_name,
car_license,
- typ_eId,
- fen_ceId,
- dri_veId,
- bat_teryId,
+ car_vin,
+ car_status,
+ type_id,
+ fence_id,
+ drive_id,
+ battery_id,
car_address) values(
#{carId},
#{carName},
#{carLicense},
+ #{carVin},
+ #{carStatus},
#{typeId},
#{fenceId},
#{driveId},
@@ -21,12 +25,14 @@
#{carAddress})
- insert into driving_record values (#{recordId},#{carVin},#{startTime},#{endTime},#{startKey},#{endKey})
+ insert into car_record values (#{recordId},#{carVin},#{startTime},#{endTime},#{startKey},#{endKey})
update t_car set
car_name=#{carName},
car_license=#{carLicense},
+ car_vin=#{carVin},
+ car_status=#{carStatus},
type_id=#{typeId},
fence_id=#{fenceId},
drive_id=#{driveId},
@@ -53,7 +59,7 @@
select * from t_car where vin=#{vin}