geopro/src/data/repo/IDatasetCommandRepository.hpp

226 lines
14 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.

#pragma once
#include <functional>
#include <QJsonArray>
#include <QJsonObject>
#include <QString>
#include "model/detail/DetailPayloads.hpp" // core::ScatterPayloadV 值重载返回完整载荷)
namespace geopro::data {
// 数据集详情视图「写操作 / 命令」仓储抽象(与只读 IAsyncDatasetRepository 平行)。
// 本切片仅纳入「反演」相关的 4 个端点measurement 反演运算 / 生成视电阻率 + 共享的
// 模型列表 / 动态表单查询)。回调式异步:仓储只做「组装请求 + 取数组/状态」的传输职责;
// 领域解析(动态表单分组/字段控件)留在对话框(见 InversionFormDialog 的纯函数)。
// 回调在 Qt 主线程经 IApiCall::finished 触发;调用方须用 QPointer 守卫可能已关闭的对话框/视图。
class IDatasetCommandRepository {
public:
virtual ~IDatasetCommandRepository() = default;
// 反演模型列表GET /business/outerInversion/query/script?dsObjectId={ds}。
// measurement「反演运算」与「生成视电阻率」共用此端点原版 getInversionOptions /
// getProcessScriptList 同 URL。回调 list = 响应 data 数组(每项含 label/value/code
virtual void listInversionScripts(
const QString& dsObjectId,
std::function<void(bool ok, QJsonArray list, QString msg)> cb) = 0;
// 动态表单POST /business/project/getDynamicForm body {projectId, type:6, typeId}。
// 回调 data = 响应 data 对象(含 formList 数组:分组 → values 字段)。
virtual void getDynamicForm(
const QString& projectId, const QString& typeId,
std::function<void(bool ok, QJsonObject data, QString msg)> cb) = 0;
// 提交反演运算POST /business/outerInversion/submitInversionTask
// body {dsId, scriptId, properties:{fieldCode:value,...}}(对应原版 postInversionTask
virtual void submitInversionTask(const QString& dsId, const QString& scriptId,
const QJsonObject& properties,
std::function<void(bool ok, QString msg)> cb) = 0;
// 生成视电阻率数据POST /business/dd/ert/measurement/createVisualResistivityData
// body {dsObjectId, scriptId, scriptParamListJsonStr:{fieldCode:value,...}}
// (对应原版 createVisualResistivityData散点图模块版本
virtual void createVisualResistivityData(
const QString& dsObjectId, const QString& scriptId,
const QJsonObject& scriptParamListJsonStr,
std::function<void(bool ok, QString msg)> cb) = 0;
// ============================ measurement 散点相关 ============================
// 散点可见性持久化POST /business/dd/ert/measurement/saveDisplayStatus
// body {dsObjectId, ids:[...], status}(对应原版 updateScatterDataVisible
// 注:原版字段名为 dsObjectId非 dsObjectId 之外的 dsIdstatus 为 int0/1
virtual void saveDisplayStatus(const QString& dsObjectId, const QJsonArray& ids, int status,
std::function<void(bool ok, QString msg)> cb) = 0;
// 散点过滤配置查询GET /business/scatterPlotDataFilter/getDataFilterConfig
// ?dsObjectId={ds}&vFieldCode={vf}(对应原版 queryScatterFilterInfo
// 回调 data = 响应 data 对象(含 min/max 等配置)。
virtual void getScatterFilterConfig(
const QString& dsObjectId, const QString& vFieldCode,
std::function<void(bool ok, QJsonObject data, QString msg)> cb) = 0;
// 应用散点过滤POST /business/scatterPlotDataFilter
// body {sourceDsObjectId, sourceVFieldCode, min, max}(对应原版 applyScatterFilterInfo
// min/max 为字符串/数值由调用方组装,故收已组装 body。
virtual void applyScatterFilter(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// 另存原始数据POST /business/dd/ert/measurement/saveRawData
// body {dsObjectId, ...}(对应原版 saveRawDataValueprojectSpace 模块)。
// 原版仅约束 dsObjectId 必填operationType/name 由调用方按场景组装,故收 body。
virtual void saveRawData(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// 导出 DATGET /business/dd/ert/measurement/rs2d/export
// ?dsId={ds}&electrodePosition={ep}&ipDataMark={ip}&typeMeasurement={tm}
// (对应原版 exportScatterData2Dat。回调回传 base64 fileData 与 fileName
// 实际落盘/下载交由 UI 层处理。
virtual void exportMeasurementDat(
const QString& dsId, int electrodePosition, int ipDataMark, int typeMeasurement,
std::function<void(bool ok, QString fileName, QString fileData, QString msg)> cb) = 0;
// V 值切换重载散点M6并发拉 scatter/graph(带 vFieldCode) + 色阶 getDetail(type3,
// businessCode=vFieldCode),解析为完整 ScatterPayload对应原版 V 值 change 重新请求散点+色阶)。
// 与 ApiDatasetRepository 的初始 measurement 加载同端点/同解析,仅 vFieldCode 可变。
virtual void loadMeasurementScatter(
const QString& dsObjectId, const QString& vFieldCode,
std::function<void(bool ok, geopro::core::ScatterPayload payload, QString msg)> cb) = 0;
// ============================ 色阶lvl相关 ============================
// 保存 .lvl 色阶POST /business/lvl/colorGradation
// body {dsObjectId, templateId, businessCode, projectId, properties}
// (对应原版 newLvlColorLevel。measurement 散点与 inversion 原数据色阶配置共用。
virtual void saveColorGradation(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// ============================ inversion 相关 ============================
// inversion 另存为数据POST /business/dd/ert/inversion/saveAsData
// body {dsObjectId, name}(对应原版 saveVisualResistivityData
virtual void saveInversionAsData(const QString& dsObjectId, const QString& name,
std::function<void(bool ok, QString msg)> cb) = 0;
// 网格视图重载(处理类操作=网格化/白化/滤波 成功后重绘):并发拉 rows + 色阶 getDetail(type2)
// + 异常,解析为 ContourPayload与 ApiDatasetRepository::makeInversionGrid 同端点/同解析)。
// 与 loadMeasurementScatter 同范式仓储只读重载方法UI 在成功回调 setGridData 重绘。
virtual void loadInversionGrid(
const QString& dsObjectId,
std::function<void(bool ok, geopro::core::ContourPayload payload, QString msg)> cb) = 0;
// 网格化:查询算法模型 GET /business/dd/ert/inversion/queryAlgorithmModel/{ds}
// (对应原版 getGridModel。回调 list = data.value 数组。
virtual void listGridAlgorithm(
const QString& dsObjectId,
std::function<void(bool ok, QJsonArray list, QString msg)> cb) = 0;
// 网格化:获取原始数据参数 GET /business/dd/ert/inversion/getRawData/{ds}
// (对应原版 getGridParams。回调 data = 响应 data 对象。
virtual void getGridRawDataParams(
const QString& dsObjectId,
std::function<void(bool ok, QJsonObject data, QString msg)> cb) = 0;
// 网格化:执行 POST /business/dd/ert/inversion/grid
// body 含 {dsObjectId, actionCode, saveDataValueType, ...}(对应原版 toGridTheData 全字段)。
virtual void toGrid(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// ============================ 白化相关 ============================
// 白化:查询可白化数据列表 POST /business/dsObject/queryWhitenedDataList
// body {projectId, tmObjectId}(对应原版 getWhitenedDataList
// 回调 list = data.value 数组。
virtual void listWhitenedData(const QString& projectId, const QString& tmObjectId,
std::function<void(bool ok, QJsonArray list, QString msg)> cb) = 0;
// 白化:执行 POST /business/dd/ert/inversion/whitenedData
// body 含 {dsObjectId, whiteningMethod, ...}(对应原版 whitenTheData3 种 method 字段差异由调用方组装)。
virtual void whitenData(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// ============================ 滤波相关 ============================
// 滤波:查询滤波器列表 GET /business/filter/queryFilter对应原版 getFilters无 query
// 回调 list = data.value 数组。
virtual void listFilters(std::function<void(bool ok, QJsonArray list, QString msg)> cb) = 0;
// 滤波:新增滤波器 POST /business/filter
// body 含 {projectId, parentId, rowColumValue, type, ...}(对应原版 newTheFilter
virtual void newFilter(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// 滤波:删除滤波器 DELETE /business/filter/delete/{id}(对应原版 deleteTheFilter
virtual void deleteFilter(const QString& id,
std::function<void(bool ok, QString msg)> cb) = 0;
// 滤波:应用滤波处理数据 POST /business/dd/ert/inversion/filterData
// body 含 {dsObjectId, rowColumValue, ...}(对应原版 useFilterToProcessData 全字段)。
virtual void applyFilter(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// ============================ 异常 CRUD ============================
// 异常类型列表GET /business/exceptionType/queryExceptionTypeByProjectIdAndType/{pid}/{type}
// (对应原版 queryExceptionTypeDatatype = remarkSourceType。回调 list = data.value 数组。
virtual void listExceptionTypes(
const QString& projectId, const QString& remarkSourceType,
std::function<void(bool ok, QJsonArray list, QString msg)> cb) = 0;
// 获取异常名称POST /business/exception/getExceptionName
// body {exceptionTypeId, remarkSourceId}(对应原版 queryExceptionNameInProfileInversion
// 原版 res.data 是「纯字符串」(建议名称本身),故回调直接回传 name 字符串。
virtual void getExceptionName(
const QString& exceptionTypeId, const QString& remarkSourceId,
std::function<void(bool ok, QString name, QString msg)> cb) = 0;
// 新增异常POST /business/exception
// body 含 {exceptionName, exceptionTypeId, location, projectId, remarkSourceId, remarkSourceType, remark}
// (对应原版 newExceptionInProfileInversion 全字段)。
virtual void newException(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// 新增异常类型(完整版,对照原版 addExceptionType / apis/toolComponent/exceptionType.js:9
// POST /business/exceptionTypebody 由「标注类型」对话框(异常属性 + 标注名称双 Tab组装
// 含 {exceptionTypeName, exceptionTypeCode, standardNumber, standardName, description,
// legend:{...按 markType 的图例样式}, exceptionNameList:[{fieldName,fieldCode,sort}],
// customFormat, separatorSymbol, projectId, exceptionMarkType, type:2}(见 ExceptionTypeDialog
virtual void addExceptionType(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// 删除异常DELETE /business/exception/{id}(对应原版 deleteExceptionDataInProfileInversion
virtual void deleteException(const QString& id,
std::function<void(bool ok, QString msg)> cb) = 0;
// 更新异常PUT /business/exception
// body 含 {id, exceptionName, remark, ...}(对应原版 updateExceptionDataInProfileInversion
virtual void updateException(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// ============================ 自动标注 ============================
// 执行自动标注POST /business/exception/exception-mark/execute对应原版 executeExceptionMark
virtual void executeExceptionMark(const QJsonObject& body,
std::function<void(bool ok, QJsonObject data, QString msg)> cb) = 0;
// 批量创建异常POST /business/exception/batch/create对应原版 batchCreateException
virtual void batchCreateException(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
// ============================ 描述 / dsObject ============================
// 获取 dsObject 详情GET /business/dsObject/getDetail/{ds}
// (对应原版 getProfileInversionDescription。回调 data = 响应 data 对象(含 description 等)。
virtual void getDsObjectDetail(
const QString& dsObjectId,
std::function<void(bool ok, QJsonObject data, QString msg)> cb) = 0;
// 更新 dsObjectPUT /business/dsObject/updateDsObject/
// body 含 {dsObjectId, description, attachedParameters:{deltaContent}, ...}
// (对应原版 updateProfileInversionDescription注意原版 URL 末尾带斜杠)。
virtual void updateDsObject(const QJsonObject& body,
std::function<void(bool ok, QString msg)> cb) = 0;
};
} // namespace geopro::data