# 设备管理服务平台
版本 |  创建时间   | 作者 |  备注信息
---|---|---|---
v1.0|2022-01-20|zxfei| 接口文档

## 数据类型
类型名称|类型描述|参考样例
---|---|---
String |字符串|A、a、ab
Integer|数字类型|1、12、-1
Long|长整型数字|1、12、-1
date|时间类型,单位纳秒数字|167988745573
BigDecimal|小数类型|545.256
object|对象类型|{"name":"zhang3"}
arrays|数组类型|[{"name":"zhang3"},{"name":"zhang2"}]

## 设备终端接口服务

### 服务端地址获取

**广播服务端口:** 8074

**广播客户端口:** 8073

**请求方式:** UDP

**内容类型:** application/json;charset=utf-8

**简要描述:** 服务端地址获取

**广播参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---
deviceNum|String|设备编码|是|-

**请求样例:**
```

{
"deviceNum":"12345678"
}

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码（-1.失败，1.成功）|-
msg|String|消息|-
data|Object|数据对象|-
&emsp;ip|String|ip|-
&emsp;port|Integer|port|-
&emsp;deviceRegisterApi|String|设备注册API|-
&emsp;deviceInitApi|String|设备初始化信息API|-
&emsp;deviceUpdateApi|String|设备页面修改API|-


**响应消息样例:**
```

{
    "msg":"获取服务端地址成功",
    "code":1,
    "data":{
        "ip":"192.168.0.98",
        "port":11091,,
        "deviceRegisterApi":"/m/api/register",
        "deviceInitApi":"/m/api/deviceInit",
        "deviceUpdateApi":"/m/api/deviceUpdate"
    }
}
```


### 设备注册

**请求URL:** m/api/register

**请求方式:** POST

**内容类型:** application/json;charset=utf-8

**简要描述:** 设备注册，成功返回响应rabbmit连接参数,如未找到该设备，系统会根据设备码创建新设备

**请求参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---
deviceCode|String|设备编码,唯一|是|可是编码或者mac地址，由平台创建
deviceVersion|String|设备版本信息|否|-

**请求样例:**
```
{
    "deviceCode":"a12345678",
    "deviceVersion":"1"
}

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码（-1.失败，1.成功）|-
msg|String|消息|-
data|object|数据对象|-
&emsp;content|String|加密后的内容|AES加密


**content解密参数:**

参数名称 |参数类型| 备注                    |其它
---|---|-----------------------|---
rabbmitInfo|Object| rabbmit相关链接信息         |-
&emsp;downTopicFilter|String| 下行队列topic             |-
&emsp;uploadTopicFilter|String| 上行队列topic             |-
&emsp;username|String| rabbmit用户名            |-
&emsp;password|String| rabbmit密码             |-
&emsp;host|String| ip                    |-
&emsp;port|String| 端口                    |-
&emsp;virtualHost|String| 虚拟机                   |-
&emsp;exchangeName|String| 交换机名称                 |-
&emsp;messageTtl|String| 队列消息超时时间，毫秒           |-
serviceInfo|Object| 服务接口连接信息              |-
&emsp;homeUrl|String| 首页                    |-
&emsp;eventUrl|String| 事件地址                  |-
&emsp;serverUrl|String| 前端服务接口地址              |-
deviceInfo|Object| 设备基础信息                |-
&emsp;siteId|Long| 站点ID                  |-
&emsp;siteCode|String| 站点编码                  |-
&emsp;siteName|String| 站点名称                  |-
&emsp;productId|Long| 设备产品类型Id              |-
&emsp;productName|String| 设备产品类型                |-
&emsp;enabled|Integer| 设备启用状态 (0.停止，1.启用)    |-
&emsp;source|Integer| 设备来源,默认1(0.旧设备，1.新设备) |-



