a
This commit is contained in:
@@ -0,0 +1,222 @@
|
||||
# SptManager
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp)
|
||||
- [SptManager.h](file://h/SptManager.h)
|
||||
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp)
|
||||
- [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp)
|
||||
- [ScriptCE.cpp](file://cpp/ProblemZone/ScriptCE.cpp)
|
||||
- [Script.h](file://h/Script.h)
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [testzone.xml](file://CACHE/testzone.xml)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [引言](#引言)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概述](#架构概述)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖分析](#依赖分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 引言
|
||||
SptManager模块是Geomative Studio软件中的核心组件,负责生成和管理各种测量脚本(包括2D、3D和跨孔测量)。该模块根据ProManager中定义的项目和测区信息,调用Script2D、Script3D、ScriptCE等具体类来生成符合测量协议的脚本数据。SptManager不仅处理脚本的创建和验证,还负责脚本的存储(如testzone.xml)和导出流程。本文档将深入分析SptManager的职责和实现,提供脚本生成失败或逻辑错误的排查方法,并通过代码示例展示从测区参数到最终脚本数据的转换过程。
|
||||
|
||||
## 项目结构
|
||||
SptManager模块位于`cpp/Managers/`目录下,其主要功能是通过调用不同类型的脚本类(如Script2D、Script3D、ScriptCE)来生成测量脚本。这些脚本类位于`cpp/ProblemZone/`目录下,每个类负责特定类型的测量脚本生成。SptManager还与ProManager模块紧密协作,获取项目和测区信息,确保生成的脚本符合实际测量需求。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "核心模块"
|
||||
SptManager[SptManager]
|
||||
ProManager[ProManager]
|
||||
end
|
||||
subgraph "脚本生成类"
|
||||
Script2D[Script2D]
|
||||
Script3D[Script3D]
|
||||
ScriptCE[ScriptCE]
|
||||
end
|
||||
SptManager --> ProManager
|
||||
SptManager --> Script2D
|
||||
SptManager --> Script3D
|
||||
SptManager --> ScriptCE
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L1-L3589)
|
||||
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp#L1-L237)
|
||||
- [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp#L1-L221)
|
||||
- [ScriptCE.cpp](file://cpp/ProblemZone/ScriptCE.cpp#L1-L146)
|
||||
|
||||
**章节来源**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L1-L3589)
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1-L2054)
|
||||
|
||||
## 核心组件
|
||||
SptManager的核心功能包括脚本的创建、验证、存储和导出。它通过`Create2DSConInDB`、`CreateCESConInDB`等方法创建不同类型的测量脚本,并将这些脚本存储在数据库中。SptManager还负责将脚本导出到设备,并从设备加载脚本。
|
||||
|
||||
**章节来源**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L257-L800)
|
||||
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp#L1-L237)
|
||||
|
||||
## 架构概述
|
||||
SptManager的架构设计遵循模块化原则,通过继承和多态机制实现不同类型的脚本生成。CScript类作为基类,定义了所有脚本的通用接口,而CScript2D、CScript3D、CScriptCE等派生类则实现了特定类型的脚本生成逻辑。SptManager通过`GetScript`方法根据句柄动态创建相应的脚本对象,实现了灵活的脚本管理。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CScript {
|
||||
+DWORD m_dwID
|
||||
+_ConnectionPtr m_pConnection
|
||||
+int m_iAR
|
||||
+int m_iEAmount
|
||||
+CScript(DWORD dwID, _ConnectionPtr& pConnection)
|
||||
+~CScript()
|
||||
+virtual bool ShowSptDetailInfo(CListCtrl &sptDetailList)
|
||||
+virtual bool ShowChannelList(CListCtrl &sptChannelList)
|
||||
+virtual bool ShowSptConInfo(CListCtrl &sptConList)
|
||||
+virtual void AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo)
|
||||
}
|
||||
class CScript2D {
|
||||
+CScript2D(DWORD dwID, _ConnectionPtr& pConnection)
|
||||
+~CScript2D()
|
||||
+bool ShowSptDetailInfo(CListCtrl &sptDetailList)
|
||||
+bool ShowChannelList(CListCtrl &sptChannelList)
|
||||
+bool ShowSptConInfo(CListCtrl &sptConList)
|
||||
+void AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo)
|
||||
}
|
||||
class CScript3D {
|
||||
+CScript3D(DWORD dwID, _ConnectionPtr& pConnection)
|
||||
+~CScript3D()
|
||||
+bool ShowSptDetailInfo(CListCtrl &sptDetailList)
|
||||
+bool ShowChannelList(CListCtrl &sptChannelList)
|
||||
+bool ShowSptConInfo(CListCtrl &sptConList)
|
||||
+void AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo)
|
||||
}
|
||||
class CScriptCE {
|
||||
+CScriptCE(DWORD dwID, _ConnectionPtr& pConnection)
|
||||
+~CScriptCE()
|
||||
+bool ShowSptDetailInfo(CListCtrl &sptDetailList)
|
||||
+bool ShowChannelList(CListCtrl &sptChannelList)
|
||||
+bool ShowSptConInfo(CListCtrl &sptConList)
|
||||
}
|
||||
CScript <|-- CScript2D
|
||||
CScript <|-- CScript3D
|
||||
CScript <|-- CScriptCE
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Script.h](file://h/Script.h)
|
||||
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp#L1-L237)
|
||||
- [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp#L1-L221)
|
||||
- [ScriptCE.cpp](file://cpp/ProblemZone/ScriptCE.cpp#L1-L146)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### SptManager分析
|
||||
SptManager模块的主要职责是协调脚本的生成和管理。它通过`Create2DSConInDB`方法创建2D测量脚本,通过`CreateCESConInDB`方法创建跨孔测量脚本。这些方法首先通过对话框获取用户输入的脚本参数,然后在数据库中创建相应的记录。
|
||||
|
||||
#### 脚本创建流程
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant 用户 as "用户"
|
||||
participant SptManager as "SptManager"
|
||||
participant 数据库 as "数据库"
|
||||
用户->>SptManager : 请求创建2D脚本
|
||||
SptManager->>SptManager : 显示创建对话框
|
||||
SptManager->>用户 : 获取脚本参数
|
||||
SptManager->>数据库 : 检查脚本名称是否已存在
|
||||
alt 脚本名称已存在
|
||||
数据库-->>SptManager : 返回存在
|
||||
SptManager-->>用户 : 显示错误消息
|
||||
else 脚本名称不存在
|
||||
数据库-->>SptManager : 返回不存在
|
||||
SptManager->>数据库 : 插入scon记录
|
||||
SptManager->>数据库 : 插入channel记录
|
||||
SptManager->>数据库 : 插入script2d记录
|
||||
数据库-->>SptManager : 确认插入成功
|
||||
SptManager-->>用户 : 显示成功消息
|
||||
end
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L257-L800)
|
||||
|
||||
#### 脚本验证与存储
|
||||
SptManager在创建脚本时会进行严格的验证,确保脚本名称的唯一性。如果脚本名称已存在,系统会提示用户并取消创建操作。脚本数据存储在数据库的`scon`、`channel`和`script2d`表中,其中`scon`表存储脚本的基本信息,`channel`表存储通道信息,`script2d`表存储具体的测量点数据。
|
||||
|
||||
**章节来源**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L334-L351)
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L363-L380)
|
||||
|
||||
### Script2D分析
|
||||
Script2D类负责生成2D测量脚本。它继承自CScript类,并实现了特定于2D测量的逻辑。Script2D的主要功能包括显示脚本详细信息、显示通道列表和显示脚本配置信息。
|
||||
|
||||
#### 显示脚本详细信息
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始]) --> GetSConData["从scon表获取数据"]
|
||||
GetSConData --> CheckRecordCount{"记录数 > 0?"}
|
||||
CheckRecordCount --> |是| SetDetailInfo["设置详细信息"]
|
||||
CheckRecordCount --> |否| End([结束])
|
||||
SetDetailInfo --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp#L28-L71)
|
||||
|
||||
#### 显示通道列表
|
||||
Script2D通过查询`channel`和`medium`表来获取通道信息,并将其显示在列表控件中。每个通道的装置类型编号(AR)也会被获取并存储。
|
||||
|
||||
**章节来源**
|
||||
- [Script2D.cpp](file://cpp/ProblemZone/Script2D.cpp#L74-L109)
|
||||
|
||||
### Script3D分析
|
||||
Script3D类负责生成3D测量脚本。它的实现与Script2D类似,但针对3D测量的特点进行了优化。Script3D同样实现了显示脚本详细信息、显示通道列表和显示脚本配置信息的功能。
|
||||
|
||||
**章节来源**
|
||||
- [Script3D.cpp](file://cpp/ProblemZone/Script3D.cpp#L28-L151)
|
||||
|
||||
### ScriptCE分析
|
||||
ScriptCE类负责生成跨孔测量脚本。它继承自CScript类,并实现了特定于跨孔测量的逻辑。ScriptCE的主要功能包括显示脚本配置信息、显示脚本详细信息和显示通道列表。
|
||||
|
||||
**章节来源**
|
||||
- [ScriptCE.cpp](file://cpp/ProblemZone/ScriptCE.cpp#L28-L146)
|
||||
|
||||
## 依赖分析
|
||||
SptManager模块依赖于多个其他模块和类,包括ProManager、Script2D、Script3D、ScriptCE等。这些依赖关系确保了SptManager能够获取项目和测区信息,并生成符合实际测量需求的脚本。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
SptManager --> ProManager
|
||||
SptManager --> Script2D
|
||||
SptManager --> Script3D
|
||||
SptManager --> ScriptCE
|
||||
SptManager --> CMarkup
|
||||
SptManager --> _ConnectionPtr
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L1-L3589)
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1-L2054)
|
||||
|
||||
## 性能考虑
|
||||
SptManager在处理大量脚本数据时需要考虑性能问题。为了避免数据库操作的性能瓶颈,SptManager采用了事务处理机制,确保脚本创建的原子性。此外,SptManager还通过缓存机制减少对数据库的频繁访问,提高整体性能。
|
||||
|
||||
## 故障排除指南
|
||||
当脚本生成失败或出现逻辑错误时,可以按照以下步骤进行排查:
|
||||
|
||||
1. **检查脚本名称**:确保脚本名称在数据库中是唯一的,避免名称冲突。
|
||||
2. **验证数据库连接**:确保数据库连接正常,能够正确执行SQL语句。
|
||||
3. **检查参数输入**:确认用户输入的脚本参数是否正确,特别是电极数量、通道数量等关键参数。
|
||||
4. **查看日志文件**:检查系统日志文件,查找可能的错误信息或异常堆栈。
|
||||
|
||||
**章节来源**
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L334-L351)
|
||||
- [SptManager.cpp](file://cpp/Managers/SptManager.cpp#L488-L498)
|
||||
|
||||
## 结论
|
||||
SptManager模块是Geomative Studio软件中不可或缺的一部分,负责生成和管理各种测量脚本。通过深入分析SptManager的职责和实现,我们可以更好地理解其工作原理,并在实际应用中更有效地使用和维护该模块。未来的工作可以进一步优化SptManager的性能,提高脚本生成的效率和可靠性。
|
||||
Reference in New Issue
Block a user