# 设备管理服务平台
版本 |  创建时间   | 作者 |  备注信息
---|---|---|---
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|数据对象|-
 ip|String|ip|-
 port|Integer|port|-
 deviceRegisterApi|String|设备注册API|-
 deviceInitApi|String|设备初始化信息API|-
 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地址,由平台创建

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

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

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


**content解密参数:**

参数名称 |参数类型|备注|其它
---|---|---|---
rabbmitInfo|Object|rabbmit相关链接信息|-
 downTopicFilter|String|下行队列topic|-
 uploadTopicFilter|String|上行队列topic|-
 username|String|rabbmit用户名|-
 password|String|rabbmit密码|-
 host|String|ip|-
 port|String|端口|-
 virtualHost|String|虚拟机|-
 exchangeName|String|交换机名称|-
 messageTtl|String|队列消息超时时间,毫秒|-
serviceInfo|Object|服务接口连接信息|-
 homeUrl|String|首页|-
 serverUrl|String|前端服务接口地址|-
deviceInfo|Object|设备基础信息|-
 siteId|Long|站点ID|-
 siteCode|String|站点编码|-
 siteName|String|站点名称|-
 productId|Long|设备产品类型Id|-
 productName|String|设备产品类型|-
 enabled|Integer|设备启用状态 (0.停止,1.启用)|-
 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|数据对象|-
 productList|array|产品列表|数组
  productId|Long|产品id|-
  productName|String|产品名称|-
  productCode|String|产品编码|-
 firmList|array|设备生产商列表|数组
  deviceFirmId|Long|生产商id|-
  deviceFirmname|String|生产商名称|-
 siteList|array|站点列表|数组
  siteId|Long|站点id|-
  siteName|String|站点名称|-
  siteCode|String|站点编码|-


**响应消息样例:**
```
{
  "code": 1,
  "data": {
    "firmList": [
      {
        "deviceFirmId": 1,
        "deviceFirmname": "四川新鸿翔"
      }
    ],
    "productList": [
      {
        "productCode": "pdj",
        "productId": 1,
        "productName": "排队机"
      },
      {
        "productCode": "ckp",
        "productId": 2,
        "productName": "窗口屏"
      },
      {
        "productCode": "hjq",
        "productId": 3,
        "productName": "呼叫器"
      },
      {
        "productCode": "jzxsp",
        "productId": 4,
        "productName": "集中显示屏"
      },
      {
        "productCode": "dsj",
        "productId": 5,
        "productName": "导视机"
      },
      {
        "productCode": "pjq",
        "productId": 6,
        "productName": "评级器"
      },
      {
        "productCode": "zzfwzd",
        "productId": 7,
        "productName": "自助服务终端"
      },
      {
        "productCode": "tdj",
        "productId": 8,
        "productName": "填单机"
      },
      {
        "productCode": "ybj",
        "productId": 9,
        "productName": "样表机"
      }
    ],
    "siteList": [
      {
        "siteCode": "510105521000-0001",
        "siteId": 1,
        "siteName": "测试站点1"
      },
      {
        "siteCode": "513400000000-0001",
        "siteId": 2,
        "siteName": "凉山州行政审批局"
      },
      {
        "siteCode": "513426000000-0001",
        "siteId": 3,
        "siteName": "会东县行政审批局"
      },
      {
        "siteCode": "513401001000-0001",
        "siteId": 6,
        "siteName": "test"
      },
      {
        "siteCode": "513425000000-0001",
        "siteId": 7,
        "siteName": "会理市行政审批局"
      },
      {
        "siteCode": "513425001000-0001",
        "siteId": 8,
        "siteName": "会理市城北街道办事处"
      },
      {
        "siteCode": "510105521000-0002",
        "siteId": 9,
        "siteName": "蔡家测试中心"
      },
      {
        "siteCode": "513301000000-0001",
        "siteId": 10,
        "siteName": "康定市行政审批局"
      },
      {
        "siteCode": "510000000000-0001",
        "siteId": 12,
        "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.新设备)

**请求样例:**
```
{
    "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
}

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

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


**content解密参数:**

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

**响应消息样例:**
```
{
    "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,来源基础服务平台|是|-
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|数据对象|是|-
 deviceStatus|Integer||是|状态,1:新增,2:修改,3:删除,4:激活,5:启用,6:停用,7:上线,8:下线
 deviceName|String|设备名称|否|-
 deviceCode|String|设备编码,如MAC地址|是|-
 productCode|String|产品编码|是|见附录
 ip|String|设备访问ip|否|-
 port|String|设备端口|否|-
 siteId|Long|站点ID,来源基础服务平台|是|-
 siteCode|String|站点编号,来源基础服务平台|是|-
 siteName|String|站点名称|是|-
 deviceRemark|String|备注|是|-

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

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

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

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


```

## 设备消息

### 上行消息

**topic:** uploadTopicFilter

**请求方式:** rabbmitMQ

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

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

**请求参数:**

参数名称|类型|备注|必填|其它
---|---|---|---|---
headers|Object|消息头|是|-
 data|Object|消息头数据对象|是|-
  protocol|String|数据域协议类型,默认json|是|-
  messageType|String|上报消息类型|是|HEART_BEAT
  deviceCode|String|设备编码信息|是|如:mac地址
  sign|String|签名|是|-
  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|消息头|是|-
 data|Object|消息头数据对象|是|-
  protocol|String|数据域协议类型,默认json|是|-
  messageType|String|下发消息类型|是|UPGREAD
  deviceCode|String|设备编码信息|是|如:mac地址
  sign|String|签名|是|-
  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",
            "timestamp":"2022-04-15 09:48:05"
        }
    },
    "key":"d3635cd0597d46c88b85797c3846b04f"
}
```

## 码表

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


## 附录

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