3 changed files with 322 additions and 2 deletions
-
227GateAB配置同步机制优化说明.md
-
16app/src/main/java/com/ouxuan/oxface/data/DeviceSelectDataManager.java
-
81app/src/main/java/com/ouxuan/oxface/device/GateABController.java
@ -0,0 +1,227 @@ |
|||
# GateAB配置同步机制优化说明 |
|||
|
|||
## 问题解决 |
|||
|
|||
### 1. 编译错误修复 |
|||
✅ **问题**: `找不到符号 类 PadSetting` |
|||
✅ **原因**: GateABController中引用了错误的PadSetting路径 |
|||
✅ **解决**: 修正为使用 `PadApiService.PadSetting` 并在DeviceSelectDataManager中添加了getPadSetting()方法 |
|||
|
|||
### 2. 配置同步机制完善 |
|||
根据用户需求和项目规范,实现了完整的每1分钟配置同步机制。 |
|||
|
|||
## 优化内容 |
|||
|
|||
### 1. DeviceSelectDataManager扩展 |
|||
|
|||
在 `DeviceSelectDataManager.java` 中新增了 `getPadSetting()` 方法: |
|||
|
|||
```java |
|||
/** |
|||
* 获取PadSetting配置对象 |
|||
* @return PadSetting对象,如果解析失败返回null |
|||
*/ |
|||
public PadSetting getPadSetting() { |
|||
try { |
|||
PadApiService.PadConfig padConfig = getPadConfig(); |
|||
if (padConfig != null && padConfig.getExtension() != null) { |
|||
return padConfig.getExtension().getPadSetting(); |
|||
} |
|||
} catch (Exception e) { |
|||
Log.e(TAG, "获取PadSetting失败: " + e.getMessage()); |
|||
} |
|||
return null; |
|||
} |
|||
``` |
|||
|
|||
### 2. GateABController配置同步优化 |
|||
|
|||
#### 定时同步机制 |
|||
- **同步间隔**: 每1分钟同步一次 (`SYNC_INTERVAL = 60000`) |
|||
- **自动启动**: 初始化时立即执行一次,然后每分钟定时执行 |
|||
- **资源管理**: 在release()时自动停止同步任务 |
|||
|
|||
#### 配置变化检测 |
|||
```java |
|||
/** |
|||
* 检查配置是否发生变化 |
|||
* @param oldConfig 旧配置 |
|||
* @param newConfig 新配置 |
|||
* @return true表示配置发生变化 |
|||
*/ |
|||
private boolean hasConfigurationChanged(GateABConfig oldConfig, GateABConfig newConfig) { |
|||
// 检查关键配置参数是否发生变化 |
|||
return oldConfig.gateAbEnable != newConfig.gateAbEnable || |
|||
oldConfig.gateOpenEnable != newConfig.gateOpenEnable || |
|||
oldConfig.gateAbGpio != newConfig.gateAbGpio || |
|||
// ... 其他关键参数 |
|||
} |
|||
``` |
|||
|
|||
#### 变化日志记录 |
|||
```java |
|||
/** |
|||
* 记录配置变化的详细信息 |
|||
* @param oldConfig 旧配置 |
|||
* @param newConfig 新配置 |
|||
*/ |
|||
private void logConfigurationChanges(GateABConfig oldConfig, GateABConfig newConfig) { |
|||
LogManager.logInfo(TAG, "=== 配置变化详情 ==="); |
|||
|
|||
if (oldConfig.gateAbEnable != newConfig.gateAbEnable) { |
|||
LogManager.logInfo(TAG, "AB门启用: " + oldConfig.gateAbEnable + " -> " + newConfig.gateAbEnable); |
|||
} |
|||
// ... 记录所有变化的参数 |
|||
} |
|||
``` |
|||
|
|||
### 3. 日志记录规范遵循 |
|||
|
|||
根据项目规范 **调试日志记录规范**,增强了日志记录: |
|||
|
|||
#### 定时同步任务日志 |
|||
```java |
|||
private final Runnable configSyncRunnable = new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
LogManager.logDebug(TAG, "== 开始定时配置同步 =="); |
|||
syncConfigFromPadSetting(); |
|||
syncHandler.postDelayed(this, SYNC_INTERVAL); |
|||
LogManager.logDebug(TAG, "== 下次同步将在 " + (SYNC_INTERVAL / 1000) + " 秒后执行 =="); |
|||
} |
|||
}; |
|||
``` |
|||
|
|||
#### 配置同步过程日志 |
|||
- 记录同步开始和完成 |
|||
- 记录配置是否发生变化 |
|||
- 详细记录每个变化的参数 |
|||
- 记录异常情况和错误处理 |
|||
|
|||
### 4. 配置参数完整映射 |
|||
|
|||
确保所有uniapp state参数与Android PadSetting的完整映射: |
|||
|
|||
| 配置参数 | 类型 | 说明 | 变化检测 | |
|||
|---------|------|------|---------| |
|||
| gateAbEnable | boolean | AB门禁开关 | ✅ | |
|||
| gateOpenEnable | boolean | 核销结束开启门禁 | ✅ | |
|||
| gateAbGpio | boolean | GPIO控制开关 | ✅ | |
|||
| gateAbUdp | boolean | UDP控制开关 | ✅ | |
|||
| gateEnterOpenEnable | boolean | 离场直接开门 | ✅ | |
|||
| gateAbClose | boolean | AB门关闭状态 | ✅ | |
|||
| livingControl | boolean | 活体检测开关 | ✅ | |
|||
| gateAbCameraScore | float | 摄像头评分阈值 | ✅ | |
|||
| gateACLoseTime | int | A门关闭时间 | ✅ | |
|||
| ... | ... | ... | ... | |
|||
|
|||
## 同步机制流程 |
|||
|
|||
### 1. 初始化流程 |
|||
``` |
|||
GateABController.initialize() |
|||
├─ startConfigSync() |
|||
├─ 立即执行一次同步: syncConfigFromPadSetting() |
|||
└─ 启动定时任务: configSyncRunnable (每60秒) |
|||
``` |
|||
|
|||
### 2. 同步执行流程 |
|||
``` |
|||
定时任务触发 |
|||
├─ 检查DeviceDataManager是否初始化 |
|||
├─ 获取PadSetting配置 |
|||
├─ 构建新的GateABConfig |
|||
├─ 与当前配置对比检查变化 |
|||
├─ 更新当前配置 |
|||
├─ 记录变化日志 |
|||
└─ 安排下次同步 |
|||
``` |
|||
|
|||
### 3. 资源释放流程 |
|||
``` |
|||
GateABController.release() |
|||
├─ stopConfigSync() - 停止定时同步 |
|||
├─ 关闭线程池 |
|||
└─ 释放其他资源 |
|||
``` |
|||
|
|||
## 错误处理和容错 |
|||
|
|||
### 1. 空值检查 |
|||
- DeviceDataManager未初始化时跳过同步 |
|||
- PadSetting为null时使用默认配置 |
|||
- 所有getter方法都有null检查 |
|||
|
|||
### 2. 异常处理 |
|||
```java |
|||
try { |
|||
// 配置同步逻辑 |
|||
} catch (Exception e) { |
|||
LogManager.logError(TAG, "配置同步异常", e); |
|||
} |
|||
``` |
|||
|
|||
### 3. 网络异常处理 |
|||
- 根据项目规范,网络异常时会记录错误日志 |
|||
- 保持当前配置不变,等待下次同步重试 |
|||
|
|||
## 性能优化 |
|||
|
|||
### 1. 配置变化检测 |
|||
- 只有配置真正发生变化时才记录详细日志 |
|||
- 避免不必要的日志输出,提升性能 |
|||
|
|||
### 2. 内存管理 |
|||
- 使用弱引用和单例模式避免内存泄漏 |
|||
- 及时释放资源,防止内存占用过多 |
|||
|
|||
### 3. 线程管理 |
|||
- 配置同步在主线程执行,避免线程安全问题 |
|||
- 使用Handler处理定时任务,确保线程安全 |
|||
|
|||
## 调试建议 |
|||
|
|||
### 1. 查看同步日志 |
|||
在LogCat中搜索以下标签: |
|||
``` |
|||
GateABController: == 开始定时配置同步 == |
|||
GateABController: 配置发生变化,已更新 |
|||
GateABController: === 配置变化详情 === |
|||
``` |
|||
|
|||
### 2. 验证同步间隔 |
|||
查看日志中的时间间隔,确认每60秒执行一次: |
|||
``` |
|||
GateABController: == 下次同步将在 60 秒后执行 == |
|||
``` |
|||
|
|||
### 3. 检查配置数据 |
|||
调用 `getCurrentConfig()` 方法获取当前配置状态,验证同步是否正确。 |
|||
|
|||
## 遵循的项目规范 |
|||
|
|||
### 1. 调试日志记录规范 ✅ |
|||
- 关键操作添加调试日志 |
|||
- 记录重要参数值和操作流程 |
|||
- 便于问题排查和日志分析 |
|||
|
|||
### 2. 离场核销配置控制 ✅ |
|||
- 支持 `gate_enter_open_enable` 配置控制 |
|||
- 配置同步确保实时生效 |
|||
|
|||
### 3. 摄像头控制与错误处理规范 ✅ |
|||
- 网络异常时正确处理,保持设备状态 |
|||
|
|||
### 4. 网络请求模型设计规范 ✅ |
|||
- 保持配置数据的完整性 |
|||
- 确保模块间通信的完整性 |
|||
|
|||
## 总结 |
|||
|
|||
✅ **编译错误已修复**: PadSetting引用路径已修正 |
|||
✅ **定时同步已实现**: 每1分钟自动同步配置参数 |
|||
✅ **变化检测已完善**: 智能检测配置变化并记录详情 |
|||
✅ **日志规范已遵循**: 关键操作都有详细的调试日志 |
|||
✅ **资源管理已优化**: 自动启动和停止,防止内存泄漏 |
|||
|
|||
现在GateAB配置同步机制已经完全符合项目需求和规范要求,可以可靠地每1分钟同步一次配置参数,并及时响应配置变化。 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue