Files
CalibratorLauncher/procedure/proceduredata.h
2026-01-02 19:20:35 +09:00

320 lines
7.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef PROCEDUREDATA_H
#define PROCEDUREDATA_H
#include <QString>
#include <QStringList>
#include <QVector>
#include <QList>
#include <QVariantMap>
#include <QDateTime>
#include <QPair>
// =====================================================
// 基本枚舉類型
// =====================================================
// 步驟類型
enum class StepType
{
Manual, // 手動步驟
Automatic // 自動步驟
};
// 步驟狀態
enum class StepStatus
{
Pending, // 待執行
InProgress, // 執行中
Passed, // 已通過
Failed, // 未通過
Skipped, // 已跳過
Confirmed // 已確認(手動)
};
// 活動類型
enum class ActivityType
{
TEST_TASK_GROUP, // 測試任務組
RESULT_DISPLAY // 結果顯示
};
// 活動步驟
struct ActivityStep
{
ActivityType type = ActivityType::TEST_TASK_GROUP;
QString ref; // 引用ID
QString name; // 顯示名稱
};
// =====================================================
// 表格相關結構
// =====================================================
// 字段定義
struct FieldDefinition
{
QString id;
QString name;
QString label;
QString type; // numeric, text, selection, boolean, datetime, calculated
QVariant defaultValue;
QStringList options; // 用於 selection 類型
QString formula; // 用於 calculated 類型
QVariantMap validationRules;
bool isRequired = false;
bool isReadOnly = false;
bool editable = false;
bool visible = true;
QString unit;
QString description;
QString alignment;
int width = 100;
int decimals = 2;
bool uploadImmediately = false;
QVariantMap layoutConfig;
};
// 靜態單元格
struct StaticCell
{
int row = 0;
int column = 0;
QString field; // 字段ID用於form類型表格
QVariant value; // 靜態值
QString content; // 靜態文本內容
QString style;
};
// 表格定義
struct TableDefinition
{
QString tableId;
QString id;
QString name;
QString description;
QString tableType; // grid, form, series
int rowCount = 0;
int columnCount = 0;
QVariantMap layoutConfig;
bool isShared = false;
QString uploadStrategy; // immediate, grouped, byRow, onComplete
QList<QVariantMap> uploadGroups;
QList<FieldDefinition> columnHeaders; // 用於grid類型表格
QList<QPair<QString, QString>> rowHeaders; // 用於grid類型表格 (id, name)
QList<FieldDefinition> fields; // 用於form和series類型表格
QList<StaticCell> staticCells; // 靜態內容
};
// =====================================================
// 測試動作相關結構
// =====================================================
// 字段選擇器
struct FieldSelector
{
QString tableRef;
int row = -1;
int column = -1;
QString fieldName;
QStringList fields; // 用於form類型表格
QList<QPair<QString, QString>> cells; // 用於grid類型表格 (row, column)
bool ignore = false;
};
// 測試動作
struct TestAction
{
QString actionId;
QString id;
QString name;
QString actionType;
QString functionName;
QString document; // HTML格式的說明文檔
QString mode; // manual 或 auto
QString sequence;
QString functionType; // RESISTANCE_4WIRE, VOLTAGE_V, DATA_ACQUISITION 等
QString channel; // input1, input2, output1, output2
QVariantMap params; // 函數參數
QVariant functionParameters;
QVariantMap metadata;
QMap<QString, FieldSelector> inputs;
QMap<QString, FieldSelector> outputs;
QList<FieldSelector> dataFields;
QVariantMap validationCriteria;
QString uploadStrategy;
QStringList uploadFields;
int timeout = 30000;
int retryCount = 0;
// 運行時狀態
bool isCompleted = false;
bool isWaitingConfirm = false;
QVariantList results;
};
// 測試活動組(階段)
struct TestActivityGroup
{
QString groupId;
QString id;
QString name;
QString description;
QString document;
QString skipCondition;
QVariantMap metadata;
QStringList tableRefs;
QList<TestAction> actions;
// 運行時狀態
bool isCompleted = false;
bool isActionsParsed = false;
};
// 測試任務組
struct TestTaskGroup
{
QString taskGroupId;
QString id;
QString name;
QString description;
QString executionMode;
int loopCount = 1;
QVariantMap metadata;
QStringList tableRefs;
QList<TestActivityGroup> stages;
// 運行時狀態
bool isCompleted = false;
bool isParsed = false;
};
// 結果顯示
struct ResultDisplay
{
QString displayId;
QString id;
QString name;
QString displayType;
QString document;
QString tableRef;
QVariantMap passCondition;
QStringList tableRefs;
};
// =====================================================
// 程序配置結構
// =====================================================
struct ProcedureConfig
{
QString procedureId;
QString procedureName;
QString version;
QString description;
QString author;
QString document;
QVariantMap metadata;
// 活動序列 (旧格式,用于 ProcedureEngine)
QList<ActivityStep> activitySequence;
// 活動序列 (新格式stores QVariant of TestTaskGroup or ResultDisplay用于新解析器)
QList<QVariant> activityVariants;
// 定義存儲
QMap<QString, TestTaskGroup> testTaskGroups;
QMap<QString, TestActivityGroup> testActivityGroups;
QMap<QString, TestAction> testActions;
QMap<QString, ResultDisplay> resultDisplays;
QMap<QString, TableDefinition> tables;
// 舊版兼容
QList<TestTaskGroup> taskGroups;
};
// =====================================================
// 舊版兼容結構用於ProcedureManager
// =====================================================
// 表格字段定義(舊版)
struct TableField
{
QString id;
QString name;
QString type; // numeric, text, boolean
QString unit;
bool isRequired = false;
bool isHighlighted = false;
};
// 表格數據(舊版)
struct TableData
{
QString id;
QString name;
QString description;
QVector<TableField> columns;
QVector<QVariantMap> rows;
};
// 步驟定義(舊版)
struct StepData
{
QString id;
QString content;
StepType type = StepType::Manual;
StepStatus status = StepStatus::Pending;
QStringList tableRefs;
QStringList highlightFields;
QString result;
QDateTime executedAt;
QString executedBy;
QString cancelReason;
};
// 任務組定義(舊版)
struct TaskGroup
{
QString id;
QString name;
QVector<StepData> steps;
};
// 程序定義(舊版)
struct ProcedureData
{
QString id;
QString name;
QString version;
QString description;
QVector<TaskGroup> taskGroups;
QVector<TableData> tables;
QString workOrderId;
int completedSteps = 0;
int totalSteps = 0;
};
// 程序摘要(用於列表顯示)
struct ProcedureSummary
{
QString id;
QString name;
QString version;
QString description;
QString filePath;
};
// Qt Meta-Type Declarations for QVariant support
Q_DECLARE_METATYPE(FieldDefinition)
Q_DECLARE_METATYPE(StaticCell)
Q_DECLARE_METATYPE(TableDefinition)
Q_DECLARE_METATYPE(FieldSelector)
Q_DECLARE_METATYPE(TestAction)
Q_DECLARE_METATYPE(TestActivityGroup)
Q_DECLARE_METATYPE(TestTaskGroup)
Q_DECLARE_METATYPE(ResultDisplay)
Q_DECLARE_METATYPE(ProcedureConfig)
Q_DECLARE_METATYPE(ActivityStep)
#endif // PROCEDUREDATA_H