#pragma once #include #include #include #include #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 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 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 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 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 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 cb) = 0; // 应用散点过滤:POST /business/scatterPlotDataFilter // body {sourceDsObjectId, sourceVFieldCode, min, max}(对应原版 applyScatterFilterInfo)。 // min/max 为字符串/数值由调用方组装,故收已组装 body。 virtual void applyScatterFilter(const QJsonObject& body, std::function cb) = 0; // 另存原始数据:POST /business/dd/ert/measurement/saveRawData // body {dsObjectId, ...}(对应原版 saveRawDataValue,projectSpace 模块)。 // 原版仅约束 dsObjectId 必填;operationType/name 由调用方按场景组装,故收 body。 virtual void saveRawData(const QJsonObject& body, std::function 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 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 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 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 cb) = 0; // 网格视图重载(处理类操作=网格化/白化/滤波 成功后重绘):并发拉 rows + 色阶 getDetail(type2) // + 异常,解析为 ContourPayload(与 ApiDatasetRepository::makeInversionGrid 同端点/同解析)。 // 与 loadMeasurementScatter 同范式:仓储只读重载方法,UI 在成功回调 setGridData 重绘。 virtual void loadInversionGrid( const QString& dsObjectId, std::function cb) = 0; // 网格化:查询算法模型 GET /business/dd/ert/inversion/queryAlgorithmModel/{ds} // (对应原版 getGridModel)。回调 list = data.value 数组。 virtual void listGridAlgorithm( const QString& dsObjectId, std::function cb) = 0; // 网格化:获取原始数据参数 GET /business/dd/ert/inversion/getRawData/{ds} // (对应原版 getGridParams)。回调 data = 响应 data 对象。 virtual void getGridRawDataParams( const QString& dsObjectId, std::function cb) = 0; // 网格化:执行 POST /business/dd/ert/inversion/grid // body 含 {dsObjectId, actionCode, saveDataValueType, ...}(对应原版 toGridTheData 全字段)。 virtual void toGrid(const QJsonObject& body, std::function cb) = 0; // ============================ 白化相关 ============================ // 白化:查询可白化数据列表 POST /business/dsObject/queryWhitenedDataList // body {projectId, tmObjectId}(对应原版 getWhitenedDataList)。 // 回调 list = data.value 数组。 virtual void listWhitenedData(const QString& projectId, const QString& tmObjectId, std::function cb) = 0; // 白化:执行 POST /business/dd/ert/inversion/whitenedData // body 含 {dsObjectId, whiteningMethod, ...}(对应原版 whitenTheData,3 种 method 字段差异由调用方组装)。 virtual void whitenData(const QJsonObject& body, std::function cb) = 0; // ============================ 滤波相关 ============================ // 滤波:查询滤波器列表 GET /business/filter/queryFilter(对应原版 getFilters,无 query)。 // 回调 list = data.value 数组。 virtual void listFilters(std::function cb) = 0; // 滤波:新增滤波器 POST /business/filter // body 含 {projectId, parentId, rowColumValue, type, ...}(对应原版 newTheFilter)。 virtual void newFilter(const QJsonObject& body, std::function cb) = 0; // 滤波:删除滤波器 DELETE /business/filter/delete/{id}(对应原版 deleteTheFilter)。 virtual void deleteFilter(const QString& id, std::function cb) = 0; // 滤波:应用滤波处理数据 POST /business/dd/ert/inversion/filterData // body 含 {dsObjectId, rowColumValue, ...}(对应原版 useFilterToProcessData 全字段)。 virtual void applyFilter(const QJsonObject& body, std::function 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 cb) = 0; // 获取异常名称:POST /business/exception/getExceptionName // body {exceptionTypeId, remarkSourceId}(对应原版 queryExceptionNameInProfileInversion)。 // 原版 res.data 是「纯字符串」(建议名称本身),故回调直接回传 name 字符串。 virtual void getExceptionName( const QString& exceptionTypeId, const QString& remarkSourceId, std::function cb) = 0; // 新增异常:POST /business/exception // body 含 {exceptionName, exceptionTypeId, location, projectId, remarkSourceId, remarkSourceType, remark} // (对应原版 newExceptionInProfileInversion 全字段)。 virtual void newException(const QJsonObject& body, std::function 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 cb) = 0; // 删除异常:DELETE /business/exception/{id}(对应原版 deleteExceptionDataInProfileInversion)。 virtual void deleteException(const QString& id, std::function cb) = 0; // 更新异常:PUT /business/exception // body 含 {id, exceptionName, remark, ...}(对应原版 updateExceptionDataInProfileInversion)。 virtual void updateException(const QJsonObject& body, std::function cb) = 0; // ============================ 自动标注 ============================ // 执行自动标注:POST /business/exception/exception-mark/execute(对应原版 executeExceptionMark)。 virtual void executeExceptionMark(const QJsonObject& body, std::function cb) = 0; // 批量创建异常:POST /business/exception/batch/create(对应原版 batchCreateException)。 virtual void batchCreateException(const QJsonObject& body, std::function cb) = 0; // ============================ 描述 / dsObject ============================ // 获取 dsObject 详情:GET /business/dsObject/getDetail/{ds} // (对应原版 getProfileInversionDescription)。回调 data = 响应 data 对象(含 description 等)。 virtual void getDsObjectDetail( const QString& dsObjectId, std::function cb) = 0; // 更新 dsObject:PUT /business/dsObject/updateDsObject/ // body 含 {dsObjectId, description, attachedParameters:{deltaContent}, ...} // (对应原版 updateProfileInversionDescription,注意原版 URL 末尾带斜杠)。 virtual void updateDsObject(const QJsonObject& body, std::function cb) = 0; }; } // namespace geopro::data