124 lines
4.1 KiB
Markdown
124 lines
4.1 KiB
Markdown
# 指令和任务模式适配检查报告
|
||
|
||
## 📋 检查范围
|
||
检查 `api/middleware` 目录下的代码是否适用于新的指令和任务模式。
|
||
|
||
## ✅ 已适配的部分
|
||
|
||
### 1. **任务处理器 (taskHandlers.js)**
|
||
- ✅ 正确使用 `command.executeCommands()` 执行指令
|
||
- ✅ 在 `handleAutoDeliverTask` 中创建指令并执行
|
||
- ✅ 指令类型使用驼峰命名(`getOnlineResume`, `getJobList`, `applyJob`)
|
||
|
||
### 2. **指令管理器 (command.js)**
|
||
- ✅ 已重构完成,统一封装指令执行
|
||
- ✅ 统一处理成功、失败、超时
|
||
- ✅ 统一记录数据库
|
||
- ✅ 支持驼峰转下划线的命名转换
|
||
|
||
### 3. **任务队列 (taskQueue.js)**
|
||
- ✅ 正确使用任务处理器
|
||
- ✅ 通过 `taskHandlers` 执行任务
|
||
|
||
## ⚠️ 需要修复的问题
|
||
|
||
### 1. **方法命名不一致**
|
||
|
||
**问题描述**:
|
||
- 指令类型使用驼峰命名:`getOnlineResume`, `getJobList`, `applyJob`
|
||
- 大部分方法使用下划线命名:`get_online_resume`, `get_job_list`
|
||
- 但 `applyJob` 方法名是驼峰命名,与指令类型一致
|
||
|
||
**当前转换逻辑**:
|
||
```javascript
|
||
// command.js 中的转换
|
||
const to_snake_case = (str) => {
|
||
if (str.includes('_')) return str;
|
||
return str.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '');
|
||
};
|
||
|
||
// getOnlineResume -> get_online_resume ✓
|
||
// getJobList -> get_job_list ✓
|
||
// applyJob -> apply_job ✗ (但实际方法名是 applyJob)
|
||
```
|
||
|
||
**解决方案**:
|
||
1. **方案1(推荐)**:统一使用下划线命名,将 `applyJob` 改为 `apply_job`
|
||
2. **方案2**:保持现状,`command.js` 中已支持两种命名方式(先尝试下划线,再尝试原名称)
|
||
|
||
**当前状态**:方案2已实现,代码可以正常工作,但命名不统一。
|
||
|
||
### 2. **sendChatMessage 方法**
|
||
|
||
**问题描述**:
|
||
- `chatManager.js` 中的方法是 `sendChatMessage`(驼峰命名)
|
||
- 如果指令类型是 `sendChatMessage`,转换后会变成 `send_chat_message`,但实际方法名是 `sendChatMessage`
|
||
|
||
**当前状态**:`command.js` 中已支持回退机制,如果下划线命名找不到,会尝试原名称,所以可以正常工作。
|
||
|
||
## 📊 方法命名对照表
|
||
|
||
| 指令类型 (command_type) | 转换后方法名 | 实际方法名 | 状态 |
|
||
|------------------------|-------------|-----------|------|
|
||
| `getOnlineResume` | `get_online_resume` | `get_online_resume` | ✅ 匹配 |
|
||
| `getJobList` | `get_job_list` | `get_job_list` | ✅ 匹配 |
|
||
| `applyJob` | `apply_job` | `applyJob` | ⚠️ 不匹配(但可工作) |
|
||
| `sendChatMessage` | `send_chat_message` | `sendChatMessage` | ⚠️ 不匹配(但可工作) |
|
||
|
||
## 🔧 建议修复
|
||
|
||
### 方案1:统一使用下划线命名(推荐)
|
||
|
||
**修改文件**:
|
||
1. `api/middleware/job/jobManager.js`:将 `applyJob` 改为 `apply_job`
|
||
2. `api/middleware/job/chatManager.js`:将 `sendChatMessage` 改为 `send_chat_message`
|
||
3. `api/middleware/schedule/taskHandlers.js`:将指令类型改为下划线命名
|
||
|
||
**优点**:
|
||
- 命名统一,符合项目规范
|
||
- 代码更清晰,减少混淆
|
||
|
||
**缺点**:
|
||
- 需要修改多个文件
|
||
- 可能影响其他调用方
|
||
|
||
### 方案2:保持现状(当前方案)
|
||
|
||
**优点**:
|
||
- 不需要修改现有代码
|
||
- `command.js` 已支持两种命名方式
|
||
|
||
**缺点**:
|
||
- 命名不统一,容易混淆
|
||
- 代码可读性稍差
|
||
|
||
## 📝 其他检查项
|
||
|
||
### 1. **deviceManager.js**
|
||
- ✅ 不直接涉及指令和任务,主要用于设备状态管理
|
||
- ✅ 与任务系统配合良好
|
||
|
||
### 2. **job/index.js**
|
||
- ✅ 正确导出所有方法
|
||
- ✅ 支持下划线命名规范
|
||
|
||
### 3. **MQTT 相关**
|
||
- ✅ 通过 `mqttClient.publishAndWait` 发送指令
|
||
- ✅ 与指令系统配合良好
|
||
|
||
## ✅ 总结
|
||
|
||
**整体适配情况**:**良好** ✅
|
||
|
||
1. ✅ 核心功能已正确适配新的指令和任务模式
|
||
2. ✅ 指令执行统一封装,处理逻辑完善
|
||
3. ⚠️ 存在命名不一致问题,但不影响功能(有回退机制)
|
||
4. 💡 建议统一命名规范,提高代码可维护性
|
||
|
||
## 🎯 下一步行动
|
||
|
||
1. **可选**:统一方法命名规范(下划线命名)
|
||
2. **可选**:添加单元测试验证指令执行流程
|
||
3. **可选**:完善错误处理和日志记录
|
||
|