JOYZL SCADA Server
组织类接口
| 模块 | 接口 | 用途 | 权限 |
|---|---|---|---|
| People | CompanyQuery | 获取企业信息 | NONE |
| People | CompanyUpdate | 修改企业信息 | DENIED |
| 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 | UserUnique | 检查用户唯一性 | ADMINISTRATOR |
| People | UserCreate | 新建用户 | 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": "中国月球开发有限公司",
// 社会统一信用代码
"Code": "09876543212345678",
// 许可签发者名称
"IssuerName": "代理或经销商名称",
// 许可签发者代码
"IssuerCode": "123456789012345678",
// 许可有效期至
"Expire": "2030-08-24",
// 创建时间
"Created": "2025-08-24 17:31:58",
// 更新时间
"Updated": "2025-08-24 17:32:49"
},
// 响应状态码
"Status": 2
}
修改企业信息(CompanyUpdate)
更新当前 JOYZL SCADA Server 运行实例所属的企业简要信息。 请求此接口须事先通过 获取企业信息(CompanyQuery) 接口获取企业简要信息的唯一标识(必要参数)。
注意: 企业信息已固化在授权许可文件中,此接口已无法使用, CS(TCP) 和 WEB 端对此接口的调用均返回 拒绝(DENIED:3) , 此接口仅为兼容性保留。
请求示例
{
// 唯一标识(必要)
"Id": 8086122311712769,
// 组织全称(必要)
"Name": "中国月球开发有限公司",
// 社会统一信用代码(必要)
"Code": "09876543212345678",
// 别名简称(必要)
"Alias": "月球开发"
}
响应示例
{
// 回显参数
"Id": 8086122311712769,
"Name": "中国月球开发有限公司",
"Code": "09876543212345678",
"Alias": "月球开发",
// 更新时间
"Updated": "2025-08-24 17:32:49",
// 响应状态码
"Status": 2
}
区域
获取多个区域(ZoneSelect)
请求此接口,如果缺省所有参数,可获取当前登录用户可见的所有区域; 如果指定父级区域参数(可选),可仅获取隶属的子区域; 如果指定区域位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 父区域标识(可选)
"ParentId": 6892096922199862
}
响应示例
{
// 回显参数
"ParentId": 6892096922199862,
// 区域集合
"Zones": [
{
// 区域标识
"Id": 6113037622706180,
// 父级标识
"ParentId": 3649748250656771,
// 区域名称
"Name": "A车间",
// 类型字符串
"Type": "WORKSHOP",
// 区域编号
"Number":"A001",
// 创建时间
"Created": "2025-08-24 17:33:10",
// 更新时间
"Updated": "2025-08-24 17:33:10"
},
{
"Id": 3649748250656771,
"ParentId": 6892096922199862,
"Name": "主厂区",
"Type": "PLANT",
"Number":"A000",
"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)未指定时,视为默认值 0 ,则为根级区域; 如果指定父级标识(ParentId)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 父级标识(可选)
"ParentId": 3649748250656771,
// 区域编号(可选)
"Number":"A002",
// 区域名称(必要)
"Name": "通机生产5线",
// 类型字符串(可选)
"Type": "LINE"
}
响应示例
{
// 回显参数
"ParentId": 3649748250656771,
"Number":"A002",
"Name": "通机生产5线",
"Type": "LINE",
// 区域标识
"Id": 6892182275093661,
// 创建时间
"Created": "2023-08-09 16:45:48",
// 响应状态码
"Status": 2
}
修改区域(ZoneUpdate)
通过区域标识(Id)修改区域的常规字段值。 如果指定区域标识(Id)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。 区域的层级关系调整须通过 移动区域(ZoneMove) 接口实现。
请求示例
{
// 区域标识(必要)
"Id":6892182275093661,
// 区域编号(可选)
"Number":"A002",
// 区域名称(必要)
"Name":"通机生产线5",
// 类型字符串(可选)
"Type":"LINE"
}
响应示例
{
// 回显参数
"Id":6892182275093661,
"Number":"A002",
"Name":"通机生产线5",
"Type":"LINE"
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}
移动区域(ZoneMove)
父级区域标识(ParentId)表示当前区域(Id)要移动的目标父区域, 若将其指定为零(ParentId=0),则表示置为根区域; 不能将父级标识(ParentId)指定为当前区域(Id)的子区域, 这将导致循环关联错误,返回状态为 冲突(CONFLICT:12)。 如果指定区域标识(Id/ParentId)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 区域标识(必要)
"Id": 6892179848987342,
// 父级标识(必要)
"ParentId": 6892179848953340
}
响应示例
{
// 回显参数
"Id": 6892179848987342,
"ParentId": 6892179848953340,
// 更新时间
"Updated": "2025-08-24 17:33:10",
// 响应状态码
"Status": 2
}
删除区域(ZoneDelete)
删除区域时,隶属于当前区域的子区域以及用户、设备、定时器、表计、装备和轮值均会被一并删除,并且无法恢复。 如果指定区域标识(Id)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 区域标识(必要)
"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)密码(Password)无效, 用户角色(Role)无效,用户状态(Enable)禁用,均返回 拒绝(DENIED:3) 。
请求示例
{
// 用户名称(必要)
"Username": "username",
// 登录密码(必要)
"Password": "password"
}响应示例
{
// 企业简要信息
"Company": {
// 唯一标识
"Id": 8086122311712769,
// 别名简称
"Alias": "月球开发",
// 组织全称
"Name": "中国月球开发有限公司",
// 社会统一信用代码
"Code": "09876543212345678",
// 许可签发者名称
"IssuerName": "代理或经销商名称",
// 许可签发者代码
"IssuerCode": "123456789012345678",
// 许可有效期至
"Expire": "2030-08-24",
// 创建时间
"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)恢复之前登录的用户信息。
如果令牌(Token)已失效, 请求将被 拒绝(DENIED:3) 。
请求示例
{
// 没有任何参数
}
响应示例
{
// 与用户登录接口返回相同
}
获取多个用户(UserSelect)
此接口可获取所有区域和指定区域(ZoneId)的已创建用户, 可见范围取决于当前登录用户所在的区域, 无法获取超出其可见范围的用户数据。
请求此接口,如果缺省所有参数,可获取当前登录用户可见的所有用户; 如果指定区域参数(可选),可获取指定区域的用户; 如果指定区域(ZoneId)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 区域标识(可选)
"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
}
响应的用户集合(Users)数组不保证任何顺序。
新建用户(UserCreate)
创建新用户时必须指定可鉴别用户的手机号(Mobile)、编号(Number)和电子邮件(Email)之一, 如果区域标识(ZoneId)为零(0)则表示全局用户。 在请求创建新用户之前应通过 用户唯一性校验(UserUnique) 接口, 验证手机号(Mobile)、编号(Number)和电子邮件(Email) 是否已存在。
如果指定的手机号(Mobile)、编号(Number)和电子邮件(Email)已存在,将返回 冲突(CONFLICT:12) ; 如果指定区域(ZoneId)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
注意: 首次创建的用户账号必须为管理员角色, 否则系统将缺失具备用户管理与角色分配权限的管理员账号, 这将导致真正的“管理员”被阻挡在系统之外, 之后无法执行必要的管理操作。
请求示例
{
// 区域标识(必要)
"ZoneId": 0,
// 用户姓名(必要)
"Name": "小陈",
// 登录密码(必要)
"Password": "XXXXXXXXXX",
// 用户编号(可选)
"Number": "10001",
// 电子邮件(可选)
"Email": "xc@joyzl.com",
// 电话号码(可选)
"Mobile": "13883062895",
// 用户角色(可选)
"Role": 9
}
响应示例
{
// 回显参数
"ZoneId": 0,
"Name": "小陈",
"Number": "10001",
"Email": "xc@joyzl.com",
"Mobile": "13883062895",
"Role": {
"Value": 9,
"Name": "ADMINISTRATOR",
"Text": "管理员"
},
// 用户标识
"Id": 6892182278299069,
// 创建时间
"Created": "2023-08-09 17:39:14",
// 响应状态码
"Status": 2
}
用户唯一性检查(UserUnique)
检查用户的验证手机号(Key=Mobile)、编号(Key=Number)和电子邮件(Key=Email)是否可用,既未被其它用户占用。 可选的用户标识(Id)可用以排除当前用户自身。
请求示例
{
// 用户标识(可选)
"Id":6892182278299069,
// 鉴别内容(必须)
"Key":"xc@joyzl.com"
}响应示例
{
// 回显参数
"Id":6892182278299069,
"Key":"xc@joyzl.com",
// 可用状态
"Available": true,
// 响应状态码
"Status": 2
}修改用户(UserUpdate)
通过用户标识(Id)修改用户的常规字段值。 用户所属的区域调整须通过 移动用户(UserMove) 接口实现; 用户的启用或禁用须通过 启用或禁用用户(UserEnable) 接口实现; 用户的密码修改须通过 重置用户密码(UserReset) 接口实现。
当前用户不能修改自身角色(Role),只有管理员可以修改其它用户常规信息和角色(Role), 如果指定用户(Id)不存在,请求将返回 不存在(NOEXISTS:5) ; 如果指定的手机号(Mobile)、编号(Number)和电子邮件(Email)已被其它用户占用,将返回 冲突(CONFLICT:12) ; 如果当前用户不属于管理员(ADMINISTRATOR:9) ,或指定用户(Id)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 用户标识(必要)
"Id":6892182362899172,
// 用户姓名(必要)
"Name": "小陈",
// 用户编号(可选)
"Number": "1001",
// 手机号码(可选)
"Mobile": "13883062895",
// 电子邮件(可选)
"Email": "931661600@qq.com",
// 用户角色(可选)
"Role": 9
}
响应示例
{
// 回显参数
"Id":6892182362899172,
"Name": "小陈",
"Number": "1001",
"Mobile": "13883062895",
"Email": "931661600@qq.com",
"Role": {
"Value": 9,
"Name": "ADMINISTRATOR",
"Text": "管理员"
},
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}启用或禁用用户(UserEnable)
被禁用的用户不能在任何端登录系统,如果已登录令牌将立即失效,链路将会被强制断开。
如果指定用户(Id)不存在,请求将返回 不存在(NOEXISTS:5) ; 如果指定用户(Id)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069,
// 可用状态(必要)
"Enable": false
}
响应示例
{
// 回显参数
"Id": 6892182278299069,
"Enable": false,
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}
移动用户(UserMove)
移动用户到其它的区域,所有用户只能访问所在区域(含子区域)的数据。
如果指定用户(Id)或区域(ZoneId)不存在,请求将返回 不存在(NOEXISTS:5) ; 如果指定用户(Id)或区域(ZoneId)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069,
// 区域标识(必要)
"ZoneId": 6892179848953340
}响应示例
{
// 回显参数
"Id": 6892182278299069,
"ZoneId": 6892179848953340,
// 更新时间
"Updated": "2023-08-09 16:57:52",
// 响应状态码
"Status": 2
}修改或重置用户密码(UserReset)
用户标识(Id)为当前用户时,可修改当前用户登录密码,同时须校验旧密码; 如果用户标识(Id)为其它用户,则可重置其它用户密码,此时可省略旧密码, 但要求当前登录用户具有管理员角色(ADMINISTRATOR:9),并拥有有效管理权限范围。
如果指定用户(Id)不存在,请求将返回 不存在(NOEXISTS:5) ; 如果指定用户(Id)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069,
// 新密码(必要)
"NewPassword": "XXXXXXXXXX",
// 旧密码(可选)
"OldPassword": "XXXXXXXXXX"
}
响应示例
{
// 回显参数
"Id": 6892182278299069,
// 响应状态码
"Status": 2
}删除用户(UserDelete)
删除指定用户,如果已登录令牌将立即失效,链路将会被强制断开。
如果指定用户(Id)不存在,请求将返回 不存在(NOEXISTS:5) ; 如果指定用户(Id)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 用户标识(必要)
"Id": 6892182278299069
}
响应示例
{
// 回显参数
"Id": 6892182278299069,
// 响应状态码
"Status": 2
}轮值
轮值表示工厂车间的上下班时间, 装备将根据设定的轮值时间记录每个时间段的产量, 表计将根据设定的轮值时间记录每个时间段的能耗。 装备和表计将按所在区域及父区域匹配轮值,直至企业级全局轮值。 如果未配置任何轮值,系统默认全天轮值 (00:00:00 ~ 23:59:59)。
工厂可以将轮值时间段与实际工作时间对应, 也可以将实际工作时间拆分为多个更小的轮值。 更小的轮值有助于记录小段时间的产量和能耗, 如果工厂实施了每小时报工制度,可以与此对应。
获取多个轮值(ShiftSelect)
获取全部或指定区域(ZoneId)的轮值,可见范围取决于用户所在的区域。 缺省所有参数时,返回当前用户可见范围的所有轮值; 指定区域标识(ZoneId)参数时,仅返回指定区域(不含子区域)的轮值。
如果指定区域(ZoneId)不存在,请求将返回 不存在(NOEXISTS:5) ; 如果指定区域(ZoneId)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 区域标识(可选)
"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
}响应的轮值集合(Shifts)数组不保证任何顺序。
校验轮值时间(ShiftUnique)
区域(ZoneId)中的多个轮值之间的时间 (Begin ~ End) 不能重叠,在创建或修改前应先校验轮值时间是否可用。 指定轮值标识(Id)参数时,将排除指定轮值的时段。 缺省区域(ZoneId)时默认为根区域。
请求示例
{
// 轮值标识(可选)
"Id":6926833763504759,
// 区域标识(可选)
"ZoneId": 6892182769831190,
// 开始时间(必要)
"Begin":"08:00:00",
// 结束时间(必要)
"End":"18:00:00"
}响应示例
{
// 回显参数
"Id":6926833763504759,
"ZoneId": 6892182769831190,
"Begin":"08:00:00",
"End":"18:00:00",
// 可用状态
"Available": false,
// 响应状态码
"Status": 2
}新建轮值(ShiftCreate)
轮值可位于企业(根级)或任意区域,位于企业的轮值即为全局轮值, 位于区域的轮值仅作用于所属区域和子区域, 既各个区域(厂区)可以采用不同的轮值时间。
如果开始时间(Begin)和结束时间(End)与区域(ZoneId)中其它轮值重叠,将返回 冲突(CONFLICT:12) , 在请求创建新轮值之前应通过 校验轮值时间(ShiftUnique) 接口事先验证; 缺省区域(ZoneId)时默认为根区域,如果区域(ZoneId)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 区域标识(可选)
"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)修改轮值的常规字段值。 由于轮值的特殊性没有提供移动区域的操作。
如果开始时间(Begin)和结束时间(End)与区域中其它轮值重叠,将返回 冲突(CONFLICT:12) , 在请求修改轮值之前应通过 校验轮值时间(ShiftUnique) 接口事先验证; 如果轮值(Id)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 轮值标识(必要)
"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)位于当前用户所在区域之外,请求将被 拒绝(DENIED:3) 。
请求示例
{
// 轮值标识(必要)
"Id":6926833763504759
}响应示例
{
// 回显参数
"Id":6926833763504759,
// 响应状态码
"Status":2
}
