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} select count(*) from t_car +