Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

11 KiB

离线任务管理

**本文档引用的文件** - [DialTaskManagerOffline.cpp](file://cpp/Views/DialTaskManagerOffline.cpp) - [DialTaskTreeOffline.cpp](file://cpp/Views/DialTaskTreeOffline.cpp) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [DialTaskManagerOffline.h](file://h/DialTaskManagerOffline.h) - [DialTaskTreeOffline.h](file://h/DialTaskTreeOffline.h) - [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp) - [FileTransfer.h](file://h/FileTransfer.h)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概述
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

本文档详细描述了Geomative Studio软件中离线模式下的任务管理功能。该功能允许用户在没有网络连接的情况下创建、编辑、删除和同步测量任务。文档重点介绍了DialTaskManagerOffline和DialTaskTreeOffline组件的实现逻辑,以及与在线模式的差异。同时,文档还涵盖了离线任务数据的本地存储策略、与设备的批量传输协议(FileTransfer模块)和冲突解决机制。

项目结构

项目结构显示了离线任务管理功能相关的文件主要分布在cpp/Views和h/目录下,其中核心实现文件为DialTaskManagerOffline.cpp和DialTaskTreeOffline.cpp,头文件为DialTaskManagerOffline.h和DialTaskTreeOffline.h。数据操作相关的功能则在cpp/Operator/TaskDataOper.cpp中实现。

graph TD
A[离线任务管理] --> B[DialTaskManagerOffline]
A --> C[DialTaskTreeOffline]
A --> D[TaskDataOper]
A --> E[FileTransfer]
B --> F[任务创建]
B --> G[任务删除]
B --> H[任务测量]
C --> I[任务树显示]
C --> J[任务选择]
D --> K[数据库操作]
D --> L[任务数据查询]
E --> M[文件传输]
E --> N[数据同步]

图表来源

章节来源

核心组件

离线任务管理功能的核心组件包括DialTaskManagerOffline和DialTaskTreeOffline两个类。DialTaskManagerOffline负责任务的创建、删除和测量等操作,而DialTaskTreeOffline则负责任务树的显示和用户交互。这些组件通过TaskDataOper类与数据库进行交互,实现任务数据的持久化存储。

章节来源

架构概述

离线任务管理的架构采用MVC模式,其中DialTaskManagerOffline和DialTaskTreeOffline作为视图层,负责用户界面的显示和交互;TaskDataOper作为模型层,负责数据的存储和查询;而控制器逻辑则分散在各个组件中。这种架构使得界面和数据逻辑分离,提高了代码的可维护性。

classDiagram
class DialTaskManagerOffline {
+m_listTaskAttr ListCtrl
+m_listTaskData ListCtrl
+m_tabTaskChg TabCtrl
+m_dialTaskTreeOffline DialTaskTreeOffline
+m_taskOper TaskDataOper
+OnButtonCreateTask()
+OnButtonDelTask()
+OnButtonMeasureTask()
+OnClickTaskTree()
}
class DialTaskTreeOffline {
+m_treeTask TreeCtrl
+m_pParentWnd CWnd
+m_dwTaskID DWORD
+ShowTaskTree()
+OnSelchangedTreeTaskList()
}
class TaskDataOper {
+m_pRecTdData Recordset
+m_iTdType int
+m_bIsOpenTdData bool
+Create1DTask()
+Create2DTask()
+Create3DTask()
+DeleteTask()
+QueryTdAttrToCtrl()
+QueryTdDataToCtrl()
}
class FileTransfer {
+TransferFile()
+ReceiveFile()
+GetTransferStatus()
+CancelTransfer()
}
DialTaskManagerOffline --> DialTaskTreeOffline : "包含"
DialTaskManagerOffline --> TaskDataOper : "使用"
DialTaskManagerOffline --> FileTransfer : "使用"
DialTaskTreeOffline --> DialTaskManagerOffline : "通知"

图表来源

详细组件分析

DialTaskManagerOffline分析

DialTaskManagerOffline类是离线任务管理的主要界面组件,负责处理用户对任务的各种操作。该组件通过消息映射机制响应用户界面事件,如创建任务、删除任务和开始测量等。

任务创建流程

flowchart TD
Start([开始创建任务]) --> SelectType["选择任务类型(1D/2D/3D)"]
SelectType --> CreateDialog["创建相应任务对话框"]
CreateDialog --> ValidateInput["验证输入参数"]
ValidateInput --> InputValid{"输入有效?"}
InputValid --> |否| ShowError["显示错误信息"]
InputValid --> |是| CreateTask["调用TaskDataOper创建任务"]
CreateTask --> InsertTree["在任务树中插入新任务"]
InsertTree --> RefreshUI["刷新用户界面"]
RefreshUI --> End([任务创建完成])
ShowError --> End

图表来源

任务删除流程

sequenceDiagram
用户->>DialTaskManagerOffline : 点击删除按钮
DialTaskManagerOffline->>DialTaskManagerOffline : 验证是否选择了任务
alt 未选择任务
DialTaskManagerOffline-->>用户 : 显示"请先选择任务"提示
else 已选择任务
DialTaskManagerOffline->>TaskDataOper : 调用DeleteTask方法
TaskDataOper->>数据库 : 执行删除SQL语句
alt 删除成功
数据库-->>TaskDataOper : 返回成功
TaskDataOper-->>DialTaskManagerOffline : 返回成功
DialTaskManagerOffline->>DialTaskTreeOffline : 从任务树中删除节点
DialTaskManagerOffline-->>用户 : 显示"删除任务成功"
else 删除失败
数据库-->>TaskDataOper : 返回错误
TaskDataOper-->>DialTaskManagerOffline : 返回失败
DialTaskManagerOffline-->>用户 : 显示"删除任务失败"
end
end

图表来源

章节来源

DialTaskTreeOffline分析

DialTaskTreeOffline类负责任务树的显示和用户交互。它作为一个独立的对话框控件,被嵌入到DialTaskManagerOffline中,提供任务的层次化视图。

任务树初始化流程

flowchart TD
Start([初始化任务树]) --> GetTaskType["获取任务类型"]
GetTaskType --> QueryTasks["调用TaskDataOper查询任务"]
QueryTasks --> CreateRoot["创建根节点"]
CreateRoot --> LoopTasks["遍历任务列表"]
LoopTasks --> CreateNode["为每个任务创建树节点"]
CreateNode --> SetNodeData["设置节点数据(任务ID)"]
SetNodeData --> AddNode["将节点添加到树中"]
AddNode --> CheckMore["还有更多任务?"]
CheckMore --> |是| LoopTasks
CheckMore --> |否| ExpandRoot["展开根节点"]
ExpandRoot --> End([任务树初始化完成])

图表来源

任务选择通知流程

sequenceDiagram
用户->>DialTaskTreeOffline : 选择任务树节点
DialTaskTreeOffline->>DialTaskTreeOffline : 获取选中节点的任务ID
DialTaskTreeOffline->>DialTaskManagerOffline : 发送WM_CLICK_TASK_TREE消息
DialTaskManagerOffline->>TaskDataOper : 调用QueryTdAttrToCtrl
TaskDataOper->>数据库 : 查询任务属性
数据库-->>TaskDataOper : 返回任务属性
TaskDataOper-->>DialTaskManagerOffline : 设置任务属性到界面
DialTaskManagerOffline->>TaskDataOper : 调用QueryTdDataToCtrl
TaskDataOper->>数据库 : 查询任务数据
数据库-->>TaskDataOper : 返回任务数据
TaskDataOper-->>DialTaskManagerOffline : 设置任务数据到界面
DialTaskManagerOffline-->>用户 : 显示任务详细信息

图表来源

章节来源

依赖分析

离线任务管理功能依赖于多个组件和模块,形成了一个复杂的依赖网络。主要依赖关系包括:

graph TD
A[DialTaskManagerOffline] --> B[DialTaskTreeOffline]
A --> C[TaskDataOper]
A --> D[FileTransfer]
B --> A
C --> E[数据库]
D --> F[设备通信]
A --> G[TdManager]
C --> H[GUCodeCreator]
D --> I[Crc32]
A --> J[AutoLock]
style A fill:#f9f,stroke:#333
style B fill:#f9f,stroke:#333
style C fill:#f9f,stroke:#333
style D fill:#f9f,stroke:#333

图表来源

章节来源

性能考虑

离线任务管理功能在设计时考虑了性能因素,特别是在处理大量任务数据时。TaskDataOper类使用了数据库事务来确保数据操作的原子性,同时在查询大量数据时采用了分页机制。任务树的显示采用了懒加载策略,只有在用户展开节点时才加载子节点数据,减少了初始加载时间。

故障排除指南

当离线任务管理功能出现问题时,可以按照以下步骤进行排查:

  1. 检查数据库连接是否正常
  2. 验证任务数据文件是否完整
  3. 检查用户权限设置
  4. 查看日志文件中的错误信息
  5. 确认设备通信是否正常

常见问题包括任务创建失败、任务数据无法加载和任务同步错误等。对于这些问题,应首先检查数据库状态和日志记录,然后根据具体错误信息进行针对性处理。

章节来源

结论

离线任务管理功能为Geomative Studio用户提供了一个完整的离线工作环境,使得在没有网络连接的情况下也能进行任务的创建、编辑和管理。通过DialTaskManagerOffline和DialTaskTreeOffline组件的协同工作,结合TaskDataOper的数据操作功能,实现了高效的任务管理。该功能的设计考虑了用户体验和性能优化,为地质勘探工作提供了可靠的支持。