Appearance
设备管家OpenAPI文档 v1.0
1.概述
由第三方使用HTTP或者MQ的形式进行数据对接、从而获取设备的基本信息和告警信息。
2.前置准备/步骤
2.1申请clientId和clientSecret
线下找对接人申请clientId和clientSecret(对clientId和clientSecret信息进行保密,不要随意泄漏)
clientId:应用的唯一标识。
clientSecret:clientId对应的密钥,访问用户资源时用来验证应用的合法性。
2.2申请请求域名
具体环境域名线下找对接人提供
请求域名:
https://xxx接口请求示例
如:分页查询设备信息
https://xxx/api/open/smartpark-equipment/openApi/iotInformation
- 所有接口需通过clientId和clientSecret获取鉴权
3.系统交互图
3.1 http请求交互图

3.2 数据订阅交互图

4.接口鉴权算法及请求示例
4.1获取签名逻辑
- 对需要保护的数据进行拼接
拼接方式: http请求方法 + "\n" + contentType + "\n" + 日期格式字符串 + "\n" + 请求资源uri
对拼接好的字符串和clientSecret 进行HmacSHA1加密 并对加密结果进行base64加密
截取base64加密后的第5位开始的后续10个字符作为签名
4.2获取签名示例
- 签名数据
| 项目 | 值 |
|---|---|
| clientId | yh5zmklapb0ehka0 |
| clientSecret | cb9wt3osfum3gsle37trp4lrjk1kkq4ywcgpeeg7b9e602qe |
| http请求方法 | POST |
| contentType | application/json |
| 日期格式 | RFC 1123规范,例如:"EEE, dd MMM yyyy HH:mm:ss zzz" |
| 请求的接口 | https://xxx/api/open/smartpark-equipment/openApi/test |
- 签名过程
| 步骤 | 结果 |
|---|---|
| 拼接后的字符串 | POST\napplication/json\nTue, 18 Nov 2025 05:50:58 GMT\n/api/open/smartpark-equipment/openApi/test |
| 进行HmacSHA1加密和base64加密结果 | QDRnQ9x2uxhWSlJfkc028H6QtZw= |
| 截取base64加密后的第5位开始的后续10个字符作为签名 | 9x2uxhWSlJ |
- 最终http请求头需携带的信息
| Header | Value |
|---|---|
| Authorization | clientId:sign |
| Date | EEE, dd MMM yyyy HH:mm:ss zzz |
| Content-Type | application/json |
4.3Java示例代码
见附录【Java签名示例代码】
5.MQ消息订阅
消息队列用RabbitMQ,用以数据订阅
MQ相关信息需对接方提供(主机、账号、密码、端口号、Vhost)
5.1绑定关系定义
| 配置项 | 格式 | 示例 |
|---|---|---|
| ExchangeName | {clientId}_equipment_open_exchange | yh5zmklapb0ehka0_equipment_open_exchange |
| ExchangeType | Topic | - |
| QueueName | 自行定义,约定以clientId作为队列前缀 | yh5zmklapb0ehka0_alarm_create |
| 设备产生的告警RoutingKey | {clientId}_equipment_alarm_create | yh5zmklapb0ehka0_equipment_alarm_create |
| 告警状态改变RoutingKey | {clientId}_equipment_alarm_update_status | yh5zmklapb0ehka0_equipment_alarm_update_status |
| 告警关联的工单状态改变RoutingKey | {clientId}_equipment_alarm_work_order_update | yh5zmklapb0ehka0_equipment_alarm_work_order_update |
5.2消息报文
设备产生的告警
RoutingKey: {clientId}_equipment_alarm_create
报文格式:
| 参数 | 类型 | 必须 | 说明 | 字符长度 |
|---|---|---|---|---|
| equipmentCode | String | 是 | 设备编码 | 64 |
| alarmCode | String | 是 | 告警唯一编码 | 64 |
| alarmLevel | String | 是 | 告警级别(附录2) | 32 |
| alarmTitle | String | 是 | 告警标题 | 64 |
| alarmContent | String | 是 | 告警内容 | 255 |
| alarmTime | String | 是 | 告警时间 | 32 |
| incidentStatus | Integer | 是 | 告警状态(附录1) | |
| workOrderNumber | String | 否 | 告警关联的工单编码 | 64 |
| workOrderStatus | String | 否 | 工单状态(附录3) | 32 |
| equipmentName | String | 是 | 设备名称 | 64 |
| location | String | 是 | 设备位置 | 64 |
报文示例:
json
{
"code": 200,
"success": true,
"data": {
"equipmentCode": "xx",
"alarmCode": "xx",
"projectCode": "xxx",
"alarmLevel": "0",
"alarmTitle": "xx告警标题",
"alarmContent": "xx告警内容",
"alarmTime": "2025-12-29 10:00:01",
"incidentStatus": 0,
"workOrderNumber": null,
"workOrderStatus": null,
"equipmentName": "xxx",
"location": "xxxxx"
},
"msg": "操作成功"
}告警状态改变
RoutingKey: {clientId}_equipment_alarm_update_status
报文格式:
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| equipmentCode | String | 是 | 设备编码 |
| incidentStatus | Integer | 是 | 告警状态 |
| alarmCode | String | 是 | 告警唯一编码 |
报文示例:
json
{
"alarmCode": "xx",
"workOrderNumber": "xx",
"workOrderStatus": "xxx",
"equipmentCode": "xxxx"
}告警关联的工单状态改变
RoutingKey: {clientId}_equipment_alarm_work_order_update
报文格式:
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| equipmentCode | String | 是 | 设备编码 |
| alarmCode | String | 是 | 告警唯一编码 |
| workOrderNumber | String | 否 | 告警关联的工单编码 |
| workOrderStatus | String | 否 | 工单状态 |
报文示例:
json
{
"alarmCode": "xx",
"workOrderNumber": "xx",
"workOrderStatus": "xxx",
"equipmentCode": "xxxx"
}6.接口正文
6.1分页查询设备信息
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/iotInformation
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| equipmentCode | 设备编码 | String | 否 | ||
| equipmentName | 设备名称 | String | 否 | ||
| pageNum | 页码 | Int | 必填 | 默认为1 | |
| pageSize | 每页条数 | Int | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | boolean | ||
| data | 返回数据 | Object | ||
| records | 数组 | |||
| equipmentName | 设备名称 | String | 128 | |
| equipmentCode | 设备编码 | String | 64 | |
| location | 空间位置 | String | 128 | |
| onlineStatus | 在线状态 | String | 2 | |
| lastestUpdateTime | 最近上报时间 | String | 64 | |
| equipmentPropertyVoList | 设备属性及值 | 数组 | ||
| code | 设备编码 | String | 128 | |
| propertyType | 属性类型 | String | 32 | |
| identifier | 属性名称 | String | 64 | |
| propertyValue | 属性值 | String | 32 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"equipmentName": "xx",
"equipmentCode": "xx",
"location": "JxxA栋-A1",
"onlineStatus": "1",
"lastestUpdateTime": "2025-11-28 17:08:51",
"equipmentPropertyVoList": [
{
"code": "xx",
"propertyType": "{\"specs\":{\"unit\":\"kWh\",\"min\":\"\",\"max\":\"\",\"step\":\"\"},\"type\":\"double\"}",
"status": null,
"identifier": "EPI",
"propertyName": "吸收有功电度",
"propertyValue": "20.0",
"lastUpdateTime": "2025-11-28 17:07:20"
}
]
}
],
"total": 175,
"size": 10,
"current": 1,
"pages": 18
},
"msg": "操作成功"
}6.2分页查询设备历史属性
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/openApiHistoryData
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| equipmentCode | 设备编码 | String | 否 | ||
| pageNum | 页码 | Int | 必填 | 默认为1 | |
| pageSize | 每页条数 | Int | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | boolean | ||
| data | 返回数据 | Object | ||
| records | 数组 | |||
| name | 设备名称 | String | 128 | |
| code | 设备编码 | String | 128 | |
| time | 时间 | String | ||
| propertyValue | 属性值 | String | 32 | |
| propertyName | 属性名称 | String | 64 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"createBy": null,
"updateBy": null,
"createTime": "2025-12-24 16:43:08",
"updateTime": "2025-12-24 16:43:08",
"id": "xxx",
"projectCode": "xxx",
"code": "xxx",
"thirdCode": "xxx",
"name": "dev工单xxx",
"productType": "xxx",
"productTypeName": "xxx品xxx",
"location": "xxxB2",
"identifier": "BatteryPercentage",
"type": "xxx",
"typeName": "电子工xxxxxx",
"time": "2025-12-24 16:43:08",
"propertyName": "电量百分比",
"propertyValue": "2.0",
"status": 1
}
],
"total": 92,
"size": 10,
"current": 1,
"pages": 10
},
"msg": "操作成功"
}6.3查询设备告警记录
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/pageAlarmOpenApiList
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| equipmentId | 设备编码 | String | 否 | ||
| pageNum | 页码 | Integer | 必填 | 默认为1 | |
| pageSize | 每页条数 | Integer | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | 数组 | |||
| equipmentName | 设备名称 | String | 128 | |
| code | 设备编码 | String | 128 | |
| alarmTime | 告警时间 | String | 32 | |
| alarmLevel | 告警级别 | String | 32 | |
| alarmLevelValue | 告警级别 | String | 32 | |
| alarmType | 告警类型 | String | 34 | 1.设备告警 2.业务告警 |
| alarmTypeValue | 告警类型 | String | 64 | |
| content | 告警内容 | String | 255 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"id": "xxx",
"code": "111435",
"equipmentName": "项目xxx名称设备测试",
"alarmTime": "2025-12-25 14:36:35",
"alarmLevel": 3,
"alarmLevelValue": "xx紧急",
"alarmType": 2,
"alarmTypeValue": "业xxx务告警",
"content": "2025-12-25 14:36:35 吸收有功电度:111.0 大于告警阈值: 15.0"
}
],
"total": 87763,
"size": 10,
"current": 1,
"pages": 8777
},
"msg": "操作成功"
}6.4根据类型查询设备基础信息
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/basicOpenApiEquipmentInfo
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| code | 设备编码 | String | 否 | ||
| type | 所属类型 | 类型 1电梯 2消防 3其他 | |||
| pageNum | 页码 | Integer | 必填 | 默认为1 | |
| pageSize | 每页条数 | Integer | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | 数组 | |||
| name | 设备名称 | String | 128 | |
| code | 设备编码 | String | 128 | |
| brand | 品牌 | String | 128 | |
| installationDate | 安装日期 | String | ||
| deviceType | 设备类型 | String | 32 | |
| deviceTypeName | 设备类型名称 | String | 64 | |
| manufactureCompanyTel | 生产单位电话 | String | 64 | |
| location | 所属空间 | String | 128 | |
| manufactureCompany | 生产单位 | String | 128 | |
| specialEquipmentCode | 特种设备注册代码 | String | 64 | |
| maintainUnit | 维保单位 | String | 128 | |
| contractType | 承包方式 | String | 64 | |
| responsible | 管理员 | String | 64 | |
| contractNumber | 合同编号 | String | 64 | |
| contractStartTime | 合同开始时间 | String | ||
| contractEndTime | 合同结束时间 | String | 64 | |
| testAverageTime | 曳引式电梯平衡试验时间 | String | 64 | |
| elevatorStopTime | 曳引式电梯125%额定载荷制动试验时间 | String | 64 | |
| elevatorSpeedCheckTime | 限速器动作速度校验时间 | String | 64 | |
| equipmentCheckTime | 设备年检时间 | String | 100 | |
| attachmentList | 附件 | 数组 | ||
| code | 附件id | String | 255 | |
| name | 附件名称 | String | 128 | |
| url | 附件url路径 | String | 255 | |
| type | 附件类型 | Integer | 类型: 1-平衡实验时间;2-额定载荷制动试验时间;3-限速器动作速度校验时间;4-设备年检时间 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"id": null,
"name": "xxx",
"code": "xxx",
"brand": "",
"installationDate": null,
"deviceType": "xxx",
"deviceTypeName": "气体xxxxxx主机",
"location": "xxxA栋",
"specification": null,
"specialEquipmentCode": null,
"manufactureCompany": "",
"manufactureCompanyTel": "",
"maintainUnit": "222",
"contractType": "全民住xxx(全包)",
"responsible": "",
"contractNumber": "nb12345678",
"contractStartTime": "2025-02-01",
"contractEndTime": "2025-07-30",
"testAverageTime": "2025-06-25",
"elevatorStopTime": "2025-06-25",
"elevatorSpeedCheckTime": "2025-06-25",
"equipmentCheckTime": "2025-06-25",
"attachmentList": [
{
"id": 373,
"equipmentCode": "xxx",
"code": "xxx.pdf",
"name": "xxx",
"url": "xx.pdf",
"status": 1,
"type": 1
}
]
}
],
"total": 8,
"size": 10,
"current": 1,
"pages": 1
},
"msg": "操作成功"
}6.5查询维护日期到期提醒
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/pageOpenApiElevator
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| deviceKeyWord | 设备编码/设备名称 | String | 否 | ||
| status | 状态 | String | 否 | ||
| pageNum | 页码 | Integer | 必填 | 默认为1 | |
| pageSize | 每页条数 | Integer | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | ||||
| equipmentCode | 设备编码 | String | 128 | |
| taskType | 任务类型 | String | 64 | BALANCE:曳引式电梯平衡试验超期风险,LOAD_BRAKING:曳引式电梯125%额定荷载制动试验超期风险,CONFINE_ACTION:限速器动作速度校验超期风险,EQUIPMENT_YEAR: 设备年检超期风险 |
| taskDescribe | 任务描述 | String | 64 | |
| equipmentName | 设备名称 | String | 128 | |
| location | 空间路径 | String | 128 | |
| elevatorBrand | 电梯品牌 | List | 64 | |
| createTime | 告警时间 | String | 32 | |
| equipmentType | 设备类型 | String | 32 | |
| specialEquipmentCode | 特种设备注册编码 | String | 64 | |
| status | 状态 | String | 32 | 状态:待处理:WAIT_PROCESSING,已处理SUCCESS |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"createBy": null,
"updateBy": null,
"createTime": "2025-11-13 17:58:01",
"updateTime": null,
"id": 32459,
"equipmentCode": "xxx",
"equipmentType": "xx",
"equipmentName": "保洁测试xx同步-01",
"taskType": "BALANCE",
"taskDescribe": "保洁xxx",
"elevatorBrand": "K360",
"projectCode": "xxx",
"location": "xA栋x-A1-A1公区",
"lastHandleTime": null,
"lastCompleteTime": null,
"specialEquipmentCode": null,
"status": "WAIT_PROCESSING"
}
],
"total": 4,
"size": 10,
"current": 1,
"pages": 1
},
"msg": "操作成功"
}6.6查询设备关联工单
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/workOrderOpenApiInfo
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| equipmentCode | 设备编码 | String | 否 | ||
| workOrderType | 工单类型 | String | 工单类型 报事-incident 维保-cycle | ||
| pageNum | 页码 | Integer | 必填 | 默认为1 | |
| pageSize | 每页条数 | Integer | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | ||||
| equipmentName | 设备名称 | string | 128 | |
| equipmentCode | 设备编码 | String | 128 | |
| workOrderNumber | 工单编号 | String | 64 | |
| workOrderType | 工单类型 | String | 32 | |
| workOrderName | 工单名称 | String | 64 | |
| taskResponsiblePeo | 接单人 | String | 32 | |
| workOrderStatus | 工单状态 | String | 32 | |
| dispatchTime | 派单时间 | String | 32 | |
| receivingTime | 接单时间 | String | 32 | |
| taskActualStartTime | 开始做单时间 | String | 32 | |
| taskPlannedEndTime | 计划关单时间 | String | 32 | |
| taskActualEndTime | 实际关单时间 | String | 32 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"workOrderNumber": "xxx",
"workOrderType": "维修xxx单",
"workOrderTypeCode": "xx",
"workOrderName": "安全xx报事",
"taskResponsiblePeo": "xxxxx坤",
"workOrderStatus": "已完成",
"dispatchTime": "2025-11-24 16:08:36",
"receivingTime": "2025-11-24 16:09:14",
"taskActualStartTime": "2025-11-24 16:09:14",
"taskActualEndTime": "2025-11-24 16:51:27",
"taskPlannedEndTime": null
}
],
"total": 408,
"size": 10,
"current": 1,
"pages": 41
},
"msg": "操作成功"
}6.7查询电梯维保计划结果
请求方式: POST
请求路径: /api/open/smartpark-equipment/openApi/pageOpenApiCalendar
请求参数:
| 参数 | 参数含义 | 数据类型 | 必填 | 说明 |
|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | 200:显示成功 |
| equipmentCode | 设备编码 | String | 否 | |
| pageNum | 页码 | int | 必填 | 默认为1 |
| pageSize | 每页条数 | int | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | ||||
| orderCreateTime | 维保计划时间 | String | 32 | |
| taskActualEndTime | 实际完成时间 | String | 32 | |
| workOrderStatus | 状态(超期、完成) | String | 32 | |
| workOrderNumber | 关联工单号 | String | 64 | 工单状态 normal-正常 overdue-超期 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"workOrderNumber": "xxx",
"workOrderStatus": "正常",
"orderCreateTime": "2025-09-11 14:58:00",
"taskActualEndTime": "2025-09-11 15:24:32"
}
],
"total": 243,
"size": 10,
"current": 1,
"pages": 25
},
"msg": "操作成功"
}6.8查询事件工单
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/incidentWorkOrderOpenApiPage
请求参数:
| 参数 | 参数含义 | 数据类型 | 必填 | 说明 |
|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | 200:显示成功 |
| workOrderNumber | 设备编码 | String | 否 | |
| equipmentName | 设备名称 | String | 否 | |
| pageNum | 页码 | int | 必填 | 默认为1 |
| pageSize | 每页条数 | int | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | ||||
| workOrderNumber | 工单编号 | String | 64 | |
| workOrderName | 工单名称 | String | 128 | |
| equipmentName | 设备名称 | String | 128 | |
| location | 工单位置 | String | 128 | |
| taskResponsiblePeo | 接单人 | String | 32 | |
| incidentStatus | 工单状态 | String | 32 | |
| dispatchTime | 派发时间 | String | 32 | |
| taskPlannedStartTime | 计划开始时间 | String | 32 | |
| taskActualStartTime | 实际开始时间 | String | 32 | |
| 计划完成时间 | 计划完成时间 | String | 32 | |
| taskActualEndTime | 实际完成时间 | String | 32 | |
| checkTime | 验收时间 | String | 32 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"id": "xx",
"requestClassName": null,
"workOrderNumber": "xxx",
"workOrderName": null,
"description": "2025-12-26 16:01:23 设备xx低电量告警-低电量告警-低电量告警-低电量告警",
"equipmentName": "dev工单xxx",
"equipmentCode": "xxx",
"spaceCode": null,
"location": null,
"taskResponsiblePeo": "系统自动xxx单",
"receivingTime": null,
"incidentStatus": "Unassigned",
"incidentStatusValue": "待领取",
"taskPlannedEndTime": null,
"dispatchTime": "2025-12-26 16:01:25",
"taskActualStartTime": null,
"taskActualEndTime": null,
"taskPlannedStartTime": null,
"checkTime": null,
"orderType": null,
"orderTypeValue": null,
"orderLevel": null,
"orderLevelValue": null,
"requestClassId": null,
"dealUser": null,
"dealMethodTime": null,
"dealMethod": null,
"dealMethodValue": null,
"incidentTime": null,
"workTaskAttachmentList": null,
"worktaskContent": null,
"assignMethod": null,
"taskOrganization": null,
"cameraList": null,
"taskType": null,
"taskTypeId": null,
"taskTypeCode": null,
"priority": null,
"instId": null
}
],
"total": 202,
"size": 10,
"current": 1,
"pages": 21
},
"msg": "操作成功"
}6.9查询维保工单
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/maintenanceOpenApiPage
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| workOrderName | 工单名称 | String | |||
| workOrderNumber | 工单编号 | String | |||
| equipmentName | 设备名称 | String | |||
| pageNum | 页码 | Int | 必填 | 默认为1 | |
| pageSize | 每页条数 | Int | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | 数组 | |||
| workOrderNumber | 工单编号 | String | 64 | |
| workOrderName | 工单名称 | String | 128 | |
| priority | 优先级 | String | 32 | |
| taskResponsiblePeo | 维保人 | String | 32 | |
| incidentStatus | 工单状态 | String | 32 | |
| dispatchTime | 派发时间 | String | 32 | |
| taskPlannedStartTime | 计划开始时间 | String | 32 | |
| taskActualStartTime | 实际开始时间 | String | 32 | |
| taskActualEndTime | 实际完成时间 | String | 32 | |
| checkTime | 验收时间 | String | 32 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"id": "xxx",
"requestClassName": null,
"workOrderNumber": "xxx",
"workOrderName": "xxx周期工单",
"description": "888",
"equipmentName": "A-TEST-ANGG-2001",
"equipmentCode": "xxx",
"spaceCode": null,
"location": "xx国际/xxA栋/A1/A1公区",
"taskResponsiblePeo": "李xx燕",
"receivingTime": "2025-09-11 15:24:25",
"incidentStatus": "Completed",
"incidentStatusValue": "已完成",
"taskPlannedEndTime": null,
"dispatchTime": "2025-09-11 14:58:00",
"taskActualStartTime": "2025-09-11 15:24:25",
"taskActualEndTime": "2025-09-11 15:24:32",
"taskPlannedStartTime": null,
"checkTime": null,
"orderType": null,
"orderTypeValue": null,
"orderLevel": null,
"orderLevelValue": null,
"requestClassId": null,
"dealUser": null,
"dealMethodTime": null,
"dealMethod": null,
"dealMethodValue": null,
"incidentTime": null,
"workTaskAttachmentList": null,
"worktaskContent": null,
"assignMethod": null,
"taskOrganization": null,
"cameraList": null,
"taskType": null,
"taskTypeId": null,
"taskTypeCode": null,
"priority": "普通",
"instId": "a75ca09e-8edc-11f0-b1cb-0255ac10017a"
}
],
"total": 216,
"size": 10,
"current": 1,
"pages": 22
},
"msg": "操作成功"
}6.10查询巡检工单
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/inspectionOpenApiPage
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| workOrderName | 工单名称 | String | 否 | ||
| workOrderNumber | 工单编号 | String | 否 | ||
| equipmentName | 设备名称 | String | 否 | ||
| pageNum | 页码 | Integer | 必填 | 默认为1 | |
| pageSize | 每页条数 | Integer | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | ||||
| workOrderNumber | 工单编号 | String | 64 | |
| workOrderName | 工单名称 | String | 128 | |
| priority | 优先级 | String | 32 | |
| taskResponsiblePeo | 维保人 | String | 32 | |
| incidentStatus | 工单状态 | String | 32 | |
| dispatchTime | 派发时间 | String | 32 | |
| taskPlannedStartTime | 计划开始时间 | String | 32 | |
| taskActualStartTime | 实际开始时间 | String | 32 | |
| 计划完成时间 | 计划完成时间 | String | 32 | |
| taskActualEndTime | 实际完成时间 | String | 32 | |
| checkTime | 验收时间 | String | 32 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"id": "xxxx",
"requestClassName": null,
"workOrderNumber": "xx",
"workOrderName": "xx周期工单",
"description": "888",
"equipmentName": "A-TEST-ANGG-2001",
"equipmentCode": "xxx",
"spaceCode": null,
"location": "xx国际/xx栋/A1/A1公区",
"taskResponsiblePeo": "李xx燕",
"receivingTime": "2025-09-11 15:24:25",
"incidentStatus": "Completed",
"incidentStatusValue": "已完成",
"taskPlannedEndTime": null,
"dispatchTime": "2025-09-11 14:58:00",
"taskActualStartTime": "2025-09-11 15:24:25",
"taskActualEndTime": "2025-09-11 15:24:32",
"taskPlannedStartTime": null,
"checkTime": null,
"orderType": null,
"orderTypeValue": null,
"orderLevel": null,
"orderLevelValue": null,
"requestClassId": null,
"dealUser": null,
"dealMethodTime": null,
"dealMethod": null,
"dealMethodValue": null,
"incidentTime": null,
"workTaskAttachmentList": null,
"worktaskContent": null,
"assignMethod": null,
"taskOrganization": null,
"cameraList": null,
"taskType": null,
"taskTypeId": null,
"taskTypeCode": null,
"priority": "普通",
"instId": "a75ca09e-8edc-11f0-b1cb-0255ac10017a"
}
],
"total": 216,
"size": 10,
"current": 1,
"pages": 22
},
"msg": "操作成功"
}6.11查询设备告警列表
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/pageOpenApiAlarm
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| equipmentName | 设备名称 | String | 否 | ||
| pageNum | 页码 | Integer | 必填 | 默认为1 | |
| pageSize | 每页条数 | Integer | 必填 | 默认为10 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| records | ||||
| equipmentName | 设备名称 | String | 128 | |
| productTypeName | 设备分类 | String | 64 | |
| productName | 产品名称 | String | 64 | |
| code | 设备编码 | String | 128 | |
| alarmTime | 告警事时间 | LocalDateTime | 32 | |
| alarmLevel | 告警级别 | String | 32 | |
| alarmLevelValue | 告警级别名称 | String | 64 | |
| title | 告警标题 | String | 64 | |
| description | 告警描述 | String | 255 | |
| location | 所在位置 | String | 128 | |
| incidentStatus | 处理结果状态 | Integer | 4 | 0未处理 1已派单 2暂不受理 3误报 4重复预警已受理 5已转发 6工单完成 7手动关闭 |
| incidentStatusValue | 处理结果 | String | 32 | |
| workOrderNumber | 工单编号 | String | 64 | |
| recoverTime | 恢复时间 | String | 32 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"id": "xx",
"description": "2025-12-26 16:06:06 dev工单xx设备在线",
"code": "xxx",
"alarmTime": "2025-12-26 16:07:06",
"alarmLevel": 3,
"alarmLevelValue": "紧急",
"eventType": 2,
"alarmTypeValue": "业务告警",
"content": "2025-12-26 16:xx:06 dev工单xx设备在线",
"triggerValue": null,
"incidentStatus": 0,
"incidentStatusValue": "未处理",
"recoverTime": "2025-12-26 16:06:06",
"propertyName": "在线状态",
"propertyValue": "1",
"propertyType": null,
"identifier": "networkStatus",
"equipmentName": "dev工单xxx",
"equipmentCode": "xx",
"location": "门禁xxx栋-B2",
"workOrderNumber": null,
"title": "55幅888",
"dealUser": null,
"dealMethodTime": null,
"dealMethod": null,
"dealMethodValue": null,
"handleResult": null,
"handleAdvice": null,
"forwardPlatform": null,
"workIncidentStatus": null,
"onlineStatus": 2,
"updateTime": "2025-12-26 16:07:06",
"cameraList": null,
"productName": "电子工单xxx",
"productCode": "xx",
"productTypeName": "xxx品类"
}
],
"total": 2,
"size": 10,
"current": 1,
"pages": 1
},
"msg": "操作成功"
}6.12查询电梯维保信息
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/elevatorMaintenance
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| startTime | 开始时间 | String | 否 | ||
| endTime | 结束时间 | String | 否 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| elevatorTypeNames | 电梯设备总数 | list | ||
| code | 产品品类编码 | String | 64 | |
| elevatorCount | 数量 | Integer | 16 | |
| name | 电梯类型名称 | String | 128 | |
| completedWorkOrder | 已完成维保工单 | Long | 16 | |
| notExpert | 检验合格率 | BigDecimal | 16 | |
| expertPassRate | 专家抽检合格率 | BigDecimal | 16 | |
| contractOverdueRisk | 合同超期风险 | Long | 8 | |
| balanceRisk | 曳引式电梯平衡试验超期风险 | Long | 8 | |
| restrictionSpeed | 限速器校验超期风险 | Long | 8 | |
| balanceOverdueRisk | 125%载荷和平衡试验超期风险 | Long | 8 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"elevatorTypeNames": [
{
"code": "xxx",
"elevatorCount": 1,
"name": "xxx乘客电梯"
}
],
"workOrderNumber": 1,
"completedWorkOrder": 1,
"aiCheckResult": 1,
"notAiCheckResult": 0,
"passRate": "100.00",
"elevatorCount": 2,
"expertCount": 0,
"notExpert": 0,
"expertPassRate": null,
"contractOverdueRisk": 2,
"balanceRisk": 0,
"restrictionSpeed": 0,
"balanceOverdueRisk": 0
},
"msg": "操作成功"
}6.13查询设备房监测信息
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/equipmentMonitor
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| startTime | 开始时间 | String | 否 | ||
| endTime | 结束时间 | 否 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| name | 设备房 | String | 128 | |
| aiotPoints | 设备数量 | String | 8 | |
| alarmWorkOrder | 有效告警工单 | String | 8 | |
| processedAlarmWorkOrder | 已处理告警工单 | String | 8 | |
| processRate | 处理率 | String | 8 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"id": null,
"name": "xxx品类",
"projectCode": null,
"aiotPoints": 1,
"alarmWorkOrder": 0,
"processedAlarmWorkOrder": 0,
"processRate": "100.00"
}
],
"msg": "操作成功"
}6.14查询设备分类监测
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/classifyMonitor
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| startTime | 开始时间 | String | |||
| endTime | 结束时间 | String |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| name | 设备类型 | String | 32 | |
| aiotPoints | AIoT监测点位 | Integer | 8 | |
| alarmWorkOrder | 有效告警工单 | Integer | 8 | |
| processedAlarmWorkOrder | 已处理告警工单 | Long | 16 | |
| processRate | 处理率 | BigDecimal | 16 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"id": null,
"name": "xxx品类",
"projectCode": null,
"aiotPoints": 1,
"alarmWorkOrder": 0,
"processedAlarmWorkOrder": 0,
"processRate": "100.00"
}
],
"msg": "操作成功"
}6.15查询设备总数
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/equipment/overview
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| total | 设备总数 | Long | 16 | |
| online | 实时在线率 | String | 16 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"total": 163,
"online": "36.20"
},
"msg": "操作成功"
}6.16查询产品统计设备数量
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/selectListTree
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| name | 设备分类 | String | 32 | |
| total | 总数 | int | 16 | |
| onlineCount | 离线 | long | 16 | |
| warnCount | 告警 | long | 16 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"name": "xx设备",
"code": "xxx10",
"parentCode": "-1",
"status": null,
"childNodes": [],
"level": 1,
"pathCode": "xxxx",
"createTime": null,
"updateTime": null,
"total": 3,
"onlineCount": 3,
"warnCount": 0
}
],
"msg": "操作成功"
}6.17查询设备在线率
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/equipment/online
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| localDate | 日期 | String | 32 | |
| localDateString | 日期转换后 | String | 32 | |
| online | 在线率 | String | 8 | |
| total | 总数 | Integer | 8 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"localDate": "2025-11-11",
"localDateString": "xx月xx号",
"online": "35.40",
"total": null
}
],
"msg": "操作成功"
}6.18按时间类型查询告警数量
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/alarm/overview
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| timeType | 时间范围类型 | Integer | 时间范围类型,【1:7天内、2:本月、3:半年内、4:1年内;(包含当天)】 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| totalToday | 今日新增告警总数 | Integer | 8 | |
| totalYesterday | 昨日新增告警总数 | Integer | 8 | |
| totalWeek | 本周新增告警总数 | Integer | 8 | |
| totalLastWeek | 上周新增告警总数 | Integer | 8 | |
| totalHistory | 历史累积告警总数 | Integer | 8 | |
| alarmStatisticsVoList | 告警数据折线图 | |||
| time | 告警日期 | String | 32 | |
| count | 告警数量 | Integer | 8 | |
| alarmRankingVoList | 告警排名 | |||
| name | 设备/属性类型 | String | 64 | |
| count | 对应设备/属性类型的告警次数 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"totalToday": 0,
"totalYesterday": 0,
"totalWeek": 0,
"totalLastWeek": 1,
"totalHistory": 1,
"alarmStatisticsVoList": [
{
"time": "2025-11-12",
"count": 1
}
],
"alarmRankingVoList": [
{
"name": "水浸",
"count": "1"
}
]
},
"msg": "操作成功"
}6.19查询工单完成率
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/order/statistics
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| name | 工单类型 | String | 64 | |
| complete | 完成率 | String | 16 | |
| taskSpecId | 工单id | String | 64 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"name": "报事xxx",
"complete": "41.61",
"taskSpecId": null
}
],
"msg": "操作成功"
}6.20获取电表的实时开关门状态(义乌定制)
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/electricity/open/status
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| productCode | 产品编码 | String | 必填 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | List | ||
| did | did | String | 64 | |
| openStatus | 开门状态 | int | 1:开门 0:关门 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"did": "7400090830528114688",
"openStatus": 1
},
{
"did": "7400090830528114688",
"openStatus": 1
}
],
"msg": "操作成功"
}6.21统计指定产品的设备状态
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/equipment/status/statistics
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| productCode | 产品编码 | String | 必填 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| totalCount | 设备总数 | int | ||
| offLineCount | 离线设备数 | int | ||
| alarmCount | 告警设备数 | int |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"totalCount": 13,
"offLineCount": 0,
"alarmCount": 1
},
"msg": "操作成功"
}6.22通过产品编码和IOT属性统计属性状态
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/property/status/statistics
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| productCode | 产品编码 | String | 必填 | ||
| identifier | 属性标识符 | String | 必填 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| propertyValue | 属性状态 | String | ||
| totalCount | 设备数量 | int |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"propertyValue": "未知",
"totalCount": 1
},
{
"propertyValue": "1",
"totalCount": 1
}
],
"msg": "操作成功"
}6.23通过楼栋获取开关门数量
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/countOpenApiOpenDoor
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| buildingCode | 楼栋code编码 | String | 否 | ||
| unitCode | 单元code编码 | String | 否 | ||
| floorCode | 楼层code编码 | String | 否 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| totalShops | 商铺总数 | int | 16 | |
| realtimeOpen | 实时开门数量 | int | 16 | |
| realtimeOpenRate | 实时开门率 | String | 8 | |
| cumulativeOpenToday | 今日累计开门数量 | int | 16 | |
| cumulativeOpenTodayRate | 今日累计开门率 | String | 8 | |
| stableOpenToday | 今日稳定开门数量 | int | 16 | |
| stableOpenTodayRate | 今日稳定开门率 | String | 8 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": {
"totalShops": 2,
"realtimeOpen": 0,
"realtimeOpenRate": "0.00",
"cumulativeOpenToday": 2,
"cumulativeOpenTodayRate": "100.00",
"stableOpenToday": 2,
"stableOpenTodayRate": "100.00"
},
"msg": "操作成功"
}6.24批量关闭未处理告警事件
请求方式: POST
请求路径:/api/open/smartpark-equipment/openApi/closeAlarmIncidentOpenApi
请求参数:
| 参数 | 参数含义 | 类型 | 长度 | 是否必填 | 说明 |
|---|---|---|---|---|---|
| projectCode | 项目code编码 | String | 必填 | ||
| incidentIds | 事件id | List | 必填 | ||
| handleAdvice | 原因 | String | 必填 |
返回参数:
| 参数 | 参数含义 | 数据类型 | 最大长度 | 说明 |
|---|---|---|---|---|
| code | 标识是否操作成功 | String | 200:显示成功 | |
| success | true | Boolean | ||
| data | 返回数据 | Object | ||
| id | 事件ID | Long | 16 | |
| resultReason | 处理意见 | String | 32 |
返回参数示例:
json
{
"code": 200,
"success": true,
"data": [
{
"id": 1,
"resultReason": "告警已派单或不存在,无法关闭告警"
}
],
"msg": "操作成功"
}7.附录
7.1 告警状态
| 状态码 | 描述 |
|---|---|
| 0 | 未处理 |
| 1 | 已派单 |
| 2 | 暂不受理 |
| 3 | 误报 |
| 4 | 重复预警已受理 |
| 5 | 已转发 |
| 6 | 工单完成 |
| 7 | 手动关闭 |
7.2 告警级别
| 状态码 | 描述 |
|---|---|
| 0 | 提示 |
| 1 | 一般 |
| 2 | 重要 |
| 3 | 紧急 |
7.3 工单状态
| 状态码 | 描述 |
|---|---|
| Unassigned | 待领取 |
| Processing | 进行中 |
| To be reviewed | 待验收 |
| To be evaluated | 待评价 |
| Completed | 已完成 |
| Cancelled | 已撤销 |
| Retired | 已作废 |
| Holding | 已挂起 |
7.4 Java签名示例代码
java
import java.nio.charset.StandardCharsets;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.entity.ContentType;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
@Slf4j
public class OpenApiClientAuth {
private OpenApiClientAuth() {
}
private static final String DATE = "Date";
private static final String KEY_MAC_SHA1 = "HmacSHA1";
private static final String CONTENT_TYPE = "Content-Type";
private static final String AUTHORIZATION = "Authorization";
private static final DateTimeFormatter DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);
private static Map<String, String> getSignHeaders(final String httpMethod,
final String url, final String clientId, final String clientSecret, final String contentType) throws Exception {
final String pathResource = OpenApiClientAuth.getPathResource(url);
final String contentTypeValue = contentType != null ? contentType : "application/json";
final String dateValue = DATE_TIME_FORMATTER.format(ZonedDateTime.now(ZoneId.of("GMT")));
final String sign = OpenApiClientAuth.calculateSing(httpMethod, contentTypeValue, dateValue, pathResource, clientSecret);
final Map<String, String> authHeaders = new HashMap<>(4);
authHeaders.put(OpenApiClientAuth.DATE, dateValue);
authHeaders.put(OpenApiClientAuth.AUTHORIZATION, clientId + ":" + sign);
authHeaders.put(OpenApiClientAuth.CONTENT_TYPE, contentTypeValue);
return authHeaders;
}
private static String getPathResource(final String url) {
final String substring = url.substring(url.indexOf("://") + 3);
return substring.substring(substring.indexOf('/'));
}
private static String calculateSing(final String httpMethodString, final String contentTypeValue,
final String dateValue, final String pathResource, final String appSecret) throws Exception {
final String signToString = OpenApiClientAuth.builderStringToSign(httpMethodString, contentTypeValue, dateValue, pathResource);
final String base64HashString = hmacSha1Encrypt(signToString, appSecret);
return base64HashString.substring(5, 15);
}
private static String builderStringToSign(final String method, final String contentTypeValue,
final String dateValue, final String pathResource) {
return method
+ "\n"
+ OpenApiClientAuth.handleNullString(contentTypeValue)
+ "\n"
+ OpenApiClientAuth.handleNullString(dateValue)
+ "\n"
+ pathResource;
}
private static String handleNullString(final String str) {
return !StringUtils.hasText(str) ? "" : str;
}
private static String hmacSha1Encrypt(final String encryptText, final String encryptKey) throws Exception {
final byte[] text = encryptText.getBytes(StandardCharsets.UTF_8);
final byte[] keyData = encryptKey.getBytes(StandardCharsets.UTF_8);
final SecretKeySpec secretKey = new SecretKeySpec(keyData, KEY_MAC_SHA1);
final Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return new String(Base64.getEncoder().encode(mac.doFinal(text)), StandardCharsets.UTF_8);
}
/**
* @param url 请求地址
* @param body 请求参数 json格式
* @param httpMethod 请求方法
* @param clientId clientId
* @param clientSecret clientSecret
* @return 返回值
*/
public static String openApiClientExecute(String url, String body, HttpMethod httpMethod,
String clientId, String clientSecret) {
log.info("request url:{},param:{},httpMethod:{},appKey:{},appSecret:{}", url, body, httpMethod, clientId, clientSecret);
try {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> signHeaders = OpenApiClientAuth.getSignHeaders(httpMethod.toString(), url, clientId,
clientSecret, ContentType.APPLICATION_JSON.toString());
final HttpHeaders headers = new HttpHeaders();
signHeaders.forEach(headers::set);
if (!StringUtils.hasText(body)) {
body = "";
}
final HttpEntity<String> httpEntity = new HttpEntity<>(body, headers);
final ParameterizedTypeReference<String> parameterizedTypeReference = new ParameterizedTypeReference<String>() {
};
ResponseEntity<String> exchange = restTemplate.exchange(url, httpMethod, httpEntity, parameterizedTypeReference);
String result = exchange.getBody();
log.info("request url:{},param:{},httpMethod:{},appKey:{},appSecret:{},result:{}", url, body, httpMethod, clientId, clientSecret, result);
return result;
} catch (Exception e) {
log.error("request error: ", e);
}
return null;
}
public static void main(String[] args) {
String clientId = "yh5zmklapb0ehka0";
String clientSecret = "cb9wt3osfum3gsle37trp4lrjk1kkq4ywcgpeeg7b9e602qe";
String postUrl = "https://spup-uat.icloudcity.com/api/open/smartpark-equipment/openApi/test";
JSONObject body = new JSONObject();
body.put("projectCode", "项目编码");
body.put("equipmentName", "设备名称");
String s2 = openApiClientExecute(postUrl, body.toJSONString(), HttpMethod.POST, clientId, clientSecret);
System.out.println(s2);
}
}