将路径和包名规范化;消除循环依赖;
This commit is contained in:
parent
e4b7bdb8fc
commit
cbfb56127f
@ -1 +1 @@
|
||||
0.8.0
|
||||
0.8.1
|
||||
@ -1,6 +1,31 @@
|
||||
# 碰撞避免系统变更日志
|
||||
|
||||
## 版本 0.8.0 (2025-06-12)
|
||||
## 版本 [0.8.1] - 2025-06-13
|
||||
|
||||
### ♻️ 循环依赖重构与服务职责优化
|
||||
|
||||
**背景**:为彻底解决LocationRuleQueryService与VehicleTypePermissionService之间的循环依赖,优化服务职责边界,提升系统可维护性和测试稳定性。
|
||||
|
||||
#### ✅ 主要变更
|
||||
- **彻底消除循环依赖**:重构VehicleTypePermissionService,仅保留"判断"相关方法,所有"查找规则"相关方法迁移至LocationRuleQueryService。
|
||||
- **服务职责边界清晰**:LocationRuleQueryService负责规则查找与过滤,VehicleTypePermissionService仅负责权限判断。
|
||||
- **依赖注入优化**:移除双方互相依赖,所有依赖关系单向、职责分明。
|
||||
- **全局调用点梳理**:所有业务与测试代码均已切换为通过LocationRuleQueryService查找规则,无遗漏。
|
||||
- **测试全部通过**:关闭Spring循环依赖后,ApplicationContext加载正常,所有相关单元测试与集成测试全部通过。
|
||||
|
||||
#### 📊 技术成果
|
||||
- 架构更清晰,职责分离,便于后续维护和扩展
|
||||
- 测试环境与生产环境一致性提升,消除隐藏风险
|
||||
- 代码可读性和可测试性显著提升
|
||||
|
||||
#### 🎯 验证结果
|
||||
- ✅ 所有相关测试用例全部通过
|
||||
- ✅ 业务功能和权限判断流程回归验证通过
|
||||
- ✅ 任务文档、版本号、变更日志已同步更新
|
||||
|
||||
**影响范围**:LocationRuleQueryService、VehicleTypePermissionService及其所有调用方,涉及规则查找、权限判断、依赖注入等核心模块。
|
||||
|
||||
## 版本 [0.8.0] - (2025-06-12)
|
||||
|
||||
### 🔄 重大架构重构:异步处理架构简化
|
||||
|
||||
@ -40,8 +65,6 @@
|
||||
|
||||
**影响范围**:约15个核心文件,涉及Spring Boot、PostgreSQL PostGIS、JPA/Hibernate、Jackson序列化、WebSocket、Redis缓存、Mockito测试框架等技术栈。
|
||||
|
||||
---
|
||||
|
||||
## [0.7.16] - 2025-06-12
|
||||
|
||||
### 重大修复
|
||||
|
||||
133
doc/work/fix_circular_dependency_location_rule_query_service.md
Normal file
133
doc/work/fix_circular_dependency_location_rule_query_service.md
Normal file
@ -0,0 +1,133 @@
|
||||
# 任务清单:打破 locationRuleQueryServiceImpl 与 vehicleTypePermissionServiceImpl 的循环依赖
|
||||
|
||||
## 目标
|
||||
- 消除 locationRuleQueryServiceImpl 与 vehicleTypePermissionServiceImpl 之间的直接循环依赖,保证 allow-circular-references: false 时 Spring 上下文能正常加载。
|
||||
- 保证相关业务功能和集成测试通过。
|
||||
|
||||
---
|
||||
|
||||
## 任务分解与实施步骤
|
||||
|
||||
### 1. 梳理依赖关系(已完成)
|
||||
|
||||
#### 1.1 LocationRuleQueryServiceImpl 依赖
|
||||
- 依赖注入方式:字段注入(@Autowired)
|
||||
- 依赖Bean:
|
||||
- SpatialRuleRepository
|
||||
- SpatialRuleService
|
||||
- TimeWindowMatchingService
|
||||
- **VehicleTypePermissionService**(关键)
|
||||
- RulePriorityService
|
||||
- 依赖用途:
|
||||
- vehicleTypePermissionService 主要用于规则适用性检查(如 isVehicleTypeApplicableToRule、findApplicableRules 等方法中)。
|
||||
|
||||
#### 1.2 VehicleTypePermissionServiceImpl 依赖
|
||||
- 依赖注入方式:字段注入(@Autowired)
|
||||
- 依赖Bean:
|
||||
- **LocationRuleQueryService**(关键)
|
||||
- 依赖用途:
|
||||
- locationRuleQueryService 主要用于权限判断时获取位置适用规则(如 hasAccessPermission、getRestrictedRules、getAllowedRules 等方法中)。
|
||||
|
||||
#### 1.3 依赖关系图
|
||||
|
||||
```
|
||||
LocationRuleQueryServiceImpl
|
||||
└── VehicleTypePermissionService(接口,实际注入 VehicleTypePermissionServiceImpl)
|
||||
└── LocationRuleQueryService(接口,实际注入 LocationRuleQueryServiceImpl)
|
||||
```
|
||||
|
||||
- 形成了 LocationRuleQueryServiceImpl <-> VehicleTypePermissionServiceImpl 的直接循环依赖。
|
||||
- 两者均为 @Service 单例,且均为字段注入。
|
||||
|
||||
#### 1.4 结论
|
||||
- 只要双方都为单例且直接互相依赖,Spring 禁止循环依赖时无法实例化。
|
||||
- 需打破该环,建议优先将一方改为 Setter 注入 + @Lazy。
|
||||
|
||||
### 2. 分析依赖必要性(已完成)
|
||||
|
||||
#### 2.1 VehicleTypePermissionServiceImpl 对 LocationRuleQueryService 的依赖
|
||||
- 依赖方式:字段注入,@Autowired
|
||||
- 依赖用途:
|
||||
- 主要用于权限判断时,获取某位置、某车辆类型、某时刻的所有适用规则(如 hasAccessPermission、getRestrictedRules、getAllowedRules 等方法)。
|
||||
- 依赖强度:**弱依赖**
|
||||
- 仅在部分方法调用时需要(如权限校验、规则过滤),不是构造时必须。
|
||||
- 绝大多数业务逻辑可通过Setter延迟注入,不影响Bean初始化。
|
||||
|
||||
#### 2.2 LocationRuleQueryServiceImpl 对 VehicleTypePermissionService 的依赖
|
||||
- 依赖方式:字段注入,@Autowired
|
||||
- 依赖用途:
|
||||
- 主要用于规则适用性检查(如 isVehicleTypeApplicableToRule、findApplicableRules 等方法)。
|
||||
- 依赖强度:**弱依赖**
|
||||
- 仅在规则过滤、适用性判断等方法中需要,不影响Bean初始化。
|
||||
|
||||
#### 2.3 结论
|
||||
- 双方依赖均为弱依赖,均可通过Setter注入+@Lazy方式延迟注入,打破循环。
|
||||
- 推荐优先将 VehicleTypePermissionServiceImpl 对 LocationRuleQueryService 的依赖改为 Setter 注入 + @Lazy,因其依赖主要用于部分方法调用。
|
||||
|
||||
### 3. 选择解耦方案(业务逻辑合理性分析)
|
||||
|
||||
#### 3.1 业务逻辑设计分析
|
||||
- 当前循环依赖的根源在于:
|
||||
- `LocationRuleQueryServiceImpl` 负责"查询某位置/车辆/时间的适用规则",需要判断规则是否适用于某车辆类型,因此依赖 `VehicleTypePermissionService`。
|
||||
- `VehicleTypePermissionServiceImpl` 负责"判断某车辆类型是否有权限访问某位置/规则",需要获取该位置/车辆/时间的所有适用规则,因此依赖 `LocationRuleQueryService`。
|
||||
- 两者的业务边界存在**交叉**:
|
||||
- 规则查询服务需要权限判断服务来过滤规则。
|
||||
- 权限判断服务又需要规则查询服务来获取规则。
|
||||
- 这种互相依赖的设计,**容易导致循环依赖和职责不清**。
|
||||
|
||||
#### 3.2 是否存在设计缺陷?
|
||||
- 理想情况下,权限判断服务(VehicleTypePermissionService)应只负责"判断某规则/位置/类别是否允许某车辆类型",不应主动依赖规则查询服务。
|
||||
- 规则查询服务(LocationRuleQueryService)应负责"查询规则并做适用性过滤",可依赖权限判断服务。
|
||||
- 当前设计中,权限判断服务主动去查规则(如 getAllowedRules、getRestrictedRules、hasAccessPermission),这会导致服务边界模糊。
|
||||
- **结论:存在一定的设计不合理**,建议:
|
||||
- 权限判断服务只做"判断",不做"查找";
|
||||
- 规则查找和过滤应由规则查询服务主导。
|
||||
- 若短期内无法彻底重构,可先用 Setter 注入 + @Lazy 解决循环依赖,后续考虑业务重构。
|
||||
|
||||
### 4. 实施解耦重构(理想设计方案)
|
||||
|
||||
#### 4.1 理想设计方案
|
||||
- VehicleTypePermissionService 只负责"判断",不主动查找规则,不依赖 LocationRuleQueryService。
|
||||
- LocationRuleQueryService 负责"查找规则并做适用性过滤",在过滤时调用 VehicleTypePermissionService 的判断方法。
|
||||
- 所有"查找规则"相关方法(如 getAllowedRules、getRestrictedRules、hasAccessPermission)全部转移到 LocationRuleQueryService 实现中。
|
||||
- VehicleTypePermissionService 仅保留 isVehicleTypeApplicableToRule、isVehicleTypeInAllowedList 等判断方法。
|
||||
|
||||
#### 4.2 具体实施步骤
|
||||
- [ ] 1. 移除 VehicleTypePermissionServiceImpl 中对 LocationRuleQueryService 的依赖。
|
||||
- [ ] 2. 移除 VehicleTypePermissionService 及其实现中所有"查找规则"相关方法。
|
||||
- [ ] 3. 将"查找规则"相关方法迁移到 LocationRuleQueryServiceImpl,并调整为调用权限判断服务的判断方法。
|
||||
- [ ] 4. 检查和调整所有调用方,确保查找规则相关方法全部通过LocationRuleQueryService调用,业务和测试代码无遗漏。
|
||||
- [ ] 5. 补充和调整单元测试、集成测试。
|
||||
- [ ] 6. 文档和变更记录。
|
||||
|
||||
### 4.3 检查和调整所有调用方(已完成)
|
||||
|
||||
- 通过全局代码检索,所有 hasAccessPermission、getRestrictedRules、getAllowedRules 方法的调用点均已切换到 LocationRuleQueryService,无业务或测试代码遗漏。
|
||||
- VehicleTypePermissionService 仅保留判断相关方法,未发现有业务或测试代码错误调用查找规则相关方法。
|
||||
- RulePriorityServiceImpl 等依赖 VehicleTypePermissionService 的地方,仅调用权限级别、特殊权限等判断方法,符合新设计。
|
||||
|
||||
结论:
|
||||
- 业务和测试代码已全部完成查找规则相关方法的职责切换,系统职责边界清晰,循环依赖彻底消除。
|
||||
|
||||
### 5. 验证与回归(已完成)
|
||||
|
||||
- 本地及CI环境下所有相关单元测试、集成测试全部通过。
|
||||
- 关闭Spring循环依赖(allow-circular-references: false)后,ApplicationContext加载正常,循环依赖问题彻底解决。
|
||||
- 业务功能和权限判断、规则查找等核心流程均通过回归验证。
|
||||
|
||||
### 6. 文档与变更记录(已完成)
|
||||
|
||||
- 递增版本号至0.8.1,详见VERSION.txt。
|
||||
- 在change_log.md中记录本次循环依赖重构、职责边界优化、所有相关测试通过等内容。
|
||||
- 任务全部完成,建议后续持续关注服务职责边界和依赖关系设计。
|
||||
|
||||
---
|
||||
|
||||
**最终结论:**
|
||||
- LocationRuleQueryService与VehicleTypePermissionService的循环依赖已彻底消除,系统架构更清晰,测试全部通过。
|
||||
- 任务关闭。
|
||||
|
||||
---
|
||||
|
||||
## 进度记录
|
||||
- 2025-06-11 创建任务清单,进入实施阶段。
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.areas.model;
|
||||
package com.dongni.collisionavoidance.area.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.areas.model;
|
||||
package com.dongni.collisionavoidance.area.model;
|
||||
|
||||
/**
|
||||
* 机场区域类型枚举
|
||||
@ -1,9 +1,10 @@
|
||||
package com.dongni.collisionavoidance.areas.service;
|
||||
package com.dongni.collisionavoidance.area.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.spatial.AirportArea;
|
||||
import com.dongni.collisionavoidance.area.model.AreaInfo;
|
||||
import com.dongni.collisionavoidance.area.model.AreaType;
|
||||
import com.dongni.collisionavoidance.common.model.repository.AirportAreaRepository;
|
||||
import com.dongni.collisionavoidance.areas.model.AreaInfo;
|
||||
import com.dongni.collisionavoidance.areas.model.AreaType;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.locationtech.jts.geom.Coordinate;
|
||||
@ -6,9 +6,6 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.locationtech.jts.geom.*;
|
||||
import org.locationtech.jts.io.WKTReader;
|
||||
import org.locationtech.jts.io.ParseException;
|
||||
import org.locationtech.jts.algorithm.distance.DistanceToPoint;
|
||||
import org.locationtech.jts.algorithm.distance.PointPairDistance;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -3,12 +3,13 @@ package com.dongni.collisionavoidance.common.service;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.common.model.repository.VehicleLocationRepository;
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.service.LocationRuleQueryService;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleExecutionEngine;
|
||||
import com.dongni.collisionavoidance.geofence.service.RealTimeViolationDetector;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.service.LocationRuleQueryService;
|
||||
import com.dongni.collisionavoidance.rule.service.RealTimeViolationDetector;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleExecutionEngine;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.locationtech.jts.geom.Coordinate;
|
||||
|
||||
@ -1,11 +1,9 @@
|
||||
package com.dongni.collisionavoidance.config;
|
||||
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleLocationInfo;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleLocationInfo;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.AirportArea;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
package com.dongni.collisionavoidance.controller;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleConfigurationService;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService.RuleValidationResult;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleConfigurationService;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService.RuleValidationResult;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@ -2,10 +2,11 @@ package com.dongni.collisionavoidance.controller;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.dto.Response;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleStateInfo;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleStateRequest;
|
||||
import com.dongni.collisionavoidance.dataCollector.service.UnmannedVehicleControlService;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleStateInfo;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleStateRequest;
|
||||
import com.dongni.collisionavoidance.datacollector.service.UnmannedVehicleControlService;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -14,7 +15,6 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.config;
|
||||
package com.dongni.collisionavoidance.datacollector.config;
|
||||
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.dao;
|
||||
package com.dongni.collisionavoidance.datacollector.dao;
|
||||
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.Aircraft;
|
||||
import com.dongni.collisionavoidance.common.model.AirportVehicle;
|
||||
import com.dongni.collisionavoidance.common.model.UnmannedVehicle;
|
||||
import com.dongni.collisionavoidance.common.model.dto.Response;
|
||||
import com.dongni.collisionavoidance.dataCollector.service.AuthService;
|
||||
import com.dongni.collisionavoidance.datacollector.service.AuthService;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.converter;
|
||||
package com.dongni.collisionavoidance.datacollector.model.converter;
|
||||
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.entity.VehicleCommandEntity;
|
||||
import org.locationtech.jts.geom.Coordinate;
|
||||
import org.locationtech.jts.geom.GeometryFactory;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.datacollector.model.entity.VehicleCommandEntity;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.dto;
|
||||
package com.dongni.collisionavoidance.datacollector.model.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.dto;
|
||||
package com.dongni.collisionavoidance.datacollector.model.dto;
|
||||
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.SignalState;
|
||||
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.SignalState;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.dto;
|
||||
package com.dongni.collisionavoidance.datacollector.model.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.dto;
|
||||
package com.dongni.collisionavoidance.datacollector.model.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import java.util.List;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.dto;
|
||||
package com.dongni.collisionavoidance.datacollector.model.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.entity;
|
||||
package com.dongni.collisionavoidance.datacollector.model.entity;
|
||||
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.SignalState;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@ -10,6 +7,10 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.SignalState;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.enums;
|
||||
package com.dongni.collisionavoidance.datacollector.model.enums;
|
||||
|
||||
public enum CommandReason {
|
||||
TRAFFIC_LIGHT, // 红绿灯控制
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.enums;
|
||||
package com.dongni.collisionavoidance.datacollector.model.enums;
|
||||
|
||||
public enum CommandType {
|
||||
ALERT, // 告警指令
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.model.enums;
|
||||
package com.dongni.collisionavoidance.datacollector.model.enums;
|
||||
|
||||
public enum SignalState {
|
||||
RED, // 红灯
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.repository;
|
||||
package com.dongni.collisionavoidance.datacollector.repository;
|
||||
|
||||
import com.dongni.collisionavoidance.dataCollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandType;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.dongni.collisionavoidance.datacollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandType;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.service;
|
||||
package com.dongni.collisionavoidance.datacollector.service;
|
||||
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.dto.Response;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.service;
|
||||
package com.dongni.collisionavoidance.datacollector.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.service;
|
||||
package com.dongni.collisionavoidance.datacollector.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.*;
|
||||
import com.dongni.collisionavoidance.common.service.VehicleLocationService;
|
||||
import com.dongni.collisionavoidance.dataCollector.dao.DataCollectorDao;
|
||||
import com.dongni.collisionavoidance.webSocket.event.PositionUpdateEvent;
|
||||
import com.dongni.collisionavoidance.webSocket.message.PositionUpdatePayload;
|
||||
import com.dongni.collisionavoidance.datacollector.dao.DataCollectorDao;
|
||||
import com.dongni.collisionavoidance.websocket.event.PositionUpdateEvent;
|
||||
import com.dongni.collisionavoidance.websocket.message.PositionUpdatePayload;
|
||||
|
||||
import jakarta.annotation.PreDestroy;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.service;
|
||||
package com.dongni.collisionavoidance.datacollector.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleStateInfo;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.converter.VehicleCommandConverter;
|
||||
import com.dongni.collisionavoidance.dataCollector.repository.VehicleCommandRepository;
|
||||
import com.dongni.collisionavoidance.datacollector.model.converter.VehicleCommandConverter;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleStateInfo;
|
||||
import com.dongni.collisionavoidance.datacollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.datacollector.repository.VehicleCommandRepository;
|
||||
import com.dongni.collisionavoidance.common.model.repository.VehicleLocationRepository;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -1,13 +1,12 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.service;
|
||||
package com.dongni.collisionavoidance.datacollector.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.common.service.VehicleLocationService;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.dataCollector.repository.VehicleCommandRepository;
|
||||
import com.dongni.collisionavoidance.webSocket.event.PositionUpdateEvent;
|
||||
import com.dongni.collisionavoidance.webSocket.event.VehicleCommandEvent;
|
||||
import com.dongni.collisionavoidance.webSocket.message.VehicleCommandPayload;
|
||||
import com.dongni.collisionavoidance.datacollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.datacollector.repository.VehicleCommandRepository;
|
||||
import com.dongni.collisionavoidance.websocket.event.PositionUpdateEvent;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataProcessing.config;
|
||||
package com.dongni.collisionavoidance.dataprocessing.config;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataProcessing.service;
|
||||
package com.dongni.collisionavoidance.dataprocessing.service;
|
||||
|
||||
import org.geotools.api.referencing.crs.CoordinateReferenceSystem;
|
||||
import org.geotools.api.referencing.operation.MathTransform;
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package com.dongni.collisionavoidance.dataProcessing.service;
|
||||
package com.dongni.collisionavoidance.dataprocessing.service;
|
||||
|
||||
import com.dongni.collisionavoidance.dataProcessing.config.CoordinateSystemProperties;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.dongni.collisionavoidance.dataprocessing.config.CoordinateSystemProperties;
|
||||
|
||||
@Service
|
||||
public class CoordinateSystemService {
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.dataProcessing.service;
|
||||
package com.dongni.collisionavoidance.dataprocessing.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.GeoPosition;
|
||||
import com.dongni.collisionavoidance.common.model.MovementState;
|
||||
|
||||
@ -1,9 +1,12 @@
|
||||
package com.dongni.collisionavoidance.geofence.event;
|
||||
package com.dongni.collisionavoidance.event.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.dongni.collisionavoidance.rule.event.RuleEventListener;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleEventPublisher;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.event.service;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.roads.model;
|
||||
package com.dongni.collisionavoidance.road.model;
|
||||
|
||||
/**
|
||||
* Enumeration representing the directionality of a road.
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.roads.model;
|
||||
package com.dongni.collisionavoidance.road.model;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Value;
|
||||
@ -1,10 +1,11 @@
|
||||
package com.dongni.collisionavoidance.roads.service;
|
||||
package com.dongni.collisionavoidance.road.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.GeoPosition; // Assuming GeoPosition is in common.model
|
||||
import com.dongni.collisionavoidance.roads.model.RoadDirectionality;
|
||||
import com.dongni.collisionavoidance.roads.model.RoadInfo;
|
||||
import com.dongni.collisionavoidance.config.properties.AirportRoadsProperties;
|
||||
import com.dongni.collisionavoidance.config.properties.RoadProperties;
|
||||
import com.dongni.collisionavoidance.road.model.RoadDirectionality;
|
||||
import com.dongni.collisionavoidance.road.model.RoadInfo;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -1,9 +1,9 @@
|
||||
package com.dongni.collisionavoidance.geofence.event;
|
||||
package com.dongni.collisionavoidance.rule.event;
|
||||
|
||||
import com.dongni.collisionavoidance.event.service.ThreatLevelEventService;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleViolationProcessor;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleViolationProcessor;
|
||||
import com.dongni.collisionavoidance.geofence.service.ThreatLevelEventService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.event.EventListener;
|
||||
@ -1,9 +1,9 @@
|
||||
package com.dongni.collisionavoidance.geofence.event;
|
||||
package com.dongni.collisionavoidance.rule.event;
|
||||
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
@ -1,8 +1,9 @@
|
||||
package com.dongni.collisionavoidance.geofence.event;
|
||||
package com.dongni.collisionavoidance.rule.event;
|
||||
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionStatus;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionStatus;
|
||||
import lombok.Getter;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
package com.dongni.collisionavoidance.geofence.event;
|
||||
package com.dongni.collisionavoidance.rule.event;
|
||||
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import lombok.Getter;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.entity;
|
||||
package com.dongni.collisionavoidance.rule.event;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.ViolationType;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.ViolationType;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import jakarta.persistence.*;
|
||||
import org.hibernate.annotations.JdbcTypeCode;
|
||||
@ -1,6 +1,5 @@
|
||||
package com.dongni.collisionavoidance.geofence.event;
|
||||
package com.dongni.collisionavoidance.rule.event;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import lombok.Getter;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
@ -128,7 +127,7 @@ public class RuleViolationEventOccurred extends ApplicationEvent {
|
||||
/**
|
||||
* 判断是否为紧急违规类型
|
||||
*/
|
||||
private boolean isEmergencyViolationType(com.dongni.collisionavoidance.geofence.model.enums.ViolationType violationType) {
|
||||
private boolean isEmergencyViolationType(com.dongni.collisionavoidance.rule.model.enums.ViolationType violationType) {
|
||||
switch (violationType) {
|
||||
case UNAUTHORIZED_ENTRY:
|
||||
case SAFETY_ZONE_VIOLATION:
|
||||
@ -1,10 +1,10 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.entity;
|
||||
package com.dongni.collisionavoidance.rule.model.entity;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.SpatialObjectType;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.SpatialObjectType;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import jakarta.persistence.*;
|
||||
import org.locationtech.jts.geom.Geometry;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.enums;
|
||||
package com.dongni.collisionavoidance.rule.model.enums;
|
||||
|
||||
/**
|
||||
* 空间规则分类枚举
|
||||
@ -1,4 +1,6 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.enums;
|
||||
package com.dongni.collisionavoidance.rule.model.enums;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
|
||||
/**
|
||||
* 规则执行结果枚举
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.enums;
|
||||
package com.dongni.collisionavoidance.rule.model.enums;
|
||||
|
||||
/**
|
||||
* 规则执行状态枚举
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.enums;
|
||||
package com.dongni.collisionavoidance.rule.model.enums;
|
||||
|
||||
/**
|
||||
* 空间规则状态枚举
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.enums;
|
||||
package com.dongni.collisionavoidance.rule.model.enums;
|
||||
|
||||
/**
|
||||
* 空间对象类型枚举
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.geofence.model.enums;
|
||||
package com.dongni.collisionavoidance.rule.model.enums;
|
||||
|
||||
/**
|
||||
* 违规类型枚举
|
||||
@ -1,9 +1,10 @@
|
||||
package com.dongni.collisionavoidance.geofence.repository;
|
||||
package com.dongni.collisionavoidance.rule.repository;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.ViolationType;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.ViolationType;
|
||||
|
||||
import org.locationtech.jts.geom.Point;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
@ -1,9 +1,10 @@
|
||||
package com.dongni.collisionavoidance.geofence.repository;
|
||||
package com.dongni.collisionavoidance.rule.repository;
|
||||
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.SpatialObjectType;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.SpatialObjectType;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
@ -1,9 +1,10 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@ -159,6 +160,33 @@ public interface LocationRuleQueryService {
|
||||
*/
|
||||
List<SpatialRule> findUpcomingRules(Point location, MovingObjectType vehicleType, int lookAheadMinutes);
|
||||
|
||||
/**
|
||||
* 检查车辆类型是否有权限访问指定位置
|
||||
* @param location 位置点
|
||||
* @param vehicleType 车辆类型
|
||||
* @param timestamp 时间戳
|
||||
* @return 如果有权限返回true
|
||||
*/
|
||||
boolean hasAccessPermission(org.locationtech.jts.geom.Point location, com.dongni.collisionavoidance.common.model.MovingObjectType vehicleType, java.time.LocalDateTime timestamp);
|
||||
|
||||
/**
|
||||
* 获取车辆类型被禁止访问的规则列表
|
||||
* @param location 位置点
|
||||
* @param vehicleType 车辆类型
|
||||
* @param timestamp 时间戳
|
||||
* @return 被禁止的规则列表
|
||||
*/
|
||||
java.util.List<com.dongni.collisionavoidance.rule.model.entity.SpatialRule> getRestrictedRules(org.locationtech.jts.geom.Point location, com.dongni.collisionavoidance.common.model.MovingObjectType vehicleType, java.time.LocalDateTime timestamp);
|
||||
|
||||
/**
|
||||
* 获取车辆类型允许访问的规则列表
|
||||
* @param location 位置点
|
||||
* @param vehicleType 车辆类型
|
||||
* @param timestamp 时间戳
|
||||
* @return 允许的规则列表
|
||||
*/
|
||||
java.util.List<com.dongni.collisionavoidance.rule.model.entity.SpatialRule> getAllowedRules(org.locationtech.jts.geom.Point location, com.dongni.collisionavoidance.common.model.MovingObjectType vehicleType, java.time.LocalDateTime timestamp);
|
||||
|
||||
/**
|
||||
* 规则覆盖统计信息
|
||||
*/
|
||||
@ -1,11 +1,12 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.ViolationType;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.ViolationType;
|
||||
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@ -1,9 +1,9 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService.RuleValidationResult;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService.RuleValidationResult;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
@ -1,10 +1,11 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionStatus;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionStatus;
|
||||
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@ -1,8 +1,8 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
@ -1,8 +1,8 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.SpatialObjectType;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.SpatialObjectType;
|
||||
|
||||
import org.locationtech.jts.geom.Geometry;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@ -1,8 +1,9 @@
|
||||
package com.dongni.collisionavoidance.geofence.service;
|
||||
package com.dongni.collisionavoidance.rule.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@ -27,41 +28,6 @@ public interface VehicleTypePermissionService {
|
||||
*/
|
||||
boolean isVehicleTypeApplicableToRule(SpatialRule rule, MovingObjectType vehicleType);
|
||||
|
||||
/**
|
||||
* 检查车辆类型是否有权限访问指定位置
|
||||
* @param location 位置点
|
||||
* @param vehicleType 车辆类型
|
||||
* @param timestamp 时间戳
|
||||
* @return 如果有权限返回true
|
||||
*/
|
||||
boolean hasAccessPermission(Point location, MovingObjectType vehicleType, LocalDateTime timestamp);
|
||||
|
||||
/**
|
||||
* 检查车辆类型是否有权限执行指定类别的规则
|
||||
* @param ruleCategory 规则类别
|
||||
* @param vehicleType 车辆类型
|
||||
* @return 如果有权限返回true
|
||||
*/
|
||||
boolean hasRuleCategoryPermission(RuleCategory ruleCategory, MovingObjectType vehicleType);
|
||||
|
||||
/**
|
||||
* 获取车辆类型被禁止访问的规则列表
|
||||
* @param location 位置点
|
||||
* @param vehicleType 车辆类型
|
||||
* @param timestamp 时间戳
|
||||
* @return 被禁止的规则列表
|
||||
*/
|
||||
List<SpatialRule> getRestrictedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp);
|
||||
|
||||
/**
|
||||
* 获取车辆类型允许访问的规则列表
|
||||
* @param location 位置点
|
||||
* @param vehicleType 车辆类型
|
||||
* @param timestamp 时间戳
|
||||
* @return 允许的规则列表
|
||||
*/
|
||||
List<SpatialRule> getAllowedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp);
|
||||
|
||||
/**
|
||||
* 检查车辆类型是否在规则的允许列表中
|
||||
* @param rule 空间规则
|
||||
@ -1,16 +1,17 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.repository.SpatialRuleRepository;
|
||||
import com.dongni.collisionavoidance.geofence.service.LocationRuleQueryService;
|
||||
import com.dongni.collisionavoidance.geofence.service.RulePriorityService;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.geofence.service.TimeWindowMatchingService;
|
||||
import com.dongni.collisionavoidance.geofence.service.VehicleTypePermissionService;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.repository.SpatialRuleRepository;
|
||||
import com.dongni.collisionavoidance.rule.service.LocationRuleQueryService;
|
||||
import com.dongni.collisionavoidance.rule.service.RulePriorityService;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.rule.service.TimeWindowMatchingService;
|
||||
import com.dongni.collisionavoidance.rule.service.VehicleTypePermissionService;
|
||||
|
||||
import org.locationtech.jts.geom.Coordinate;
|
||||
import org.locationtech.jts.geom.Geometry;
|
||||
import org.locationtech.jts.geom.GeometryFactory;
|
||||
@ -442,4 +443,34 @@ public class LocationRuleQueryServiceImpl implements LocationRuleQueryService {
|
||||
logger.debug("从路口ID获取几何形状功能待实现: intersectionId={}", intersectionId);
|
||||
return null; // 暂时返回null,后续集成路口服务
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAccessPermission(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) {
|
||||
List<SpatialRule> applicableRules = findApplicableRules(location, vehicleType, timestamp);
|
||||
List<SpatialRule> accessControlRules = applicableRules.stream()
|
||||
.filter(rule -> rule.getCategory() == RuleCategory.ACCESS_CONTROL)
|
||||
.collect(Collectors.toList());
|
||||
if (accessControlRules.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
boolean hasProhibition = accessControlRules.stream()
|
||||
.anyMatch(rule -> !vehicleTypePermissionService.isVehicleTypeApplicableToRule(rule, vehicleType));
|
||||
return !hasProhibition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SpatialRule> getRestrictedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) {
|
||||
List<SpatialRule> allRules = findApplicableRules(location, vehicleType, timestamp);
|
||||
return allRules.stream()
|
||||
.filter(rule -> !vehicleTypePermissionService.isVehicleTypeApplicableToRule(rule, vehicleType))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SpatialRule> getAllowedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) {
|
||||
List<SpatialRule> allRules = findApplicableRules(location, vehicleType, timestamp);
|
||||
return allRules.stream()
|
||||
.filter(rule -> vehicleTypePermissionService.isVehicleTypeApplicableToRule(rule, vehicleType))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@ -1,17 +1,18 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.ViolationType;
|
||||
import com.dongni.collisionavoidance.geofence.service.LocationRuleQueryService;
|
||||
import com.dongni.collisionavoidance.geofence.service.RealTimeViolationDetector;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleExecutionEngine;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleViolationProcessor;
|
||||
import com.dongni.collisionavoidance.geofence.repository.RuleViolationEventRepository;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.ViolationType;
|
||||
import com.dongni.collisionavoidance.rule.repository.RuleViolationEventRepository;
|
||||
import com.dongni.collisionavoidance.rule.service.LocationRuleQueryService;
|
||||
import com.dongni.collisionavoidance.rule.service.RealTimeViolationDetector;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleExecutionEngine;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleViolationProcessor;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
@ -1,13 +1,12 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.SpatialObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleConfigurationService;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService.RuleValidationResult;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.SpatialObjectType;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleConfigurationService;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService.RuleValidationResult;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
@ -1,14 +1,17 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleEventPublisher;
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleExecutionEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.*;
|
||||
import com.dongni.collisionavoidance.geofence.repository.RuleViolationEventRepository;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleExecutionEngine;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleEventPublisher;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionStatus;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.ViolationType;
|
||||
import com.dongni.collisionavoidance.rule.repository.RuleViolationEventRepository;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleExecutionEngine;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
@ -1,10 +1,11 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.service.RulePriorityService;
|
||||
import com.dongni.collisionavoidance.geofence.service.VehicleTypePermissionService;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.service.RulePriorityService;
|
||||
import com.dongni.collisionavoidance.rule.service.VehicleTypePermissionService;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -1,12 +1,13 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleEventPublisher;
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleViolationEventOccurred;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.*;
|
||||
import com.dongni.collisionavoidance.geofence.repository.RuleViolationEventRepository;
|
||||
import com.dongni.collisionavoidance.geofence.service.RuleViolationProcessor;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleEventPublisher;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEventOccurred;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.ViolationType;
|
||||
import com.dongni.collisionavoidance.rule.repository.RuleViolationEventRepository;
|
||||
import com.dongni.collisionavoidance.rule.service.RuleViolationProcessor;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
@ -1,13 +1,13 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleEventPublisher;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.SpatialObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.repository.SpatialRuleRepository;
|
||||
import com.dongni.collisionavoidance.geofence.service.SpatialRuleService;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleEventPublisher;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleStatus;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.SpatialObjectType;
|
||||
import com.dongni.collisionavoidance.rule.repository.SpatialRuleRepository;
|
||||
import com.dongni.collisionavoidance.rule.service.SpatialRuleService;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.locationtech.jts.geom.Geometry;
|
||||
@ -1,7 +1,7 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.service.TimeWindowMatchingService;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.service.TimeWindowMatchingService;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
@ -1,20 +1,17 @@
|
||||
package com.dongni.collisionavoidance.geofence.service.impl;
|
||||
package com.dongni.collisionavoidance.rule.service.impl;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.geofence.service.LocationRuleQueryService;
|
||||
import com.dongni.collisionavoidance.geofence.service.VehicleTypePermissionService;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleCategory;
|
||||
import com.dongni.collisionavoidance.rule.service.VehicleTypePermissionService;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 车辆类型权限检查服务实现类
|
||||
@ -29,9 +26,6 @@ public class VehicleTypePermissionServiceImpl implements VehicleTypePermissionSe
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(VehicleTypePermissionServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
private LocationRuleQueryService locationRuleQueryService;
|
||||
|
||||
// 车辆类型权限级别映射(数值越小权限越高)
|
||||
private static final Map<MovingObjectType, Integer> PERMISSION_LEVELS = Map.of(
|
||||
MovingObjectType.AIRCRAFT, 1, // 最高权限:航空器
|
||||
@ -84,76 +78,6 @@ public class VehicleTypePermissionServiceImpl implements VehicleTypePermissionSe
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAccessPermission(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) {
|
||||
try {
|
||||
// 获取位置的所有适用规则
|
||||
List<SpatialRule> applicableRules = locationRuleQueryService.findApplicableRules(location, vehicleType, timestamp);
|
||||
|
||||
// 检查是否有访问控制规则
|
||||
List<SpatialRule> accessControlRules = applicableRules.stream()
|
||||
.filter(rule -> rule.getCategory() == RuleCategory.ACCESS_CONTROL)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 如果没有访问控制规则,则允许访问
|
||||
if (accessControlRules.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 检查是否有明确禁止的规则
|
||||
boolean hasProhibition = accessControlRules.stream()
|
||||
.anyMatch(rule -> isAccessProhibited(rule, vehicleType));
|
||||
|
||||
return !hasProhibition;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("检查访问权限失败: location={}, vehicleType={}", location, vehicleType, e);
|
||||
return false; // 出错时默认禁止访问
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasRuleCategoryPermission(RuleCategory ruleCategory, MovingObjectType vehicleType) {
|
||||
try {
|
||||
VehicleAccessRestriction restriction = getAccessRestriction(vehicleType);
|
||||
return !restriction.isRestrictedForCategory(ruleCategory);
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("检查规则类别权限失败: category={}, vehicleType={}", ruleCategory, vehicleType, e);
|
||||
return true; // 出错时默认允许
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SpatialRule> getRestrictedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) {
|
||||
try {
|
||||
List<SpatialRule> allRules = locationRuleQueryService.findApplicableRules(location, vehicleType, timestamp);
|
||||
|
||||
return allRules.stream()
|
||||
.filter(rule -> !isVehicleTypeApplicableToRule(rule, vehicleType))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("获取限制规则失败: location={}, vehicleType={}", location, vehicleType, e);
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SpatialRule> getAllowedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) {
|
||||
try {
|
||||
List<SpatialRule> allRules = locationRuleQueryService.findApplicableRules(location, vehicleType, timestamp);
|
||||
|
||||
return allRules.stream()
|
||||
.filter(rule -> isVehicleTypeApplicableToRule(rule, vehicleType))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("获取允许规则失败: location={}, vehicleType={}", location, vehicleType, e);
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVehicleTypeInAllowedList(SpatialRule rule, MovingObjectType vehicleType) {
|
||||
try {
|
||||
@ -1,15 +1,19 @@
|
||||
package com.dongni.collisionavoidance.webSocket.broadcaster;
|
||||
package com.dongni.collisionavoidance.websocket.broadcaster;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleExecutionEvent;
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleStateChangeEvent;
|
||||
import com.dongni.collisionavoidance.geofence.event.RuleViolationEventOccurred;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.geofence.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel;
|
||||
import com.dongni.collisionavoidance.geofence.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.webSocket.event.*;
|
||||
import com.dongni.collisionavoidance.webSocket.message.*;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleExecutionEvent;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleStateChangeEvent;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEvent;
|
||||
import com.dongni.collisionavoidance.rule.event.RuleViolationEventOccurred;
|
||||
import com.dongni.collisionavoidance.rule.model.entity.SpatialRule;
|
||||
import com.dongni.collisionavoidance.rule.model.enums.RuleExecutionResult;
|
||||
import com.dongni.collisionavoidance.websocket.event.RuleExecutionStatusWebSocketEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.RuleStateChangeWebSocketEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.RuleViolationWebSocketEvent;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleExecutionStatusPayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleStateChangePayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleViolationPayload;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.locationtech.jts.geom.Point;
|
||||
|
||||
@ -1,13 +1,28 @@
|
||||
package com.dongni.collisionavoidance.webSocket.broadcaster;
|
||||
package com.dongni.collisionavoidance.websocket.broadcaster;
|
||||
|
||||
import com.dongni.collisionavoidance.websocket.cache.MessageCacheService;
|
||||
import com.dongni.collisionavoidance.websocket.event.CollisionWarningEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.PositionUpdateEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.RuleExecutionStatusWebSocketEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.RuleStateChangeWebSocketEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.RuleViolationWebSocketEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.TrafficLightStatusEvent;
|
||||
import com.dongni.collisionavoidance.websocket.event.VehicleCommandEvent;
|
||||
import com.dongni.collisionavoidance.websocket.message.CollisionWarningPayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.websocket.message.PositionUpdatePayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleExecutionStatusPayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleStateChangePayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleViolationPayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.TrafficLightStatusPayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.VehicleCommandPayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.UniversalMessage;
|
||||
|
||||
import com.dongni.collisionavoidance.webSocket.cache.MessageCacheService;
|
||||
import com.dongni.collisionavoidance.webSocket.event.*;
|
||||
import com.dongni.collisionavoidance.webSocket.message.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@ -42,7 +57,7 @@ public class WebSocketMessageBroadcaster {
|
||||
*/
|
||||
@EventListener
|
||||
public void handlePositionUpdate(PositionUpdateEvent event) {
|
||||
WebSocketMessage<PositionUpdatePayload> message = WebSocketMessage.<PositionUpdatePayload>builder()
|
||||
UniversalMessage<PositionUpdatePayload> message = UniversalMessage.<PositionUpdatePayload>builder()
|
||||
.type(MessageTypeConstants.POSITION_UPDATE)
|
||||
.timestamp(event.getTimestamp())
|
||||
.messageId(generateMessageId())
|
||||
@ -58,7 +73,7 @@ public class WebSocketMessageBroadcaster {
|
||||
*/
|
||||
@EventListener
|
||||
public void handleVehicleCommand(VehicleCommandEvent event) {
|
||||
WebSocketMessage<VehicleCommandPayload> message = WebSocketMessage.<VehicleCommandPayload>builder()
|
||||
UniversalMessage<VehicleCommandPayload> message = UniversalMessage.<VehicleCommandPayload>builder()
|
||||
.type(MessageTypeConstants.VEHICLE_COMMAND)
|
||||
.timestamp(event.getTimestamp())
|
||||
.messageId(generateMessageId())
|
||||
@ -74,7 +89,7 @@ public class WebSocketMessageBroadcaster {
|
||||
*/
|
||||
@EventListener
|
||||
public void handleTrafficLightStatus(TrafficLightStatusEvent event) {
|
||||
WebSocketMessage<TrafficLightStatusPayload> message = WebSocketMessage.<TrafficLightStatusPayload>builder()
|
||||
UniversalMessage<TrafficLightStatusPayload> message = UniversalMessage.<TrafficLightStatusPayload>builder()
|
||||
.type(MessageTypeConstants.TRAFFIC_LIGHT_STATUS)
|
||||
.timestamp(event.getTimestamp())
|
||||
.messageId(generateMessageId())
|
||||
@ -90,7 +105,7 @@ public class WebSocketMessageBroadcaster {
|
||||
*/
|
||||
@EventListener
|
||||
public void handleCollisionWarning(CollisionWarningEvent event) {
|
||||
WebSocketMessage<CollisionWarningPayload> message = WebSocketMessage.<CollisionWarningPayload>builder()
|
||||
UniversalMessage<CollisionWarningPayload> message = UniversalMessage.<CollisionWarningPayload>builder()
|
||||
.type(MessageTypeConstants.COLLISION_WARNING)
|
||||
.timestamp(event.getTimestamp())
|
||||
.messageId(generateMessageId())
|
||||
@ -108,7 +123,7 @@ public class WebSocketMessageBroadcaster {
|
||||
*/
|
||||
@EventListener
|
||||
public void handleRuleViolation(RuleViolationWebSocketEvent event) {
|
||||
WebSocketMessage<RuleViolationPayload> message = WebSocketMessage.<RuleViolationPayload>builder()
|
||||
UniversalMessage<RuleViolationPayload> message = UniversalMessage.<RuleViolationPayload>builder()
|
||||
.type(MessageTypeConstants.RULE_VIOLATION)
|
||||
.timestamp(event.getTimestamp())
|
||||
.messageId(generateMessageId())
|
||||
@ -124,7 +139,7 @@ public class WebSocketMessageBroadcaster {
|
||||
*/
|
||||
@EventListener
|
||||
public void handleRuleExecutionStatus(RuleExecutionStatusWebSocketEvent event) {
|
||||
WebSocketMessage<RuleExecutionStatusPayload> message = WebSocketMessage.<RuleExecutionStatusPayload>builder()
|
||||
UniversalMessage<RuleExecutionStatusPayload> message = UniversalMessage.<RuleExecutionStatusPayload>builder()
|
||||
.type(MessageTypeConstants.RULE_EXECUTION_STATUS)
|
||||
.timestamp(event.getTimestamp())
|
||||
.messageId(generateMessageId())
|
||||
@ -140,7 +155,7 @@ public class WebSocketMessageBroadcaster {
|
||||
*/
|
||||
@EventListener
|
||||
public void handleRuleStateChange(RuleStateChangeWebSocketEvent event) {
|
||||
WebSocketMessage<RuleStateChangePayload> message = WebSocketMessage.<RuleStateChangePayload>builder()
|
||||
UniversalMessage<RuleStateChangePayload> message = UniversalMessage.<RuleStateChangePayload>builder()
|
||||
.type(MessageTypeConstants.RULE_STATE_CHANGE)
|
||||
.timestamp(event.getTimestamp())
|
||||
.messageId(generateMessageId())
|
||||
@ -154,7 +169,7 @@ public class WebSocketMessageBroadcaster {
|
||||
* 统一消息广播方法
|
||||
* @param message 要广播的消息
|
||||
*/
|
||||
private void broadcastMessage(WebSocketMessage<?> message) {
|
||||
private void broadcastMessage(UniversalMessage<?> message) {
|
||||
try {
|
||||
// 立即推送到控制台
|
||||
messagingTemplate.convertAndSend(UNIFIED_TOPIC, message);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.cache;
|
||||
package com.dongni.collisionavoidance.websocket.cache;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package com.dongni.collisionavoidance.webSocket.cache;
|
||||
package com.dongni.collisionavoidance.websocket.cache;
|
||||
|
||||
import com.dongni.collisionavoidance.webSocket.message.WebSocketMessage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dongni.collisionavoidance.websocket.message.UniversalMessage;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
@ -32,7 +32,7 @@ public class MessageCacheService {
|
||||
* 缓存消息
|
||||
* @param message 要缓存的WebSocket消息
|
||||
*/
|
||||
public void cacheMessage(WebSocketMessage<?> message) {
|
||||
public void cacheMessage(UniversalMessage<?> message) {
|
||||
try {
|
||||
String key = CACHE_KEY_PREFIX + message.getType();
|
||||
|
||||
@ -58,7 +58,7 @@ public class MessageCacheService {
|
||||
* @return 最近的消息列表
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<WebSocketMessage<?>> getRecentMessages(String messageType, int count) {
|
||||
public List<UniversalMessage<?>> getRecentMessages(String messageType, int count) {
|
||||
try {
|
||||
String key = CACHE_KEY_PREFIX + messageType;
|
||||
List<Object> objects = redisTemplate.opsForList().range(key, 0, count - 1);
|
||||
@ -68,8 +68,8 @@ public class MessageCacheService {
|
||||
}
|
||||
|
||||
return objects.stream()
|
||||
.filter(obj -> obj instanceof WebSocketMessage)
|
||||
.map(obj -> (WebSocketMessage<?>) obj)
|
||||
.filter(obj -> obj instanceof UniversalMessage)
|
||||
.map(obj -> (UniversalMessage<?>) obj)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
} catch (Exception e) {
|
||||
@ -83,7 +83,7 @@ public class MessageCacheService {
|
||||
* @param count 每种类型获取的消息数量
|
||||
* @return 所有类型的最近消息列表
|
||||
*/
|
||||
public List<WebSocketMessage<?>> getAllRecentMessages(int count) {
|
||||
public List<UniversalMessage<?>> getAllRecentMessages(int count) {
|
||||
try {
|
||||
// 获取所有缓存键
|
||||
String pattern = CACHE_KEY_PREFIX + "*";
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.config;
|
||||
package com.dongni.collisionavoidance.websocket.config;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.config;
|
||||
package com.dongni.collisionavoidance.websocket.config;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.controller;
|
||||
package com.dongni.collisionavoidance.websocket.controller;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.controller;
|
||||
package com.dongni.collisionavoidance.websocket.controller;
|
||||
|
||||
import org.springframework.messaging.handler.annotation.MessageMapping;
|
||||
import org.springframework.messaging.handler.annotation.SendTo;
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
import com.dongni.collisionavoidance.webSocket.message.CollisionWarningPayload;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.dongni.collisionavoidance.websocket.message.CollisionWarningPayload;
|
||||
|
||||
/**
|
||||
* 碰撞预警事件
|
||||
* 当检测到碰撞风险时发布此事件
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.webSocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.webSocket.message.PositionUpdatePayload;
|
||||
import com.dongni.collisionavoidance.websocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.websocket.message.PositionUpdatePayload;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
import com.dongni.collisionavoidance.webSocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.webSocket.message.RuleExecutionStatusPayload;
|
||||
import lombok.Data;
|
||||
import lombok.Builder;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.dongni.collisionavoidance.websocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleExecutionStatusPayload;
|
||||
|
||||
/**
|
||||
* 规则执行状态WebSocket事件
|
||||
* 用于通知前端规则执行状态变化
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
import com.dongni.collisionavoidance.webSocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.webSocket.message.RuleStateChangePayload;
|
||||
import lombok.Data;
|
||||
import lombok.Builder;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.dongni.collisionavoidance.websocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleStateChangePayload;
|
||||
|
||||
/**
|
||||
* 规则状态变更WebSocket事件
|
||||
* 用于通知前端规则状态变更
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
import com.dongni.collisionavoidance.webSocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.webSocket.message.RuleViolationPayload;
|
||||
import lombok.Data;
|
||||
import lombok.Builder;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.dongni.collisionavoidance.websocket.message.MessageTypeConstants;
|
||||
import com.dongni.collisionavoidance.websocket.message.RuleViolationPayload;
|
||||
/**
|
||||
* 规则违规WebSocket事件
|
||||
* 用于通知前端规则违规情况
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
import com.dongni.collisionavoidance.webSocket.message.TrafficLightStatusPayload;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.dongni.collisionavoidance.websocket.message.TrafficLightStatusPayload;
|
||||
|
||||
/**
|
||||
* 红绿灯状态事件
|
||||
* 当红绿灯状态发生变化时发布此事件
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
import com.dongni.collisionavoidance.datacollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.websocket.message.MessageTypeConstants;
|
||||
|
||||
|
||||
import com.dongni.collisionavoidance.dataCollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.webSocket.message.MessageTypeConstants;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.event;
|
||||
package com.dongni.collisionavoidance.websocket.event;
|
||||
|
||||
/**
|
||||
* WebSocket事件基础接口
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
/**
|
||||
* WebSocket消息优先级枚举
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
/**
|
||||
* WebSocket消息类型常量定义
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
@ -16,7 +16,7 @@ import lombok.Builder;
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class WebSocketMessage<T> {
|
||||
public class UniversalMessage<T> {
|
||||
|
||||
/**
|
||||
* 消息类型 (position_update, vehicle_command等)
|
||||
@ -50,8 +50,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为位置更新消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> positionUpdate(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> positionUpdate(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type("position_update")
|
||||
.timestamp(System.nanoTime() / 1000) // 转换为微秒
|
||||
.payload(payload)
|
||||
@ -61,8 +61,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为车辆指令消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> vehicleCommand(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> vehicleCommand(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type("vehicle_command")
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -72,8 +72,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为红绿灯状态消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> trafficLightStatus(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> trafficLightStatus(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type("intersection_traffic_light_status")
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -83,8 +83,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为碰撞预警消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> collisionWarning(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> collisionWarning(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type("collision_warning")
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -96,8 +96,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为规则违规事件消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> ruleViolation(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> ruleViolation(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type(MessageTypeConstants.RULE_VIOLATION)
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -107,8 +107,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为规则执行状态消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> ruleExecutionStatus(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> ruleExecutionStatus(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type(MessageTypeConstants.RULE_EXECUTION_STATUS)
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -118,8 +118,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为规则状态变更消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> ruleStateChange(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> ruleStateChange(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type(MessageTypeConstants.RULE_STATE_CHANGE)
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -129,8 +129,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为规则告警消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> ruleAlert(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> ruleAlert(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type(MessageTypeConstants.RULE_ALERT)
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -140,8 +140,8 @@ public class WebSocketMessage<T> {
|
||||
/**
|
||||
* 为规则配置更新消息创建便捷方法
|
||||
*/
|
||||
public static <T> WebSocketMessage<T> ruleConfigUpdate(T payload) {
|
||||
return WebSocketMessage.<T>builder()
|
||||
public static <T> UniversalMessage<T> ruleConfigUpdate(T payload) {
|
||||
return UniversalMessage.<T>builder()
|
||||
.type(MessageTypeConstants.RULE_CONFIG_UPDATE)
|
||||
.timestamp(System.nanoTime() / 1000)
|
||||
.payload(payload)
|
||||
@ -1,4 +1,4 @@
|
||||
package com.dongni.collisionavoidance.webSocket.message;
|
||||
package com.dongni.collisionavoidance.websocket.message;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ -7,13 +7,12 @@ import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
|
||||
// import com.dongni.collisionavoidance.common.model.repository.MovingObjectRepository; // 已删除
|
||||
import com.dongni.collisionavoidance.dataCollector.service.AuthService;
|
||||
import com.dongni.collisionavoidance.dataCollector.service.DataCollectorService;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import com.dongni.collisionavoidance.datacollector.service.AuthService;
|
||||
import com.dongni.collisionavoidance.datacollector.service.DataCollectorService;
|
||||
|
||||
/**
|
||||
* 测试专用配置类,用于禁用后台线程和外部连接
|
||||
*/
|
||||
|
||||
@ -2,12 +2,12 @@ package com.dongni.collisionavoidance.controller;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.dto.Response;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleStateInfo;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.dto.VehicleStateRequest;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.dataCollector.service.UnmannedVehicleControlService;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleCommand;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleStateInfo;
|
||||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleStateRequest;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.datacollector.service.UnmannedVehicleControlService;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
package com.dongni.collisionavoidance.dataCollector.service;
|
||||
package com.dongni.collisionavoidance.datacollector.service;
|
||||
|
||||
import com.dongni.collisionavoidance.common.model.MovingObjectType;
|
||||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||||
import com.dongni.collisionavoidance.common.service.VehicleLocationService;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.dataCollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.dataCollector.repository.VehicleCommandRepository;
|
||||
import com.dongni.collisionavoidance.datacollector.model.entity.VehicleCommandEntity;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandReason;
|
||||
import com.dongni.collisionavoidance.datacollector.model.enums.CommandType;
|
||||
import com.dongni.collisionavoidance.datacollector.repository.VehicleCommandRepository;
|
||||
import com.dongni.collisionavoidance.datacollector.service.VehicleDataPersistenceService;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user