Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/API参考/项目管理API.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

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类提供了一套完整的项目生命周期管理功能,实现了项目和测区的创建、删除、同步等操作。系统采用分层架构设计,具有良好的可维护性和扩展性。通过数据库和缓存的双重持久化机制,确保了数据的可靠性和一致性。在多项目环境下,系统能够有效管理资源,提供稳定的项目管理服务。