148 lines
4.0 KiB
Go
148 lines
4.0 KiB
Go
package iot
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
|
||
"myschools.me/suguo/hikvision/iot/model"
|
||
)
|
||
|
||
/*
|
||
基础服务能力 > 设备管理 > 设备分组管理
|
||
*/
|
||
|
||
const (
|
||
/*设备分组管理*/
|
||
GROUP_BASE = "https://api2.hik-cloud.com/api/v1/open/basic/groups"
|
||
GROUP_ADD = GROUP_BASE + "/create"
|
||
GROUP_REMOVE = GROUP_BASE + "/delete"
|
||
GROUP_UPDATE = GROUP_BASE + "/update"
|
||
GROUP_DETAIL = GROUP_BASE + "/get"
|
||
GROUP_LISTALL = GROUP_BASE + "/actions/listAll"
|
||
GROUP_CHILD_LIST = GROUP_BASE + "/actions/childrenList"
|
||
)
|
||
|
||
// 该接口用于通过编号来新增组。最多支持3000个组,最多支持5层嵌套。
|
||
func GroupAdd(groupname, groupno, parentno string) (*model.Hikvision, error) {
|
||
|
||
req := &struct {
|
||
GroupName string `json:"groupName"` //组名称
|
||
GroupNo string `json:"groupNo"` //组编号
|
||
ParentNo string `json:"parentNo"` //父节点组编号
|
||
}{
|
||
GroupName: groupname,
|
||
GroupNo: groupno,
|
||
ParentNo: parentno,
|
||
}
|
||
|
||
resp, err := hikvisionRequest("POST", GROUP_ADD, req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
var result *model.Hikvision
|
||
if err := json.Unmarshal(resp, &result); err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
if result.Code != 200 {
|
||
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
|
||
}
|
||
return result, nil
|
||
}
|
||
|
||
// 该接口用于通过组编号来删除组。组下面挂有下级节点或者设备的不可以删除,需清空后进行删除。
|
||
func GroupUpdate(groupname, groupno string) (*model.Hikvision, error) {
|
||
|
||
req := &struct {
|
||
GroupName string `json:"groupName"` //组名称
|
||
GroupNo string `json:"groupNo"` //组编号
|
||
}{
|
||
GroupName: groupname,
|
||
GroupNo: groupno,
|
||
}
|
||
|
||
resp, err := hikvisionRequest("POST", GROUP_UPDATE, req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
var result *model.Hikvision
|
||
if err := json.Unmarshal(resp, &result); err != nil {
|
||
return nil, err
|
||
}
|
||
if result.Code != 200 {
|
||
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
|
||
}
|
||
return result, nil
|
||
}
|
||
|
||
// 该接口用于通过组编号来删除组。组下面挂有下级节点或者设备的不可以删除,需清空后进行删除。
|
||
func GroupRemove(groupNo string) (*model.Hikvision, error) {
|
||
|
||
resp, err := hikvisionRequest("POST", fmt.Sprintf("%s?groupNo=%s", GROUP_REMOVE, groupNo), nil)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
var result *model.Hikvision
|
||
if err := json.Unmarshal(resp, &result); err != nil {
|
||
return nil, err
|
||
}
|
||
if result.Code != 200 {
|
||
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
|
||
}
|
||
return result, nil
|
||
}
|
||
|
||
// 该接口用于通过组编号获取组的详细信息
|
||
func GroupDetail(groupNo string) (*model.Group, error) {
|
||
|
||
resp, err := hikvisionRequest("GET", fmt.Sprintf("%s?groupNo=%s", GROUP_DETAIL, groupNo), nil)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
var result = &struct {
|
||
model.Hikvision
|
||
Data model.Group `json:"data"`
|
||
}{}
|
||
if err := json.Unmarshal(resp, &result); err != nil {
|
||
return nil, err
|
||
}
|
||
if result.Code != 200 {
|
||
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
|
||
}
|
||
return &result.Data, nil
|
||
}
|
||
|
||
// 该接口用于获取所有组。
|
||
func GroupGetAll() ([]model.Group, error) {
|
||
|
||
resp, err := hikvisionRequest("GET", GROUP_LISTALL, nil)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
var result *model.Groups
|
||
if err := json.Unmarshal(resp, &result); err != nil {
|
||
return nil, err
|
||
}
|
||
if result.Code != 200 {
|
||
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
|
||
}
|
||
return result.Data, nil
|
||
}
|
||
|
||
// 该接口用于通过组编号查找某组的下级节点。如果父节点为空,则查询根节点。
|
||
func GroupChildList(groupNo string) ([]model.Group, error) {
|
||
|
||
resp, err := hikvisionRequest("GET", fmt.Sprintf("%s?parentNo=%s", GROUP_CHILD_LIST, groupNo), nil)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
var result *model.Groups
|
||
if err := json.Unmarshal(resp, &result); err != nil {
|
||
return nil, err
|
||
}
|
||
if result.Code != 200 {
|
||
return nil, fmt.Errorf("result errcode:%d errmsg:%s", result.Code, result.Message)
|
||
}
|
||
return result.Data, nil
|
||
}
|