# 合方圆国标平台绑定流程 ## 设备上线绑定服务流程 1. 设备上线平台 2. 用户注册账号 3. 用户输入鉴定码 4. 用户绑定设备 5. 用户查询自己设备 ### 设计要点 #### 国标id冲突 > [!tip] 可能会有多个不同设备使用相同的sip id, 导致用户管理到其他设备 所以, 在用户应该只与绑定码进行关联, 不关心设备id #### 设备重复注册 > [!tip] 设备可能在注册后,更改国标id重新注册, 导致多台设备使用同一个绑定码 如果新设备绑定码与已有设备的绑定码有冲突, 则移除已有设备的绑定码, 确保一个绑定码永远只对应一个设备, 不对设备国标域进行区分. ### 平台角色管理 1. [admin] 主管理员 唯一 平台的全部权限, 包括创建域名管理员 2. [sub-admin] 子理员 多个 管理对应sip域下的对应设备 是否对对应的域信息进行设备绑定 4. [adminAccount] 普通用户 多个 管理对应账户下的设备 #### 用户表数据库设计 ##### 普通用户表 account | 字段 | 类型 | 值介绍 | 默认 | 备注 | |-----------|--------------|-------|--------|---------| | id | int | 主键 | 无 | 无 | | account | varchar(30) | 登录账号 | 无 | 登录账号 | | name | varchar(100) | 昵称 | 随机用户id | 用户名称 | | reginCode | varchar(10) | 手机号区号 | 86 | 用户手机号区号 | | phone | varchar(16) | 手机号 | 无 | 用户手机号 | | passwd | varchar(255) | 密码 | 无 | 用户密码摘要 | ##### 用户绑定设备表 device_bind | 字段 | 类型 | 值介绍 | 默认 | 备注 | |------------|--------------|------|----|------| | bindId | int | 主键 | 无 | 无 | | accountId | int | 用户id | 无 | 用户id | | devCode | varchar(255) | 绑定码 | 无 | 绑定码 | | createTime | datetime | 绑定时间 | 无 | 创建时间 | ##### 管理员表 扩展 user | 字段 | 类型 | 值介绍 | 默认 | 备注 | |--------------|------|---------|----|-----------------------------| | primaryAdmin | char | 是否为主管理员 | 无 | 主管理员能够访问所有接口, 子管理员只能访问自己的设备 | ##### sip配置表 sipConfig > 管理员sip配置表, 用于管理sip信息, 允许多种设备同步接入到平台 > 可以指定域启用绑定设备, 用于设备上线时获取设备绑定码, 用于app端用户绑定设备 > 不同域允许配置为黑名单, 白名单, 无限制 等形式对设备进行管理 | 字段 | 类型 | 值介绍 | 默认 | 备注 | |-------------|--------------|----------|----|---------------------| | id | int | 主键 | 无 | 无 | | adminId | int | 管理员id | 无 | 创建者id, 在注册时不发挥作用 | | sipDomain | varchar(100) | sip域名 | 无 | sip域 唯一,根据域来获取对应的密码 | | serverId | varchar(100) | 服务器id | 无 | 服务器id | | password | varchar(100) | 服务器密码 | 无 | 密码 | | description | varchar(255) | 描述 | 无 | 描述 | | enable | char(1) | 是否启用 | 1 | 只有启用的情况下才会被允许注册 | | createTime | datetime | 创建时间 | 无 | 创建时间 | | enableBind | char(1) | 是否启用设备绑定 | 1 | 是否启用设备绑定 1 允许 0 不允许 | ##### 管理员 sip 配置表 adminSip > 配置表应该与管理员表进行区分 > 子管理员只能访问自己域的设备, 只有主管理员拥有全部权限 | 字段 | 类型 | 值介绍 | 默认 | 备注 | |---------|--------------|-----|--------|------| | id | string | pk | 无 | 自增id | | adminId | varchar(100) | tk | 管理员id | | sipId | varchar(100) | tk | sip id | 1. 根据管理员id获取所有的设备及对应的 sip 配置信息: ```sql SELECT d.*, sc.* FROM devices d JOIN sipConfig sc ON d.domain = sc.sipDomain JOIN adminSip a ON sc.id = a.sipId WHERE a.adminId = < 管理员id >; ``` 2. 根据管理员id与设备id获取对应设备及对应的 sip 配置信息: ```sql SELECT d.*, sc.* FROM devices d JOIN sipConfig sc ON d.domain = sc.sipDomain JOIN adminSip a ON sc.id = a.sipId WHERE a.adminId = < 管理员id > AND d.id = < 设备id >; ``` #### 设备表扩展 devices | 字段 | 类型 | 值介绍 | 默认 | 备注 | |----------|--------------|-------|----|---------------------| | id | int | 主键 | 无 | 无 | | deviceId | varchar(100) | 设备id | 无 | 设备sip id | | domain | varchar(100) | sip域名 | 无 | sip域, 与sip配置中的域进行对应 | | devCode | varchar(255) | 设备绑定码 | 无 | 设备绑定码 | > 使用字段 `devCode` 设备注册时获取 ### 设备上线平台 1. 设备发送连接请求 2. 平台根据域将设备分配至不同的管理账户下 3. 对应域的管理员账户能够看自己域下方的设备 4. 普通用户只能看自己的设备 ## sip交互 > 设备注册 > -> 服务端处理 > -> 是否为对应域 > -> 下发命令 > -> 设备响应 > -> 服务端处理存储 ### 下发sip Message HfyBind ### 上发 xml ```xml ```