geopro/docs/api/vtk-3d-openapi.json

530 lines
31 KiB
JSON
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.

{
"openapi": "3.0.3",
"info": {
"title": "Geopro3 三维视图 API三维体 / 切片 / 异常 三件套)",
"version": "0.6.0-draft",
"description": "VTK 三维视图后端接口。归属结构(2026-06-24 修订)**GS/项目根/TM → 三维体(dd_voxel) → 切片(dd_slice)**(三维体生成位置由用户在生成对话框选择,默认单GS挂该GS/跨GS挂项目根,可改为项目内任意 GS/TM源数据集与归属解耦),异常挂在三维体上(remarkSourceId=三维体 dsObjectId)。\n\n**总原则:实体无关的契约一律复用存量;只为各自特有、存量装不下的部分扩展。**\n- 三维体/切片对后端 = 纯元数据 dsObject增删改查/属性复用存量 dsObject 面,各加 1 个登记端点;体素字节/切面数据全在客户端(算+存+取+渲染),后端零数据端点。\n- 异常复用整套存量 /business/exception 端点(端点不限实体类型,三维体 id 直接塞 remarkSourceId)**异常体(consortium)分组也是存量已有**(consortiumId/Name/Type)。3D 仅扩展两处location 加 worldPts+plane(三维几何)、加截图(R88)。\n\n响应统一信封 `{ code:int, msg:string, data:object|array }`code==200 成功;列表/集合放 data.value。\n\n依赖前提异常 remarkSourceId 指向三维体,须等三维体登记出真 dsObjectId 后3D 异常才能接真端点。"
},
"servers": [
{ "url": "/", "description": "业务网关根(各路径已含 /business 前缀)" }
],
"tags": [
{ "name": "dsObject-reuse", "description": "复用的存量统一面(三维体/切片共用增删改查+属性)" },
{ "name": "voxel-new", "description": "三维体新增:仅登记记录(体素全在客户端)" },
{ "name": "slice-new", "description": "切片新增:仅登记记录(切面全在客户端)" },
{ "name": "exception-reuse", "description": "复用的存量异常面(端点不限实体类型3D 仅扩展 location 几何+截图)" }
],
"paths": {
"/business/projectStruct/queryProjectStruct/{projectId}": {
"get": {
"tags": ["dsObject-reuse"],
"summary": "[复用] 查询项目结构树(GS/TM 骨架)",
"description": "存量端点。提供三维体挂载所需的 TM 节点;三维体/切片作为派生数据另经 data/page 取。",
"operationId": "queryProjectStruct",
"parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } } ],
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/StructNodeList" } } } ] } } }
}
}
}
},
"/business/dsObject/data/page": {
"post": {
"tags": ["dsObject-reuse"],
"summary": "[复用] 分页查询某父节点下的数据集行",
"description": "存量端点(loadRowsAsync)。查三维体structParentId=生成位置节点 id(GS/项目根/TM)、structParentConfType=1或2查某三维体下切片structParentId=该三维体 dsObjectId。返回行 ddCode=dd_voxel / dd_slice。",
"operationId": "dsObjectDataPage",
"requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DsPageRequest" } } } },
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/DsPage" } } } ] } } }
}
}
}
},
"/business/dsObject/getDetail/{dsObjectId}": {
"get": {
"tags": ["dsObject-reuse"],
"summary": "[复用] 数据集详情(描述 + attachedParameters)",
"description": "存量端点。三维体构建参数(attachedParameters.voxelParams)、切片三点位姿(attachedParameters.slicePose)从这里读出。",
"operationId": "dsObjectGetDetail",
"parameters": [ { "$ref": "#/components/parameters/DsObjectIdPath" } ],
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/DsObjectDetail" } } } ] } } }
}
}
}
},
"/business/dsObject/dynamicForm/{dsObjectId}": {
"get": {
"tags": ["dsObject-reuse"],
"summary": "[复用] 数据集属性(动态表单)",
"description": "存量端点。三维体/切片可读属性由后端为 dd_voxel/dd_slice 注册 formList 后从此返回,无需为属性新增固定字段接口。",
"operationId": "dsObjectDynamicForm",
"parameters": [ { "$ref": "#/components/parameters/DsObjectIdPath" } ],
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/DynamicForm" } } } ] } } }
}
}
}
},
"/business/dsObject/updateDsObject/": {
"put": {
"tags": ["dsObject-reuse"],
"summary": "[复用] 更新数据集(描述 / attachedParameters)",
"description": "存量端点。改名/改描述/改三维体参数/改切片位姿都走这条。注意 URL 末尾斜杠为服务端实证要求。",
"operationId": "updateDsObject",
"requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateDsObjectRequest" } } } },
"responses": { "200": { "$ref": "#/components/responses/StatusOk" } }
}
},
"/business/dsObject/{dsObjectId}": {
"delete": {
"tags": ["dsObject-reuse"],
"summary": "[复用] 删除数据集",
"description": "存量端点。删三维体级联其下切片/异常记录(客户端另清本地体素落盘);删切片不影响异常(异常挂三维体、与切片解耦)。",
"operationId": "deleteDsObject",
"parameters": [ { "$ref": "#/components/parameters/DsObjectIdPath" } ],
"responses": { "200": { "$ref": "#/components/responses/StatusOk" } }
}
},
"/business/dsObject/voxel/generate": {
"post": {
"tags": ["voxel-new"],
"summary": "[新增] 登记三维体记录",
"description": "在生成位置节点(GS/项目根/TM)下登记一条 dd_voxel dsObject(名称 + 构建参数写入 attachedParameters.voxelParams),返回新 dsObjectId。只建记录、不触发后端计算——体素插值/落盘/渲染全在客户端。",
"operationId": "registerVoxel",
"requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VoxelGenerateRequest" } } } },
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreatedRef" } } } ] } } }
}
}
}
},
"/business/dsObject/slice/generate": {
"post": {
"tags": ["slice-new"],
"summary": "[新增] 登记切片记录",
"description": "在所属三维体下登记一条 dd_slice dsObject(名称 + 三点位姿写入 attachedParameters.slicePose),返回新 dsObjectId。只建记录、不触发后端计算——切面据「体+位姿」在客户端重采样渲染。",
"operationId": "registerSlice",
"requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SliceGenerateRequest" } } } },
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreatedRef" } } } ] } } }
}
}
}
},
"/business/exceptionType/queryExceptionTypeByProjectIdAndType/{projectId}/{remarkSourceType}": {
"get": {
"tags": ["exception-reuse"],
"summary": "[复用] 异常类型列表",
"description": "存量端点(queryExceptionTypeData)。按项目 + 标注形态(remarkSourceType=1点/2线/3面/4文字)查可用异常类型。与实体类型无关 → 3D 通用。data.value 为类型数组。",
"operationId": "queryExceptionTypes",
"parameters": [
{ "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } },
{ "name": "remarkSourceType", "in": "path", "required": true, "schema": { "type": "string", "enum": ["1", "2", "3", "4"] }, "description": "标注形态1点/2线/3面/4文字" }
],
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ExceptionTypeList" } } } ] } } }
}
}
}
},
"/business/exceptionType": {
"post": {
"tags": ["exception-reuse"],
"summary": "[复用] 新增异常类型",
"description": "存量端点(addExceptionType)。异常属性 + 标注名称双 Tab 组装的类型定义(含图例/字段列表)。3D 直接复用。",
"operationId": "addExceptionType",
"requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddExceptionTypeRequest" } } } },
"responses": { "200": { "$ref": "#/components/responses/StatusOk" } }
}
},
"/business/exception/getExceptionName": {
"post": {
"tags": ["exception-reuse"],
"summary": "[复用] 取建议异常名称",
"description": "存量端点(queryExceptionNameInProfileInversion)。按异常类型 + 被标注实体回填建议名。3D 把 remarkSourceId 填三维体 id 即可。data 为纯字符串(名称)。",
"operationId": "getExceptionName",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["exceptionTypeId", "remarkSourceId"],
"properties": {
"exceptionTypeId": { "type": "string" },
"remarkSourceId": { "type": "string", "description": "2D=dsObjectId3D=三维体 dsObjectId" }
}
}
}
}
},
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "type": "string", "description": "建议名称(纯字符串)" } } } ] } } }
}
}
}
},
"/business/exception": {
"post": {
"tags": ["exception-reuse"],
"summary": "[复用+扩展] 新增异常",
"description": "存量端点(newExceptionInProfileInversion)。2D 字段全复用;**3D 扩展**location 增加 worldPts(三维几何) + plane(所在平面),并增加 screenshot(R88 截图)。remarkSourceId=三维体 dsObjectIdconsortiumId 归入异常体(存量已有)。",
"operationId": "newException",
"requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NewExceptionRequest" } } } },
"responses": { "200": { "$ref": "#/components/responses/StatusOk" } }
},
"put": {
"tags": ["exception-reuse"],
"summary": "[复用+扩展] 更新异常",
"description": "存量端点(updateExceptionDataInProfileInversion)。改名/备注/几何3D 同样可改扩展后的 location 与截图。",
"operationId": "updateException",
"requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateExceptionRequest" } } } },
"responses": { "200": { "$ref": "#/components/responses/StatusOk" } }
}
},
"/business/exception/{id}": {
"delete": {
"tags": ["exception-reuse"],
"summary": "[复用] 删除异常",
"description": "存量端点(deleteExceptionDataInProfileInversion)。删异常体=按 consortiumId 循环删其下异常(无专用批删端点)。",
"operationId": "deleteException",
"parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ],
"responses": { "200": { "$ref": "#/components/responses/StatusOk" } }
}
},
"/business/exception/queryException/{remarkSourceId}": {
"get": {
"tags": ["exception-reuse"],
"summary": "[复用+扩展] 查某实体下的异常列表",
"description": "存量端点。2D 传 dsObjectId、3D 传三维体 dsObjectId。返回该实体全部异常客户端按 consortiumId 分组成异常体树。**3D 扩展**:返回项 location 含 worldPts+plane、并含 screenshot。",
"operationId": "queryExceptionBySource",
"parameters": [ { "name": "remarkSourceId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "2D=dsObjectId3D=三维体 dsObjectId" } ],
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ExceptionList" } } } ] } } }
}
}
}
},
"/business/exception/queryExceptionByTmObjectId/{tmObjectId}": {
"get": {
"tags": ["exception-reuse"],
"summary": "[复用] 查某 TM 下全部异常(按异常体分组)",
"description": "存量端点(loadExceptionsByTmAsync)。返回 TM 下全部异常,含 consortiumId/consortiumName/consortiumType(异常体分组,存量已有),客户端按 consortiumId 归组。",
"operationId": "queryExceptionByTm",
"parameters": [ { "name": "tmObjectId", "in": "path", "required": true, "schema": { "type": "string" } } ],
"responses": {
"200": {
"description": "成功",
"content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Envelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ExceptionList" } } } ] } } }
}
}
}
}
},
"components": {
"parameters": {
"DsObjectIdPath": {
"name": "dsObjectId", "in": "path", "required": true,
"schema": { "type": "string" }, "description": "数据集 dsObject id"
}
},
"responses": {
"StatusOk": {
"description": "操作状态",
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/Envelope" } } }
}
},
"schemas": {
"Envelope": {
"type": "object",
"required": ["code", "msg"],
"properties": {
"code": { "type": "integer", "example": 200, "description": "200=成功,其它=失败" },
"msg": { "type": "string", "example": "操作成功" },
"data": { "description": "业务载荷(对象或数组)", "nullable": true }
}
},
"CreatedRef": {
"type": "object",
"required": ["dsObjectId"],
"properties": { "dsObjectId": { "type": "string", "description": "新建数据集 id" } }
},
"Vec3": {
"type": "array", "description": "世界系三分量(米)",
"items": { "type": "number", "format": "double" }, "minItems": 3, "maxItems": 3
},
"Pt2": {
"type": "object", "description": "2D 点(剖面系x=距离, y=深度)",
"properties": { "x": { "type": "number", "format": "double" }, "y": { "type": "number", "format": "double" } }
},
"InterpModel": {
"type": "string", "enum": ["Idw", "Kriging"], "default": "Idw",
"description": "插值模型(本期仅 Idw 实现Kriging 占位)"
},
"RemarkSourceType": {
"type": "string", "enum": ["1", "2", "3", "4"],
"description": "标注形态(非实体类型)1点/2线/3面/4文字"
},
"StructNodeList": {
"type": "object", "description": "结构树信封内层(data.value)",
"properties": { "value": { "type": "array", "items": { "$ref": "#/components/schemas/StructNode" } } }
},
"StructNode": {
"type": "object", "description": "项目结构扁平节点(GS/TM),客户端按 parentId 建树",
"properties": {
"id": { "type": "string" }, "name": { "type": "string" }, "parentId": { "type": "string" },
"typeName": { "type": "string" }, "confCode": { "type": "string" },
"typeId": { "type": "string", "description": "类型 id(编辑时 getDynamicForm 必需)" },
"type": { "type": "integer" }
}
},
"DsPageRequest": {
"type": "object", "description": "存量 dsObject/data/page 请求体",
"required": ["projectId", "structParentId", "structParentConfType", "classifyTypeList", "pageNo", "pageSize"],
"properties": {
"projectId": { "type": "string" },
"structParentId": { "type": "string", "description": "查三维体填生成位置节点 id(GS/项目根/TM);查切片填所属三维体 dsObjectId" },
"structParentConfType": { "type": "integer", "description": "父节点配置类型1=GS/项目根 2=TM(三维体生成位置);查切片时=三维体所在层级" },
"classifyTypeList": { "type": "array", "items": { "type": "integer" }, "description": "数据类别过滤(dd_voxel/dd_slice 的 classify code 由后端定义)" },
"pageNo": { "type": "integer", "default": 1 },
"pageSize": { "type": "integer", "default": 20 }
}
},
"DsPage": {
"type": "object", "description": "分页结果",
"properties": { "total": { "type": "integer" }, "value": { "type": "array", "items": { "$ref": "#/components/schemas/DsRow" } } }
},
"DsRow": {
"type": "object", "description": "数据集行(列表/树节点)",
"required": ["id", "ddCode"],
"properties": {
"id": { "type": "string" }, "dsName": { "type": "string" },
"ddCode": { "type": "string", "enum": ["dd_voxel", "dd_slice"] },
"typeName": { "type": "string", "example": "三维体" },
"parentId": { "type": "string", "nullable": true, "description": "三维体=生成位置节点 id(GS/项目根/TM);切片=所属三维体 dsObjectId" }
}
},
"DsObjectDetail": {
"type": "object", "description": "存量 dsObject/getDetail 返回。三维体/切片机器参数搭车 attachedParameters。",
"properties": {
"dsObjectId": { "type": "string" }, "name": { "type": "string" },
"description": { "type": "string", "nullable": true },
"attachedParameters": {
"type": "object", "description": "附加参数(自由结构化 blob)",
"properties": {
"deltaContent": { "type": "array", "items": { "type": "object" }, "description": "描述富文本(Quill delta ops)" },
"voxelParams": { "allOf": [ { "$ref": "#/components/schemas/VolumeBuildParams" } ], "nullable": true, "description": "dd_voxel 专属:构建参数(体素字节在客户端本地)" },
"slicePose": { "allOf": [ { "$ref": "#/components/schemas/SliceSpec" } ], "nullable": true, "description": "dd_slice 专属:三点位姿(切面在客户端重采样)" }
}
}
}
},
"DynamicForm": {
"type": "object", "description": "ds 属性动态表单(存量统一模型)",
"properties": {
"formList": {
"type": "array", "description": "分组列表",
"items": {
"type": "object",
"properties": {
"name": { "type": "string", "description": "分组名" },
"values": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" } } } }
}
}
}
}
},
"UpdateDsObjectRequest": {
"type": "object", "required": ["dsObjectId"],
"properties": {
"dsObjectId": { "type": "string" }, "description": { "type": "string" },
"attachedParameters": {
"type": "object", "description": "改三维体参数/切片位姿放这里",
"properties": {
"deltaContent": { "type": "array", "items": { "type": "object" } },
"voxelParams": { "allOf": [ { "$ref": "#/components/schemas/VolumeBuildParams" } ], "nullable": true },
"slicePose": { "allOf": [ { "$ref": "#/components/schemas/SliceSpec" } ], "nullable": true }
}
}
}
},
"VolumeBuildParams": {
"type": "object", "description": "三维体构建参数(必存元数据;体素字节由客户端按此本地插值,不上后端)",
"required": ["sourceDatasetIds"],
"properties": {
"sourceDatasetIds": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "源数据集 id(≥1被引用即锁定不可改)" },
"interpModel": { "$ref": "#/components/schemas/InterpModel" },
"cellXY": { "type": "number", "format": "double", "default": 1.0, "description": "水平网格间距(米)" },
"cellZ": { "type": "number", "format": "double", "default": 0.5, "description": "竖向网格间距(米)" },
"power": { "type": "number", "format": "double", "default": 2.0, "description": "IDW 幂" },
"maxDist": { "type": "number", "format": "double", "default": 4.0, "description": "超距 blank" },
"colorScaleId": { "type": "string", "nullable": true, "description": "色阶来源 ds(空=取首个源色阶)" }
}
},
"VoxelGenerateRequest": {
"type": "object", "required": ["projectId", "structParentId", "structParentConfType", "name", "sourceDatasetIds"],
"properties": {
"projectId": { "type": "string" },
"structParentId": { "type": "string", "description": "生成位置节点 id —— 三维体挂在所选 GS/项目根/TM 下" },
"structParentConfType": { "type": "integer", "default": 1, "description": "1=GS/项目根 2=TM默认单GS挂该GS、跨GS挂项目根用户可在生成对话框改为任意 GS/TM" },
"name": { "type": "string" },
"sourceDatasetIds": { "type": "array", "items": { "type": "string" }, "minItems": 1 },
"interpModel": { "$ref": "#/components/schemas/InterpModel" },
"cellXY": { "type": "number", "format": "double", "default": 1.0 },
"cellZ": { "type": "number", "format": "double", "default": 0.5 },
"power": { "type": "number", "format": "double", "default": 2.0 },
"maxDist": { "type": "number", "format": "double", "default": 4.0 },
"colorScaleId": { "type": "string", "nullable": true }
}
},
"SliceSpec": {
"type": "object",
"description": "切面精确几何(三点+轴向)。法向=normalize((p1-o)×(p2-o)),可派生。存于 attachedParameters.slicePose。",
"required": ["volumeDsId", "origin", "point1", "point2"],
"properties": {
"volumeDsId": { "type": "string", "description": "所属三维体 dsObjectId" },
"axis": { "type": "integer", "enum": [0, 1, 2, 3], "default": 3, "description": "0 上下/1 前后/2 左右/3 任意" },
"origin": { "$ref": "#/components/schemas/Vec3" },
"point1": { "$ref": "#/components/schemas/Vec3" },
"point2": { "$ref": "#/components/schemas/Vec3" },
"colorScaleId": { "type": "string", "nullable": true }
}
},
"SliceGenerateRequest": {
"type": "object", "required": ["projectId", "volumeDsId", "name", "origin", "point1", "point2"],
"properties": {
"projectId": { "type": "string" },
"volumeDsId": { "type": "string", "description": "所属三维体 dsObjectId —— 切片挂在三维体下" },
"name": { "type": "string" },
"axis": { "type": "integer", "enum": [0, 1, 2, 3], "default": 3 },
"origin": { "$ref": "#/components/schemas/Vec3" },
"point1": { "$ref": "#/components/schemas/Vec3" },
"point2": { "$ref": "#/components/schemas/Vec3" },
"colorScaleId": { "type": "string", "nullable": true }
}
},
"ExceptionLocation": {
"type": "object",
"description": "异常几何载荷。2D 用 coordinate**3D 扩展** worldPts+plane。后端须扩展 location schema 以往返保存 3D 字段。",
"properties": {
"coordinate": { "type": "array", "items": { "$ref": "#/components/schemas/Pt2" }, "description": "2D 剖面坐标点(存量)" },
"worldPts": { "type": "array", "items": { "$ref": "#/components/schemas/Vec3" }, "description": "【3D 扩展】异常多边形/折线世界 3D 点" },
"plane": {
"type": "object", "nullable": true, "description": "【3D 扩展】异常所在平面",
"properties": { "normal": { "$ref": "#/components/schemas/Vec3" }, "origin": { "$ref": "#/components/schemas/Vec3" } }
}
}
},
"ExceptionRecord": {
"type": "object",
"description": "异常记录(queryException 返回项)。前段为存量 2D 字段,末尾为 3D 扩展。",
"properties": {
"id": { "type": "string" },
"exceptionName": { "type": "string" },
"exceptionTypeId": { "type": "string" },
"exceptionTypeName": { "type": "string" },
"remark": { "type": "string", "nullable": true },
"createTime": { "type": "string" },
"markType": { "$ref": "#/components/schemas/RemarkSourceType" },
"remarkSourceId": { "type": "string", "description": "2D=dsObjectId3D=三维体 dsObjectId" },
"remarkSourceType": { "$ref": "#/components/schemas/RemarkSourceType" },
"location": { "$ref": "#/components/schemas/ExceptionLocation" },
"latitudeLongitude": { "type": "object", "description": "经纬度坐标(存量展示用)", "properties": { "latLon": { "type": "array", "items": { "type": "object", "properties": { "longitude": { "type": "number" }, "latitude": { "type": "number" } } } } } },
"geographicalCoordinates": { "type": "object", "description": "投影坐标(存量展示用)", "properties": { "coordinates": { "type": "array", "items": { "type": "object", "properties": { "northCoord": { "type": "number" }, "eastCoord": { "type": "number" } } } } } },
"consortiumId": { "type": "string", "nullable": true, "description": "异常体分组 id(存量已有);空=未分组 loose" },
"consortiumName": { "type": "string", "nullable": true },
"consortiumType": { "type": "string", "nullable": true },
"legend": { "type": "object", "description": "图例样式(颜色/线宽/虚实等)" },
"screenshot": { "type": "string", "nullable": true, "description": "【3D 扩展 R88】异常截图(base64 或文件引用,传输方式由后端定)" }
}
},
"ExceptionList": {
"type": "object", "description": "异常列表信封内层(data.value)",
"properties": { "value": { "type": "array", "items": { "$ref": "#/components/schemas/ExceptionRecord" } } }
},
"ExceptionTypeRow": {
"type": "object", "description": "异常类型项",
"properties": {
"id": { "type": "string" },
"exceptionTypeName": { "type": "string" },
"exceptionTypeCode": { "type": "string" },
"exceptionMarkType": { "$ref": "#/components/schemas/RemarkSourceType" },
"legend": { "type": "object" }
}
},
"ExceptionTypeList": {
"type": "object", "description": "异常类型列表信封内层(data.value)",
"properties": { "value": { "type": "array", "items": { "$ref": "#/components/schemas/ExceptionTypeRow" } } }
},
"AddExceptionTypeRequest": {
"type": "object",
"description": "新增异常类型(对照存量 addExceptionType 全字段)",
"required": ["exceptionTypeName", "exceptionMarkType", "projectId"],
"properties": {
"exceptionTypeName": { "type": "string" },
"exceptionTypeCode": { "type": "string" },
"standardNumber": { "type": "string", "nullable": true },
"standardName": { "type": "string", "nullable": true },
"description": { "type": "string", "nullable": true },
"legend": { "type": "object", "description": "按 markType 的图例样式" },
"exceptionNameList": { "type": "array", "items": { "type": "object", "properties": { "fieldName": { "type": "string" }, "fieldCode": { "type": "string" }, "sort": { "type": "integer" } } } },
"customFormat": { "type": "string", "nullable": true },
"separatorSymbol": { "type": "string", "nullable": true },
"projectId": { "type": "string" },
"exceptionMarkType": { "$ref": "#/components/schemas/RemarkSourceType" },
"type": { "type": "integer", "default": 2 }
}
},
"NewExceptionRequest": {
"type": "object",
"description": "新增异常。存量字段 + 3D 扩展(location.worldPts/plane、screenshot)。",
"required": ["exceptionName", "exceptionTypeId", "projectId", "remarkSourceId", "remarkSourceType", "location"],
"properties": {
"exceptionName": { "type": "string" },
"exceptionTypeId": { "type": "string" },
"projectId": { "type": "string" },
"remarkSourceId": { "type": "string", "description": "2D=dsObjectId3D=三维体 dsObjectId" },
"remarkSourceType": { "$ref": "#/components/schemas/RemarkSourceType" },
"remark": { "type": "string", "nullable": true },
"location": { "$ref": "#/components/schemas/ExceptionLocation" },
"consortiumId": { "type": "string", "nullable": true, "description": "归入异常体(存量已有;空=loose)" },
"screenshot": { "type": "string", "nullable": true, "description": "【3D 扩展 R88】异常截图" }
}
},
"UpdateExceptionRequest": {
"type": "object",
"description": "更新异常(对照存量 updateException)。",
"required": ["id"],
"properties": {
"id": { "type": "string" },
"exceptionName": { "type": "string" },
"remark": { "type": "string", "nullable": true },
"location": { "allOf": [ { "$ref": "#/components/schemas/ExceptionLocation" } ], "nullable": true },
"consortiumId": { "type": "string", "nullable": true },
"screenshot": { "type": "string", "nullable": true, "description": "【3D 扩展 R88】" }
}
}
}
}
}