From b8d3a56e89c3d3542ca9de23c222caf40446a08e Mon Sep 17 00:00:00 2001
From: Yang Haoyu <2241399212@qq.com>
Date: Tue, 5 Dec 2023 10:50:39 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8=E5=90=8D?=
=?UTF-8?q?=E6=9B=B4=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
fance-menghang-common/pom.xml | 6 +
.../internet/constants/FaultConstant.java | 17 +++
.../internet/constants/RabbitContants.java | 22 ++++
.../java/com/shiyi/internet/domain/Car.java | 10 +-
.../com/shiyi/internet/domain/Fencing.java | 4 +
.../internet/domain/fault/FaultCode.java | 115 ++++++++++++++++++
.../domain/fault/FaultCodeRequest.java | 80 ++++++++++++
.../internet/domain/response/ResponseCar.java | 4 +-
fance-menghang-remote/pom.xml | 2 -
.../fate/vehicle/factory/LogFeignFactory.java | 45 +++++++
.../java/com/fate/vehicle/feign/LogFeign.java | 34 ++++++
.../com/shiyi/vehicle/feign/VehicleFeign.java | 12 --
...ot.autoconfigure.AutoConfiguration.imports | 1 +
fance-menghang-service/pom.xml | 11 ++
.../shiyi/internet/FencingApplication.java | 1 +
.../shiyi/internet/config/RabbitConfig.java | 107 ++++++++++++++++
.../controller/FencingController.java | 10 +-
.../shiyi/internet/handler/VehicleData.java | 27 ++++
.../impl/DrivingRecordServiceimpl.java | 2 +
.../webSocket/config/WebSocketConfig.java | 19 +++
.../controller/WebSocketBatchServer.java | 27 ++++
.../webSocket/controller/WebSocketServer.java | 32 +++++
.../webSocket/handler/SocketBatchHandler.java | 61 ++++++++++
.../webSocket/handler/SocketHandler.java | 44 +++++++
.../internet/webSocket/mqtt/SocketData.java | 23 ++++
.../webSocket/mqtt/VehicleAllData.java | 22 ++++
.../main/resources/mapper/VehicleMapper.xml | 14 +--
27 files changed, 723 insertions(+), 29 deletions(-)
create mode 100644 fance-menghang-common/src/main/java/com/shiyi/internet/constants/FaultConstant.java
create mode 100644 fance-menghang-common/src/main/java/com/shiyi/internet/constants/RabbitContants.java
create mode 100644 fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCode.java
create mode 100644 fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCodeRequest.java
create mode 100644 fance-menghang-remote/src/main/java/com/fate/vehicle/factory/LogFeignFactory.java
create mode 100644 fance-menghang-remote/src/main/java/com/fate/vehicle/feign/LogFeign.java
delete mode 100644 fance-menghang-remote/src/main/java/com/shiyi/vehicle/feign/VehicleFeign.java
create mode 100644 fance-menghang-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
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/handler/VehicleData.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/config/WebSocketConfig.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/controller/WebSocketBatchServer.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/controller/WebSocketServer.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/handler/SocketBatchHandler.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/handler/SocketHandler.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/SocketData.java
create mode 100644 fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/VehicleAllData.java
diff --git a/fance-menghang-common/pom.xml b/fance-menghang-common/pom.xml
index 7100dda..846f594 100644
--- a/fance-menghang-common/pom.xml
+++ b/fance-menghang-common/pom.xml
@@ -27,10 +27,12 @@
com.fate
fate-common-core
+ 3.6.3
com.fate
fate-common-redis
+ 3.6.3
org.projectlombok
@@ -53,24 +55,28 @@
com.fate
fate-common-datasource
+ 3.6.3
com.fate
fate-common-datascope
+ 3.6.3
com.fate
fate-common-log
+ 3.6.3
com.fate
fate-common-swagger
+ 3.6.3
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/constants/FaultConstant.java b/fance-menghang-common/src/main/java/com/shiyi/internet/constants/FaultConstant.java
new file mode 100644
index 0000000..986ba9b
--- /dev/null
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/constants/FaultConstant.java
@@ -0,0 +1,17 @@
+package com.shiyi.internet.constants;
+
+/**
+ * @author Yanghaoyu
+ * @Date 2023/11/2 15:27
+ */
+public class FaultConstant {
+ /**
+ * 故障信息存储
+ */
+ public static final String FAULT_INFO_PREFIX = "fault:";
+
+ /**
+ * 故障信息集合
+ */
+ public static final String FAULT_LIST = "fault_list";
+}
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/constants/RabbitContants.java b/fance-menghang-common/src/main/java/com/shiyi/internet/constants/RabbitContants.java
new file mode 100644
index 0000000..49c28ad
--- /dev/null
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/constants/RabbitContants.java
@@ -0,0 +1,22 @@
+package com.shiyi.internet.constants;
+
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description : Rabbit常量
+ * @Author : YangHaoYu
+ * @Date: 2023-11-30 20:42
+ */
+@Component
+public class RabbitContants {
+
+ /**
+ * 故障处理队列
+ */
+ public static final String FAULT_HANDLER_QUEUE = "fault_handler_queue";
+
+ /**
+ * 围栏处理队列
+ */
+ public static final String FENCE_HANDLER_QUEUE = "fence_handler_queue";
+}
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 8e063be..63e9ba2 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
@@ -45,19 +45,19 @@ public class Car extends BaseEntity {
@TableField("car_status")
private String carStatus;
- @ApiModelProperty("车辆类型")
+ @ApiModelProperty("车辆类型id")
@TableField("type_id")
private Integer typeId;
- @ApiModelProperty("车辆围栏")
- @TableField("fence_id")
- private Integer fenceId;
+ @ApiModelProperty("车辆围栏id")
+ @TableField("fencing_id")
+ private String fencingId;
@ApiModelProperty("车辆零件ID")
@TableField("drive_id")
private Integer driveId;
- @ApiModelProperty("车辆电池")
+ @ApiModelProperty("车辆电池id")
@TableField("battery_id")
private Integer batteryId;
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Fencing.java b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Fencing.java
index 835a0ee..fb90133 100644
--- a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Fencing.java
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/Fencing.java
@@ -49,6 +49,10 @@ public class Fencing extends BaseEntity {
@TableField(value = "fencing_time")
private Date fencingTime ;
+ @ApiModelProperty("围栏类型")
+ @TableField(value = "fencing_type_id")
+ private Integer fencingTypeId;
+
@ApiModelProperty("操作者")
@TableField(value = "create_user_id")
private Integer createUserId ;
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCode.java b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCode.java
new file mode 100644
index 0000000..134e37c
--- /dev/null
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCode.java
@@ -0,0 +1,115 @@
+package com.shiyi.internet.domain.fault;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fate.common.core.annotation.Excel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+
+/**
+ * @Author:
+ * @Date:
+ * @Description 故障码信息管理列表
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class FaultCode {
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障码ID
+ */
+ @NotEmpty(message = "故障码ID不能为空")
+ private Integer faultId;
+
+ @NotEmpty(message = "车辆vin")
+ private String vin;
+
+ @NotEmpty(message = "故障码")
+ private String faultCode;
+
+ /**
+ * @Description 故障内容
+ * @Author:shixuchao
+ * @Date:
+ */
+ @NotEmpty(message = "故障内容不能为空")
+ private String faultContent;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障级别
+ */
+
+ @NotEmpty(message = "故障级别不能为空")
+ private Integer priorityId;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障时间
+ */
+ @NotEmpty(message = "故障时间不能为空")
+ private Date faultTime;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障类型
+ */
+ @NotEmpty(message = "故障类型不能为空")
+ private Integer faultTypeId;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障异常指标
+ */
+ @NotEmpty(message = "故障异常指标不能为空")
+ private Integer faultErrorInformation;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障正常指标
+ */
+ @NotEmpty(message = "故障正常指标不能为空")
+ private Integer faultSucceedInformation;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障状态
+ */
+ @NotEmpty(message = "故障状态不能为空")
+ private Integer faultFlag;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 车辆ID
+ */
+ @NotEmpty(message = "车辆ID不能为空")
+ private Integer carId;
+
+ /** 开始报警时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:dd:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "开始报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:dd:ss")
+ private Date warningTime;
+
+ /** 结束报警时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:dd:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "结束报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:dd:ss")
+ private Date normalTime;
+}
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCodeRequest.java b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCodeRequest.java
new file mode 100644
index 0000000..b0985c9
--- /dev/null
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/fault/FaultCodeRequest.java
@@ -0,0 +1,80 @@
+package com.shiyi.internet.domain.fault;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+
+/**
+ * @Author:
+ * @Date:
+ * @Description
+ */
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class FaultCodeRequest {
+
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障内容
+ */
+ @NotEmpty(message = "内容不能为空")
+ private String faultContent;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障级别
+ */
+ @NotEmpty(message = "故障级别不能为空")
+ private String priorityId;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障时间
+ */
+ @NotEmpty(message = "故障时间不能为空")
+ private Date faultTime;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障类型
+ */
+ @NotEmpty(message = "故障类型不能为空")
+ private Integer faultTypeId;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障异常指标
+ */
+ @NotEmpty(message = "故障异常指标不能为空")
+ private Integer faultErrorInformation;
+
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 故障正常指标
+ */
+
+ @NotEmpty(message = "故障正常指标不能为空")
+ private Integer faultSucceedInformation;
+ /**
+ * @Author:shixuchao
+ * @Date:
+ * @Description 车辆ID
+ */
+ @NotEmpty(message = "车辆ID不能为空")
+ private Integer carId;
+
+}
diff --git a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/response/ResponseCar.java b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/response/ResponseCar.java
index 7e08f1d..d24bb27 100644
--- a/fance-menghang-common/src/main/java/com/shiyi/internet/domain/response/ResponseCar.java
+++ b/fance-menghang-common/src/main/java/com/shiyi/internet/domain/response/ResponseCar.java
@@ -46,8 +46,8 @@ public class ResponseCar {
private Integer typeId ;
/** 车辆围栏 */
@ApiModelProperty(name = "车辆围栏")
- @TableField("fence_id")
- private Integer fenceId ;
+ @TableField("fencing_id")
+ private Integer fencingId ;
/** 围栏名称 */
@ApiModelProperty(name = "围栏名称")
@TableField("fencing_name")
diff --git a/fance-menghang-remote/pom.xml b/fance-menghang-remote/pom.xml
index 9a2b189..b7b6faf 100644
--- a/fance-menghang-remote/pom.xml
+++ b/fance-menghang-remote/pom.xml
@@ -22,9 +22,7 @@
UTF-8
-
-
com.fate
fance-menghang-common
diff --git a/fance-menghang-remote/src/main/java/com/fate/vehicle/factory/LogFeignFactory.java b/fance-menghang-remote/src/main/java/com/fate/vehicle/factory/LogFeignFactory.java
new file mode 100644
index 0000000..7ce0273
--- /dev/null
+++ b/fance-menghang-remote/src/main/java/com/fate/vehicle/factory/LogFeignFactory.java
@@ -0,0 +1,45 @@
+package com.fate.vehicle.factory;
+
+import com.fate.common.core.domain.Result;
+import com.shiyi.internet.domain.fault.FaultCode;
+import com.fate.vehicle.feign.LogFeign;
+import org.springframework.cloud.openfeign.FallbackFactory;
+
+/**
+ * @Description : 熔断
+ * @Author : YangHaoYu
+ * @Date: 2023-12-04 21:08
+ */
+public class LogFeignFactory implements FallbackFactory {
+ /**
+ * @param cause
+ * @return
+ */
+ @Override
+ public LogFeign create(Throwable cause) {
+ return new LogFeign() {
+
+ /**
+ * 添加故障日志
+ *
+ * @param faultCodeRequest
+ * @return
+ */
+ @Override
+ public Result faultInsert(FaultCode faultCodeRequest) {
+ return Result.error("200");
+ }
+
+ /**
+ * 修改故障日志
+ *
+ * @param faultCode
+ * @return
+ */
+ @Override
+ public Result faultUpdate(FaultCode faultCode) {
+ return Result.error();
+ }
+ };
+ }
+}
diff --git a/fance-menghang-remote/src/main/java/com/fate/vehicle/feign/LogFeign.java b/fance-menghang-remote/src/main/java/com/fate/vehicle/feign/LogFeign.java
new file mode 100644
index 0000000..afe4989
--- /dev/null
+++ b/fance-menghang-remote/src/main/java/com/fate/vehicle/feign/LogFeign.java
@@ -0,0 +1,34 @@
+package com.fate.vehicle.feign;
+
+import com.fate.common.core.domain.Result;
+import com.fate.vehicle.factory.LogFeignFactory;
+import com.shiyi.internet.domain.fault.FaultCode;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @Description :
+ * @Author : YangHaoYu
+ * @Date: 2023-11-30 14:41
+ */
+@FeignClient( value = "fate-fault",fallbackFactory = LogFeignFactory.class)
+public interface LogFeign {
+
+ /**
+ * 添加故障日志
+ * @param faultCodeRequest
+ * @return
+ */
+ @PostMapping("fault/faultInsert")
+ public Result faultInsert(@RequestBody FaultCode faultCodeRequest);
+
+
+ /**
+ * 修改故障日志
+ * @param faultCode
+ * @return
+ */
+ @PostMapping("fault/faultUpdate")
+ public Result faultUpdate(@RequestBody FaultCode faultCode);
+}
diff --git a/fance-menghang-remote/src/main/java/com/shiyi/vehicle/feign/VehicleFeign.java b/fance-menghang-remote/src/main/java/com/shiyi/vehicle/feign/VehicleFeign.java
deleted file mode 100644
index 29d6583..0000000
--- a/fance-menghang-remote/src/main/java/com/shiyi/vehicle/feign/VehicleFeign.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.shiyi.vehicle.feign;
-
-import org.springframework.cloud.openfeign.FeignClient;
-
-/**
- * @Description : 接口调用
- * @Author : YangHaoYu
- * @Date: 2023-11-23 11:13
- */
-@FeignClient(name = "fate-fence")
-public interface VehicleFeign {
-}
diff --git a/fance-menghang-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/fance-menghang-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..2b64cfa
--- /dev/null
+++ b/fance-menghang-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+com.fate.vehicle.factory.LogFeignFactory
diff --git a/fance-menghang-service/pom.xml b/fance-menghang-service/pom.xml
index 8cfa241..b239ca2 100644
--- a/fance-menghang-service/pom.xml
+++ b/fance-menghang-service/pom.xml
@@ -62,6 +62,17 @@
org.springframework.kafka
spring-kafka
+
+ com.fate
+ fance-menghang-remote
+ 3.6.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ 3.0.1
+
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/FencingApplication.java b/fance-menghang-service/src/main/java/com/shiyi/internet/FencingApplication.java
index ac1950e..fd561bc 100644
--- a/fance-menghang-service/src/main/java/com/shiyi/internet/FencingApplication.java
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/FencingApplication.java
@@ -6,6 +6,7 @@ import com.fate.common.swagger.annotation.EnableCustomSwagger2;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @Description : 业务启动类
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..6daa634
--- /dev/null
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/config/RabbitConfig.java
@@ -0,0 +1,107 @@
+package com.shiyi.internet.config;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.shiyi.internet.constants.FaultConstant;
+import com.shiyi.internet.constants.RabbitContants;
+import com.shiyi.internet.constants.VehicleConstant;
+import com.shiyi.internet.domain.Car;
+import com.shiyi.internet.domain.Fencing;
+import com.shiyi.internet.domain.VehicleMessage;
+import com.shiyi.internet.domain.fault.FaultCode;
+import com.shiyi.internet.handler.LocationHandler;
+import com.shiyi.internet.handler.VehicleData;
+import com.fate.vehicle.feign.LogFeign;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * @Description : RabbitMQ收到围栏处理消息
+ * @Author : YangHaoYu
+ * @Date: 2023-11-30 14:37
+ */
+@Log4j2
+@Component
+public class RabbitConfig {
+ @Autowired
+ private LogFeign logFeign;
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ private final ExecutorService executorService = Executors.newFixedThreadPool(20);
+
+ @RabbitListener(queues = RabbitContants.FENCE_HANDLER_QUEUE)
+ public void fenceHandler(String jsonMessage){
+
+ //将JSON消息转换成对象
+ VehicleMessage message = JSONObject.parseObject(jsonMessage, new TypeReference() {
+ });
+ //从Redis中获取所有车辆数据
+ Car carInfo = (Car) redisTemplate.opsForHash().get(VehicleConstant.VEHICLE_INFO_MAP, message.getVin());
+ //判断车辆是否存在围栏 Id
+ if (StringUtils.isNotEmpty(carInfo.getFenceId())){
+ //获取围栏信息
+ Fencing fencingInfo = VehicleData.fencingInfoMap.get(carInfo.getFenceId());
+ String[] split = fencingInfo.getFencingLat().split(";");
+ ArrayList locations = new ArrayList<>();
+ for (String location : split) {
+ String[] temp = location.split(",");
+ locations.add(new Point2D.Double(Double.parseDouble(temp[0]), Double.parseDouble(temp[1])));
+ }
+ boolean ptInPoly = LocationHandler.isPtInPoly(new Point2D.Double(Double.parseDouble(message.getLatitude()), Double.parseDouble(message.getLongitude())), locations);
+ if(fencingInfo.getFencingTypeId()==0 && !ptInPoly){
+ log.info("vin:{};驶出电子围栏告警",carInfo.getCarVin());
+ FaultCode log = (FaultCode) redisTemplate.opsForValue().get(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin() + "OUT");
+ if (log == null){
+ FaultCode faultCode = new FaultCode();
+ faultCode.setFaultContent("OUT");
+ faultCode.setVin(message.getVin());
+ faultCode.setWarningTime(new Date());
+ redisTemplate.opsForValue().set(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin() + ":OUT", faultCode);
+ logFeign.faultInsert(faultCode);
+ }
+ }
+ if (fencingInfo.getFencingTypeId()==0 && ptInPoly){
+ FaultCode log = (FaultCode) redisTemplate.opsForValue().get(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin() + "OUT");
+ if (log != null){
+ log.setNormalTime(new Date());
+ logFeign.faultUpdate(log);
+ redisTemplate.delete(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin() + ":OUT");
+ }
+ }
+ if (fencingInfo.getFencingTypeId()==1 && ptInPoly){
+ log.info("vin:{};驶入非法区域告警", carInfo.getCarVin());
+ FaultCode log = (FaultCode) redisTemplate.opsForValue().get(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin() + "IN");
+ if (log == null){
+ FaultCode faultCode = new FaultCode();
+ faultCode.setFaultCode("IN");
+ faultCode.setVin(message.getVin());
+ faultCode.setWarningTime(new Date());
+ redisTemplate.opsForValue().set(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin()+ ":IN", faultCode);
+ }
+ }
+ if (fencingInfo.getFencingTypeId()==1 &&!ptInPoly){
+ FaultCode log = (FaultCode) redisTemplate.opsForValue().get(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin() + "IN");
+ if (log != null){
+ log.setNormalTime(new Date());
+ logFeign.faultUpdate(log);
+ redisTemplate.delete(FaultConstant.FAULT_INFO_PREFIX + carInfo.getCarVin() + ":IN");
+ }
+ }
+ }
+
+
+ }
+
+}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/controller/FencingController.java b/fance-menghang-service/src/main/java/com/shiyi/internet/controller/FencingController.java
index cc5f03d..cedd90d 100644
--- a/fance-menghang-service/src/main/java/com/shiyi/internet/controller/FencingController.java
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/controller/FencingController.java
@@ -6,6 +6,8 @@ import com.fate.common.core.web.controller.BaseController;
import com.shiyi.internet.domain.Fencing;
import com.shiyi.internet.domain.response.ResponseFencing;
import com.shiyi.internet.service.FencingService;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -28,13 +30,14 @@ public class FencingController extends BaseController {
private HttpServletRequest request;
/**
- * @Description:
+ * @Description: 列表
No such property: code for class: Script1
* @return: com.fate.common.core.domain.Result>
* @Author: YHY
* @Updator: YHY
* @Date 2023/11/18 13:31
*/
+ @ApiOperation("电子围栏查询")
@GetMapping("/fencingList")
public Result> fencingList(){
Result> result = fencingService.fencingList();
@@ -49,6 +52,7 @@ public class FencingController extends BaseController {
* @Updator: YHY
* @Date 2023/11/18 13:54
*/
+ @ApiOperation("添加电子围栏")
@PostMapping("/addfencing")
public Result addfencing(@RequestBody Fencing fencing){
fencingService.addfencing(fencing);
@@ -64,6 +68,7 @@ public class FencingController extends BaseController {
* @Updator: YHY
* @Date 2023/11/18 14:00
*/
+ @ApiOperation("删除电子围栏")
@PostMapping("/deleteFence/{fencingId}")
public Result deleteFencingById(@PathVariable Integer fencingId){
Result result = fencingService.deleteFencingById(fencingId);
@@ -78,6 +83,7 @@ public class FencingController extends BaseController {
* @Updator: YHY
* @Date 2023/11/18 14:02
*/
+ @ApiOperation("修改电子围栏")
@PostMapping("/updateFencing")
public Result updateFencing(@RequestBody Fencing fencing){
Result result = fencingService.updateFencing(fencing);
@@ -93,6 +99,7 @@ public class FencingController extends BaseController {
* @Updator: YHY
* @Date 2023/11/19 19:44
*/
+ @ApiOperation("精准查找电子围栏")
@PostMapping("/findFencingById/{fencingId}")
public Result findFencingById(@PathVariable Integer fencingId){
ResponseFencing responseFencing = fencingService.findFencingById(fencingId);
@@ -109,6 +116,7 @@ public class FencingController extends BaseController {
* @Updator: YHY
* @Date 2023/11/19 19:50
*/
+ @ApiOperation("删除多个电子围栏")
@PostMapping("/deleteFencingAllIds/{ids}")
public Result deleteFencingAllIds(@PathVariable Integer[] ids){
Result result = fencingService.deleteFencingAllIds(ids);
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/handler/VehicleData.java b/fance-menghang-service/src/main/java/com/shiyi/internet/handler/VehicleData.java
new file mode 100644
index 0000000..aab2fed
--- /dev/null
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/handler/VehicleData.java
@@ -0,0 +1,27 @@
+package com.shiyi.internet.handler;
+
+import com.shiyi.internet.domain.Car;
+import com.shiyi.internet.domain.Fencing;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description :
+ * @Author : YangHaoYu
+ * @Date: 2023-11-30 20:58
+ */
+public class VehicleData {
+
+ /**
+ * 车辆信息Map
+ */
+ public static Map carInfoMap = new HashMap<>();
+
+
+ /**
+ * 电子围栏Map
+ */
+ public static Map fencingInfoMap = new HashMap<>();
+
+}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/service/impl/DrivingRecordServiceimpl.java b/fance-menghang-service/src/main/java/com/shiyi/internet/service/impl/DrivingRecordServiceimpl.java
index 928034e..f20561c 100644
--- a/fance-menghang-service/src/main/java/com/shiyi/internet/service/impl/DrivingRecordServiceimpl.java
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/service/impl/DrivingRecordServiceimpl.java
@@ -21,6 +21,7 @@ public class DrivingRecordServiceimpl extends ServiceImpl sessions = new CopyOnWriteArrayList<>();
+
+ @Autowired
+ private VehicleMapper vehicleMapper;
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Scheduled(cron = "0/1 * * * * ?")
+ public void sendMessageFlush(){
+ for (Session session : sessions) {
+ List ids = vehicleMapper.getOnlineVehicleIds();
+ List messages = ids.stream().map(id -> {
+ VehicleMessage message =(VehicleMessage) redisTemplate.opsForValue().get(RedisConstants.CURRENT_INFO + ".");
+ return message;
+ }).collect(Collectors.toList());
+ Integer day =(Integer) redisTemplate.opsForValue().get(RedisConstants.VEHICLE_INFO_TOKEN + RedisConstants.CURRENT_DAY_FAULT);
+ Integer month =(Integer) redisTemplate.opsForValue().get(RedisConstants.VEHICLE_INFO_TOKEN + RedisConstants.CURRENT_MONTH_FAULT);
+ Integer onlineCount = vehicleMapper.getOnlineCount();
+ Integer unOnlineCount = vehicleMapper.getUnOnlineCount();
+ VehicleAllData vehicleAllData = new VehicleAllData();
+ vehicleAllData.setMessages(messages);
+ vehicleAllData.setInfo(day + ":" + month + ":" + onlineCount + ":" + unOnlineCount);
+ try {
+ session.getBasicRemote().sendText(JSON.toJSONString(vehicleAllData));
+ }catch (Exception e){
+ log.info("{}连接中断", session.getId());
+ sessions.remove(session);
+ }
+
+ }
+ }
+}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/handler/SocketHandler.java b/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/handler/SocketHandler.java
new file mode 100644
index 0000000..3c42d8a
--- /dev/null
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/handler/SocketHandler.java
@@ -0,0 +1,44 @@
+package com.shiyi.internet.webSocket.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.shiyi.internet.constants.RedisConstants;
+import com.shiyi.internet.domain.VehicleMessage;
+import com.shiyi.internet.webSocket.mqtt.SocketData;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.Session;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * @Description :
+ * @Author : YangHaoYu
+ * @Date: 2023-12-01 21:10
+ */
+@Log4j2
+@Component
+public class SocketHandler {
+
+ //存放每个客户端对应的MyWebSocket
+ public static CopyOnWriteArrayList socketList = new CopyOnWriteArrayList<>();
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Scheduled(cron = "0/1 * * * * ?")
+ public void sendMessageFlush(){
+ for (SocketData socketData : socketList) {
+ Session session = socketData.getSession();
+ VehicleMessage msg =(VehicleMessage) redisTemplate.opsForValue().get(RedisConstants.CURRENT_INFO + ":" + socketData.getVin());
+ try {
+ session.getBasicRemote().sendText(JSON.toJSONString(msg));
+ }catch (Exception e){
+ log.info("{}:连接中断",socketData.getSession().getId());
+ socketList.remove(socketData);
+ }
+ }
+ }
+}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/SocketData.java b/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/SocketData.java
new file mode 100644
index 0000000..50a3ba7
--- /dev/null
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/SocketData.java
@@ -0,0 +1,23 @@
+package com.shiyi.internet.webSocket.mqtt;
+
+import lombok.Data;
+
+import javax.websocket.Session;
+
+/**
+ * @Description :
+ * @Author : YangHaoYu
+ * @Date: 2023-12-01 21:06
+ */
+@Data
+public class SocketData {
+ /**
+ * vin
+ */
+ private String vin;
+
+ /**
+ * session
+ */
+ private Session session;
+}
diff --git a/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/VehicleAllData.java b/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/VehicleAllData.java
new file mode 100644
index 0000000..eede250
--- /dev/null
+++ b/fance-menghang-service/src/main/java/com/shiyi/internet/webSocket/mqtt/VehicleAllData.java
@@ -0,0 +1,22 @@
+package com.shiyi.internet.webSocket.mqtt;
+
+import com.shiyi.internet.domain.VehicleMessage;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @Description :
+ * @Author : YangHaoYu
+ * @Date: 2023-12-01 20:57
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class VehicleAllData {
+ private List messages;
+
+ private String info;
+}
diff --git a/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml b/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml
index dfaad28..6354634 100644
--- a/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml
+++ b/fance-menghang-service/src/main/resources/mapper/VehicleMapper.xml
@@ -9,7 +9,7 @@
car_vin,
car_status,
type_id,
- fence_id,
+ fencing_id,
drive_id,
battery_id,
car_address) values(
@@ -19,7 +19,7 @@
#{carVin},
#{carStatus},
#{typeId},
- #{fenceId},
+ #{fencingId},
#{driveId},
#{batteryId},
#{carAddress})
@@ -34,7 +34,7 @@
car_vin=#{carVin},
car_status=#{carStatus},
type_id=#{typeId},
- fence_id=#{fenceId},
+ fencing_id=#{fencingId},
drive_id=#{driveId},
battery_id=#{batteryId},
car_address=#{carAddress} where car_id=#{carId}
@@ -48,11 +48,11 @@