**响应消息样例:**
```
{
    "code":1,
    "data":{
        "content":"hRNPu+V1hc4lGRHtXGyVOF0U7ez8/ZxFke9L4o7DWVLMfsZwkViAChfLKSydAEWAdsbgP1dzfNrQTq7X0diu1awR/qdPNcDcpj5/hBozLn+OmuTKLUWhq9+WGtuoF3BTbtIpWkpQWDGolOCfRadenGUkuMozjEwwkt5CIDa+nzOqh56BJIhGahlx79Qt30ugj3UNhLTfvw5lpN9jY7u+icx+xnCRWIAKF8spLJ0ARYAbMXXhI21dYty7e1b+Cb2wZobupPyXRmyuy8Fkn4bculmkCywq78F6tPlu0rCCgJA="
    }
}
```


### 设备初始化信息

**请求URL:** m/api/deviceInit

**请求方式:** GET

**内容类型:** application/json;charset=utf-8

**简要描述:** 设备初始化信息，提供手机编辑设备入口信息

**请求参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---

**请求样例:**
```
{}

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码（-1.失败，1.成功）|-
msg|String|消息|-
data|object|数据对象|-
&emsp;productList|array|产品列表|数组
&emsp;&emsp;productId|Long|产品id|-
&emsp;&emsp;productName|String|产品名称|-
&emsp;&emsp;productCode|String|产品编码|-
&emsp;firmList|array|设备生产商列表|数组
&emsp;&emsp;deviceFirmId|Long|生产商id|-
&emsp;&emsp;deviceFirmname|String|生产商名称|-
&emsp;siteList|array|站点列表|数组
&emsp;&emsp;siteId|Long|站点id|-
&emsp;&emsp;siteName|String|站点名称|-
&emsp;&emsp;siteCode|String|站点编码|-


**响应消息样例:**
```
{
  "code": 1,
  "data": {
    "firmList": [
      {
        "deviceFirmId": 1,
        "deviceFirmname": "四川新鸿翔"
      }
    ],
    "productList": [
      {
        "productCode": "pdj",
        "productId": 1,
        "productName": "排队机"
      },
      {
        "productCode": "ckp",
        "productId": 2,
        "productName": "窗口屏"
      }
    ],
    "siteList": [
      {
        "siteCode": "510105521000-0001",
        "siteId": 1,
        "siteName": "测试站点1"
      },
      {
        "siteCode": "513400000000-0001",
        "siteId": 2,
        "siteName": "凉山州行政审批局"
      }
    ]
  }
}

```


### 设备新增或更新

**请求URL:** m/api/deviceUpdate

**请求方式:** POST

**内容类型:** application/json;charset=utf-8

**简要描述:** 设备新增或更新，提供给前端手机页面更新设备操作

**请求参数:**

参数名称|类型|必填|其它
---|---|---|---
deviceName|String|否|设备名称
deviceCode|String|是|设备编码,默认为MAC地址
deviceMac|String|否|设备MAC地址，如不填写，默认等于deviceCode
siteId|Long|是|站点Id
siteCode|String|否|站点编号
siteName|String|否|站点名称
productId|Long|是|产品Id
deviceFirmId|Long|否|设备生产厂商ID
deviceFirmname|String|否|设备生产厂商名称
lon|String|否|经度
lati|String|否|经度
deviceInBuilding|Integer|否|所属楼栋
deviceInFloor|Integer|否|所属楼层
defectsLiabilityPeriod|Date|否|保修期，如2020-08-12 15:00:00
leadingOfficial|String|否|负责人
leadingOfficialTelephone|String|否|联系电话
source|Integer|否|设备来源,默认1(0.旧设备，1.新设备)
active|Integer|否|设备激活,默认0(0.否，1.是)

**请求样例:**
```
{
    "deviceName":"agpla8",
    "deviceCode":"a1-a2",
    "deviceMac":"a1-a2",
    "siteId":1,
    "siteCode":"510105521000-0001",
    "siteName":"测试站点1",
    "productId":1,
    "deviceFirmId":1,
    "lon":"12",
    "lati":"22",
    "deviceInBuilding":13,
    "deviceInFloor":22,
    "defectsLiabilityPeriod":"2022-06-30",
    "leadingOfficial":"张三",
    "leadingOfficialTelephone":"13281114856",
    "source":1,
    "active":1
}

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码|见附录码表
msg|String|消息|-
data|object|数据对象|-
&emsp;content|String|加密后的内容|AES加密


