## 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 |