JOYZL SCADA Server
组织类接口
| 模块 | 接口 | 用途 | 权限 |
|---|---|---|---|
| People | CompanyQuery | 获取企业信息 | NONE |
| People | CompanyUpdate | 修改企业信息 | ADMINISTRATOR |
| People | ZoneSelect | 获取多个区域 | SYATEM |
| People | ZoneCreate | 新建区域 | ADMINISTRATOR |
| People | ZoneUpdate | 修改区域 | ADMINISTRATOR |
| People | ZoneMove | 移动区域 | ADMINISTRATOR |
| People | ZoneDelete | 删除区域 | ADMINISTRATOR |
| People | UserLogin | 用户登录 | NONE |
| People | UserQuery | 获取当前用户 | NONE |
| People | UserSelect | 获取多个用户 | ADMINISTRATOR |
| People | UserCreate | 新建用户 | ADMINISTRATOR |
| People | UserUnique | 检查用户唯一性 | ADMINISTRATOR |
| People | UserUpdate | 修改用户 | EMPLOYEE |
| People | UserEnable | 启用或禁用用户 | ADMINISTRATOR |
| People | UserMove | 移动用户 | ADMINISTRATOR |
| People | UserReset | 修改或重置用户密码 | EMPLOYEE |
| People | UserDelete | 删除用户 | ADMINISTRATOR |
| People | ShiftSelect | 获取多个轮值 | SYATEM |
| People | ShiftUnique | 校验轮值时间 | SYATEM |
| People | ShiftCreate | 新建轮值 | ADMINISTRATOR |
| People | ShiftUpdate | 修改轮值 | ADMINISTRATOR |
| People | ShiftDelete | 删除轮值 | ADMINISTRATOR |
企业
获取企业信息(CompanyQuery)
获取当前 服务端(JOYZL SCADA Server) 运行实例所属的企业简要信息。 每个部署运行的服务端实例仅对应唯一的企业简要信息。
请求示例
{
// 没有任何参数
}
响应示例
{
"Company": {
// 唯一标识
"Id": 8086122311712769,
// 别名简称
"Alias": "月球开发",
// 组织全称
"Name": "中国月球开发有限公司",
// 注册代码
"License": "0987654321234567890",
// 所在地址
"Address": "重庆市",
// 联系电话
"Phone": "13883062895",
// 创建时间
"Created": "2025-08-24 17:31:58",
// 更新时间
"Updated": "2025-08-24 17:32:49"
},
// 响应状态码
"Status": 2
}
修改企业信息(CompanyUpdate)
更新当前 JOYZL SCADA Server 运行实例所属的企业简要信息。 请求此接口须事先通过 获取企业信息(CompanyQuery) 接口获取企业简要信息的唯一标识(必要参数)。
请求示例
{
// 唯一标识(必要)
"Id": 8086122311712769,
// 组织全称(必要)
"Name": "中国月球开发有限公司",
// 别名简称(必要)
"Alias": "月球开发",
// 注册代码(可选)
"License": "0987654321234567890",
// 所在地址(可选)
"Address": "重庆市",
// 联系电话(可选)
"Phone": "13883062895"
}
响应示例
{
"Id": 8086122311712769,
"Name": "中国月球开发有限公司",
"Alias": "月球开发",
"License": "0987654321234567890",
"Address": "重庆市",
"Phone": "13883062895",
// 更新时间
"Updated": "2025-08-24 17:32:49",
// 响应状态码
"Status": 2
}
区域
获取多个区域(ZoneSelect)
请求此接口,如果缺省所有参数,可获取当前登录用户可见的所有区域; 如果指定父级区域参数(可选),可仅获取隶属的子区域; 如果指定区域位于用户所在区域之外,请求将被拒绝。
请求示例
{
// 父区域标识(可选)
"ParentId": 6892096922199862
}
响应示例
{
"ParentId": 6892096922199862,
"Zones": [
{
// 区域标识
"Id": 6113037622706180,
// 父级标识
"ParentId": 3649748250656771,
// 区域名称
"Name": "A车间",
// 类型字符串
"Type": "WORKSHOP",
// 创建时间
"Created": "2025-08-24 17:33:10",
// 更新时间
"Updated": "2025-08-24 17:33:10"
},
{
"Id": 3649748250656771,
"ParentId": 0,
"Name": "主厂区",
"Type": "PLANT",
"Created": "2025-08-24 17:32:58",
"Updated": "2025-08-24 17:32:58"
},
...
],
// 响应状态码
"Status": 2
}
响应的区域集合(Zones 数组)不保证区域间的顺序, 区域通过父级字段(ParentId)标识区域间的层级结构, 其值为上级区域的标识(Id), 父级字段为零(ParentId:0)的区域表示隶属于企业, 既无更上一级区域。
提示: 区域结构属于更新频率极低的数据,在系统部署实施完成之后不会经常变化; 客户端通常仅需要在用户登录后获取一次即可,然后将其缓存本地复用。
新建区域(ZoneCreate)
新建区域时可指定类型(Type)字符串, 值可由客户端或用户任意指定, 通常用于区分区域的性质, 以协助客户端正确的展示区域视图。
区域类型常用以下单词:CAMPUS(校区)、BUILDING(楼栋)、UNIT(单元)、FLOOR(楼层)、ROOM(室); PARK(园区)、PLANT(厂区)、WORKSHOP (车间)、LINE(产线)。
请求示例
{
// 父级标识(可选)
"ParentId": 3649748250656771,
// 区域名称(必要)
"Name": "通机生产5线",
// 类型字符串(可选)
"Type": "LINE"
}
响应示例
{
"ParentId": 3649748250656771,
"Name": "通机生产5线",
"Type": "LINE",
// 区域标识
"Id": 6892182275093661,
// 创建时间
"Created": "2023-08-09 16:45:48",
// 响应状态码
"Status": 2
}
修改区域(ZoneUpdate)
通过区域标识(Id)修改区域的常规字段值。 区域的层级关系调整须通过 移动区域(ZoneMove) 接口实现。
请求示例
{
// 区域标识(必要)
"Id":6892182275093661,
// 区域名称(必要)
"Name":"通机生产线5",
// 类型字符串(可选)
"Type":"LINE"
}
响应示例
{
"Id":6892182275093661,
"Name":"通机生产线5",
"Type":"LINE"
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}
移动区域(ZoneMove)
父级区域标识(ParentId)表示当前区域要移动的目标父区域, 若将其指定为零(0),则表示置为根区域; 不能将父级标识(ParentId)指定为当前区域的子区域, 这将导致循环关联错误。
请求示例
{
// 区域标识(必要)
"Id": 6892179848987342,
// 父级标识(必要)
"ParentId": 6892179848953340
}
响应示例
{
"Id": 6892179848987342,
"ParentId": 6892179848953340,
// 更新时间
"Updated": "2025-08-24 17:33:10",
// 响应状态码
"Status": 2
}
删除区域(ZoneDelete)
删除区域时,隶属于当前区域的子区域以及用户、设备、定时器、表计、装备和轮值均会被一并删除, 并且无法恢复。
请求示例
{
// 区域标识(必要)
"Id": 6892179848987342
}
响应示例
{
"Id": 6892179848987342,
// 响应状态码
"Status": 2
}
用户
用户角色(RoleType)
- NONE(0) 无
- SERVO(1) 边缘端
- SYATEM(2) 系统
- EMPLOYEE(3) 员工
- ADMINISTRATOR(9) 管理员
用户登录(UserLogin)
登录用户名称(Username)可以是用户的手机号(Mobile)、编号(Number)和电子邮件(Email), 这些信息均可用于鉴别用户的唯一性。登录密码(Password)加密方式由服务端配置决定, 支持多种摘要算法(Digest)例如 SHA-256 ,客户端应将用户密码根据指定的算法计算摘要 hex(Digest("password"));若未配置则使用明文密码。
当系统首次启动且尚未配置任何用户账户时,客户端可通过任意用户名和密码登录成功; 服务端在检测到系统中不存在任何用户账户时,将根据本次登录信息自动创建一个临时用户。 临时用户不具备唯一标识,也不会被保存,注销或过期既失效, 客户端在此情况下应向使用者明确提示: 需立即创建正式的管理员账户,以确保系统的正常管理与安全使用。
请求示例
{
// 用户名称(必要)
"Username": "username",
// 登录密码(必要)
"Password": "password"
}响应示例
{
// 企业简要信息
"Company": {
"Id": 8086122311712769,
"Alias": "月球开发",
"Name": "中国月球开发有限公司",
"License": "0987654321234567890",
"Phone": "13883062895",
"Address": "重庆市",
"Created": "2025-08-24 17:31:58",
"Updated": "2025-08-24 17:32:49"
},
// 当前用户
"User": {
// 用户标识
"Id": 4087715192635394,
// 区域标识
"ZoneId": 0,
// 用户姓名
"Name": "小陈",
// 用户编号
"Number": "10001",
// 电子邮件
"Email": "xc@joyzl.com",
// 手机号码
"Mobile": "13883062895",
// 用户角色
"Role": {
"value": 9,
"name": "ADMINISTRATOR",
"text": "管理员"
},
// 启用状态
"Enable": true,
// 创建时间
"Created": "2025-08-24 17:16:53",
// 更新时间
"Updated": "2025-08-24 17:16:58"
},
// 响应状态码
"Status": 2
}
获取当前用户(UserQuery)
此接口用于获取当前已登录(即稍早前登录且会话未过期)的用户信息, 网页端可通过未失效的令牌(Token)恢复之前登录的用户信息。
请求示例
{
// 没有任何参数
}
响应示例
{
// 与用户登录接口返回相同
}
获取多个用户(UserSelect)
此接口可获取所有区域和指定区域的已创建用户, 可见范围取决于当前登录用户所在的区域, 无法获取超出其可见范围的用户数据。
请求此接口,如果缺省所有参数,可获取当前登录用户可见的所有用户; 如果指定区域参数(可选),可获取指定区域的用户; 如果指定区域位于用户所在区域之外,请求将被拒绝。
请求示例
{
// 区域标识(可选)
"ZoneId":6892182275093661
}
响应示例
{
"ZoneId": 6892182275093661,
// 用户集合
"Users": [
{
"Id": 4087715192635394,
"ZoneId": 0,
"Name": "小陈",
"Number": "10001",
"Email": "xc@joyzl.com",
"Mobile": "13883062895",
"Role": {
"value": 9,
"name": "ADMINISTRATOR",
"text": "管理员"
},
"Enable": true,
"Created": "2025-08-24 17:16:53",
"Updated": "2025-08-24 17:16:58"
},
...
],
// 响应状态码
"Status": 2
}
新建用户(UserCreate)
创建新用户时必须指定可鉴别用户的手机号(Mobile)、编号(Number)和电子邮件(Email)之一, 如果区域标识(ZoneId)为零(0)则表示全局用户。 在请求创建新用户之前应通过 用户唯一性校验(UserUnique) 接口, 验证手机号(Mobile)、编号(Number)和电子邮件(Email) 是否已存在。
注意: 首次创建的用户账号必须为管理员角色, 否则系统将缺失具备用户管理与角色分配权限的管理员账号, 这将导致真正的“管理员”被阻挡在系统之外, 之后无法执行必要的管理操作。
请求示例
{
// 区域标识(必要)
"ZoneId": 0,
// 用户姓名(必要)
"Name": "小陈",
// 登录密码(必要)
"Password": "XXXXXXXXXX",
// 用户编号(可选)
"Number": "10001",
// 电子邮件(可选)
"Email": "xc@joyzl.com",
// 电话号码(可选)
"Mobile": "13883062895",
// 用户角色(可选)
"Role": 3
}
响应示例
{
"ZoneId": 0,
"Name": "小陈",
"Number": "10001",
"Email": "xc@joyzl.com",
"Mobile": "13883062895",
"Role": 3,
// 用户标识
"Id": 6892182278299069,
// 创建时间
"Created": "2023-08-09 17:39:14",
// 响应状态码
"Status": 2
}
检查用户唯一性(UserUnique)
检查用户的验证手机号(Mobile)、编号(Number)和电子邮件(Email)是否可用, 既未被其它账户占用。 可选的用户标识(Id)用以指示正在验证已存在的用户, 以排除该用户自身的信息。
请求示例
{
// 用户标识(可选)
"Id":6892182278299069,
// 鉴别内容(必须)
"Key":"xc@joyzl.com"
}响应示例
{
"Id":6892182278299069,
"Key":"xc@joyzl.com",
// 可用状态
"Available": true,
// 响应状态码
"Status": 2
}修改用户(UserUpdate)
通过用户标识(Id)修改用户的常规字段值。 用户所属的区域调整须通过 移动用户(UserMove) 接口实现; 用户的启用或禁用须通过 启用或禁用用户(UserEnable) 接口实现; 用户的密码修改须通过 重置用户密码(UserReset) 接口实现。
请求示例
{
// 用户标识(必要)
"Id":6892182362899172,
// 用户姓名(必要)
"Name": "小陈",
// 用户编号(可选)
"Number": "1001",
// 手机号码(可选)
"Mobile": "13883062895",
// 电子邮件(可选)
"Email": "931661600@qq.com"
}
响应示例
{
"Id":6892182362899172,
"Name": "小陈",
"Number": "1001",
"Mobile": "13883062895",
"Email": "931661600@qq.com",
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}启用或禁用用户(UserEnable)
被禁用的用户不能在任何端登录系统。
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069,
// 可用状态(必要)
"Enable": false
}
响应示例
{
"Id": 6892182278299069,
"Enable": false,
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}
移动用户(UserMove)
移动用户到指定的区域,用户只能访问所在区域(含子区域)的数据。
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069,
// 区域标识(必要)
"ZoneId": 6892179848953340
}响应示例
{
"Id": 6892182278299069,
"ZoneId": 6892179848953340,
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}修改或重置用户密码(UserReset)
用户标识(Id)为当前用户时,可修改当前用户登录密码,同时须校验旧密码; 如果用户标识(Id)为其它用户,则可重置其它用户密码,此时可省略旧密码, 但要求当前登录用户具有管理员角色,并拥有有效管理权限范围。
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069,
// 新密码(必要)
"NewPassword": "XXXXXXXXXX",
// 旧密码(可选)
"OldPassword": "XXXXXXXXXX"
}
响应示例
{
"Id": 6892182278299069,
// 响应状态码
"Status": 2
}删除用户(UserDelete)
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069
}
响应示例
{
"Id": 6892182278299069,
// 响应状态码
"Status": 2
}轮值
轮值表示工厂车间的上下班时间, 装备将根据设定的轮值时间记录每个时间段的产量。 装备将按所在区域及父区域匹配轮值,直至企业级全局轮值。 如果未配置任何轮值,装备将不会自动记录产量。
工厂可以将轮值时间段与实际工作时间对应, 也可以将实际工作时间拆分为多个更小的轮值。 更小的轮值有助于记录小段时间的产量, 如果工厂实施了每小时报工制度,可以与此对应。
获取多个轮值(ShiftSelect)
获取全部或指定区域的轮值,可见范围取决于用户所在的区域。 缺省所有参数时,返回当前用户可见范围的所有轮值; 指定区域标识(ZoneId)参数时,仅返回指定区域(不含子区域)的轮值。
请求示例
{
// 区域标识(可选)
"ZoneId": 6953015064092456
}响应示例
{
"ZoneId": 6953015064092456,
// 轮值集合
"Shifts": [
{
// 轮值标识
"Id": 6892189876541566,
// 区域标识
"ZoneId": 6892182769831190,
// 轮值名称
"Name": 白班",
// 开始时间
"Begin": 10:15:00",
// 结束时间
"End ": 11:15:00",
// 创建时间
"Created": "2025-08-26 10:15:00",
// 更新时间
"Updated": "2025-08-26 11:15:00"
}
…
],
// 响应状态码
"Status":2
}校验轮值时间(ShiftUnique)
多个轮值之间的时间不能重叠,在创建或修改前应先校验轮值时间是否可用。 指定轮值标识(Id)参数时,将排除指定轮值的时段。
请求示例
{
// 轮值标识(可选)
"Id":6926833763504759,
// 开始时间(必要)
"Begin":"08:00:00",
// 结束时间(必要)
"End":"18:00:00"
}响应示例
{
"Id":6926833763504759,
"Begin":"08:00:00",
"End":"18:00:00",
// 可用状态
"Available": false,
// 响应状态码
"Status": 2
}新建轮值(ShiftCreate)
轮值可位于企业或任意区域,位于企业的轮值即为全局轮值, 位于区域的轮值仅作用于所属区域和子区域, 既各个区域(厂区)可以采用不同的轮值时间。
请求示例
{
// 区域标识(可选)
"ZoneId":0,
// 轮值名称(必要)
"Name":"早中班",
// 开始时间(必要)
"Begin":"08:00:00",
// 结束时间(必要)
"End":"18:00:00"
}响应示例
{
"ZoneId":0,
"Name":"早中班",
"Begin":"08:00:00",
"End":"18:00:00",
// 轮值标识
"Id":6926833763504759,
// 创建时间
"Created": "2022-12-13 19:54:53",
// 响应状态码
"Status":2
}修改轮值(ShiftUpdate)
通过轮值标识(Id)修改轮值的常规字段值。 由于轮值的特殊性没有提供移动区域的操作。
请求示例
{
// 轮值标识(必要)
"Id":238253447937797,
// 轮值名称(必要)
"Name":"早中班",
// 开始时间(必要)
"Begin":"08:00:00",
// 结束时间(必要)
"End":"18:00:00",
}响应示例
{
"Id":238253447937797,
"Name":"早中班",
"Begin":"08:00:00",
"End":"18:00:00",
// 更新时间
"Updated": "2023-08-14 11:12:47",
// 响应状态码
"Status":2,
}删除轮值(ShiftDelete)
删除轮值后,装备和表计将不在记录此时间段的产量和能耗。 已记录的时段产量不会受到影响。
请求示例
{
// 轮值标识(必要)
"Id":6926833763504759
}响应示例
{
"Id":6926833763504759,
// 响应状态码
"Status":2
}