Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

12 KiB

1D项目创建

**本文引用的文件** - [DialNew1DTask.cpp](file://cpp/Views/DialNew1DTask.cpp) - [DialNew1DTask.h](file://h/DialNew1DTask.h) - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [TaskDataOper.h](file://h/TaskDataOper.h) - [GeoMative.rc](file://GeoMative.rc) - [DialTaskManager.cpp](file://cpp/Views/DialTaskManager.cpp)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件系统性地文档化1D项目创建流程,覆盖任务名称、测试位置、测试类型(电阻率/激电/自电)、装置类型、测试脚本、迭代次数、发射波形和发射周期等参数的配置;解释DialNew1DTask对话框的UI控件布局、数据验证逻辑与CTaskDataOper服务的交互机制;阐述不同测试类型对发射周期选项的动态影响,以及装置类型与脚本之间的关联查询逻辑;并为开发者提供界面元素扩展、参数验证规则定制与错误提示本地化的实现方法。

项目结构

1D项目创建涉及三个关键层次:

  • 视图层:DialNew1DTask对话框负责用户输入与参数校验,并调用服务层接口创建任务。
  • 服务层:CTaskDataOper封装数据库操作与业务逻辑,包括任务参数持久化、脚本与装置类型的关联查询等。
  • 资源层:GeoMative.rc定义对话框控件布局与标签文本,支持多语言显示。
graph TB
subgraph "视图层"
D1["DialNew1DTask<br/>对话框"]
end
subgraph "服务层"
S1["CTaskDataOper<br/>任务数据操作"]
end
subgraph "资源层"
R1["GeoMative.rc<br/>控件布局/标签"]
end
D1 --> S1
D1 --- R1

图表来源

章节来源

核心组件

  • DialNew1DTask:1D任务创建对话框,包含任务名称、测试地点、测试类型、装置类型、测试脚本、迭代次数、发射波形、发射周期等输入项;负责基础校验与调用服务层创建任务。
  • CTaskDataOper:封装任务创建、脚本与装置类型关联查询、默认测区获取等逻辑;负责将任务参数写入数据库并返回新任务ID。
  • GeoMative.rc:定义对话框控件ID与布局,支持中英文标签切换。

章节来源

架构总览

1D任务创建的端到端流程如下:

  • 用户在DialNew1DTask中填写参数并点击“创建”。
  • 对话框执行参数校验,组装ST1DTaskParam结构体。
  • 调用CTaskDataOper::CreateTaskCN生成任务编号,再调用CTaskDataOper::Create1DTask持久化任务。
  • 创建成功后返回新任务ID,对话框关闭。
sequenceDiagram
participant U as "用户"
participant V as "DialNew1DTask"
participant S as "CTaskDataOper"
participant DB as "数据库"
U->>V : 输入任务参数并点击“创建”
V->>V : 参数校验名称、测试类型、装置类型、脚本、迭代次数、发射周期
V->>S : CreateTaskCN(测试类型)
S-->>V : 返回任务编号
V->>S : Create1DTask(参数, 任务编号)
S->>DB : 插入td、tdchannel、td1dcon、gr等记录
DB-->>S : 返回新任务ID
S-->>V : 新任务ID
V-->>U : 关闭对话框

图表来源

章节来源

详细组件分析

DialNew1DTask对话框

  • 控件布局与标签
    • 任务名称、测试地点、测试类型、装置类型、测试脚本、迭代次数、发射波形、发射周期。
    • 支持中英文双语标签切换。
  • 初始化逻辑
    • 测试类型下拉框初始化为电阻率/激电/自电(中文或英文)。
    • 装置类型下拉框通过CTaskDataOper::QueryMediumInfo加载介质信息。
    • 发射波形默认固定为0+0-,不可编辑。
    • 发射周期下拉框按2的幂次生成(1S、2S、4S、8S、16S、32S、64S),其中“自动”对应1S。
  • 事件处理
    • 装置类型变化:触发脚本下拉框重载,基于所选装置类型与脚本类型查询关联脚本。
    • 测试类型变化:根据选择动态调整发射波形与发射周期可用性与内容。
    • “创建”按钮:执行参数校验,组装ST1DTaskParam,调用服务层创建任务。
  • 参数校验
    • 任务名称非空。
    • 必须选择测试类型。
    • 必须选择装置类型。
    • 必须选择测试脚本。
    • 迭代次数必须为1~255整数。
    • 电阻率/激电需选择发射周期;自电不启用发射周期。
    • 采样间隔范围校验(0~30000)。
flowchart TD
Start(["进入对话框"]) --> Init["初始化控件<br/>加载测试类型/装置类型/发射周期"]
Init --> SelArray["选择装置类型"]
SelArray --> LoadSpt["查询关联脚本并填充下拉"]
SelArray --> ChangeType["选择测试类型"]
ChangeType --> DynaWave["动态设置发射波形"]
DynaWave --> DynaPeriod["动态设置发射周期项<br/>电阻率/激电可选;自电禁用"]
DynaPeriod --> ClickOK["点击“创建”"]
ClickOK --> Validate["参数校验<br/>名称/类型/装置/脚本/迭代次数/采样间隔"]
Validate --> Valid{"校验通过?"}
Valid -- 否 --> ShowErr["弹出错误提示并终止"]
Valid -- 是 --> CallSvc["调用服务层创建任务"]
CallSvc --> Done(["完成"])

图表来源

章节来源

CTaskDataOper服务

  • 任务创建
    • CreateTaskCN:生成任务编号(含设备序列号与时间戳)。
    • Create1DTask:插入td、tdchannel、td1dcon、gr等记录,返回新任务ID。
  • 装置类型与脚本关联
    • QuerySptByAR:根据装置类型ID与脚本类型查询可用脚本列表。
    • QueryMediumInfo:查询介质(装置类型)列表。
  • 默认测区
    • GetDefaultTzID:获取默认测区ID。
classDiagram
class CTaskDataOper {
+CreateTaskCN(iTestType) CString
+Create1DTask(stTaskParam, strTaskCN) int
+QuerySptByAR(iAR, vtRes, iSptType) void
+QueryMediumInfo(iSptType, vtRes) void
+GetDefaultTzID() int
}
class ST1DTaskParam {
+strTDName
+strTestPlace
+iTestType
+iAR
+iSptID
+strSptName
+iSptType
+iStacking
+iTxWave
+iTxPeriod
+iSAInterval
}
CTaskDataOper --> ST1DTaskParam : "使用"

图表来源

章节来源

不同测试类型对发射周期的影响

  • 电阻率:发射波形为0+0-,发射周期可选(1S、2S、4S、8S、16S、32S、64S),其中“自动”映射为1S。
  • 激电:发射波形为+0-0,发射周期可选(1S、2S、4S、8S、16S、32S、64S)。
  • 自电:发射波形为0,发射周期禁用且不选择。

章节来源

装置类型与脚本的关联查询逻辑

  • 当用户选择装置类型后,对话框清空并重新加载脚本下拉框。
  • 服务层根据装置类型ID与脚本类型查询关联脚本,填充下拉列表。
  • 该逻辑确保仅展示与当前装置类型匹配的脚本。

章节来源

与任务管理器的集成

  • DialTaskManager在创建任务时,会将DialNew1DTask中的参数打包到任务参数结构中,随后调用服务层创建任务。

章节来源

依赖关系分析

  • DialNew1DTask依赖CTaskDataOper进行数据查询与任务创建。
  • 服务层依赖数据库连接与ADO记录集进行数据持久化。
  • 资源层通过资源脚本定义控件布局与标签文本,支持多语言。
graph LR
D1["DialNew1DTask"] --> S1["CTaskDataOper"]
S1 --> DB["数据库"]
D1 --- RC["GeoMative.rc"]

图表来源

章节来源

性能考量

  • 下拉框数据加载:装置类型与脚本查询应避免重复请求,建议在对话框初始化时一次性加载并缓存。
  • 数据库事务:任务创建采用事务提交,异常回滚,保证一致性。
  • UI响应:参数校验应在用户输入过程中及时反馈,减少无效提交。

故障排查指南

  • 常见错误
    • 未选择测试类型/装置类型/脚本:弹出相应提示并阻止提交。
    • 迭代次数不在1~255范围内:提示范围错误。
    • 采样间隔不在0~30000范围内:提示范围错误。
    • 电阻率/激电未选择发射周期:提示必选项。
    • 自电类型不启用发射周期:保持禁用状态。
  • 服务端错误
    • 查询脚本信息失败:提示查询失败并返回负值。
    • 默认测区ID获取失败:提示获取失败。
    • 数据库异常:捕获COM异常并回滚事务。

章节来源

结论

DialNew1DTask通过清晰的UI布局与严格的参数校验,结合CTaskDataOper的服务能力,实现了1D项目的标准化创建流程。测试类型对发射周期的动态控制与装置类型到脚本的关联查询,确保了参数的一致性与可执行性。开发者可在现有基础上扩展界面元素、定制验证规则与增强本地化提示。

附录

开发者指南:界面元素扩展

  • 在资源脚本中添加新的控件ID与布局,参考现有控件命名规范。
  • 在对话框类中声明控件变量并在DoDataExchange中绑定。
  • 在OnInitDialog中初始化控件状态与默认值。
  • 在消息映射中添加事件处理函数,必要时调用服务层查询数据。

章节来源

开发者指南:参数验证规则定制

  • 在OnOK中增加自定义校验分支,如范围检查、格式校验、互斥条件判断。
  • 使用本地化字符串资源统一提示文案,便于多语言维护。

章节来源

开发者指南:错误提示本地化

  • 将提示文案集中到资源脚本或字符串常量,通过语言标识切换显示。
  • 统一使用消息框接口输出提示,确保用户体验一致。

章节来源