diff --git a/VERSION.txt b/VERSION.txt index 8adc70f..c18d72b 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -0.8.0 \ No newline at end of file +0.8.1 \ No newline at end of file diff --git a/change_log.md b/change_log.md index b704ce0..be579cc 100644 --- a/change_log.md +++ b/change_log.md @@ -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 ### 重大修复 diff --git a/doc/work/fix_circular_dependency_location_rule_query_service.md b/doc/work/fix_circular_dependency_location_rule_query_service.md new file mode 100644 index 0000000..abe0911 --- /dev/null +++ b/doc/work/fix_circular_dependency_location_rule_query_service.md @@ -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 创建任务清单,进入实施阶段。 \ No newline at end of file diff --git a/src/main/java/com/dongni/collisionavoidance/areas/model/AreaInfo.java b/src/main/java/com/dongni/collisionavoidance/area/model/AreaInfo.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/areas/model/AreaInfo.java rename to src/main/java/com/dongni/collisionavoidance/area/model/AreaInfo.java index ba2f2aa..bd58836 100644 --- a/src/main/java/com/dongni/collisionavoidance/areas/model/AreaInfo.java +++ b/src/main/java/com/dongni/collisionavoidance/area/model/AreaInfo.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.areas.model; +package com.dongni.collisionavoidance.area.model; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/com/dongni/collisionavoidance/areas/model/AreaType.java b/src/main/java/com/dongni/collisionavoidance/area/model/AreaType.java similarity index 87% rename from src/main/java/com/dongni/collisionavoidance/areas/model/AreaType.java rename to src/main/java/com/dongni/collisionavoidance/area/model/AreaType.java index 1346251..b7d594f 100644 --- a/src/main/java/com/dongni/collisionavoidance/areas/model/AreaType.java +++ b/src/main/java/com/dongni/collisionavoidance/area/model/AreaType.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.areas.model; +package com.dongni.collisionavoidance.area.model; /** * 机场区域类型枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/areas/service/AreaConfigImportService.java b/src/main/java/com/dongni/collisionavoidance/area/service/AreaConfigImportService.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/areas/service/AreaConfigImportService.java rename to src/main/java/com/dongni/collisionavoidance/area/service/AreaConfigImportService.java index d7956b3..7ff94a7 100644 --- a/src/main/java/com/dongni/collisionavoidance/areas/service/AreaConfigImportService.java +++ b/src/main/java/com/dongni/collisionavoidance/area/service/AreaConfigImportService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/common/service/SpatialQueryService.java b/src/main/java/com/dongni/collisionavoidance/common/service/SpatialQueryService.java index 8f8dd71..f3b3ff9 100644 --- a/src/main/java/com/dongni/collisionavoidance/common/service/SpatialQueryService.java +++ b/src/main/java/com/dongni/collisionavoidance/common/service/SpatialQueryService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/common/service/VehicleLocationService.java b/src/main/java/com/dongni/collisionavoidance/common/service/VehicleLocationService.java index 0c2a0f6..d1e2dc1 100644 --- a/src/main/java/com/dongni/collisionavoidance/common/service/VehicleLocationService.java +++ b/src/main/java/com/dongni/collisionavoidance/common/service/VehicleLocationService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/config/RedisConfig.java b/src/main/java/com/dongni/collisionavoidance/config/RedisConfig.java index 96a135c..b8403d1 100644 --- a/src/main/java/com/dongni/collisionavoidance/config/RedisConfig.java +++ b/src/main/java/com/dongni/collisionavoidance/config/RedisConfig.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/controller/SpatialRuleController.java b/src/main/java/com/dongni/collisionavoidance/controller/SpatialRuleController.java index 649e9dc..c2599ab 100644 --- a/src/main/java/com/dongni/collisionavoidance/controller/SpatialRuleController.java +++ b/src/main/java/com/dongni/collisionavoidance/controller/SpatialRuleController.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/controller/UnmannedVehicleController.java b/src/main/java/com/dongni/collisionavoidance/controller/UnmannedVehicleController.java index aa79c3a..605f8f1 100644 --- a/src/main/java/com/dongni/collisionavoidance/controller/UnmannedVehicleController.java +++ b/src/main/java/com/dongni/collisionavoidance/controller/UnmannedVehicleController.java @@ -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; /** diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/config/RestTemplateConfig.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/config/RestTemplateConfig.java index 2841f80..f62f7ad 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/config/RestTemplateConfig.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/config/RestTemplateConfig.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/dao/DataCollectorDao.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/dao/DataCollectorDao.java index 1d089a8..0928ab2 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/dao/DataCollectorDao.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/dao/DataCollectorDao.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/converter/VehicleCommandConverter.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/converter/VehicleCommandConverter.java index 93ffee3..d8ed55c 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/converter/VehicleCommandConverter.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/converter/VehicleCommandConverter.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/CommandResponse.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/CommandResponse.java index e9b026d..2e5154f 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/CommandResponse.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/CommandResponse.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.dataCollector.model.dto; +package com.dongni.collisionavoidance.datacollector.model.dto; import lombok.Data; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleCommand.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleCommand.java index 8f0dce3..2add0c0 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleCommand.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleCommand.java @@ -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 diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleLocationInfo.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleLocationInfo.java index 22c82c1..1f520aa 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleLocationInfo.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleLocationInfo.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.dataCollector.model.dto; +package com.dongni.collisionavoidance.datacollector.model.dto; import lombok.Data; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateInfo.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateInfo.java index 15c4423..391390f 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateInfo.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateInfo.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateRequest.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateRequest.java index dcbb557..20d0f9e 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateRequest.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/dto/VehicleStateRequest.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/entity/VehicleCommandEntity.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/entity/VehicleCommandEntity.java index e5f57e9..71bac5e 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/entity/VehicleCommandEntity.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/entity/VehicleCommandEntity.java @@ -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; /** diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandReason.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandReason.java index a0b5826..6e87cc2 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandReason.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandReason.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.dataCollector.model.enums; +package com.dongni.collisionavoidance.datacollector.model.enums; public enum CommandReason { TRAFFIC_LIGHT, // 红绿灯控制 diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandType.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandType.java index 65118ed..a285290 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandType.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/CommandType.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.dataCollector.model.enums; +package com.dongni.collisionavoidance.datacollector.model.enums; public enum CommandType { ALERT, // 告警指令 diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/SignalState.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/SignalState.java index c2237bc..6451622 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/SignalState.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/model/enums/SignalState.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.dataCollector.model.enums; +package com.dongni.collisionavoidance.datacollector.model.enums; public enum SignalState { RED, // 红灯 diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/repository/VehicleCommandRepository.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/repository/VehicleCommandRepository.java index 003f7a3..a20aa61 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/repository/VehicleCommandRepository.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/repository/VehicleCommandRepository.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/AuthService.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/AuthService.java index 55d515a..c7b1b90 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/AuthService.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/AuthService.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.dataCollector.service; +package com.dongni.collisionavoidance.datacollector.service; import com.dongni.collisionavoidance.common.model.dto.Response; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCleanupService.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCleanupService.java index 022b814..9abbcd6 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCleanupService.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCleanupService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCollectorService.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCollectorService.java index 5213232..cf69c3e 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCollectorService.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/DataCollectorService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/UnmannedVehicleControlService.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/UnmannedVehicleControlService.java index 50fdf70..f3b22c1 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/UnmannedVehicleControlService.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/UnmannedVehicleControlService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceService.java b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceService.java index b1fce91..ec2985d 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceService.java +++ b/src/main/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataProcessing/config/CoordinateSystemProperties.java b/src/main/java/com/dongni/collisionavoidance/dataProcessing/config/CoordinateSystemProperties.java index ab9b700..9ece303 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataProcessing/config/CoordinateSystemProperties.java +++ b/src/main/java/com/dongni/collisionavoidance/dataProcessing/config/CoordinateSystemProperties.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/AirportCoordinateSystem.java b/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/AirportCoordinateSystem.java index 797ab8f..e7c7187 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/AirportCoordinateSystem.java +++ b/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/AirportCoordinateSystem.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/CoordinateSystemService.java b/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/CoordinateSystemService.java index 4a866e3..d75c9a2 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/CoordinateSystemService.java +++ b/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/CoordinateSystemService.java @@ -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 { diff --git a/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/SpeedCalculationService.java b/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/SpeedCalculationService.java index 1c2a7fe..28c2d55 100644 --- a/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/SpeedCalculationService.java +++ b/src/main/java/com/dongni/collisionavoidance/dataProcessing/service/SpeedCalculationService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/event/EventProcessingHealthIndicator.java b/src/main/java/com/dongni/collisionavoidance/event/service/EventProcessingHealthIndicator.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/geofence/event/EventProcessingHealthIndicator.java rename to src/main/java/com/dongni/collisionavoidance/event/service/EventProcessingHealthIndicator.java index 99713b3..025074e 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/event/EventProcessingHealthIndicator.java +++ b/src/main/java/com/dongni/collisionavoidance/event/service/EventProcessingHealthIndicator.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/ThreatLevelEventService.java b/src/main/java/com/dongni/collisionavoidance/event/service/ThreatLevelEventService.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/ThreatLevelEventService.java rename to src/main/java/com/dongni/collisionavoidance/event/service/ThreatLevelEventService.java index eaab2ca..51a73b9 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/ThreatLevelEventService.java +++ b/src/main/java/com/dongni/collisionavoidance/event/service/ThreatLevelEventService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/roads/model/RoadDirectionality.java b/src/main/java/com/dongni/collisionavoidance/road/model/RoadDirectionality.java similarity index 94% rename from src/main/java/com/dongni/collisionavoidance/roads/model/RoadDirectionality.java rename to src/main/java/com/dongni/collisionavoidance/road/model/RoadDirectionality.java index 5ed1804..38bb7bc 100644 --- a/src/main/java/com/dongni/collisionavoidance/roads/model/RoadDirectionality.java +++ b/src/main/java/com/dongni/collisionavoidance/road/model/RoadDirectionality.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.roads.model; +package com.dongni.collisionavoidance.road.model; /** * Enumeration representing the directionality of a road. diff --git a/src/main/java/com/dongni/collisionavoidance/roads/model/RoadInfo.java b/src/main/java/com/dongni/collisionavoidance/road/model/RoadInfo.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/roads/model/RoadInfo.java rename to src/main/java/com/dongni/collisionavoidance/road/model/RoadInfo.java index 98d7fe8..078a768 100644 --- a/src/main/java/com/dongni/collisionavoidance/roads/model/RoadInfo.java +++ b/src/main/java/com/dongni/collisionavoidance/road/model/RoadInfo.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.roads.model; +package com.dongni.collisionavoidance.road.model; import lombok.Builder; import lombok.Value; diff --git a/src/main/java/com/dongni/collisionavoidance/roads/service/RoadNetworkService.java b/src/main/java/com/dongni/collisionavoidance/road/service/RoadNetworkService.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/roads/service/RoadNetworkService.java rename to src/main/java/com/dongni/collisionavoidance/road/service/RoadNetworkService.java index 6020c1c..91f4456 100644 --- a/src/main/java/com/dongni/collisionavoidance/roads/service/RoadNetworkService.java +++ b/src/main/java/com/dongni/collisionavoidance/road/service/RoadNetworkService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleEventListener.java b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleEventListener.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/event/RuleEventListener.java rename to src/main/java/com/dongni/collisionavoidance/rule/event/RuleEventListener.java index cd75670..2a60945 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleEventListener.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleEventListener.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleEventPublisher.java b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleEventPublisher.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/geofence/event/RuleEventPublisher.java rename to src/main/java/com/dongni/collisionavoidance/rule/event/RuleEventPublisher.java index ed45b2c..711c818 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleEventPublisher.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleEventPublisher.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleExecutionEvent.java b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleExecutionEvent.java similarity index 95% rename from src/main/java/com/dongni/collisionavoidance/geofence/event/RuleExecutionEvent.java rename to src/main/java/com/dongni/collisionavoidance/rule/event/RuleExecutionEvent.java index f4db5ca..65d5308 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleExecutionEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleExecutionEvent.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleStateChangeEvent.java b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleStateChangeEvent.java similarity index 97% rename from src/main/java/com/dongni/collisionavoidance/geofence/event/RuleStateChangeEvent.java rename to src/main/java/com/dongni/collisionavoidance/rule/event/RuleStateChangeEvent.java index 98ed7e7..e0084e3 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleStateChangeEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleStateChangeEvent.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/entity/RuleViolationEvent.java b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleViolationEvent.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/entity/RuleViolationEvent.java rename to src/main/java/com/dongni/collisionavoidance/rule/event/RuleViolationEvent.java index 400583f..89164f6 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/entity/RuleViolationEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleViolationEvent.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleViolationEventOccurred.java b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleViolationEventOccurred.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/geofence/event/RuleViolationEventOccurred.java rename to src/main/java/com/dongni/collisionavoidance/rule/event/RuleViolationEventOccurred.java index 4c1e474..134b808 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/event/RuleViolationEventOccurred.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/event/RuleViolationEventOccurred.java @@ -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: diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/entity/SpatialRule.java b/src/main/java/com/dongni/collisionavoidance/rule/model/entity/SpatialRule.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/entity/SpatialRule.java rename to src/main/java/com/dongni/collisionavoidance/rule/model/entity/SpatialRule.java index c77d3ed..7911082 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/entity/SpatialRule.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/model/entity/SpatialRule.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleCategory.java b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleCategory.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleCategory.java rename to src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleCategory.java index 093c0a3..818263e 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleCategory.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleCategory.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.geofence.model.enums; +package com.dongni.collisionavoidance.rule.model.enums; /** * 空间规则分类枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleExecutionResult.java b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleExecutionResult.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleExecutionResult.java rename to src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleExecutionResult.java index 805cd3a..19af420 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleExecutionResult.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleExecutionResult.java @@ -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; /** * 规则执行结果枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleExecutionStatus.java b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleExecutionStatus.java similarity index 99% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleExecutionStatus.java rename to src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleExecutionStatus.java index 7638f8c..d868104 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleExecutionStatus.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleExecutionStatus.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.geofence.model.enums; +package com.dongni.collisionavoidance.rule.model.enums; /** * 规则执行状态枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleStatus.java b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleStatus.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleStatus.java rename to src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleStatus.java index 1f09574..e83e8f7 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/RuleStatus.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/RuleStatus.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.geofence.model.enums; +package com.dongni.collisionavoidance.rule.model.enums; /** * 空间规则状态枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/SpatialObjectType.java b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/SpatialObjectType.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/enums/SpatialObjectType.java rename to src/main/java/com/dongni/collisionavoidance/rule/model/enums/SpatialObjectType.java index 8e3bff6..1354f74 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/SpatialObjectType.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/SpatialObjectType.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.geofence.model.enums; +package com.dongni.collisionavoidance.rule.model.enums; /** * 空间对象类型枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/ViolationType.java b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/ViolationType.java similarity index 99% rename from src/main/java/com/dongni/collisionavoidance/geofence/model/enums/ViolationType.java rename to src/main/java/com/dongni/collisionavoidance/rule/model/enums/ViolationType.java index aec267a..956b9cf 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/model/enums/ViolationType.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/model/enums/ViolationType.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.geofence.model.enums; +package com.dongni.collisionavoidance.rule.model.enums; /** * 违规类型枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/repository/RuleViolationEventRepository.java b/src/main/java/com/dongni/collisionavoidance/rule/repository/RuleViolationEventRepository.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/repository/RuleViolationEventRepository.java rename to src/main/java/com/dongni/collisionavoidance/rule/repository/RuleViolationEventRepository.java index 8157ca8..62809e5 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/repository/RuleViolationEventRepository.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/repository/RuleViolationEventRepository.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/repository/SpatialRuleRepository.java b/src/main/java/com/dongni/collisionavoidance/rule/repository/SpatialRuleRepository.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/geofence/repository/SpatialRuleRepository.java rename to src/main/java/com/dongni/collisionavoidance/rule/repository/SpatialRuleRepository.java index da07704..0494147 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/repository/SpatialRuleRepository.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/repository/SpatialRuleRepository.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/LocationRuleQueryService.java b/src/main/java/com/dongni/collisionavoidance/rule/service/LocationRuleQueryService.java similarity index 84% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/LocationRuleQueryService.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/LocationRuleQueryService.java index 759ca2e..9742513 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/LocationRuleQueryService.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/LocationRuleQueryService.java @@ -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 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 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 getAllowedRules(org.locationtech.jts.geom.Point location, com.dongni.collisionavoidance.common.model.MovingObjectType vehicleType, java.time.LocalDateTime timestamp); + /** * 规则覆盖统计信息 */ diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/RealTimeViolationDetector.java b/src/main/java/com/dongni/collisionavoidance/rule/service/RealTimeViolationDetector.java similarity index 97% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/RealTimeViolationDetector.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/RealTimeViolationDetector.java index 0714ff5..f8f3af0 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/RealTimeViolationDetector.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/RealTimeViolationDetector.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/RuleConfigurationService.java b/src/main/java/com/dongni/collisionavoidance/rule/service/RuleConfigurationService.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/RuleConfigurationService.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/RuleConfigurationService.java index 4044805..761278d 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/RuleConfigurationService.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/RuleConfigurationService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/RuleExecutionEngine.java b/src/main/java/com/dongni/collisionavoidance/rule/service/RuleExecutionEngine.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/RuleExecutionEngine.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/RuleExecutionEngine.java index 9399213..ee3fa04 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/RuleExecutionEngine.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/RuleExecutionEngine.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/RulePriorityService.java b/src/main/java/com/dongni/collisionavoidance/rule/service/RulePriorityService.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/RulePriorityService.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/RulePriorityService.java index c7784e6..0e12e9f 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/RulePriorityService.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/RulePriorityService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/RuleViolationProcessor.java b/src/main/java/com/dongni/collisionavoidance/rule/service/RuleViolationProcessor.java similarity index 97% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/RuleViolationProcessor.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/RuleViolationProcessor.java index b0178bd..3c3bdaa 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/RuleViolationProcessor.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/RuleViolationProcessor.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleService.java b/src/main/java/com/dongni/collisionavoidance/rule/service/SpatialRuleService.java similarity index 97% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleService.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/SpatialRuleService.java index bfa1248..2c8b4d8 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleService.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/SpatialRuleService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/TimeWindowMatchingService.java b/src/main/java/com/dongni/collisionavoidance/rule/service/TimeWindowMatchingService.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/TimeWindowMatchingService.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/TimeWindowMatchingService.java index 3a0ef78..4b7d8ff 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/TimeWindowMatchingService.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/TimeWindowMatchingService.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/VehicleTypePermissionService.java b/src/main/java/com/dongni/collisionavoidance/rule/service/VehicleTypePermissionService.java similarity index 81% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/VehicleTypePermissionService.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/VehicleTypePermissionService.java index 1613953..8f1e20c 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/VehicleTypePermissionService.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/VehicleTypePermissionService.java @@ -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 getRestrictedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp); - - /** - * 获取车辆类型允许访问的规则列表 - * @param location 位置点 - * @param vehicleType 车辆类型 - * @param timestamp 时间戳 - * @return 允许的规则列表 - */ - List getAllowedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp); - /** * 检查车辆类型是否在规则的允许列表中 * @param rule 空间规则 diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/LocationRuleQueryServiceImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/LocationRuleQueryServiceImpl.java similarity index 88% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/LocationRuleQueryServiceImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/LocationRuleQueryServiceImpl.java index 9d964f8..050013a 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/LocationRuleQueryServiceImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/LocationRuleQueryServiceImpl.java @@ -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 applicableRules = findApplicableRules(location, vehicleType, timestamp); + List 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 getRestrictedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) { + List allRules = findApplicableRules(location, vehicleType, timestamp); + return allRules.stream() + .filter(rule -> !vehicleTypePermissionService.isVehicleTypeApplicableToRule(rule, vehicleType)) + .collect(Collectors.toList()); + } + + @Override + public List getAllowedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) { + List allRules = findApplicableRules(location, vehicleType, timestamp); + return allRules.stream() + .filter(rule -> vehicleTypePermissionService.isVehicleTypeApplicableToRule(rule, vehicleType)) + .collect(Collectors.toList()); + } } \ No newline at end of file diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RealTimeViolationDetectorImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RealTimeViolationDetectorImpl.java similarity index 96% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RealTimeViolationDetectorImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/RealTimeViolationDetectorImpl.java index 7b17405..c71164c 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RealTimeViolationDetectorImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RealTimeViolationDetectorImpl.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleConfigurationServiceImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleConfigurationServiceImpl.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleConfigurationServiceImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleConfigurationServiceImpl.java index bbf4e5c..f3ba839 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleConfigurationServiceImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleConfigurationServiceImpl.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleExecutionEngineImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleExecutionEngineImpl.java similarity index 97% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleExecutionEngineImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleExecutionEngineImpl.java index d09f240..ab61daf 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleExecutionEngineImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleExecutionEngineImpl.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RulePriorityServiceImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RulePriorityServiceImpl.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RulePriorityServiceImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/RulePriorityServiceImpl.java index 056c9ec..3ecc9f6 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RulePriorityServiceImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RulePriorityServiceImpl.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleViolationProcessorImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleViolationProcessorImpl.java similarity index 97% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleViolationProcessorImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleViolationProcessorImpl.java index f88a520..4a387a3 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/RuleViolationProcessorImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/RuleViolationProcessorImpl.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/SpatialRuleServiceImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/SpatialRuleServiceImpl.java similarity index 98% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/SpatialRuleServiceImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/SpatialRuleServiceImpl.java index 1b4559a..ce2f33e 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/SpatialRuleServiceImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/SpatialRuleServiceImpl.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/TimeWindowMatchingServiceImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/TimeWindowMatchingServiceImpl.java similarity index 99% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/TimeWindowMatchingServiceImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/TimeWindowMatchingServiceImpl.java index 7d03ac8..6c714ef 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/TimeWindowMatchingServiceImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/TimeWindowMatchingServiceImpl.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/VehicleTypePermissionServiceImpl.java b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/VehicleTypePermissionServiceImpl.java similarity index 78% rename from src/main/java/com/dongni/collisionavoidance/geofence/service/impl/VehicleTypePermissionServiceImpl.java rename to src/main/java/com/dongni/collisionavoidance/rule/service/impl/VehicleTypePermissionServiceImpl.java index f7085ac..3792550 100644 --- a/src/main/java/com/dongni/collisionavoidance/geofence/service/impl/VehicleTypePermissionServiceImpl.java +++ b/src/main/java/com/dongni/collisionavoidance/rule/service/impl/VehicleTypePermissionServiceImpl.java @@ -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 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 applicableRules = locationRuleQueryService.findApplicableRules(location, vehicleType, timestamp); - - // 检查是否有访问控制规则 - List 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 getRestrictedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) { - try { - List 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 getAllowedRules(Point location, MovingObjectType vehicleType, LocalDateTime timestamp) { - try { - List 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 { diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/RuleEventWebSocketPublisher.java b/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/RuleEventWebSocketPublisher.java index 5aec770..03e029e 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/RuleEventWebSocketPublisher.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/RuleEventWebSocketPublisher.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/WebSocketMessageBroadcaster.java b/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/WebSocketMessageBroadcaster.java index 7303806..2bca65a 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/WebSocketMessageBroadcaster.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/broadcaster/WebSocketMessageBroadcaster.java @@ -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 message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.POSITION_UPDATE) .timestamp(event.getTimestamp()) .messageId(generateMessageId()) @@ -58,7 +73,7 @@ public class WebSocketMessageBroadcaster { */ @EventListener public void handleVehicleCommand(VehicleCommandEvent event) { - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.VEHICLE_COMMAND) .timestamp(event.getTimestamp()) .messageId(generateMessageId()) @@ -74,7 +89,7 @@ public class WebSocketMessageBroadcaster { */ @EventListener public void handleTrafficLightStatus(TrafficLightStatusEvent event) { - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.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 message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.COLLISION_WARNING) .timestamp(event.getTimestamp()) .messageId(generateMessageId()) @@ -108,7 +123,7 @@ public class WebSocketMessageBroadcaster { */ @EventListener public void handleRuleViolation(RuleViolationWebSocketEvent event) { - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.RULE_VIOLATION) .timestamp(event.getTimestamp()) .messageId(generateMessageId()) @@ -124,7 +139,7 @@ public class WebSocketMessageBroadcaster { */ @EventListener public void handleRuleExecutionStatus(RuleExecutionStatusWebSocketEvent event) { - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.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 message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.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); diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/cache/CacheConfig.java b/src/main/java/com/dongni/collisionavoidance/webSocket/cache/CacheConfig.java index 74a02a2..fa8774d 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/cache/CacheConfig.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/cache/CacheConfig.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/cache/MessageCacheService.java b/src/main/java/com/dongni/collisionavoidance/webSocket/cache/MessageCacheService.java index f6cae58..fb7b31b 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/cache/MessageCacheService.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/cache/MessageCacheService.java @@ -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> getRecentMessages(String messageType, int count) { + public List> getRecentMessages(String messageType, int count) { try { String key = CACHE_KEY_PREFIX + messageType; List 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> getAllRecentMessages(int count) { + public List> getAllRecentMessages(int count) { try { // 获取所有缓存键 String pattern = CACHE_KEY_PREFIX + "*"; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/config/JacksonConfig.java b/src/main/java/com/dongni/collisionavoidance/webSocket/config/JacksonConfig.java index 3edd969..832ef07 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/config/JacksonConfig.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/config/JacksonConfig.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/config/WebSocketConfig.java b/src/main/java/com/dongni/collisionavoidance/webSocket/config/WebSocketConfig.java index b69bfcc..d4a29b3 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/config/WebSocketConfig.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/config/WebSocketConfig.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/controller/GeopositionController.java b/src/main/java/com/dongni/collisionavoidance/webSocket/controller/GeopositionController.java index 96eb1f3..102adc9 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/controller/GeopositionController.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/controller/GeopositionController.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/controller/MessageController.java b/src/main/java/com/dongni/collisionavoidance/webSocket/controller/MessageController.java index 2caca66..a68b625 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/controller/MessageController.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/controller/MessageController.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/CollisionWarningEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/CollisionWarningEvent.java index 7ae46df..c9a2755 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/CollisionWarningEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/CollisionWarningEvent.java @@ -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; + /** * 碰撞预警事件 * 当检测到碰撞风险时发布此事件 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/PositionUpdateEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/PositionUpdateEvent.java index 933a0ce..3bc77a9 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/PositionUpdateEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/PositionUpdateEvent.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleExecutionStatusWebSocketEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleExecutionStatusWebSocketEvent.java index 69e8967..885e981 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleExecutionStatusWebSocketEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleExecutionStatusWebSocketEvent.java @@ -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事件 * 用于通知前端规则执行状态变化 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleStateChangeWebSocketEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleStateChangeWebSocketEvent.java index a3f3711..9bb7a9b 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleStateChangeWebSocketEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleStateChangeWebSocketEvent.java @@ -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事件 * 用于通知前端规则状态变更 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleViolationWebSocketEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleViolationWebSocketEvent.java index 701c439..5843abd 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleViolationWebSocketEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/RuleViolationWebSocketEvent.java @@ -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事件 * 用于通知前端规则违规情况 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/TrafficLightStatusEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/TrafficLightStatusEvent.java index 845518c..662a864 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/TrafficLightStatusEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/TrafficLightStatusEvent.java @@ -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; + /** * 红绿灯状态事件 * 当红绿灯状态发生变化时发布此事件 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/VehicleCommandEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/VehicleCommandEvent.java index 1f029d9..37843c7 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/VehicleCommandEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/VehicleCommandEvent.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEvent.java b/src/main/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEvent.java index 0edc246..5f6480b 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEvent.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEvent.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.webSocket.event; +package com.dongni.collisionavoidance.websocket.event; /** * WebSocket事件基础接口 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/CollisionWarningPayload.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/CollisionWarningPayload.java index c2fada4..f3c274c 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/CollisionWarningPayload.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/CollisionWarningPayload.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessagePriority.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessagePriority.java index 0d54995..160b83e 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessagePriority.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessagePriority.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.webSocket.message; +package com.dongni.collisionavoidance.websocket.message; /** * WebSocket消息优先级枚举 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessageTypeConstants.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessageTypeConstants.java index 35db568..a7ccbf3 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessageTypeConstants.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/MessageTypeConstants.java @@ -1,4 +1,4 @@ -package com.dongni.collisionavoidance.webSocket.message; +package com.dongni.collisionavoidance.websocket.message; /** * WebSocket消息类型常量定义 diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/PositionUpdatePayload.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/PositionUpdatePayload.java index 8415787..53f347a 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/PositionUpdatePayload.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/PositionUpdatePayload.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleExecutionStatusPayload.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleExecutionStatusPayload.java index 535bf32..051266e 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleExecutionStatusPayload.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleExecutionStatusPayload.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleStateChangePayload.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleStateChangePayload.java index efc02d5..eafb2e6 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleStateChangePayload.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleStateChangePayload.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleViolationPayload.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleViolationPayload.java index da765a1..d76d5bc 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleViolationPayload.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/RuleViolationPayload.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/TrafficLightStatusPayload.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/TrafficLightStatusPayload.java index 643c8fc..e00f63d 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/TrafficLightStatusPayload.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/TrafficLightStatusPayload.java @@ -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; diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/WebSocketMessage.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/UniversalMessage.java similarity index 76% rename from src/main/java/com/dongni/collisionavoidance/webSocket/message/WebSocketMessage.java rename to src/main/java/com/dongni/collisionavoidance/webSocket/message/UniversalMessage.java index ba2b348..61efaeb 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/WebSocketMessage.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/UniversalMessage.java @@ -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 { +public class UniversalMessage { /** * 消息类型 (position_update, vehicle_command等) @@ -50,8 +50,8 @@ public class WebSocketMessage { /** * 为位置更新消息创建便捷方法 */ - public static WebSocketMessage positionUpdate(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage positionUpdate(T payload) { + return UniversalMessage.builder() .type("position_update") .timestamp(System.nanoTime() / 1000) // 转换为微秒 .payload(payload) @@ -61,8 +61,8 @@ public class WebSocketMessage { /** * 为车辆指令消息创建便捷方法 */ - public static WebSocketMessage vehicleCommand(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage vehicleCommand(T payload) { + return UniversalMessage.builder() .type("vehicle_command") .timestamp(System.nanoTime() / 1000) .payload(payload) @@ -72,8 +72,8 @@ public class WebSocketMessage { /** * 为红绿灯状态消息创建便捷方法 */ - public static WebSocketMessage trafficLightStatus(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage trafficLightStatus(T payload) { + return UniversalMessage.builder() .type("intersection_traffic_light_status") .timestamp(System.nanoTime() / 1000) .payload(payload) @@ -83,8 +83,8 @@ public class WebSocketMessage { /** * 为碰撞预警消息创建便捷方法 */ - public static WebSocketMessage collisionWarning(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage collisionWarning(T payload) { + return UniversalMessage.builder() .type("collision_warning") .timestamp(System.nanoTime() / 1000) .payload(payload) @@ -96,8 +96,8 @@ public class WebSocketMessage { /** * 为规则违规事件消息创建便捷方法 */ - public static WebSocketMessage ruleViolation(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage ruleViolation(T payload) { + return UniversalMessage.builder() .type(MessageTypeConstants.RULE_VIOLATION) .timestamp(System.nanoTime() / 1000) .payload(payload) @@ -107,8 +107,8 @@ public class WebSocketMessage { /** * 为规则执行状态消息创建便捷方法 */ - public static WebSocketMessage ruleExecutionStatus(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage ruleExecutionStatus(T payload) { + return UniversalMessage.builder() .type(MessageTypeConstants.RULE_EXECUTION_STATUS) .timestamp(System.nanoTime() / 1000) .payload(payload) @@ -118,8 +118,8 @@ public class WebSocketMessage { /** * 为规则状态变更消息创建便捷方法 */ - public static WebSocketMessage ruleStateChange(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage ruleStateChange(T payload) { + return UniversalMessage.builder() .type(MessageTypeConstants.RULE_STATE_CHANGE) .timestamp(System.nanoTime() / 1000) .payload(payload) @@ -129,8 +129,8 @@ public class WebSocketMessage { /** * 为规则告警消息创建便捷方法 */ - public static WebSocketMessage ruleAlert(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage ruleAlert(T payload) { + return UniversalMessage.builder() .type(MessageTypeConstants.RULE_ALERT) .timestamp(System.nanoTime() / 1000) .payload(payload) @@ -140,8 +140,8 @@ public class WebSocketMessage { /** * 为规则配置更新消息创建便捷方法 */ - public static WebSocketMessage ruleConfigUpdate(T payload) { - return WebSocketMessage.builder() + public static UniversalMessage ruleConfigUpdate(T payload) { + return UniversalMessage.builder() .type(MessageTypeConstants.RULE_CONFIG_UPDATE) .timestamp(System.nanoTime() / 1000) .payload(payload) diff --git a/src/main/java/com/dongni/collisionavoidance/webSocket/message/VehicleCommandPayload.java b/src/main/java/com/dongni/collisionavoidance/webSocket/message/VehicleCommandPayload.java index f21c638..ff42fab 100644 --- a/src/main/java/com/dongni/collisionavoidance/webSocket/message/VehicleCommandPayload.java +++ b/src/main/java/com/dongni/collisionavoidance/webSocket/message/VehicleCommandPayload.java @@ -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; diff --git a/src/test/java/com/dongni/collisionavoidance/config/TestConfig.java b/src/test/java/com/dongni/collisionavoidance/config/TestConfig.java index e52bd97..6163654 100644 --- a/src/test/java/com/dongni/collisionavoidance/config/TestConfig.java +++ b/src/test/java/com/dongni/collisionavoidance/config/TestConfig.java @@ -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; + /** * 测试专用配置类,用于禁用后台线程和外部连接 */ diff --git a/src/test/java/com/dongni/collisionavoidance/controller/UnmannedVehicleControllerTest.java b/src/test/java/com/dongni/collisionavoidance/controller/UnmannedVehicleControllerTest.java index 3fe0a30..31708a5 100644 --- a/src/test/java/com/dongni/collisionavoidance/controller/UnmannedVehicleControllerTest.java +++ b/src/test/java/com/dongni/collisionavoidance/controller/UnmannedVehicleControllerTest.java @@ -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; diff --git a/src/test/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceServiceIntegrationTest.java b/src/test/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceServiceIntegrationTest.java index 72f5e63..59f9511 100644 --- a/src/test/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceServiceIntegrationTest.java +++ b/src/test/java/com/dongni/collisionavoidance/dataCollector/service/VehicleDataPersistenceServiceIntegrationTest.java @@ -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; diff --git a/src/test/java/com/dongni/collisionavoidance/dataProcessing/Test.java b/src/test/java/com/dongni/collisionavoidance/dataProcessing/Test.java index 49e2ea9..a5907e5 100644 --- a/src/test/java/com/dongni/collisionavoidance/dataProcessing/Test.java +++ b/src/test/java/com/dongni/collisionavoidance/dataProcessing/Test.java @@ -1,9 +1,10 @@ -package com.dongni.collisionavoidance.dataProcessing; +package com.dongni.collisionavoidance.dataprocessing; -import com.dongni.collisionavoidance.dataProcessing.service.CoordinateSystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import com.dongni.collisionavoidance.dataprocessing.service.CoordinateSystemService; + import java.util.Arrays; // 自动计算机场中心点UTM分区 diff --git a/src/test/java/com/dongni/collisionavoidance/dataProcessing/UtmZoneCalculator.java b/src/test/java/com/dongni/collisionavoidance/dataProcessing/UtmZoneCalculator.java index 216e7d5..021673a 100644 --- a/src/test/java/com/dongni/collisionavoidance/dataProcessing/UtmZoneCalculator.java +++ b/src/test/java/com/dongni/collisionavoidance/dataProcessing/UtmZoneCalculator.java @@ -1,7 +1,7 @@ -package com.dongni.collisionavoidance.dataProcessing; -import com.dongni.collisionavoidance.dataProcessing.service.AirportCoordinateSystem; +package com.dongni.collisionavoidance.dataprocessing; +import static com.dongni.collisionavoidance.dataprocessing.service.AirportCoordinateSystem.calculateUtmZone; -import static com.dongni.collisionavoidance.dataProcessing.service.AirportCoordinateSystem.calculateUtmZone; +import com.dongni.collisionavoidance.dataprocessing.service.AirportCoordinateSystem; // 自动计算机场中心点UTM分区 public class UtmZoneCalculator { diff --git a/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleExecutionEngineTest.java b/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleExecutionEngineTest.java index 0e52ba2..3290506 100644 --- a/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleExecutionEngineTest.java +++ b/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleExecutionEngineTest.java @@ -1,12 +1,17 @@ package com.dongni.collisionavoidance.geofence.service; import com.dongni.collisionavoidance.common.model.MovingObjectType; -import com.dongni.collisionavoidance.geofence.event.RuleEventPublisher; -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.impl.RuleExecutionEngineImpl; +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.SpatialObjectType; +import com.dongni.collisionavoidance.rule.repository.RuleViolationEventRepository; +import com.dongni.collisionavoidance.rule.service.SpatialRuleService; +import com.dongni.collisionavoidance.rule.service.impl.RuleExecutionEngineImpl; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleViolationRealtimePushTest.java b/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleViolationRealtimePushTest.java index 98175fb..15f11f6 100644 --- a/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleViolationRealtimePushTest.java +++ b/src/test/java/com/dongni/collisionavoidance/geofence/service/RuleViolationRealtimePushTest.java @@ -2,10 +2,13 @@ package com.dongni.collisionavoidance.geofence.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.RuleExecutionResult; -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.RuleExecutionResult; +import com.dongni.collisionavoidance.rule.model.enums.ViolationType; +import com.dongni.collisionavoidance.rule.service.RealTimeViolationDetector; +import com.dongni.collisionavoidance.rule.service.RuleViolationProcessor; +import com.dongni.collisionavoidance.rule.service.SpatialRuleService; import com.dongni.collisionavoidance.geofence.model.enums.GeofenceAlertLevel; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleIntegrationTest.java b/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleIntegrationTest.java index b1c24f4..327dabb 100644 --- a/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleIntegrationTest.java +++ b/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleIntegrationTest.java @@ -3,11 +3,19 @@ package com.dongni.collisionavoidance.geofence.service; import com.dongni.collisionavoidance.common.model.MovingObjectType; import com.dongni.collisionavoidance.common.service.VehicleLocationService; 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.*; -import com.dongni.collisionavoidance.geofence.repository.RuleViolationEventRepository; -import com.dongni.collisionavoidance.geofence.repository.SpatialRuleRepository; +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.RuleStatus; +import com.dongni.collisionavoidance.rule.model.enums.SpatialObjectType; +import com.dongni.collisionavoidance.rule.model.enums.ViolationType; +import com.dongni.collisionavoidance.rule.repository.RuleViolationEventRepository; +import com.dongni.collisionavoidance.rule.repository.SpatialRuleRepository; +import com.dongni.collisionavoidance.rule.service.RealTimeViolationDetector; +import com.dongni.collisionavoidance.rule.service.RuleExecutionEngine; +import com.dongni.collisionavoidance.rule.service.SpatialRuleService; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleServiceTest.java b/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleServiceTest.java index 9db3d0d..f3f23d6 100644 --- a/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleServiceTest.java +++ b/src/test/java/com/dongni/collisionavoidance/geofence/service/SpatialRuleServiceTest.java @@ -1,13 +1,15 @@ package com.dongni.collisionavoidance.geofence.service; 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.impl.SpatialRuleServiceImpl; +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.dongni.collisionavoidance.rule.service.impl.SpatialRuleServiceImpl; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/src/test/java/com/dongni/collisionavoidance/roads/service/RoadNetworkServiceIntegrationTest.java b/src/test/java/com/dongni/collisionavoidance/roads/service/RoadNetworkServiceIntegrationTest.java index c77ec06..63cb2ff 100644 --- a/src/test/java/com/dongni/collisionavoidance/roads/service/RoadNetworkServiceIntegrationTest.java +++ b/src/test/java/com/dongni/collisionavoidance/roads/service/RoadNetworkServiceIntegrationTest.java @@ -1,9 +1,11 @@ package com.dongni.collisionavoidance.roads.service; import com.dongni.collisionavoidance.common.model.GeoPosition; -import com.dongni.collisionavoidance.dataCollector.service.DataCollectorService; -import com.dongni.collisionavoidance.roads.model.RoadInfo; import com.dongni.collisionavoidance.config.TestConfig; +import com.dongni.collisionavoidance.datacollector.service.DataCollectorService; +import com.dongni.collisionavoidance.road.model.RoadInfo; +import com.dongni.collisionavoidance.road.service.RoadNetworkService; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -86,7 +88,7 @@ class RoadNetworkServiceIntegrationTest { // Directionality: TWO_WAY assertThat(road.getDirectionality()) .as("Directionality should be TWO_WAY for %s", roadId) - .isEqualTo(com.dongni.collisionavoidance.roads.model.RoadDirectionality.TWO_WAY); + .isEqualTo(com.dongni.collisionavoidance.road.model.RoadDirectionality.TWO_WAY); // 5. Assert optional limits from test YAML // Height: 10m, Width: 15m diff --git a/src/test/java/com/dongni/collisionavoidance/test1.py b/src/test/java/com/dongni/collisionavoidance/test1.py deleted file mode 100644 index 33305da..0000000 --- a/src/test/java/com/dongni/collisionavoidance/test1.py +++ /dev/null @@ -1,238 +0,0 @@ -from flask import Flask, jsonify, request -import time -import math -import logging -import os -import threading -from datetime import datetime - -# --- 添加 Flask 应用实例 --- -app = Flask(__name__) - -# --- 添加 global_timestamp 的简单实现 --- -class GlobalTimestamp: - def get(self): - # 返回当前时间的毫秒级时间戳 - return int(time.time() * 1000) - -global_timestamp = GlobalTimestamp() - -# --- 移动 POINT 定义到使用之前 --- -# 修复步骤1:统一坐标点键名 -POINT_T1 = {"longitude": 120.0868853, "latitude": 36.35496367} -POINT_T2 = {"longitude": 120.08502054, "latitude": 36.35448347} -POINT_T4 = {"longitude": 120.08558121, "latitude": 36.35305878} -POINT_T7 = {"longitude": 120.08562915, "latitude": 36.35052372} -POINT_T11 = {"longitude": 120.0873865, "latitude": 36.3509885} -POINT_T12 = {"longitude": 120.08603613, "latitude": 36.35190217} - -# --- 添加示例数据 --- -vehicle_data = [ - { - "vehicleNo": "QN001", - "longitude": POINT_T1['longitude'], # 初始位置 - "latitude": POINT_T1['latitude'], - "altitude": 0.0, - "speed": 0.0, # 初始速度 - "time": global_timestamp.get() - } - # 可以添加更多车辆... -] - -aircraft_data = [ - { - "flightNo": "AC001", - "longitude": POINT_T7['longitude'], # 初始位置 - "latitude": POINT_T7['latitude'], - "altitude": 100.0, # 示例高度 - "trackNumber": 0, - "time": global_timestamp.get() - } - # 可以添加更多航空器... -] - -# --- 添加 vehicle_states (目前为空) --- -vehicle_states = {} -# 示例: vehicle_states["QN001"] = VehicleState("QN001") # 需要定义 VehicleState 类 - -class ImprovedTrajectory: - def __init__(self, points, speed_kmh): - self.points = points - self.speed = speed_kmh * 1000 / 3600 # m/s - self.current_idx = 0 - self.start_time = time.time() - - # 修复步骤2:修正键名访问 - def get_position(self): - elapsed = time.time() - self.start_time - distance = self.speed * elapsed - - p1 = self.points[self.current_idx] - p2 = self.points[(self.current_idx + 1) % len(self.points)] - - # 使用正确的键名 longitude/latitude - dx = p2['longitude'] - p1['longitude'] - dy = p2['latitude'] - p1['latitude'] - - length = math.hypot(dx, dy) * 111319.9 # 转换为米 - ratio = min(distance / length, 1.0) - - if ratio >= 1.0: - self.current_idx = (self.current_idx + 1) % len(self.points) - self.start_time = time.time() - return self.get_position() - - return { - 'longitude': p1['longitude'] + dx * ratio, # 返回正确的键名 - 'latitude': p1['latitude'] + dy * ratio - } - -# 初始化轨迹生成器(使用统一后的坐标点) -qn001_traj = ImprovedTrajectory( - points=[POINT_T1, POINT_T2, POINT_T4], - speed_kmh=18.0 -) - -ac001_traj = ImprovedTrajectory( - points=[POINT_T7, POINT_T11], - speed_kmh=36.0 -) - -# 数据更新线程(修复步骤3:确保使用正确的键名) -def update_positions(): - while True: - try: - # 更新车辆位置 - for v in vehicle_data: - if v["vehicleNo"] == "QN001": - pos = qn001_traj.get_position() - v["longitude"] = pos['longitude'] - v["latitude"] = pos['latitude'] - # 可以考虑同时更新速度和时间戳 - v["time"] = global_timestamp.get() - - # 更新航空器位置 - for a in aircraft_data: - if a["flightNo"] == "AC001": - pos = ac001_traj.get_position() - a["longitude"] = pos['longitude'] - a["latitude"] = pos['latitude'] - a["time"] = global_timestamp.get() - - time.sleep(1.0) - except Exception as e: - # 使用 logging 记录更详细的错误信息 - logging.exception("Error in update_positions thread") - -# 启动后台线程 -update_thread = threading.Thread(target=update_positions, daemon=True) -update_thread.start() - -# API端点 -@app.route('/login', methods=['POST', 'OPTIONS']) -def login(): - if request.method == 'OPTIONS': - return '', 204 - - username = request.args.get('username') - password = request.args.get('password') - - if username == "dianxin" and password == "dianxin@123": - return jsonify({ - "status": 200, - "msg": "登入成功", - "data": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzI3ODMwOTAsInVzZXJuYW1lIjoiYWRtaW4ifQ.y9feEL_9NT8UzED9NNkb0Ln6C-PBoufiSHWobWe5vWY" - }) - else: - return jsonify({ - "status": 401, - "msg": "认证失败", - "data": None - }), 401 - -@app.route('/openApi/getCurrentFlightPositions', methods=['GET', 'OPTIONS']) -def get_flight_positions(): - if request.method == 'OPTIONS': - return '', 204 - - current_ts = global_timestamp.get() # 获取当前时间戳 - response_data = [] - - # 直接使用全局的 aircraft_data - for a in aircraft_data: - # 创建副本以避免修改原始数据(如果需要的话) - ac_copy = a.copy() - ac_copy["time"] = current_ts # 确保返回的时间戳是最新的 - response_data.append(ac_copy) - - return jsonify({ - "status": 200, - "msg": "当前航空器实时位置数据", - "data": response_data - }) - -@app.route('/openApi/getCurrentVehiclePositions', methods=['GET', 'OPTIONS']) -def get_vehicle_positions(): - if request.method == 'OPTIONS': - return '', 204 - - current_ts = global_timestamp.get() # 获取当前时间戳 - response_data = [] - - # 直接使用全局的 vehicle_data - for v in vehicle_data: - v_copy = v.copy() - v_copy["time"] = current_ts # 确保返回的时间戳是最新的 - response_data.append(v_copy) - - return jsonify({ - "status": 200, - "msg": "当前车辆实时位置数据", - "data": response_data - }) - -@app.route('/api/VehicleCommandInfo', methods=['POST']) -def handle_vehicle_command(): - try: - data = request.json - vehicle_id = data.get("vehicleID") - command_type = data.get("commandType", "").upper() - trans_id = data.get("transId") # 获取 transId - - # 简单的模拟: 假设总是成功 - # 实际应用中需要 vehicle_states 和更复杂的逻辑 - # vehicle_state = vehicle_states.get(vehicle_id) - # ... (省略了原有的 vehicle_states 检查逻辑) - - # 直接返回成功响应 - return jsonify({ - "code": 200, - "msg": "指令执行成功 (模拟)", - "transId": trans_id, - "timestamp": global_timestamp.get() - }) - - except Exception as e: - # 使用 logging 记录错误 - logging.exception("Error handling VehicleCommandInfo") - return jsonify({ - "code": 500, - "msg": str(e), - "transId": data.get("transId", ""), # 尝试获取 transId - "timestamp": global_timestamp.get() - }), 500 - -@app.after_request -def add_cors_headers(response): - response.headers['Access-Control-Allow-Origin'] = '*' - response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization' - response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' - response.headers['Access-Control-Max-Age'] = '3600' - return response - -if __name__ == '__main__': - # 配置日志记录 - logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') - logging.info("Starting Flask simulation server...") - # 注意: debug=True 在生产环境中不应使用,但对于模拟服务很方便 - app.run(host='localhost', port=8090, debug=True, use_reloader=False) # 添加 use_reloader=False 避免线程问题 diff --git a/src/test/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEventTest.java b/src/test/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEventTest.java index 95c9b6e..a14b684 100644 --- a/src/test/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEventTest.java +++ b/src/test/java/com/dongni/collisionavoidance/webSocket/event/WebSocketEventTest.java @@ -1,8 +1,12 @@ -package com.dongni.collisionavoidance.webSocket.event; +package com.dongni.collisionavoidance.websocket.event; -import com.dongni.collisionavoidance.webSocket.message.*; import org.junit.jupiter.api.Test; +import com.dongni.collisionavoidance.websocket.event.CollisionWarningEvent; +import com.dongni.collisionavoidance.websocket.event.PositionUpdateEvent; +import com.dongni.collisionavoidance.websocket.event.TrafficLightStatusEvent; +import com.dongni.collisionavoidance.websocket.message.*; + import static org.junit.jupiter.api.Assertions.*; /** diff --git a/src/test/java/com/dongni/collisionavoidance/webSocket/integration/WebSocketIntegrationTest.java b/src/test/java/com/dongni/collisionavoidance/webSocket/integration/WebSocketIntegrationTest.java index 090cd82..57a8b13 100644 --- a/src/test/java/com/dongni/collisionavoidance/webSocket/integration/WebSocketIntegrationTest.java +++ b/src/test/java/com/dongni/collisionavoidance/webSocket/integration/WebSocketIntegrationTest.java @@ -1,6 +1,6 @@ -package com.dongni.collisionavoidance.webSocket.integration; +package com.dongni.collisionavoidance.websocket.integration; -import com.dongni.collisionavoidance.webSocket.message.*; +import com.dongni.collisionavoidance.websocket.message.*; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; @@ -31,7 +31,7 @@ class WebSocketIntegrationTest { .timestamp(System.currentTimeMillis() * 1000) .build(); - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.POSITION_UPDATE) .timestamp(System.currentTimeMillis() * 1000) .messageId("test-msg-001") @@ -49,8 +49,8 @@ class WebSocketIntegrationTest { // 验证反序列化 @SuppressWarnings("unchecked") - WebSocketMessage deserializedMessage = - objectMapper.readValue(json, WebSocketMessage.class); + UniversalMessage deserializedMessage = + objectMapper.readValue(json, UniversalMessage.class); assertEquals(MessageTypeConstants.POSITION_UPDATE, deserializedMessage.getType()); assertNotNull(deserializedMessage.getPayload()); } @@ -69,7 +69,7 @@ class WebSocketIntegrationTest { .timestamp(System.currentTimeMillis() * 1000) .build(); - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.COLLISION_WARNING) .timestamp(System.currentTimeMillis() * 1000) .messageId("test-warning-001") @@ -87,8 +87,8 @@ class WebSocketIntegrationTest { // 验证反序列化 @SuppressWarnings("unchecked") - WebSocketMessage deserializedMessage = - objectMapper.readValue(json, WebSocketMessage.class); + UniversalMessage deserializedMessage = + objectMapper.readValue(json, UniversalMessage.class); assertEquals(MessageTypeConstants.COLLISION_WARNING, deserializedMessage.getType()); assertNotNull(deserializedMessage.getPayload()); } @@ -109,7 +109,7 @@ class WebSocketIntegrationTest { .timestamp(System.currentTimeMillis() * 1000) .build(); - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.TRAFFIC_LIGHT_STATUS) .timestamp(System.currentTimeMillis() * 1000) .messageId("test-traffic-001") @@ -126,8 +126,8 @@ class WebSocketIntegrationTest { // 验证反序列化 @SuppressWarnings("unchecked") - WebSocketMessage deserializedMessage = - objectMapper.readValue(json, WebSocketMessage.class); + UniversalMessage deserializedMessage = + objectMapper.readValue(json, UniversalMessage.class); assertEquals(MessageTypeConstants.TRAFFIC_LIGHT_STATUS, deserializedMessage.getType()); assertNotNull(deserializedMessage.getPayload()); } @@ -144,7 +144,7 @@ class WebSocketIntegrationTest { .timestamp(System.currentTimeMillis() * 1000) .build(); - WebSocketMessage message = WebSocketMessage.builder() + UniversalMessage message = UniversalMessage.builder() .type(MessageTypeConstants.VEHICLE_COMMAND) .timestamp(System.currentTimeMillis() * 1000) .messageId("test-command-001") @@ -161,8 +161,8 @@ class WebSocketIntegrationTest { // 验证反序列化 @SuppressWarnings("unchecked") - WebSocketMessage deserializedMessage = - objectMapper.readValue(json, WebSocketMessage.class); + UniversalMessage deserializedMessage = + objectMapper.readValue(json, UniversalMessage.class); assertEquals(MessageTypeConstants.VEHICLE_COMMAND, deserializedMessage.getType()); assertNotNull(deserializedMessage.getPayload()); } diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml index eb0a9ed..f779b8a 100644 --- a/src/test/resources/application-test.yml +++ b/src/test/resources/application-test.yml @@ -1,7 +1,4 @@ spring: - # 允许循环依赖(临时解决方案) - main: - allow-circular-references: true # 测试数据库配置 - 使用现有的collision_avoidance数据库 datasource: