322 lines
11 KiB
Markdown
322 lines
11 KiB
Markdown
# 项目管理API
|
|
|
|
<cite>
|
|
**本文档引用的文件**
|
|
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
|
- [ProManager.h](file://h/ProManager.h)
|
|
- [Project.cpp](file://cpp/ProblemZone/Project.cpp)
|
|
- [Project.h](file://h/Project.h)
|
|
- [TestingZone.cpp](file://cpp/ProblemZone/TestingZone.cpp)
|
|
- [TestingZone.h](file://h/TestingZone.h)
|
|
- [DataMngStruct.cpp](file://cpp/ProblemZone/DataMngStruct.cpp)
|
|
- [DataMngStruct.h](file://h/DataMngStruct.h)
|
|
- [HandleProcessor.h](file://h/HandleProcessor.h)
|
|
- [opcreateprojectdlg.h](file://h/opcreateprojectdlg.h)
|
|
</cite>
|
|
|
|
## 目录
|
|
1. [简介](#简介)
|
|
2. [项目结构](#项目结构)
|
|
3. [核心组件](#核心组件)
|
|
4. [架构概述](#架构概述)
|
|
5. [详细组件分析](#详细组件分析)
|
|
6. [依赖分析](#依赖分析)
|
|
7. [性能考虑](#性能考虑)
|
|
8. [故障排除指南](#故障排除指南)
|
|
9. [结论](#结论)
|
|
|
|
## 简介
|
|
本文档深入探讨了Geomative Studio项目中的项目管理API,重点分析了ProManager类如何管理项目创建、打开、保存及测区配置等操作。文档详细记录了每个公共方法的技术规范,包括参数约束、状态转换逻辑和持久化行为。通过使用示例展示了如何通过API创建新项目、添加测区、配置任务参数并保存到缓存或数据库。同时解释了Project类的数据结构设计及其与脚本和测试数据的关联关系,说明了在多项目环境下的资源管理策略,并提供了错误恢复和数据一致性保障的最佳实践。
|
|
|
|
## 项目结构
|
|
Geomative Studio项目采用分层架构设计,主要分为以下几个目录:
|
|
- **CACHE**: 存放项目和测区的XML缓存文件
|
|
- **DB**: 数据库相关文件和记录
|
|
- **Install**: 安装程序和配置文件
|
|
- **cpp**: C++源代码,包含Managers、ProblemZone等关键模块
|
|
- **h**: 头文件,定义了各类接口和数据结构
|
|
- **res**: 资源文件
|
|
|
|
项目管理功能主要集中在`cpp/Managers/ProManager.cpp`和`h/ProManager.h`中,通过ProManager类提供统一的项目管理接口。
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph "核心管理模块"
|
|
ProManager[ProManager类]
|
|
Project[Project类]
|
|
TestingZone[TestingZone类]
|
|
end
|
|
subgraph "数据结构"
|
|
DataMngStruct[DataMngStruct基类]
|
|
HandleProcessor[HandleProcessor]
|
|
end
|
|
subgraph "持久化"
|
|
Database[(数据库)]
|
|
Cache[(缓存文件)]
|
|
end
|
|
ProManager --> Project
|
|
ProManager --> TestingZone
|
|
ProManager --> HandleProcessor
|
|
Project --> DataMngStruct
|
|
TestingZone --> DataMngStruct
|
|
ProManager --> Database
|
|
ProManager --> Cache
|
|
```
|
|
|
|
**图表来源**
|
|
- [ProManager.h](file://h/ProManager.h#L30-L74)
|
|
- [Project.h](file://h/Project.h#L16-L38)
|
|
- [TestingZone.h](file://h/TestingZone.h#L14-L30)
|
|
|
|
**本节来源**
|
|
- [ProManager.h](file://h/ProManager.h#L1-L77)
|
|
- [Project.h](file://h/Project.h#L1-L41)
|
|
|
|
## 核心组件
|
|
项目管理API的核心组件包括ProManager类、Project类和TestingZone类。ProManager作为项目管理的中枢,负责协调项目和测区的创建、删除、同步等操作。Project类代表一个工程项目,包含项目的基本信息和属性。TestingZone类代表项目中的测区,包含测区的配置和参数。
|
|
|
|
ProManager类通过句柄系统管理项目和测区对象,使用HandleProcessor生成和解析句柄,确保对象的唯一性和可追溯性。所有项目和测区数据都持久化存储在数据库和XML缓存文件中,实现了数据的双重保障。
|
|
|
|
**本节来源**
|
|
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1-L2054)
|
|
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L1-L81)
|
|
- [TestingZone.cpp](file://cpp/ProblemZone/TestingZone.cpp#L1-L81)
|
|
|
|
## 架构概述
|
|
项目管理API采用分层架构设计,分为接口层、业务逻辑层和数据持久层。接口层提供统一的API接口,业务逻辑层实现具体的项目管理功能,数据持久层负责数据的存储和读取。
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class CProManager {
|
|
+ShowProList(dwDevHandle, proList) bool
|
|
+ShowTzList(dwProHandle, tzList) bool
|
|
+CreateProjectInDB(dwID) UINT
|
|
+CreateProjectInDev(dwID, pDev) UINT
|
|
+CreateTzInDB(dwID, dwPrID) UINT
|
|
+CreateTzInDev(dwID, pDev) UINT
|
|
+DeleteProjectInDB(dwID) void
|
|
+DeleteProjectInDev(szMac, szPrCN, pDev) UINT
|
|
+DeleteTzInDB(dwID) void
|
|
+DeleteTzInDev(szPrCN, szTzCN, pDev) UINT
|
|
+GetDMS(dwHandle) CDataMngStruct*
|
|
-m_handleProcessor CHandleProcessor
|
|
-m_dmsLinkList CLinkList<CDataMngStruct*>
|
|
-m_pConnection _ConnectionPtr
|
|
}
|
|
class CProject {
|
|
+ShowDetailInfo(proDetailList) bool
|
|
+CProject(dwID, pConnection)
|
|
+~CProject()
|
|
-m_dwID DWORD
|
|
-m_pConnection _ConnectionPtr
|
|
-m_szCN CString
|
|
-m_szPRname CString
|
|
-m_szDesc CString
|
|
-m_szLocation CString
|
|
-m_szPRdate CString
|
|
-m_szDuration CString
|
|
-m_szPS CString
|
|
-m_szCS CString
|
|
-m_szPM CString
|
|
-m_szQAS CString
|
|
-m_szStandard CString
|
|
}
|
|
class CTestingZone {
|
|
+ShowDetailInfo(tzDetailList) bool
|
|
+CTestingZone(dwID, pConnection)
|
|
+~CTestingZone()
|
|
-m_dwID DWORD
|
|
-m_pConnection _ConnectionPtr
|
|
-m_szTZname CString
|
|
-m_szCDate CString
|
|
-m_szDesc CString
|
|
-m_szLocation CString
|
|
-m_szCN CString
|
|
-m_szTZtype CString
|
|
}
|
|
class CDataMngStruct {
|
|
+ShowDetailInfo(dmsDetailList) virtual bool
|
|
+CDataMngStruct()
|
|
+~CDataMngStruct()
|
|
}
|
|
class CHandleProcessor {
|
|
+GenerateHandle(dwID, uStyle) DWORD
|
|
+GetIDFromHandle(dwHandle) DWORD
|
|
+GetStyleFromHandle(dwHandle) UINT
|
|
+AnalyseHandle(dwHandle, dwID, uStyle) void
|
|
}
|
|
CProManager --> CProject : "创建"
|
|
CProManager --> CTestingZone : "创建"
|
|
CProManager --> CHandleProcessor : "使用"
|
|
CProject --> CDataMngStruct : "继承"
|
|
CTestingZone --> CDataMngStruct : "继承"
|
|
```
|
|
|
|
**图表来源**
|
|
- [ProManager.h](file://h/ProManager.h#L30-L74)
|
|
- [Project.h](file://h/Project.h#L16-L38)
|
|
- [TestingZone.h](file://h/TestingZone.h#L14-L30)
|
|
- [DataMngStruct.h](file://h/DataMngStruct.h#L14-L20)
|
|
- [HandleProcessor.h](file://h/HandleProcessor.h#L12-L26)
|
|
|
|
## 详细组件分析
|
|
|
|
### ProManager类分析
|
|
ProManager类是项目管理的核心,负责协调项目和测区的生命周期管理。它通过数据库连接和设备通信,实现了项目数据的持久化和同步。
|
|
|
|
#### 项目创建流程
|
|
```mermaid
|
|
flowchart TD
|
|
Start([开始创建项目]) --> ShowDialog["显示项目创建对话框"]
|
|
ShowDialog --> ValidateInput["验证输入参数"]
|
|
ValidateInput --> CheckExistence["检查项目名称是否存在"]
|
|
CheckExistence --> |存在| ShowError["显示错误信息"]
|
|
CheckExistence --> |不存在| CreateInDB["在数据库创建项目"]
|
|
CreateInDB --> GenerateCN["生成项目编号"]
|
|
GenerateCN --> InsertDB["插入项目记录"]
|
|
InsertDB --> GetID["获取项目ID"]
|
|
GetID --> CreateDefaultTz["创建默认测区"]
|
|
CreateDefaultTz --> CreateInDev["在设备创建项目"]
|
|
CreateInDev --> CreateDir["创建项目目录"]
|
|
CreateDir --> GenerateXML["生成project.xml"]
|
|
GenerateXML --> SendToDevice["发送到设备"]
|
|
SendToDevice --> |成功| UpdateSync["更新同步状态"]
|
|
SendToDevice --> |失败| Rollback["回滚操作"]
|
|
UpdateSync --> End([项目创建完成])
|
|
Rollback --> End
|
|
ShowError --> End
|
|
```
|
|
|
|
**图表来源**
|
|
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L249-L341)
|
|
- [opcreateprojectdlg.h](file://h/opcreateprojectdlg.h#L15-L67)
|
|
|
|
#### 测区管理
|
|
ProManager类提供了完整的测区管理功能,包括测区的创建、删除和同步。测区数据既存储在数据库中,也以XML格式缓存在本地,确保数据的可靠性和可恢复性。
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant UI as "用户界面"
|
|
participant ProManager as "ProManager"
|
|
participant Database as "数据库"
|
|
participant Device as "设备"
|
|
participant Cache as "缓存"
|
|
UI->>ProManager : 创建测区请求
|
|
ProManager->>Database : 检查测区是否存在
|
|
Database-->>ProManager : 返回检查结果
|
|
ProManager->>Database : 插入测区记录
|
|
Database-->>ProManager : 返回测区ID
|
|
ProManager->>Cache : 生成testzone.xml
|
|
Cache-->>ProManager : 返回文件路径
|
|
ProManager->>Device : 发送测区文件
|
|
Device-->>ProManager : 返回操作结果
|
|
ProManager->>Database : 更新同步状态
|
|
Database-->>ProManager : 返回结果
|
|
ProManager-->>UI : 返回操作结果
|
|
```
|
|
|
|
**图表来源**
|
|
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L709-L943)
|
|
- [TestingZone.h](file://h/TestingZone.h#L14-L30)
|
|
|
|
**本节来源**
|
|
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1-L2054)
|
|
- [ProManager.h](file://h/ProManager.h#L1-L77)
|
|
|
|
### Project类分析
|
|
Project类代表一个工程项目,封装了项目的所有属性和行为。它是项目管理的基本单元,通过数据库持久化存储项目信息。
|
|
|
|
#### 数据结构设计
|
|
```mermaid
|
|
classDiagram
|
|
class CProject {
|
|
-m_dwID DWORD
|
|
-m_pConnection _ConnectionPtr
|
|
-m_szCN CString
|
|
-m_szPRname CString
|
|
-m_szDesc CString
|
|
-m_szLocation CString
|
|
-m_szPRdate CString
|
|
-m_szDuration CString
|
|
-m_szPS CString
|
|
-m_szCS CString
|
|
-m_szPM CString
|
|
-m_szQAS CString
|
|
-m_szStandard CString
|
|
}
|
|
note right of CProject
|
|
项目数据结构包含 :
|
|
- 项目编号(CN)
|
|
- 项目名称(PRname)
|
|
- 描述(PRdesc)
|
|
- 位置(location)
|
|
- 创建日期(PRdate)
|
|
- 持续时间(duration)
|
|
- 项目负责人(PS)
|
|
- 客户(CS)
|
|
- 项目经理(PM)
|
|
- 质量保证(QAS)
|
|
- 标准(standard)
|
|
end note
|
|
```
|
|
|
|
**图表来源**
|
|
- [Project.h](file://h/Project.h#L16-L38)
|
|
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L1-L81)
|
|
|
|
**本节来源**
|
|
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L1-L81)
|
|
- [Project.h](file://h/Project.h#L1-L41)
|
|
|
|
## 依赖分析
|
|
项目管理API的组件之间存在明确的依赖关系,形成了一个层次化的架构。
|
|
|
|
```mermaid
|
|
graph TD
|
|
ProManager[ProManager] --> Project[Project]
|
|
ProManager --> TestingZone[TestingZone]
|
|
ProManager --> HandleProcessor[HandleProcessor]
|
|
ProManager --> DataMngStruct[DataMngStruct]
|
|
Project --> DataMngStruct
|
|
TestingZone --> DataMngStruct
|
|
ProManager --> Database[(数据库)]
|
|
ProManager --> Cache[(缓存)]
|
|
Database --> SQLServer[SQL Server]
|
|
Cache --> XML[XML文件]
|
|
style ProManager fill:#f9f,stroke:#333
|
|
style Project fill:#bbf,stroke:#333
|
|
style TestingZone fill:#bbf,stroke:#333
|
|
style HandleProcessor fill:#f96,stroke:#333
|
|
style DataMngStruct fill:#9f9,stroke:#333
|
|
```
|
|
|
|
**图表来源**
|
|
- [ProManager.h](file://h/ProManager.h#L8-L13)
|
|
- [Project.h](file://h/Project.h#L15-L16)
|
|
- [TestingZone.h](file://h/TestingZone.h#L12-L13)
|
|
|
|
## 性能考虑
|
|
项目管理API在设计时考虑了性能优化,主要体现在以下几个方面:
|
|
- 使用句柄系统快速定位项目和测区对象
|
|
- 采用缓存机制减少数据库访问频率
|
|
- 批量操作减少设备通信次数
|
|
- 异步处理耗时操作,提高响应速度
|
|
|
|
在多项目环境下,建议合理规划项目结构,避免单个项目包含过多测区,以保持系统性能。
|
|
|
|
## 故障排除指南
|
|
当项目管理操作失败时,可以按照以下步骤进行排查:
|
|
1. 检查数据库连接是否正常
|
|
2. 验证设备通信是否畅通
|
|
3. 确认缓存目录权限是否正确
|
|
4. 检查XML文件格式是否正确
|
|
5. 查看日志文件获取详细错误信息
|
|
|
|
对于数据一致性问题,系统提供了回滚机制,在操作失败时自动回滚到之前的状态,确保数据完整性。
|
|
|
|
**本节来源**
|
|
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1014-L1208)
|
|
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1892-L1994)
|
|
|
|
## 结论
|
|
项目管理API通过ProManager类提供了一套完整的项目生命周期管理功能,实现了项目和测区的创建、删除、同步等操作。系统采用分层架构设计,具有良好的可维护性和扩展性。通过数据库和缓存的双重持久化机制,确保了数据的可靠性和一致性。在多项目环境下,系统能够有效管理资源,提供稳定的项目管理服务。 |