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