Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/核心功能/项目管理/任务配置/任务验证与存储.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

9.4 KiB

任务验证与存储

**本文档引用的文件** - [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp) - [TaskDataOper.h](file://h/TaskDataOper.h) - [DialCfgTaskPacket.cpp](file://cpp/Views/DialCfgTaskPacket.cpp) - [DialCfgTaskPacket.h](file://h/DialCfgTaskPacket.h)

目录

  1. 简介
  2. CTaskDataOper类的作用
  3. 任务数据持久化机制
  4. InsertTaskPacketInfo方法分析
  5. 数据验证流程
  6. 任务包配置数据存储结构
  7. 错误处理策略
  8. UI到数据库的完整流程示例

简介

本文档深入分析了GeomativeStudio软件中任务配置的验证与存储机制,重点阐述了CTaskDataOper类在任务数据持久化中的核心作用。文档详细描述了任务列表和属性信息如何通过InsertTaskPacketInfo方法写入数据库,包括对tdTaskPacket和tdTaskPacketInfo表的操作。同时,文档解释了数据验证流程、存储结构定义以及错误处理策略。

CTaskDataOper类的作用

CTaskDataOper类是GeomativeStudio系统中负责任务数据操作的核心类,主要承担任务数据的持久化、查询、验证和管理功能。该类通过ADO数据库连接与后端数据库进行交互,实现了任务数据的增删改查操作。

该类的主要职责包括:

  • 任务数据的创建与持久化
  • 任务数据的查询与检索
  • 任务数据的验证与去重
  • 事务管理与错误处理
  • 任务包配置的存储与读取

Section sources

任务数据持久化机制

任务数据持久化机制是系统确保任务配置信息可靠存储的关键组件。系统通过CTaskDataOper类提供的方法,将用户在UI界面配置的任务信息持久化到数据库中,确保数据的一致性和完整性。

持久化过程遵循以下原则:

  • 使用数据库事务确保操作的原子性
  • 通过外键约束维护数据完整性
  • 采用参数化查询防止SQL注入
  • 实现批量操作提高性能

系统主要涉及以下数据库表:

  • td: 存储任务基本信息
  • tdTaskPacket: 存储任务包主配置
  • tdTaskPacketInfo: 存储任务包中包含的任务列表

Section sources

InsertTaskPacketInfo方法分析

InsertTaskPacketInfo方法是任务包信息存储的核心方法,负责将任务列表和属性信息写入数据库。该方法实现了对tdTaskPacket和tdTaskPacketInfo表的批量插入操作。

flowchart TD
Start([开始]) --> BeginTrans["开始事务"]
BeginTrans --> DeleteMain["删除tdTaskPacket表中MainID=1的记录"]
DeleteMain --> InsertMain["插入新的任务包主配置"]
InsertMain --> DeleteDetail["删除tdTaskPacketInfo表中TaskPacketID=1的记录"]
DeleteDetail --> LoopStart["循环遍历任务列表"]
LoopStart --> InsertDetail["插入单个任务信息到tdTaskPacketInfo表"]
InsertDetail --> LoopCheck{"是否还有任务?"}
LoopCheck --> |是| LoopStart
LoopCheck --> |否| CommitTrans["提交事务"]
CommitTrans --> End([结束])
Exception["异常捕获"] --> RollbackTrans["回滚事务"]
RollbackTrans --> ReturnFalse["返回false"]
BeginTrans --> Exception

Diagram sources

Section sources

数据验证流程

系统实现了完善的数据验证流程,确保任务配置的准确性和唯一性。其中,防止重复添加任务是重要的验证逻辑之一。

IsRepeatTask方法实现逻辑

IsRepeatTask方法用于验证任务是否已存在于任务包中,防止重复添加。该方法通过遍历UI界面上已添加的任务列表,检查新任务的ID是否已存在。

flowchart TD
Start([开始]) --> GetItemCount["获取任务列表项数"]
GetItemCount --> LoopStart["设置循环索引i=0"]
LoopStart --> CheckIndex{"i < 任务总数?"}
CheckIndex --> |否| ReturnFalse["返回false"]
CheckIndex --> |是| GetTaskID["获取第i项任务ID"]
GetTaskID --> CompareID{"任务ID匹配?"}
CompareID --> |是| ReturnTrue["返回true"]
CompareID --> |否| IncrementI["i++"]
IncrementI --> LoopStart
ReturnTrue --> End([结束])
ReturnFalse --> End

Diagram sources

Section sources

任务包配置数据存储结构

系统定义了清晰的数据结构来存储任务包配置信息,包括STTdBrowseInfo和STTaskPacketAttr两个关键数据结构。

STTdBrowseInfo数据结构

该结构用于存储任务的基本浏览信息,包括任务ID和任务名称。

classDiagram
class STTdBrowseInfo {
+int iTaskID
+CString strTaskName
+STTdBrowseInfo()
}

Diagram sources

STTaskPacketAttr数据结构

该结构用于存储任务包的属性配置,包括循环次数、时间间隔和PLC ID。

classDiagram
class STTaskPacketAttr {
+int iLoopTimes
+int iInterval
+CString strPlcID
+STTaskPacketAttr()
}

Diagram sources

数据库表结构

系统使用两个数据库表来存储任务包配置:

tdTaskPacket表

存储任务包的主配置信息。

字段名 数据类型 描述
MainID Integer 主键,固定为1
LoopTimes Integer 循环次数
Interval Integer 时间间隔(秒)
PLCID Text PLC设备ID

Section sources

tdTaskPacketInfo表

存储任务包中包含的具体任务列表。

字段名 数据类型 描述
TaskID Integer 任务ID
TaskName Text 任务名称
TaskPacketID Integer 任务包ID,固定为1

Section sources

错误处理策略

系统实现了完善的错误处理策略,确保在数据保存失败时能够正确回滚并提供用户友好的提示信息。

事务回滚机制

系统使用数据库事务来确保数据操作的原子性。当任何操作失败时,系统会自动回滚事务,保持数据一致性。

sequenceDiagram
participant UI as "用户界面"
participant Logic as "业务逻辑"
participant DB as "数据库"
UI->>Logic : 请求保存任务包
Logic->>DB : 开始事务
DB-->>Logic : 事务开始
Logic->>DB : 删除旧配置
DB-->>Logic : 删除完成
Logic->>DB : 插入新配置
DB-->>Logic : 插入完成
alt 操作成功
Logic->>DB : 提交事务
DB-->>Logic : 提交成功
Logic->>UI : 显示"保存成功"
else 操作失败
Logic->>DB : 回滚事务
DB-->>Logic : 回滚完成
Logic->>UI : 显示错误信息
end

Diagram sources

用户提示信息

系统根据不同的错误情况提供相应的用户提示信息:

错误类型 中文提示 英文提示
保存失败 保存失败 Save failed
循环次数无效 循环次数的值必须在1-60000之间 The value of LoopTimes should between 1 to 60000
时间间隔无效 时间间隔的值必须在1-60000之间 The value of Interval Time should between 1 to 60000
PLC ID为空 请输入PLC ID Please input plcid
任务重复 任务已存在 This task has been exist

Section sources

UI到数据库的完整流程示例

以下是从UI数据收集到数据库存储的完整流程示例:

flowchart TD
UIStart([用户界面]) --> SelectTask["用户选择任务"]
SelectTask --> ValidateTask["验证任务是否重复"]
ValidateTask --> |重复| ShowError["显示'任务已存在'"]
ValidateTask --> |不重复| AddToList["添加到任务列表"]
AddToList --> ConfigureAttr["配置任务包属性"]
ConfigureAttr --> ValidateInput["验证输入参数"]
ValidateInput --> |无效| ShowInputError["显示参数错误"]
ValidateInput --> |有效| CollectData["收集UI数据"]
CollectData --> CreateStruct["创建STTdBrowseInfo和STTaskPacketAttr结构"]
CreateStruct --> CallInsert["调用InsertTaskPacketInfo方法"]
CallInsert --> DBStart["开始数据库操作"]
DBStart --> BeginTrans["开始事务"]
BeginTrans --> DeleteOld["删除旧配置"]
DeleteOld --> InsertNew["插入新配置"]
InsertNew --> Commit["提交事务"]
Commit --> |成功| ShowSuccess["显示'保存成功'"]
Commit --> |失败| Rollback["回滚事务"]
Rollback --> ShowDBError["显示'保存失败'"]

Diagram sources

Section sources