Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/开发者指南/代码结构/Managers模块/ProManager.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

10 KiB

ProManager

**本文档引用的文件** - [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) - [SptManager.cpp](file://cpp/Managers/SptManager.cpp) - [SptManager.h](file://h/SptManager.h)

目录

  1. 简介
  2. 项目生命周期管理
  3. 测区管理机制
  4. 数据持久化流程
  5. 与SptManager的协调
  6. 恢复策略
  7. 代码示例
  8. 结论

简介

ProManager模块是Geomative Studio软件的核心组件之一,负责管理项目的整个生命周期。该模块提供了创建、打开、保存和关闭项目的基本功能,同时管理与项目相关的测区(TestingZone)和任务包配置。ProManager通过协调数据库和XML缓存文件之间的数据同步,确保项目数据的完整性和一致性。此外,它还与SptManager模块紧密协作,生成与项目关联的测量脚本。

Section sources

项目生命周期管理

ProManager模块实现了完整的项目生命周期管理功能,包括项目创建、打开、保存和关闭操作。当用户创建新项目时,ProManager首先通过CreateProjectInDB方法在数据库中创建项目记录,然后通过CreateProjectInDev方法在设备上创建相应的项目结构。项目创建过程中,系统会自动生成一个唯一的项目编号(CN),并创建一个默认的测区。

项目打开操作通过LoadProjectFromDev方法实现,该方法从设备加载项目数据并同步到本地数据库。项目保存操作则通过将内存中的项目数据序列化为XML格式并保存到缓存文件中来实现。项目关闭时,ProManager会清理内存中的项目对象,释放相关资源。

flowchart TD
Start([开始]) --> CreateProject["创建项目"]
CreateProject --> CheckExist["检查项目名称是否存在"]
CheckExist --> |存在| ShowError["显示错误信息"]
CheckExist --> |不存在| InsertDB["在数据库插入记录"]
InsertDB --> GenerateCN["生成项目编号"]
GenerateCN --> CreateDefaultTz["创建默认测区"]
CreateDefaultTz --> CreateDev["在设备创建项目"]
CreateDev --> SaveXML["保存project.xml"]
SaveXML --> End([结束])

Diagram sources

Section sources

测区管理机制

测区(TestingZone)是项目中的重要组成部分,用于组织和管理测量任务。ProManager通过CreateTzInDBCreateTzInDev方法实现测区的创建。每个测区都有一个类型属性(TZtype),用于区分不同类型的测量任务,如1D VES、2D ERI或3D ERT。

测区配置逻辑包括设置测区名称、描述、位置和创建日期等基本信息。ProManager通过ShowTzList方法显示指定项目下的所有测区列表,用户可以通过界面操作选择和管理测区。当创建新测区时,系统会自动为其分配一个唯一的测区编号(CN),并在数据库和设备上同步创建相应的结构。

classDiagram
class CProManager {
+ShowTzList(dwProHandle, tzList)
+CreateTzInDB(dwID, dwPrID)
+CreateTzInDev(dwID, pDev)
+DeleteTzInDB(dwID)
+DeleteTzInDev(szPrCN, szTzCN, pDev)
}
class CTestingZone {
+m_szTZname
+m_szCDate
+m_szDesc
+m_szLocation
+m_szCN
+m_szTZtype
}
CProManager --> CTestingZone : "创建"
CProManager --> CTestingZone : "管理"

Diagram sources

Section sources

数据持久化流程

ProManager模块采用混合持久化策略,将项目数据存储在数据库和XML缓存文件中。核心项目数据(如项目名称、描述、位置等)存储在Access数据库的project表中,而项目结构和配置信息则以XML格式存储在CACHE目录下的project.xml文件中。

数据持久化流程如下:当项目创建或修改时,ProManager首先更新数据库中的记录,然后生成或更新project.xml文件。XML文件包含项目的基本信息、测区列表和配置参数。系统使用CMarkup类来处理XML文件的读写操作。项目数据在内存、数据库和XML文件之间保持同步,确保数据的一致性和完整性。

flowchart LR
Memory[内存对象] --> Database[(数据库)]
Memory --> XML[project.xml]
Database --> Memory
XML --> Memory
subgraph "数据流"
Database
XML
Memory
end

Diagram sources

Section sources

与SptManager的协调

ProManager与SptManager模块紧密协作,共同完成项目相关的测量脚本管理。当需要为项目生成测量脚本时,ProManager会调用SptManager的相关方法。SptManager负责具体的脚本创建、编辑和验证逻辑,而ProManager则负责提供项目上下文和持久化支持。

这种协作关系体现在项目创建后的脚本生成流程中:ProManager首先创建项目结构,然后通知SptManager为该项目生成相应的测量脚本。脚本数据存储在独立的数据库表中,但与项目数据通过外键关联。这种设计实现了功能分离,同时保持了数据的完整性。

sequenceDiagram
participant User as "用户"
participant ProManager as "ProManager"
participant SptManager as "SptManager"
participant Database as "数据库"
User->>ProManager : 创建新项目
ProManager->>Database : 插入项目记录
ProManager->>SptManager : 请求生成脚本
SptManager->>SptManager : 创建脚本配置
SptManager->>Database : 保存脚本数据
SptManager-->>ProManager : 脚本创建完成
ProManager-->>User : 项目创建成功

Diagram sources

Section sources

恢复策略

ProManager模块实现了多种恢复策略,以应对项目文件损坏或版本不兼容的情况。当检测到project.xml文件损坏时,系统可以从数据库中重建XML文件。恢复流程首先验证数据库中的项目记录完整性,然后重新生成XML文件结构。

对于版本不兼容问题,ProManager采用向后兼容的设计原则。新版本的软件可以读取旧版本创建的项目文件,系统会自动进行必要的数据转换和升级。在极端情况下,如果项目数据无法恢复,系统会创建一个新的空白项目,并尝试从备份中恢复尽可能多的数据。

flowchart TD
Start([开始]) --> CheckXML["检查project.xml"]
CheckXML --> |有效| LoadNormal["正常加载"]
CheckXML --> |无效| CheckDB["检查数据库"]
CheckDB --> |完整| RebuildXML["重建XML文件"]
CheckDB --> |不完整| CreateNew["创建新项目"]
RebuildXML --> Validate["验证数据"]
Validate --> |成功| LoadRebuilt["加载重建文件"]
Validate --> |失败| CreateNew
CreateNew --> Initialize["初始化新项目"]
Initialize --> End([结束])

Diagram sources

Section sources

代码示例

以下代码示例展示了项目创建和测区配置的核心方法调用。CreateProjectInDB方法处理数据库层面的项目创建,而CreateProjectInDev方法负责在设备上创建项目结构。测区配置通过InsertDefaultTzToProject方法实现,该方法为新项目创建一个默认的测区。

flowchart TD
A["CreateProjectInDB"] --> B["显示创建对话框"]
B --> C["验证项目名称"]
C --> |已存在| D["显示错误信息"]
C --> |不存在| E["生成项目编号"]
E --> F["插入数据库记录"]
F --> G["创建默认测区"]
G --> H["返回成功状态"]
I["CreateProjectInDev"] --> J["获取项目信息"]
J --> K["创建本地目录"]
K --> L["生成project.xml"]
L --> M["发送到设备"]
M --> |成功| N["更新同步状态"]
M --> |失败| O["清理并返回错误"]

Diagram sources

Section sources

结论

ProManager模块作为Geomative Studio项目管理的核心,实现了完整的项目生命周期管理功能。通过精心设计的架构,该模块有效地协调了数据库存储和XML文件缓存,确保了项目数据的持久性和一致性。其与SptManager模块的协作机制,为测量脚本的生成和管理提供了坚实的基础。完善的恢复策略进一步增强了系统的可靠性和用户体验。