**content解密参数:**

参数名称 |参数类型|备注|其它
---|---|--|---
rabbmitInfo|Object|rabbmit相关链接信息|-
&emsp;downTopicFilter|String|下行队列topic|-
&emsp;uploadTopicFilter|String|上行队列topic|-
&emsp;username|String|rabbmit用户名|-
&emsp;password|String|rabbmit密码|-
&emsp;host|String|ip|-
&emsp;port|String|端口|-
&emsp;virtualHost|String|虚拟机|-
&emsp;exchangeName|String|交换机名称|-
&emsp;messageTtl|String|队列消息超时时间，毫秒|-
serviceInfo|Object|服务接口连接信息|-
&emsp;homeUrl|String|首页|-
&emsp;serverUrl|String|前端服务接口地址|-
serviceInfo|Object|服务接口连接信息|-
&emsp;homeUrl|String|首页|-
&emsp;eventUrl|String|事件地址|-
&emsp;serverUrl|String|前端服务接口地址|-
deviceInfo|Object|设备基础信息|-
&emsp;siteId|Long|站点ID|-
&emsp;siteCode|String|站点编码|-
&emsp;siteName|String|站点名称|-
&emsp;productId|Long|设备产品类型Id|-
&emsp;productName|String|设备产品类型|-
&emsp;enabled|Integer|设备启用状态 (0.停止，1.启用)|-

**响应消息样例:**
```
{
    "code":1,
    "data":{
        "content":"hRNPu+V1hc4lGRHtXGyVOF0U7ez8/ZxFke9L4o7DWVLMfsZwkViAChfLKSydAEWAdsbgP1dzfNrQTq7X0diu1awR/qdPNcDcpj5/hBozLn+OmuTKLUWhq9+WGtuoF3BTbtIpWkpQWDGolOCfRadenGUkuMozjEwwkt5CIDa+nzOqh56BJIhGahlx79Qt30ugj3UNhLTfvw5lpN9jY7u+icx+xnCRWIAKF8spLJ0ARYAbMXXhI21dYty7e1b+Cb2wZobupPyXRmyuy8Fkn4bculmkCywq78F6tPlu0rCCgJA="
    }
}
```


### 设备版本检查

**请求URL:** m/api/checkVersion

**请求方式:** POST

**内容类型:** application/json;charset=utf-8

**简要描述:** 检查当前设备所属版本最新版本信息

**请求参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---
deviceCode|String|设备编码,唯一|是|可是编码或者mac地址，由平台创建
deviceVersion|String|设备版本信息|否|-

**请求样例:**
```
{
    "deviceCode":"a12345678"
}

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码（-1.失败，1.成功）|-
msg|String|消息|-
data|object|数据对象|-
&emsp;content|String|加密后的内容|AES加密


**content解密参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
&emsp;productId|Long|产品Id|-
&emsp;productCode|String|产品编号|-
&emsp;productName|String|产品名称|-
&emsp;version|Int|版本号|-
&emsp;remark|String|备注信息|-
&emsp;downloadUrl|String|版本下载地址|-



**响应消息样例:**
```
{
    "code":1,
    "data":{
        "content":"hRNPu+V1hc4lGRHtXGyVOF0U7ez8/ZxFke9L4o7DWVLMfsZwkViAChfLKSydAEWAdsbgP1dzfNrQTq7X0diu1awR/qdPNcDcpj5/hBozLn+OmuTKLUWhq9+WGtuoF3BTbtIpWkpQWDGolOCfRadenGUkuMozjEwwkt5CIDa+nzOqh56BJIhGahlx79Qt30ugj3UNhLTfvw5lpN9jY7u+icx+xnCRWIAKF8spLJ0ARYAbMXXhI21dYty7e1b+Cb2wZobupPyXRmyuy8Fkn4bculmkCywq78F6tPlu0rCCgJA="
    }
}
```

## 对外平台接口服务

### 获取接口访问token

**请求URL:** m/api/getToken

**请求方式:** POST

**内容类型:** application/json;charset=utf-8

**简要描述:** 获取接口访问token

**请求参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---
loginName|String|平台用户名称|是|-
password|String|平台用户密码|是|-

**请求样例:**
```

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码|见附录码表
msg|String|消息|-
data|object|数据对象|-


