Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/核心功能/项目管理/项目生命周期管理.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

14 KiB

项目生命周期管理

**本文档引用的文件** - [ProManager.cpp](file://cpp/Managers/ProManager.cpp) - [ProManager.h](file://h/ProManager.h) - [opcreateprojectdlg.cpp](file://cpp/Views/opcreateprojectdlg.cpp) - [opcreateprojectdlg.h](file://h/opcreateprojectdlg.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) - [Device.h](file://h/Device.h) - [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp)

目录

  1. 项目创建流程
  2. 项目元数据收集与验证
  3. 项目唯一标识符生成机制
  4. 数据库记录插入与默认测区创建
  5. 项目数据同步到GD10设备
  6. XML缓存文件生成
  7. 项目删除操作与级联清理
  8. 项目状态管理与性能优化

项目创建流程

项目生命周期管理的核心功能始于项目创建流程,该流程通过CProManager::CreateProjectInDB方法实现。此方法首先实例化COpCreateProjectDlg对话框,用于收集用户输入的项目元数据。当用户点击确定按钮时,系统会验证输入数据的完整性并执行后续操作。

项目创建流程遵循严格的事务处理机制,确保数据的一致性和完整性。整个流程包括元数据收集、冲突检测、数据库插入和设备同步等多个阶段。在数据库操作层面,系统使用ADODB组件与Access数据库进行交互,通过SQL语句执行数据的增删改查操作。

Section sources

项目元数据收集与验证

项目元数据的收集通过opCreateProjectDlg对话框完成,该对话框提供了用户友好的界面来输入项目相关信息。收集的元数据包括项目CN(唯一标识符)、名称、描述、位置、日期、持续时间、工程监督员(PS)、现场管理员(CS)、工程负责人(PM)、品质保证员(QAS)和标准等关键字段。

系统在数据提交前执行严格的验证机制。首先检查工程名称是否为空,如果为空则弹出提示信息要求用户重新输入。同时,系统还会检测工程名称中是否包含特殊字符,若存在特殊字符也会阻止提交并给出相应提示。此外,在将数据写入数据库之前,系统会查询数据库以确保工程名称的唯一性,避免重复创建相同名称的工程。

flowchart TD
Start([开始创建项目]) --> ShowDialog["显示opCreateProjectDlg对话框"]
ShowDialog --> CollectData["收集项目元数据"]
CollectData --> ValidateEmpty["验证必填字段是否为空"]
ValidateEmpty --> |为空| ShowError1["显示错误提示"]
ValidateEmpty --> |不为空| ValidateSpecial["验证特殊字符"]
ValidateSpecial --> |包含特殊字符| ShowError2["显示特殊字符错误"]
ValidateSpecial --> |无特殊字符| CheckDuplicate["检查工程名称重复"]
CheckDuplicate --> |已存在| ShowError3["显示重复名称错误"]
CheckDuplicate --> |不存在| InsertDB["插入数据库记录"]
InsertDB --> CreateDefaultTz["创建默认测区"]
CreateDefaultTz --> End([项目创建完成])
ShowError1 --> End
ShowError2 --> End
ShowError3 --> End

Diagram sources

Section sources

项目唯一标识符生成机制

项目唯一标识符(CN)的生成机制是确保项目数据完整性和可追溯性的关键环节。系统采用CGUCodeCreator::GenerateGUIDCode()方法生成全局唯一标识符作为项目CN。该方法通过复杂的算法生成具有高度唯一性的字符串,有效避免了项目标识符冲突的可能性。

COpCreateProjectDlg对话框初始化时,系统自动调用OnProGenCn方法生成默认的CN值并填充到输入框中。用户可以选择接受系统生成的CN,也可以手动输入自定义的CN。然而,即使用户手动输入CN,系统仍然会在数据库插入前检查其唯一性,确保不会出现重复的CN值。

项目CN不仅是数据库中的主键标识,还在后续的设备同步过程中发挥重要作用。它被用作文件路径的组成部分,确保每个项目在设备上的存储位置具有唯一性。这种设计使得系统能够准确地识别和管理多个项目,为数据同步和检索提供了可靠的基础。

Section sources

数据库记录插入与默认测区创建

在完成元数据验证后,系统执行数据库记录插入操作。CProManager::CreateProjectInDB方法构建SQL插入语句,将收集到的项目元数据写入Access数据库的project表中。插入的字段包括CN、PRname、PRdesc、location、PRdate、duration、PS、CS、PM、QAS和standard等。

数据库插入操作完成后,系统会自动为新创建的项目生成一个默认测区。这一过程由InsertDefaultTzToProject方法实现,该方法首先删除该工程下可能存在的旧默认测区,然后插入一个新的默认测区记录。默认测区的CN同样通过CGUCodeCreator::GenerateGUIDCode()方法生成,确保其唯一性。

默认测区的创建遵循特定的命名规则和类型定义,其名称固定为"DefaultTestZone",类型值为3。这种设计保证了每个项目都至少包含一个测区,为后续的数据采集和管理提供了基础结构。同时,通过事务性操作确保了项目与默认测区之间的数据一致性。

classDiagram
class CProManager {
+CreateProjectInDB(DWORD& dwID) UINT
+InsertDefaultTzToProject(DWORD dwProjectID) UINT
-m_pConnection _ConnectionPtr
-m_dmsLinkList CLinkList<CDataMngStruct*>
-m_handleProcessor CHandleProcessor
-m_stateProcessor CStateProcessor
-m_guCodeCreator CGUCodeCreator
}
class CGUCodeCreator {
+GenerateGUIDCode() CString
}
class COpCreateProjectDlg {
+OnOK() void
+OnProGenCn() void
-m_edCN CString
-m_edName CString
-m_edPrDesc CString
-m_edLocation CString
-m_edPrDate CTime
-m_edDuration int
-m_edPS CString
-m_edCS CString
-m_edPM CString
-m_edQAS CString
-m_edStandard CString
-m_bCNS bool
-m_guCodeCreator CGUCodeCreator
}
CProManager --> CGUCodeCreator : "使用"
CProManager --> COpCreateProjectDlg : "调用"
COpCreateProjectDlg --> CGUCodeCreator : "使用"

Diagram sources

Section sources

项目数据同步到GD10设备

项目数据从数据库到GD10设备的同步过程是项目生命周期管理的重要环节。CProManager::CreateProjectInDev方法负责将项目数据同步到指定的GD10设备。该过程首先从数据库读取项目详细信息,然后检查设备上是否已存在同名项目,以避免重复创建。

同步过程包含多个关键步骤:首先生成项目XML缓存文件,然后通过CDevice::SendFile方法将文件传输到设备。在传输前,系统会创建相应的目录结构,路径格式为"/SD/projects/{项目CN}/"。文件传输成功后,系统更新数据库中的同步状态,记录设备与项目之间的关联关系。

如果文件传输失败,系统会执行回滚操作,删除已在设备上创建的项目,并向用户显示错误提示。这种事务性处理机制确保了数据的一致性,防止出现部分同步导致的数据不一致问题。同时,系统还实现了错误重试机制,提高了同步过程的可靠性。

sequenceDiagram
participant UI as 用户界面
participant ProMgr as CProManager
participant DB as 数据库
participant Device as CDevice
participant FileSys as 文件系统
UI->>ProMgr : 调用CreateProjectInDev
ProMgr->>DB : 查询项目信息
DB-->>ProMgr : 返回项目数据
ProMgr->>DB : 检查设备同步记录
DB-->>ProMgr : 返回检查结果
ProMgr->>FileSys : 创建CACHE目录
FileSys-->>ProMgr : 确认目录创建
ProMgr->>ProMgr : 生成project.xml
ProMgr->>Device : 调用SendFile
Device->>Device : 传输文件到GD10
Device-->>ProMgr : 返回传输结果
alt 传输成功
ProMgr->>DB : 更新同步状态
DB-->>ProMgr : 确认更新
ProMgr-->>UI : 返回成功状态
else 传输失败
ProMgr->>Device : 删除设备上的项目
Device-->>ProMgr : 确认删除
ProMgr-->>UI : 返回失败状态
end

Diagram sources

Section sources

XML缓存文件生成

XML缓存文件的生成是项目数据同步过程中的关键步骤。系统使用CMarkup类创建符合特定格式的XML文件,文件名为"project.xml",存储在本地CACHE目录中。XML文件的结构设计遵循预定义的模式,包含项目的所有元数据信息。

XML文件的根元素为"project",其下包含多个子元素,如project_name、cn、description、location、create_date、create_time、test_date、test_time、duration、PS、CS、PM、QA、standard和testzone_count等。这些元素准确反映了项目在数据库中的属性,确保了数据的一致性。

在生成XML文件时,系统会设置适当的编码格式(ansi)和XML声明。文件内容经过格式化处理,包含适当的换行符,提高了可读性。生成的XML文件不仅用于设备同步,还可作为数据备份和交换的中间格式,增强了系统的灵活性和可维护性。

erDiagram
PROJECT ||--o{ TESTZONE : "包含"
PROJECT {
string CN PK
string PRname
string PRdesc
string location
date PRdate
int duration
string PS
string CS
string PM
string QAS
string standard
}
TESTZONE {
int ID PK
string CN UK
string TZname
int TZtype
date Cdate
string TZdesc
string location
int PRID FK
}
DEVICE ||--o{ DEV_SYN_TD : "关联"
DEVICE {
string DESN PK
string DevName
string ModelNO
string MDate
string HWV
string SWV
string MacAddress
}
DEV_SYN_TD {
int ID PK
string DESN FK
string PrCN FK
string PrName
string TzCN FK
string TzName
boolean IsSyned
}
PROJECT ||--o{ DEV_SYN_TD : "同步到"
TESTZONE ||--o{ DEV_SYN_TD : "同步到"

Diagram sources

Section sources

项目删除操作与级联清理

项目删除操作涉及复杂的级联清理策略,以确保数据完整性和系统稳定性。虽然具体的删除方法实现未在提供的代码片段中显示,但从ProManager.h头文件中可以推断出系统提供了DeleteProjectInDBDeleteProjectInDev等方法用于删除项目。

项目删除过程需要考虑多个关联实体的清理,包括测区、任务数据以及设备上的同步文件。系统可能采用事务性删除机制,确保所有相关数据被一致地清除。在删除数据库记录的同时,还需要清理设备上的对应文件和目录,如"/SD/projects/{项目CN}/"路径下的所有内容。

级联清理策略可能包括:首先删除与项目关联的所有测区数据,然后删除项目本身;在设备端,先删除测区文件,再删除项目目录。这种分层删除方式可以有效避免因外键约束导致的删除失败。同时,系统可能还实现了删除前的确认机制和备份功能,防止误删重要数据。

Section sources

项目状态管理与性能优化

项目状态管理通过m_dmsLinkList缓存数据管理结构实现性能优化。CProManager类中的m_dmsLinkList成员变量是一个链表容器,用于缓存已加载的项目和测区数据管理结构。这种缓存机制避免了频繁的数据库查询,显著提高了数据访问性能。

当需要获取特定项目的管理结构时,系统首先检查m_dmsLinkList中是否已存在对应的CDataMngStruct对象。如果存在则直接返回缓存对象;如果不存在,则从数据库加载数据并创建新的管理结构对象,然后将其添加到链表中以便后续重用。这种设计模式有效减少了数据库访问次数,提升了系统响应速度。

缓存管理还包括适当的清理机制。在CProManager析构函数中,系统会遍历并删除链表中的所有对象,释放占用的内存资源。这种资源管理策略确保了系统的稳定运行,防止内存泄漏。同时,通过句柄处理器(m_handleProcessor)管理对象的生命周期,实现了高效的内存使用和对象复用。

flowchart TD
A([获取DMS对象]) --> B{"缓存中存在?"}
B --> |是| C[返回缓存对象]
B --> |否| D[从数据库加载数据]
D --> E[创建新的DMS对象]
E --> F[添加到m_dmsLinkList]
F --> G[返回新对象]
C --> H([使用DMS对象])
G --> H
H --> I{"操作完成?"}
I --> |否| H
I --> |是| J[释放资源]
J --> K([结束])
style A fill:#4CAF50,stroke:#388E3C
style C fill:#2196F3,stroke:#1976D2
style D fill:#FF9800,stroke:#F57C00
style E fill:#FF9800,stroke:#F57C00
style F fill:#FF9800,stroke:#F57C00
style G fill:#2196F3,stroke:#1976D2
style H fill:#607D8B,stroke:#455A64
style J fill:#F44336,stroke:#D32F2F

Diagram sources

Section sources