## 4 资源服务接口文档 SimOne Web Asset Server ### 4.1 资源接口 #### 4.1.1 获取资源列表 **Path:** /api-asset/assets **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ----- | -------------------------------------------------------------------------------------------------- | -------- | -------- | | schema | query | 资源类型 _Enum:_ `"vehicleModel"`, `"trafficflow"`, `"sensor"`, `"judgement"`, `"dynamics"`, `"controller"` | No | string | | category | query | 目录id | No | string | | vehicleOnly | query | 为"true"时,只获取主车编辑器页面使用的资源 | No | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------- | | 200 | Ok | [AssetList](#assetlist) |
#### 4.1.2 创建资源 **Path:** /api-asset/assets **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | -------- | ------------------------------------------------------------ | -------- | ------------------------------------------------------------ | | requestBody | body | **data**:资源数据;
**sourceId**:当资源包含文件时,已上传的文件名称(md5);
**overwriteId**:如果传值将覆盖这个已存在的资源 | No | { **"data"**: [Asset](#asset), **"sourceId"**: string, **"overwriteId"**: string } | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------------------- | | 200 | Ok | [AssetBaseResponse](#assetbaseresponse) |

#### 4.1.3 获取指定资源 **Path:** /api-asset/assets/{id} **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | --------------- | -------- | -------- | | id | path | 需要获取资源 id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------- | | 200 | Ok | [Asset](#asset) |
#### 4.1.4 修改资源 **Path:** /api-asset/assets/{id} **Method:** PUT **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ----------------- | -------- | ------------------------------------- | | id | path | 需要更新的资源 id | Yes | string | | requestBody | body | 请求体 | Yes | [AssetSaveRequest](#assetsaverequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------------------- | | 200 | Ok | [AssetBaseResponse](#assetbaseresponse) |
#### 4.1.5 删除资源 **Path:** /api-asset/assets/{id} **Method:** DELETE **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | --------------- | -------- | -------- | | id | path | 要删除的资源 id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------------------- | | 200 | Ok | [AssetBaseResponse](#assetbaseresponse) |

#### 4.1.6 资源判重 **Path:** /api-asset/assets/isrepeat **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | --------------------------------------------- | | requestBody | body | 请求体 | Yes | [AssetIsRepeatRequest](#assetisrepeatrequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------- | | 200 | Ok | [IsRepeatResponse](#isrepeatresponse) |

#### 4.1.7 克隆资源 **Path:** /api-asset/assets/{id}/clone **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | --------------- | -------- | -------- | | id | path | 要克隆资源的 id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------------------- | | 200 | Ok | [AssetBaseResponse](#assetbaseresponse) |

### 4.2 案例接口 #### 4.2.1 创建案例 **Path:** /api-asset/cases **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | --------------------------------------------------------------------------------- | | requestBody | body | 请求体 | Yes | [CaseCreateRequest](#casecreaterequest) extends [PartialCaseDef](#partialcasedef) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

#### 4.2.2 已完成任务另存为案例 **Path:** /api-asset/cases/vr **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | --------------------------------------- | | requestBody | body | 请求体 | Yes | [CaseCreateRequest](#casecreaterequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

#### 4.2.3 更新案例 **Path:** /api-asset/cases/update **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------- | | requestBody | body | 请求体 | Yes | [CaseSaveRequest](#casesaverequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------- | | 200 | Ok | [CaseSaveResponse](#casesaveresponse) |

#### 4.2.4 克隆案例 **Path:** /api-asset/cases/clone **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ------------------------------------- | | requestBody | body | 请求体 | Yes | [CaseCloneRequest](#caseclonerequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------------------- | | 200 | Ok | [CaseCloneResponse](#casecloneresponse) |

#### 4.2.5 移动案例 **Path:** /api-asset/cases/move **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------- | | requestBody | body | 请求体 | Yes | [CaseMoveRequest](#casemoverequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------- | | 200 | Ok | [CaseMoveResponse](#casemoveresponse) |

#### 4.2.6 导出案例 **Path:** /api-asset/cases/export **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | --------------------------------------- | | requestBody | body | 请求体 | Yes | [CaseExportRequest](#caseexportrequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

#### 4.2.7 导入案例 **Path:** /api-asset/cases/import **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | --------------------------------------- | | requestBody | body | 请求体 | Yes | [CaseImportRequest](#caseimportrequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------------- | | 200 | Ok | [CaseImportResponse](#caseimportresponse) |

#### 4.2.8 获取传感器数量超载的案例 **Path:** /api-asset/cases/checkSensors **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ------------------------------------------- | | requestBody | body | 请求体 | Yes | [CheckSensorsRequest](#checksensorsrequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | -------------------------------------------- | | 200 | Ok | [ { **"id"**: string, **"name"**: string } ] |

#### 4.2.9 删除案例 **Path:** /api-case/cases/trash **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------- | | requestBody | body | 请求体 | Yes | { **"ids"**: [string] } | ##### 返回数据 | Code | 说明 | 类型 | | ---------- | ---- | -------- | | 204 or 200 | Ok | {} |

### 4.3 地图接口 #### 4.3.1 创建地图 / 更新地图 **Path:** /api-asset/maps **Method:** POST **Headers:**[FormDataHeaders](#formdataheaders) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | ---- | -------- | ------------------------------------- | | formdata | body | 请求体 | Yes | [MapCreateRequest](#mapcreaterequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | -------- | | 200 | Ok | object |

### 4.4 文件接口 #### 4.4.1 上传文件 **Path:** /api-asset/files/{md5}/upload **Method:** POST **Headers:**[FormDataHeaders](#formdataheaders) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ----- | -------- | -------- | --------------------------------------- | | md5 | path | 文件 md5 | Yes | string | | raw | query | 为"true"时表示上传的是数据驱动源 | Yes | string | | formData | body | 请求体 | Yes | [FileUploadRequest](#fileuploadrequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ---------------------- | | 200 | Ok | { **"code"**: double } |

#### 4.4.2 替换指定目录下的文件 **Path:** /api-asset/files/replace **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ----- | ---------------------------------- | -------- | -------- | | sourceId | query | 文件名称 | Yes | string | | targetId | query | 案例 id or 主车模型 id | Yes | string | | category | query | 资源类型 _Enum:_ `"case"`, `"vehicleModel"` | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ---------------------- | | 200 | Ok | { **"code"**: double } |

### 4.5 主车接口 #### 4.5.1 获取主车列表 **Path:** /api-asset/vehicles **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ----- | ---- | -------- | -------- | | page | query | 页码 | No | string | | pageSize | query | 每页数量 | No | string | | search | query | 搜索关键字 | No | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------------------------------- | | 200 | Ok | [BasePageResponseVehicleList](#basepageresponsevehiclelist) |
#### 4.5.2 创建主车 **Path:** /api-asset/vehicles **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | --------------------------------------------- | | requestBody | body | 请求体 | Yes | [VehicleCreateRequest](#vehiclecreaterequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

#### 4.5.3 获取指定主车 **Path:** /api-asset/vehicles/{id}/vehicle **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | ------- | -------- | -------- | | id | path | 主车 id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------- | | 200 | Ok | [VehicleItem](#vehicleitem) |

#### 4.5.4 更新主车 **Path:** /api-asset/vehicles/{id} **Method:** PUT **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------------- | | requestBody | body | 请求体 | Yes | [VehicleSaveRequest](#vehiclesaverequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------------- | | 200 | Ok | [VehicleSaveResponse](#vehiclesaveresponse) |
#### 4.5.5 删除主车 **Path:** /api-asset/vehicles/{id} **Method:** DELETE **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | ------------- | -------- | -------- | | id | path | 删除的主车 id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | -------- | | 200 | Ok | object |

#### 4.5.6 判断主车是否重复 **Path:** /api-asset/vehicles/isrepeat **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------- | | requestBody | body | 请求体 | Yes | [IsRepeatRequest](#isrepeatrequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------- | | 200 | Ok | [IsRepeatResponse](#isrepeatresponse) |

#### 4.5.7 克隆主车 **Path:** /api-asset/vehicles/{id}/clone **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | ---- | -------- | -------- | | id | path | 主车id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

#### 4.5.8 更新主车资源文件 **Path:** /api-asset/vehicles/{vehicleId}/files **Method:** POST **Headers:**[FormDataHeaders](#formdataheaders) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | --------- | ---- | ---- | -------- | -------- | | vehicleId | path | 主车id | Yes | string | | formData | body | 请求体 | Yes | [VehicleReplaceRequest](#vehiclereplacerequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) | **[Header](#formdataheaders)**

#### 4.5.9 获取主车数量 **Path:** /api-asset/vehicles/count **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 无 ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------- | | 200 | Ok | { **"count"**: double } |

#### 4.5.10 导入主车 **Path:** /api-asset/vehicles/import **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------------------- | | requestBody | body | 请求体 | Yes | [VehiclesCreateRequest](#vehiclescreaterequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

### 4.6 测试集接口 #### 4.6.1 获取测试集列表 **Path:** /api-asset/suites **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ----- | ---- | -------- | -------- | | opponent | query | 案例类型 _Enum:_ `"openscenario"` | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------- | | 200 | Ok | [SuiteList](#suitelist) |
#### 4.6.2 创建测试集 **Path:** /api-asset/suites **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------------- | | requestBody | body | 请求体 | Yes | [SuiteCreateRequest](#suitecreaterequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

#### 4.6.3 获取测试集 **Path:** /api-asset/suites/{id} **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | ---- | -------- | -------- | | id | path | 测试集id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------- | | 200 | Ok | [Suite](#suite) |
#### 4.6.4 更新测试集 **Path:** /api-asset/suites/{id} **Method:** PUT **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ------------------------------------- | | id | path | 测试集id | Yes | string | | requestBody | body | 请求体 | Yes | [SuiteSaveRequest](#suitesaverequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------------------- | | 200 | Ok | [SuiteSaveResponse](#suitesaveresponse) |
#### 4.6.5 删除测试集 **Path:** /api-asset/suites/{id} **Method:** DELETE **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ----- | ---- | -------- | -------- | | id | path | 测试集id | Yes | string | | opponent | query | 案例类型 _Enum:_ `"openscenario"` | No | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------------------- | | 200 | Ok | [GeneralResponse](#generalresponse) |

#### 4.6.6 移动测试集 **Path:** /api-asset/suites/move **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ------------------------------------------- | | requestBody | body | 请求体 | Yes | [CategoryMoveRequest](#categorymoverequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | -------- | | 200 | Ok | {} |

#### 4.6.7 测试集判重 **Path:** /api-asset/suites/isrepeat **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------- | | requestBody | body | 请求体 | Yes | [IsRepeatRequest](#isrepeatrequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------- | | 200 | Ok | [IsRepeatResponse](#isrepeatresponse) |

### 4.7 页面目录接口 #### 4.7.1 获取目录列表 **Path:** /api-asset/categories **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ----- | --------------------------------------------------------- | -------- | -------- | | pageType | query | 页面类型 _Enum:_ `"assets"`, `"case"`, `"vehicle"`, `"judgeAsset"` | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ----------------------- | | 200 | Ok | [AssetList](#assetlist) |

### 4.8 对手元素接口 #### 4.8.1 获取对手元素列表 **Path:** /api-asset/obstacles **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ----- | --------------------------------------------------------------- | -------- | -------- | | schema | query | _Enum:_ `"dynamic"`, `"static"`
障碍物类型,指定 category 时可以不传 | Yes | string | | category | query | 目录 id | Yes | string | | page | query | 页码 | No | string | | pageSize | query | 每页数量 | No | string | | search | query | 搜索关键字 | No | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | --------------------------------------------------------------------- | | 200 | Ok | [BasePageResponseObstacleNpcArray](#basepageresponseobstaclenpcarray) |
#### 4.8.2 创建自定义对手元素 **Path:** /api-asset/obstacles **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------------------- | | requestBody | body | 请求体 | Yes | [ObstacleCreateRequest](#obstaclecreaterequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------------ | | 200 | Ok | { **"npc"**: [ObstacleNpc](#obstaclenpc) } |

#### 4.8.3 获取指定对手元素 **Path:** /api-asset/obstacles/{id} **Method:** GET **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | ---- | -------- | -------- | | id | path | 对手元素id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------------ | | 200 | Ok | { **"npc"**: [ObstacleNpc](#obstaclenpc) } |
#### 4.8.4 更新对手元素 **Path:** /api-asset/obstacles/{id} **Method:** PUT **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------------------- | | id | path | 对手元素id | Yes | string | | requestBody | body | 请求体 | Yes | [ObstacleCreateRequest](#obstaclecreaterequest) | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------------ | | 200 | Ok | { **"npc"**: [ObstacleNpc](#obstaclenpc) } |
#### 4.8.5 删除自定义元素 **Path:** /api-asset/obstacles/{id} **Method:** DELETE **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | -------- | ---- | ----------------- | -------- | -------- | | id | path | 需要删除元素的 id | Yes | string | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------------ | | 200 | Ok | { **"id"**: string, **"schema"**: string } |

#### 4.8.6 对手元素判重 **Path:** /api-asset/obstacles/isrepeat **Method:** POST **Headers:**[Headers](#headers) ##### 请求参数 | 参数名称 | 传参格式 | 说明 | 是否必填 | 类型 | | ----------- | ---- | ---- | -------- | ----------------------------------------- | | requestBody | body | 请求体 | Yes | { **"name"**: string; **"id"**?: string } | ##### 返回数据 | Code | 说明 | 类型 | | ---- | ---- | ------------------------------------- | | 200 | Ok | [IsRepeatResponse](#isrepeatresponse) |

### 通用请求头 ##### Headers | 名称 | 类型 | 说明 | 是否必填 | | ------------- | ---------------- | -------------------- | -------- | | Authorization | string | 用于权限验证的 token | Yes | | accept | application/json | 客户端接收JSON数据 | No | ##### FormDataHeaders | 名称 | 类型 | 说明 | 是否必填 | | ------------- | ------------------- | -------------------- | -------- | | Authorization | string | 用于权限验证的 token | Yes | | Content-Type | multipart/form-data | 客户端发送的数据类型 | Yes | | accept | application/json | 客户端接收JSON数据 | No |
### 相关类型 #### 4.1 资源接口相关类型 ##### AssetList 系统资源列表 Record\ ##### Asset 资源 | 名称 | 类型 | 说明 | 是否必填 | | -------------- | -------- | ----------------------------- | -------- | | id | string | ID | Yes | | name | string | 名称 | Yes | | userId | string | 用户id | Yes | | schema | string | 类型 | Yes | | category | string | 目录 | Yes | | thumbnail | string | 缩略图文件路径 | No | | builtIn | boolean | 是否内置 | No | | external | boolean | 是否是外挂元素 | No | ##### PartialAsset Partial\<[Asset](#asset)> 表示[Asset](#asset)的每个键值对都是可选的 ##### AssetBaseResponse 返回资源的响应 | 名称 | 类型 | 说明 | 是否必填 | | ---- | --------------- | ---- | -------- | | data | [Asset](#asset) | 资源数据 | Yes | ##### AssetSaveRequest 修改资源的请求体 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | ----------------------------- | ---------------------------------- | -------- | | data | [PartialAsset](#partialasset) | 更新的资源的数据 | Yes | | sourceId | string | 当资源包含文件时,已上传的文件名称 | No | | overwrite | boolean | 是否重新启用已删除的资源 | No | | needRefresh | boolean | 更新后是否刷新页面列表 | No | ##### IsRepeatResponse 是否重复的响应 | 名称 | 类型 | 说明 | 是否必填 | | -------- | -------- | ---- | -------- | | isRepeat | boolean | 是否重复 | Yes | ##### AssetIsRepeatRequest 资源是否重复的请求体 | 名称 | 类型 | 说明 | 是否必填 | | ---------- | -------- | -------------------------------------------------------------------------------------------------- | -------- | | schema | string | 资源类型 _Enum:_ `"vehicleModel"`, `"trafficflow"`, `"sensor"`, `"judgement"`, `"dynamics"`, `"controller"` | Yes | | name | string | 资源名称 | Yes | ##### GeneralResponse 返回id的响应 | 名称 | 类型 | 说明 | 是否必填 | | ---- | -------- | ---- | -------- | | id | string | 被操作对象的id | Yes | #### 4.2 案例接口相关类型 ##### Environment 环境 | 名称 | 类型 | 说明 | 是否必填 | | ------------------------ | ------------------------------------------------------------------------------------------------------------------- | ----------------------------- | -------- | | timeOfDay | double | 当前时间 | Yes | | lightIntensity | double | 光照强度 | Yes | | ambientLightIntensity | double | 环境光 | Yes | | artificialLightIntensity | double | 人造光 | Yes | | heightAngle | double | 高度角 | Yes | | cloudDensity | double | 云密度 | Yes | | rainDensity | double | 雨密度 | Yes | | fogDensity | double | 雾密度 | Yes | | snowDensity | double | 雪密度 | Yes | | ground | { **"enable"**: boolean, **"humidityLevel"**: double, **"dirtyLevel"**: double, **"adhesionCoefficient"**: double } | 地面参数 | Yes | | id | string | 环境id | Yes | | name | string | 环境名称 | Yes | | schema | string | 资源类型 _Enum:_ `"environment"` | Yes | | thumbnail | string | 缩略图路径 | No | | builtIn | boolean | 是否为内置 | No | | classId | string | 类型 | Yes | | time | string | 时间 | Yes | ##### EnvironmentList 案例环境列表 | 名称 | 类型 | 说明 | 是否必填 | | ------ | ---------- | ---- | -------- | | byId | { [id]: [Environment](#environment) } | 环境实例id和环境数据作为键值对的对象 | Yes | | allIds | [ string ] | 环境实例id列表 | Yes | ##### CaseSensorList 案例路测传感器列表 | 名称 | 类型 | 说明 | 是否必填 | | ------ | ---------- | ---- | -------- | | byId | { [id]: [Sensor](#sensor) } | 传感器实例id和传感器数据作为键值对的对象 | Yes | | allIds | [ string ] | 传感器实例id列表 | Yes | ##### JudgementList 案例判定列表 | 名称 | 类型 | 说明 | 是否必填 | | ------ | ---------- | ---- | -------- | | byId | object | 判定实例id和数据作为键值对的对象 | Yes | | allIds | [ string ] | 判定实例id | Yes | ##### SpecialAreaList 案例特殊区域列表 | 名称 | 类型 | 说明 | 是否必填 | | ------ | ---------- | ---- | -------- | | byId | object | 特殊区域实例id和数据作为键值对的对象 | Yes | | allIds | [ string ] | 特殊区域实例id | Yes | ##### MapGenConfigItem 案例地图配置 | 名称 | 类型 | 说明 | 是否必填 | | ------------------- | -------- | ---- | -------- | | enable | boolean | 是否自动生成道路周边场景 | Yes | | distance | double | 间距 | No | | distanceToRoadVerge | double | 距路边的距离 | No | ##### MapGenConfig 案例地图配置列表(键值对) Record\ ##### CommunicationConfig 通信公共参数设置 | 名称 | 类型 | 说明 | 是否必填 | | ------------- | -------- | ---------------------------- | -------- | | frequencyBand | double | 频段 | Yes | | bandwidth | double | 带宽 | Yes | | maxRadiu | double | 最大覆盖范围半径 | Yes | | protocol | string | 协议 _Enum:_ `"LTE-V"` | Yes | | model | string | 无线通信传输模型 _Enum:_ `"Urban"`, `"Rural"` | Yes | | psSwitch | boolean | 是否启用无线通信性能仿真 | Yes | ##### CaseData 案例数据 | 名称 | 类型 | 说明 | 是否必填 | | ------------------- | ------------------------------------------- | -------------------- | -------- | | environments | [EnvironmentList](#environmentlist) | 环境配置 | Yes | | sensors | [CaseSensorList](#casesensorlist) | 路侧传感器配置 | Yes | | judgements | [JudgementList](#judgementlist) | 判定配置 | Yes | | specialAreas | [SpecialAreaList](#specialarealist) | 特殊区域配置 | Yes | | mapGenConfig | [MapGenConfig](#mapgenconfig) | 地图配置 | No | | communicationParams | [CommunicationConfig](#communicationconfig) | 通信公共参数设置 | No | | schema | string | 类型 _Enum:_ `"casedata"` | Yes | | caseId | string | 案例id | Yes | ##### CaseCreateOptions 创建案例选项 | 名称 | 类型 | 说明 | 是否必填 | | ------------ | -------------------------------------------------- | ---- | -------- | | envId | string | 指定环境id | No | | mapGenConfig | [MapGenConfig](#mapgenconfig) | 地图配置 | No | | autoMapScene | boolean | 省略 | No | | scenario | { **"vehicleId"**: string, **"content"**: string } | 省略 | No | | taskId | string | 已完成任务存为案例时使用,任务id | No | | changeType | boolean | 已完成任务存为案例时使用,表示是否把主车转换为对手车 | No | ##### CaseCreateRequest 创建案例请求体 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | --------------------------------------- | ---- | -------- | | casedata | [CaseData](#casedata) | 案例数据 | No | | options | [CaseCreateOptions](#casecreateoptions) | 创建案例选项 | No | | needRefresh | boolean | 创建完成后是否更新页面 | No | ##### CaseSaveResponse 更新案例的响应 | 名称 | 类型 | 说明 | 是否必填 | | -------- | --------------------------------- | ---- | -------- | | code | double | 成功时为0 | No | | msg | string | 返回信息 | No | ##### CaseDefVehicle 案例主车配置 | 名称 | 类型 | 说明 | 是否必填 | | ------------------- | -------- | ---- | -------- | | id | string | 案例主车资源id | Yes | | name | string | 主车名称 | Yes | | classId | string | 主车模型id | Yes | | physicalGradeSensor | double | 物理传感器数量 | Yes | | category | string | 省略 | No | | instanceId | string | 案例配置主车实例id | No | | instanceName | string | 案例中的实例名称 | No | | instanceColor | string | 实例配色 | No | ##### CaseDef 案例 | 名称 | 类型 | 说明 | 是否必填 | | --------------------------- | ------------------------------------- | ------------------- | -------- | | schema | string | 类型 _Enum:_ `"casedef"` | Yes | | id | string | 案例id | Yes | | name | string | 案例名称 | Yes | | userId | string | 用户名称 | Yes | | created | double | 创建时间 | Yes | | lastModified | double | 修改时间 | Yes | | opponent | object | 案例类型 | Yes | | categoryId | string | 目录id | No | | mapId | string | 地图id | Yes | | mapName | string | 地图名称 | No | | vehicles | [ [CaseDefVehicle](#casedefvehicle) ] | 主车信息列表 | No | | vehicleId | [ string ] | 主车id列表 | No | | tags | [ string ] | 标签列表 | No | | notes | string | 备注 | No | | builtIn | boolean | 是否内置的 | No | | joinway | string | 省略 | No | | thumbnail | string | 缩略图 | No | | roadSidePhysicalGradeSensor | double | 路侧物理传感器数量 | No | ##### PartialCaseDef Partial<[CaseDef](#CaseDef)> 表示[CaseDef](#CaseDef)的每个键值对都是可选的 ##### CaseSaveRequest 更新案例请求体 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | --------------------------------- | ---- | -------- | | casedef | [PartialCaseDef](#partialcasedef) | 案例信息 | No | | casedata | [CaseData](#casedata) | 案例配置数据 | Yes | | needRefresh | boolean | 更新后是否更新页面 | No | ##### CaseCloneResponse 案例克隆响应 | 名称 | 类型 | 说明 | 是否必填 | | --------- | ---------- | ----------------- | -------- | | clonedIds | [ string ] | 复制成功后案例 id | Yes | ##### CaseCloneRequest 案例克隆请求 | 名称 | 类型 | 说明 | 是否必填 | | ---------- | ---------- | ------------------------------------------------- | -------- | | ids | [ string ] | 需要复制的案例的 id | Yes | | categoryId | string | 复制进文件夹的 id | Yes | ##### CaseMoveResponse 移动案例响应 | 名称 | 类型 | 说明 | 是否必填 | | -------- | ---------- | ---- | -------- | | movedIds | [ string ] | 案例id列表 | Yes | ##### CaseMoveRequest 移动案例请求 | 名称 | 类型 | 说明 | 是否必填 | | ---------- | ---------- | ------------------- | -------- | | ids | [ string ] | 需要移动的案例的 id | Yes | | categoryId | string | 目的文件夹的 id | Yes | ##### IRow 案例目录 | 名称 | 类型 | 说明 | 是否必填 | | -------- | -------- | ---- | -------- | | id | string | 目录id | Yes | | parentId | string | 父目录id | No | ##### CaseExportRequest 导出案例请求 | 名称 | 类型 | 说明 | 是否必填 | | --------------- | ----------------- | --------------------------- | -------- | | caseIds | [ string ] | 案例id列表 | Yes | | includesVehicle | boolean | 是否包含主车 | Yes | | includesMap | boolean | 是否包含地图 | Yes | | format | string | 导出的案例格式 _Enum:_ `"simone"`,`"xosc"` | Yes | | pathinfo | [ [IRow](#irow) ] | 导出案例的目录信息 | Yes | ##### CaseImportResponse 导入案例响应 | 名称 | 类型 | 说明 | 是否必填 | | ------- | -------------- | ---- | -------- | | id | string | 导入文件的md5码 | Yes | | isFixed | boolean | 是否修复格式错误的案例 | No | | reasons | [ [ string ] ] | 错误原因 | No | ##### Recordstringstring 键值对(值的类型是字符串) Reacord\ ##### CaseOverrideInfo 导入案例时的主车和地图信息 | 名称 | 类型 | 说明 | 是否必填 | | ----------------- | ---------- | ---- | -------- | | id | string | 上传文件内包含的案例(包含相对路径) | Yes | | name | string | 名称 | Yes | | replaceMap | boolean | 是否替换地图 | Yes | | replaceVehicle | boolean | 是否替换主车 | Yes | | missingMap | boolean | 是否缺失地图 | Yes | | missingVehicle | boolean | 是否缺失主车 | Yes | | overrideMapId | string | 要替换为的地图id | Yes | | overrideVehicleId | string | 要替换为的主车id | Yes | | mapId | string | 可忽略 | No | | mapName | string | 可忽略 | No | | vehicleIds | [ string ] | 可忽略 | No | | path | string | 可忽略 上传文件内包含的案例(包含相对路径)+ ext | No | ##### CaseImportRequest 导入案例的请求 | 名称 | 类型 | 说明 | 是否必填 | | ------------------- | ----------------------------------------- | ---------------------------------------- | -------- | | id | string | 上传 file 文件时的 uploadId(uuid) | Yes | | file | string | file 的 md5 (在服务端用作临时文件名称) | Yes | | category | string | 目录文件夹 | Yes | | includesVehicle | boolean | 是否包含主车 | Yes | | includesMap | boolean | 是否包含地图 | Yes | | includes | [ string ] | 上传文件内包含哪些案例(包含相对路径) | Yes | | needRemoveCases | [Recordstringstring](#recordstringstring) | 传空对象就可以{} | Yes | | overrides | [ [CaseOverrideInfo](#caseoverrideinfo) ] | 传空数组就可以[] | Yes | | categoryInfo | [Recordstringstring](#recordstringstring) | 传空对象就可以{} | Yes | | includesStopTrigger | boolean | 添加默认案例结束条件(仿真时间>60s)| No | | excludeVehicleIds | [ string ] | 传空数组就可以[] | No | | excludeMapIds | [ string ] | 传空数组就可以[] | No | | replaceVehiclesMap | [Recordstringstring](#recordstringstring) | 被替换的主车 | No | | replaceMapIds | [ string ] | 被替换的地图(从资源库删除) | No | | name | string | 上传文件的名称 | Yes | | ext | string | file 后缀 (zip、sim、xosc) | Yes | | ignoreNameChecking | boolean | 标签列表 | No | | tags | [ string ] | 标签列表 | No | | notes | string | 备注 | No | | needFix | boolean | 是否需要验证失败的案例 | No | | needFixCases | [ string ] | 验证失败并需要修复的案例 | No | ##### CheckSensorsRequest 检测案例配置的传感器是否过载的请求 | 名称 | 类型 | 说明 | 是否必填 | | --------- | ---------- | --------------------------------------- | -------- | | caseIds | [ string ] | 需要运行的案例 id | Yes | | maxWay | double | 系统支持的传感器数量 | Yes | | vehicleId | string | 运行案例使用的主车 id, 不指定主车传"-1" | Yes | #### 4.3 地图接口相关类型 ##### CreateMapParams 创建地图参数 | 名称 | 类型 | 说明 | 是否必填 | | ------------------ | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | | category | string | 地图类型(目录) _Enum:_ `"integrated"`, `"atomic"`, `"customized"`, `"city"`, `"city_viaduct"`, `"city_parking"`, `"city_integrated"`, `"i_highway"`, `"i_highway_integrated"`, `"straightway"`, `"turn"`, `"crossroads"`, `"T_junction"`, `"roundabout"`, `"a_highway"` | Yes | | id | string | 默认是“” | Yes | | name | string | 名称 | Yes | | size | double | 从xodr解析获取 | Yes | | ppm | double | 从xodr解析获取 | Yes | | bgColor | string | 从xodr解析获取 | Yes | | reproject | boolean | 从xodr解析获取 | Yes | | reprojectOrigin | boolean | 从xodr解析获取 | Yes | | reprojectOriginLat | double | 从xodr解析获取 | Yes | | reprojectOriginLng | double | 从xodr解析获取 | Yes | | tags | [ string ] | 标签列表 | No | | notes | string | 备注 | No | ##### MapCreateRequest 创建地图请求 | 名称 | 类型 | 说明 | 是否必填 | | --------- | ----------------------------------- | --------------- | -------- | | params | [CreateMapParams](#createmapparams) | JSON 需要字符化 | Yes | | xodr | File | xodr 文件 | Yes | | thumbnail | File | 地图缩略图文件 | No | #### 4.4 文件接口相关类型 ##### UploadFileParams 上传文件参数 | 名称 | 类型 | 说明 | 是否必填 | | -------- | -------- | ---- | -------- | | uploadId | string | uuid | Yes | | category | string | 业务类型 | Yes | | filename | string | 文件名称 | Yes | | index | double | chunks序号 | Yes | | chunks | double | 分几次上传 | Yes | | filesize | double | 当前chunk大小 | Yes | ##### FileUploadRequest 上传文件请求 | 名称 | 类型 | 说明 | 是否必填 | | ------ | ------------------------------------- | --------------- | -------- | | params | [UploadFileParams](#uploadfileparams) | JSON 需要字符化 | Yes | | file | File | 文件 | Yes | #### 4.5 主车接口相关类型 ##### VehicleList 主车列表 | 名称 | 类型 | 说明 | 是否必填 | | ------ | ---------- | ---- | -------- | | byId | {[id]: [VehicleItem](#vehicleItem)} | 主车id和数据作为键值对的对象 | Yes | | allIds | [ string ] | 主车资源id | Yes | ##### BasePageResponseVehicleList 获取主车列表的响应 | 名称 | 类型 | 说明 | 是否必填 | | ----- | --------------------------- | ---- | -------- | | list | [VehicleList](#vehiclelist) | 主车列表 | Yes | | page | double | 当前页码 | Yes | | total | double | 主车总数 | Yes | ##### VehicleCreateRequest 创建主车的请求 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | -------- | --------------- | -------- | | name | string | 主车名称 | Yes | | classId | string | 主车模型 id | Yes | | overwriteId | string | 要覆盖的主车 id | No | ##### DataBlock 键值对 Reacord\ ##### VehicleDynamics 主车动力学 | 名称 | 类型 | 说明 | 是否必填 | | -------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------- | -------- | | id | string | ID | Yes | | name | string | 名称 | Yes | | schema | string | 资源类型 `"dynamics"` | Yes | | builtIn | boolean | 是否内置 | No | | type | string | 动力学类型 _Enum:_ `"srvehicles"`, `"srvehicle-truck"`, `"srvehicle-bus"`, `"carsim"`, `"carmaker"`, `"vigrade"`, `"none"` | Yes | | params | [DataBlock](#datablock) | 动力学参数 | Yes | ##### VehicleCtl 主车控制器 | 名称 | 类型 | 说明 | 是否必填 | | -------------- | ----------------------- | ---- | -------- | | id | string | ID | Yes | | type | string | 类型 | Yes | | name | string | 名称 | Yes | | params | [DataBlock](#datablock) | 控制器参数 | Yes | | aideId | string | 辅助控制器id | No | | builtIn | boolean | 是否内置 | No | ##### SensorOutput 传感器输出设置 | 名称 | 类型 | 说明 | 是否必填 | | -------- | -------- | ---- | -------- | | byType | {[selected]: any} | 输出配置 | Yes | | selected | string | 输出格式 | Yes | ##### Sensor 传感器 | 名称 | 类型 | 说明 | 是否必填 | | -------------- | ----------------------------- | ----------------------------- | -------- | | id | string | ID | Yes | | name | string | 名称 | Yes | | schema | string | 资源类型 _Enum:_ `"sensor"` | Yes | | category | string | 目录id | Yes | | thumbnail | string | 缩略图路径 | No | | builtIn | boolean | 是否内置 | No | | classId | string | 类型 | Yes | | x | double | x方向位置 | Yes | | y | double | y方向位置 | Yes | | z | double | z方向位置 | Yes | | roll | double | 倾斜角 | Yes | | pitch | double | 倾斜角 | Yes | | yaw | double | 倾斜角 | Yes | | params | [DataBlock](#datablock) | 传感器参数 | Yes | | includeIds | [ string ] | 融合传感器时,融合了哪些传感器 | No | | output | [SensorOutput](#sensoroutput) | 传感器输出设置 | No | | disabled | boolean | 是否禁用 | No | | presetId | string | 非内置时,表示原始传感器id | No | ##### VehicleItem 主车 | 名称 | 类型 | 说明 | 是否必填 | | -------------- | ----------------------------------- | --------------------------------------------- | -------- | | id | string | ID | Yes | | name | string | 名称 | Yes | | thumbnail | string | 缩略图路径 | No | | builtIn | boolean | 是否是内置 | No | | schema | string | 类型 _Enum:_ `"vehicle"` | Yes | | classId | string | 模型id | Yes | | driver | string | 忽略 _Enum:_ `"ai"`, `"human"` | Yes | | dynamics | [VehicleDynamics](#vehicledynamics) | 动力学参数 | Yes | | controller | [VehicleCtl](#vehiclectl) | 控制器 | Yes | | category | string | 主车类型 _Enum:_ `"Bike"`, `"Vehicle"`, `"Pedestrian"` | Yes | | sensors | [ [Sensor](#sensor) ] | 传感器配置 | Yes | ##### PartialVehicleItem Partial\<[VehicleItem](#vehicleitem)> 表示[VehicleItem](#vehicleitem)的每个键值对都是可选的 ##### VehicleSaveResponse 更新主车的响应 | 名称 | 类型 | 说明 | 是否必填 | | ---- | ----------------------------------------- | ---- | -------- | | data | [PartialVehicleItem](#partialvehicleitem) | 更新后的数据 | Yes | ##### VehicleSaveRequest 更新主车的请求 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | ----------------------------------------- | ---- | -------- | | data | [PartialVehicleItem](#partialvehicleitem) | 主车信息 | Yes | | overwrite | boolean | 如果当前主车已删除,是否重新启用 | No | | needRefresh | boolean | 更新后是否刷新页面 | No | ##### IsRepeatRequest 主车或测试集名称是否重复的请求 | 名称 | 类型 | 说明 | 是否必填 | | ---------- | -------- | ---- | -------- | | name | string | 名称 | Yes | ##### VehiclesCreateRequest 导入主车的请求 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | --------------------------- | ---- | -------- | | vehicleData | [VehicleList](#vehiclelist) | 导入主车的数据 | Yes | ##### VehicleReplaceRequest 更新主车资源文件的请求 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | ----------------------------------------- | -------------------- | -------- | | params | { **"type"**: "controller" or "dynamics" } | 替换控制器或者动力学相关的资源,传参时需要字符串化 | Yes | | file | File | 要替换的资源文件 | Yes | #### 4.6 测试集接口相关类型 ##### SuiteList 测试集列表 | 名称 | 类型 | 说明 | 是否必填 | | ------ | ---------- | ---- | -------- | | byId | {[id]: [Suite](#suite)} | suiteid和数据的键值对 | Yes | | allIds | [ string ] | 测试集id列表 | Yes | ##### SuiteCreateRequest 创建测试集的请求 | 名称 | 类型 | 说明 | 是否必填 | | -------- | -------- | ---- | -------- | | parentId | string | 父目录id | Yes | | name | string | 名称 | Yes | ##### Suite 测试集 | 名称 | 类型 | 说明 | 是否必填 | | -------------- | ---------- | ----------------- | -------- | | schema | string | 类型 _Enum:_ `"suite"` | Yes | | id | string | ID | Yes | | name | string | 名称 | Yes | | userId | string | 用户id | Yes | | parentId | string | 父目录id | Yes | | caseIds | [ string ] | 包含哪些用例 | No | ##### PartialSuite Partial\<[Suite](#suite)> 表示[Suite](#suite)的每个键值对都是可选的 ##### SuiteSaveResponse 更新测试集的响应 | 名称 | 类型 | 说明 | 是否必填 | | ---- | ----------------------------- | ---- | -------- | | data | [PartialSuite](#partialsuite) | 更新后的测试集 | Yes | ##### SuiteSaveRequest 更新测试集的请求 | 名称 | 类型 | 说明 | 是否必填 | | -------- | ----------------------------- | ---- | -------- | | data | [PartialSuite](#partialsuite) | 要更新的测试集 | Yes | | caseIds | [ string ] | 要操作的案例id列表 | No | | delete | boolean | 表示删除或者添加caseIds | No | #### 4.7 页面目录接口相关类型 ##### CategoryMoveRequest 移动测试集的请求 | 名称 | 类型 | 说明 | 是否必填 | | -------- | -------- | ------------------------------------ | -------- | | dragId | string | 要移动的测试集id | Yes | | dropId | string | 移动到相对这个测试集的某个位置 | Yes | | state | string | 相对dropId的位置 _Enum:_ `"up"`, `"down"`, `"inside"` | Yes | #### 4.8 对手元素接口相关类型 ##### ObstacleNpc 对手元素 | 名称 | 类型 | 说明 | 是否必填 | | -------------- | ------------------------------------------------------------------- | --------------------------------------------- | -------- | | id | string | ID | Yes | | category | string | 类型 | Yes | | schema | string | 元素分类 _Enum:_ `"dynamic"`, `"static"` | Yes | | assetId | double | 资源id | No | | name | string | 名称 | No | | uicategory | string | 目录id | No | | oscSubCategory | string | osc类型 | No | | resourceType | string | 元素资源的类型 _Enum:_ `"model"`, `"chartlet"`, `"external"` | No | | resourceMd5 | string | 资源文件md5 | No | | thumbnail | string | 缩略图路径 | Yes | | interpo | string | 忽略 _Enum:_ `"clothoid"`, `"legacy"` | Yes | | semantic | string | 语义类型 _Enum:_ `"vehicle"`, `"none"` | Yes | | builtIn | boolean | 是否内置 | No | | modelPath | string | 外挂模型路径 | No | | aniPath | string | 外挂动画路径 | No | | dimensions | { **"length"**: double, **"width"**: double, **"height"**: double } | 尺寸 | No | | originToCenter | { **"x"**: double, **"y"**: double, **"z"**: double } | 原点位置 | No | ##### PartialObstacleNpc Partial\<[ObstacleNpc](#obstaclenpc)> 表示[ObstacleNpc](#obstaclenpc)的每个键值对都是可选的 ##### BasePageResponseObstacleNpcArray 获取对手元素列表的响应 | 名称 | 类型 | 说明 | 是否必填 | | ----- | ------------------------------- | ---- | -------- | | list | [ [ObstacleNpc](#obstaclenpc) ] | 对手元素列表 | Yes | | page | double | 当前页码 | Yes | | total | double | 总数 | Yes | ##### ObstacleCreateRequest 创建对手元素的请求 | 名称 | 类型 | 说明 | 是否必填 | | ----------- | ----------------------------------------- | -------------------- | -------- | | data | [PartialObstacleNpc](#partialobstaclenpc) | 元素参数 | Yes | | sourceId | string | 已上传的文件 md5 | Yes | | thumbnailId | string | 已上传的缩略图的 md5 | No |