226 lines
14 KiB
C++
226 lines
14 KiB
C++
#pragma once
|
||
#include <functional>
|
||
|
||
#include <QJsonArray>
|
||
#include <QJsonObject>
|
||
#include <QString>
|
||
|
||
#include "model/detail/DetailPayloads.hpp" // core::ScatterPayload(V 值重载返回完整载荷)
|
||
|
||
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 之外的 dsId),status 为 int(0/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, ...}(对应原版 saveRawDataValue,projectSpace 模块)。
|
||
// 原版仅约束 dsObjectId 必填;operationType/name 由调用方按场景组装,故收 body。
|
||
virtual void saveRawData(const QJsonObject& body,
|
||
std::function<void(bool ok, QString msg)> cb) = 0;
|
||
|
||
// 导出 DAT:GET /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, ...}(对应原版 whitenTheData,3 种 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}
|
||
// (对应原版 queryExceptionTypeData,type = 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/exceptionType,body 由「标注类型」对话框(异常属性 + 标注名称双 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;
|
||
|
||
// 更新 dsObject:PUT /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
|