QAUP_Management/doc/design/电子围栏准入检测架构方案.md

211 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 电子围栏准入检测架构优化方案 (仅针对无人车)
## 📋 总体设计
### 核心原则
1. **职责分离**Area负责空间数据Rule负责业务逻辑
2. **规则驱动**所有准入检测通过SpatialRule统一管理
3. **事件驱动**:基于事件的异步处理机制
4. **🎯 业务范围限定****仅针对无人车进行电子围栏检测和告警**
## 🏗️ 架构设计
### 1. 数据模型重构
#### 1.1 简化Area模型
```java
@Entity
public class AirportArea {
private Long id; // 区域ID
private String areaCode; // 区域编码(唯一标识)
private String areaName; // 区域名称
private AreaType areaType; // 区域类型(枚举)
private Geometry geometry; // 空间几何数据
private String description; // 描述信息
private Boolean active; // 是否启用
private LocalDateTime createdAt; // 创建时间
private LocalDateTime updatedAt; // 更新时间
// 移除所有业务规则相关字段
}
```
#### 1.2 增强SpatialRule模型 (专注无人车)
```java
@Entity
public class SpatialRule {
// 现有字段保持不变,新增以下字段:
private String areaCode; // 关联区域编码
private RuleCategory category; // ACCESS_CONTROL(准入控制)
private String ruleConfig; // JSON配置针对无人车的限制条件
private GeofenceAction action; // 触发动作ALLOW/DENY/WARN
// 注意allowedVehicleTypes 应该只包含 UNMANNED_VEHICLE
}
```
#### 1.3 规则配置结构 (无人车专用)
```json
{
"accessControl": {
"vehicleType": "UNMANNED_VEHICLE", // 固定为无人车类型
"requiresPermission": true,
"allowedOperationModes": ["AUTO", "MANUAL", "REMOTE"]
},
"physicalLimits": {
"maxSpeed": 30, // 无人车最大速度限制
"maxHeight": 3.0, // 无人车最大高度限制
"maxWeight": 5.0 // 无人车最大载重限制
},
"timeRestrictions": {
"activeHours": "06:00-22:00",
"activeDays": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"]
},
"safetyRequirements": {
"minBatteryLevel": 20, // 最低电量要求
"requiresOperatorPresence": false // 是否需要操作员在场
}
}
```
### 2. 服务层架构
#### 2.1 电子围栏检测服务 (无人车专用)
```java
@Service
public class UnmannedVehicleGeofenceService {
/**
* 检测无人车是否可以进入指定区域
* 注意:仅处理无人车类型的车辆
*/
public AccessCheckResult checkAreaAccess(MovingObject vehicle, String areaCode) {
// 前置检查:必须是无人车
if (vehicle.getObjectType() != MovingObject.ObjectType.UNMANNED_VEHICLE) {
log.debug("跳过非无人车的围栏检测: {}", vehicle.getObjectId());
return AccessCheckResult.skip();
}
// 1. 获取区域信息
// 2. 查询适用的规则
// 3. 执行规则检查
// 4. 返回检测结果
}
/**
* 实时监控无人车位置变化
*/
public void monitorUnmannedVehicleLocation(MovingObject vehicle) {
// 类型检查:只处理无人车
if (vehicle.getObjectType() != MovingObject.ObjectType.UNMANNED_VEHICLE) {
return; // 静默跳过
}
// 1. 检测进入/离开事件
// 2. 触发准入检测
// 3. 发布事件
}
}
```
#### 2.2 规则执行引擎 (针对无人车优化)
```java
@Service
public class UnmannedVehicleRuleEngine {
/**
* 执行无人车准入控制规则
*/
public RuleExecutionResult executeAccessRules(MovingObject unmannedVehicle, AirportArea area, List<SpatialRule> rules) {
// 验证输入:确保是无人车
validateUnmannedVehicle(unmannedVehicle);
// 1. 过滤适用于无人车的规则
// 2. 按优先级排序规则
// 3. 依次执行规则检查
// 4. 汇总执行结果
}
private void validateUnmannedVehicle(MovingObject vehicle) {
if (vehicle.getObjectType() != MovingObject.ObjectType.UNMANNED_VEHICLE) {
throw new IllegalArgumentException("规则引擎只处理无人车类型");
}
}
}
```
### 3. 事件处理机制
#### 3.1 事件类型定义 (无人车专用)
```java
public enum UnmannedVehicleGeofenceEventType {
UNMANNED_VEHICLE_ENTRY_REQUEST, // 无人车区域进入请求
UNMANNED_VEHICLE_ENTRY_APPROVED, // 无人车进入批准
UNMANNED_VEHICLE_ENTRY_DENIED, // 无人车进入拒绝
UNMANNED_VEHICLE_EXIT, // 无人车离开区域
UNMANNED_VEHICLE_RULE_VIOLATION, // 无人车规则违反
UNMANNED_VEHICLE_ACCESS_WARNING // 无人车准入警告
}
```
#### 3.2 事件处理流程 (仅处理无人车事件)
```java
@EventListener
public class UnmannedVehicleGeofenceEventHandler {
@Async
public void handleUnmannedVehicleEntryRequest(UnmannedVehicleEntryRequestEvent event) {
// 确保事件来源是无人车
if (event.getVehicleType() != MovingObject.ObjectType.UNMANNED_VEHICLE) {
log.warn("收到非无人车的围栏事件,忽略处理: {}", event);
return;
}
// 1. 执行准入检测
// 2. 记录检测结果
// 3. 发送WebSocket通知 (仅无人车事件)
// 4. 记录审计日志
}
@Async
public void handleUnmannedVehicleViolation(UnmannedVehicleViolationEvent event) {
// 处理无人车违规事件
// 1. 记录违规信息
// 2. 触发告警通知
// 3. 可能的自动处理措施 (如减速指令)
}
}
```
## 🔧 实施步骤
### Phase 1: 数据模型重构 (1周)
1. 简化AirportArea表结构
2. 完善SpatialRule表结构
3. 创建数据迁移脚本
4. 更新Entity类
### Phase 2: 服务层开发 (2周)
1. 开发GeofenceAccessControlService
2. 增强RuleExecutionEngine
3. 实现事件处理机制
4. 集成WebSocket通知
### Phase 3: 测试与优化 (1周)
1. 单元测试和集成测试
2. 性能优化
3. 监控和日志完善
4. 文档更新
## 📊 技术优势
1. **清晰的职责分离**Area专注空间数据Rule管理业务逻辑
2. **灵活的规则配置**通过JSON配置支持复杂业务场景
3. **高性能检测**:空间索引 + 缓存优化
4. **事件驱动架构**:异步处理,高并发支持
5. **易于扩展**:新增规则类型只需扩展配置,无需修改代码
## 🎯 预期效果
- **功能完整性**:支持复杂的电子围栏准入检测需求
- **性能提升**:优化的空间查询和规则执行
- **维护性**:清晰的架构设计,易于理解和维护
- **扩展性**:支持未来新的业务需求