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