{ "openapi": "3.0.3", "info": { "title": "Geopro3 三维视图 API(三维体 / 切片 / 异常 三件套)", "version": "0.4.0-draft", "description": "VTK 三维视图后端接口。归属结构(2026-06-23 定稿):**TM → 三维体(dd_voxel) → 切片(dd_slice)**,异常挂在三维体上(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=tmObjectId、structParentConfType=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": "在 tmObjectId 下登记一条 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=dsObjectId;3D=三维体 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=三维体 dsObjectId;consortiumId 归入异常体(存量已有)。", "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=dsObjectId;3D=三维体 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": "查三维体填 tmObjectId;查切片填所属三维体 dsObjectId" }, "structParentConfType": { "type": "integer", "description": "父节点配置类型:TM=2(三维体场景)" }, "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": "三维体=tmObjectId;切片=所属三维体 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", "tmObjectId", "name", "sourceDatasetIds"], "properties": { "projectId": { "type": "string" }, "tmObjectId": { "type": "string", "description": "归属 TM —— 三维体挂在 TM 下(structParentConfType=2)" }, "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=dsObjectId;3D=三维体 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=dsObjectId;3D=三维体 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】" } } } } } }