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 @@