**响应消息样例:**
```

```

### 接收第三方平台设备消息

**请求URL:** m/api/receive

**请求方式:** POST

**鉴权头信息:** Authorization: {{token}}

**内容类型:** application/json;charset=utf-8

**简要描述:** 

**请求参数:**

参数名称|类型|备注|必填|其它
:------|:---|:---|:---|:---
receiveMethod|Integer|1：新增，2：修改，3：删除，4：激活，5：启用，6：停用|是|-
deviceName|String|设备名称|否|-
deviceCode|String|设备编码，如MAC地址|是|-
platformCode|String|平台系统编码|是|见平台编码附录
productCode|String|产品编码|是|见产品编码附录
ip|String|设备访问ip|否|-
port|String|设备端口|否|-
siteId|Long|站点ID，来源基础服务平台|是|-
leadingOfficial|String|负责人|否|-
leadingOfficialTelephone|String|否|联系电话|-
siteCode|String|站点编号，来源基础服务平台|是|-
siteName|String|站点名称|是|-
homeUrl|String|首页地址|否|-
deviceRemark|String|备注|是|-
deviceStatus|Integer|设备状态 (0.未激活，1.离线,2.在线)|是|默认0为激活
source|Integer|(0.旧设备，1.新设备)|是|默认1新设备

**请求样例:**
```
{}

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码|见附录码表
msg|String|消息|-
data|object|数据对象|-

**响应消息样例:**
```


```

### 接收第三方平台命令消息

**请求URL:** m/api/callback

**请求方式:** POST

**内容类型:** application/json;charset=utf-8

**简要描述:** 以数组方式进行提交

**请求参数:**

参数名称|类型|备注|必填|其它
:------|:---|:---|:---|:---
deviceCode|String|设备编码，如MAC地址|是|-
messageType|String|消息类型|是|如HEART_BEAT
timestamp|Long|时间戳|是|-
data|String|数据体，内容自行定义|否|-


**请求样例:**
```
[
    {
        "data":"{xxxx}",
        "deviceCode":"a1",
        "messageType":"HEART_BEAT",
        "timestamp":1654656951795
    },
    {
        "data":"{bbbbbb}",
        "deviceCode":"a2",
        "messageType":"HEART_BEAT",
        "timestamp":1654656951795
    }
]

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码|见附录码表
msg|String|消息|-

**响应消息样例:**
```


```

### 回调各个平台通知消息

**请求URL:** 各平台通知地址

**请求方式:** POST

**内容类型:** application/json;charset=utf-8

**简要描述:** 设备消息通知各个平台，当配置了地址时候

**请求参数:**

参数名称|类型|备注|必填|其它
:------|:---|:---|:---|:---
type|Integer|消息类型|是|0:设备增删改查，data数据域封装具体设备消息，1：设备消息类，数据域透传设备上行消息体。
msg|String|消息|否|-
data|object|数据对象|是|-
&emsp;deviceStatus|Integer||是|状态，1：新增，2：修改，3：删除，4：激活，5：启用，6：停用，7：上线，8：下线
&emsp;deviceName|String|设备名称|否|-
&emsp;deviceCode|String|设备编码，如MAC地址|是|-
&emsp;productCode|String|产品编码|是|见附录
&emsp;ip|String|设备访问ip|否|-
&emsp;port|String|设备端口|否|-
&emsp;leadingOfficial|String|负责人|否|-
&emsp;leadingOfficialTelephone|String|联系电话|否|-
&emsp;siteId|Long|站点ID，来源基础服务平台|是|-
&emsp;siteCode|String|站点编号，来源基础服务平台|是|-
&emsp;siteName|String|站点名称|是|-
&emsp;deviceRemark|String|备注|是|-

**请求样例:**
```
{}

```
**响应参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码|见附录码表
msg|String|消息|-
data|object|数据对象|-

**响应消息样例:**
```


```

## 设备消息

### 上行消息

**topic:** uploadTopicFilter

**请求方式:** rabbmitMQ

**内容类型:** application/json;charset=utf-8

**简要描述:** 上行消息存放队列

**请求参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---
headers|Object|消息头|是|-
&emsp;data|Object|消息头数据对象|是|-
&emsp;&emsp;protocol|String|数据域协议类型，默认json|是|-
&emsp;&emsp;messageType|String|上报消息类型|是|HEART_BEAT
&emsp;&emsp;deviceCode|String|设备编码信息|是|如:mac地址
&emsp;&emsp;sign|String|签名|是|-
&emsp;&emsp;timestamp|String|时间戳|是|-
data|byte[]|byte数组，base64编码|是|-
key|String|消息唯一标识|是|-

**请求样例:**
```
{
    "data":"YWJjZDEyMzQ=",
    "headers":{
        "data":{
            "protocol":"json",
            "messageType":"HEART_BEAT",
            "deviceCode":"A1:A2:A3:A4:A5:A6",
            "sign":"abcd1234",
            "timestamp":"2022-04-15 09:48:05"
        }
    },
    "key":"d3635cd0597d46c88b85797c3846b04f"
}
```

### 下行消息

**topic:** downTopicFilter

**请求方式:** rabbmitMQ

**内容类型:** application/json;charset=utf-8

**简要描述:** 下行消息存放队列

**请求参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---
headers|Object|消息头|是|-
&emsp;data|Object|消息头数据对象|是|-
&emsp;&emsp;protocol|String|数据域协议类型，默认json|是|-
&emsp;&emsp;messageType|String|下发消息类型|是|UPGREAD
&emsp;&emsp;deviceCode|String|设备编码信息|是|如:mac地址
&emsp;&emsp;sign|String|签名|是|-
&emsp;&emsp;timestamp|String|时间戳|是|-
data|byte[]|byte数组，base64编码|是|-
key|String|消息唯一标识|是|-

**请求样例:**
```
{
    "data":"YWJjZDEyMzQ=",
    "headers":{
        "data":{
            "protocol":"json",
            "messageType":"UPGREAD",
            "deviceCode":"A1:A2:A3:A4:A5:A6",
            "sign":"abcd1234",
            "downloadUrl":"http://xxxxx",
            "timestamp":"2022-04-15 09:48:05"
        }
    },
    "key":"d3635cd0597d46c88b85797c3846b04f"
}
```




## 码表

### 响应结果码表
结果码|结果|其它
---|---|---
1|成功|-
1001|当前设备编码不存在|-
1002|当前设备编码已存在|-
1003|所属产品编码不存在|-
1004|当前设备未激活，请在后台配置后再激活|-
1005|所属平台不存在！请在后台添加后再激活|-
1006|当前设备所属产品平台未配置，请在后台配置后再激活|-
1007|站点ID为空|-
1008|设备已创建，请完善设备配置信息|-
1009|当前设备不存在|-
1010|token认证失败|-
1011|未找到设备版本信息|-
-1|系统内部异常|-


## 附录

### 业务上行下行消息类型
编码|说明|其它
---|---|---
HEART_BEAT|设备心跳消息|设备上行发送

