hikvision/iot/permission-iot.go

351 lines
11 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package iot
import (
"encoding/json"
"fmt"
"myschools.me/suguo/hikvision/iot/model"
)
// 权限组新增
func PermissionGroupCreate(groupname string) (*model.PermissionGroupCreateRes, error) {
req := &struct {
GroupName string `json:"groupName"`
}{
GroupName: groupname,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/create", req)
if err != nil {
return nil, err
}
var result = &model.PermissionGroupCreateRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组更新
func PermissionGroupUpdate(groupid, groupname string) (*model.Hikvision, error) {
req := &struct {
GroupID string `json:"groupId"`
GroupName string `json:"groupName"`
}{
GroupID: groupid,
GroupName: groupname,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/update", req)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组删除
func PermissionGroupDelete(groupid string) (*model.PermissionDeleteRes, error) {
resp, err := hikvisionRequest("POST", fmt.Sprintf("/api/v1/open/accessControl/permissionGroups/delete?groupId=%s", groupid), nil)
if err != nil {
return nil, err
}
var result = &model.PermissionDeleteRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 获取权限组列表
func PermissionGroupList(pageno, pagesize int) (*model.PermissionGroupList, error) {
req := &struct {
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}{
PageNo: pageno,
PageSize: pagesize,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/actions/page", req)
if err != nil {
return nil, err
}
var result = &model.PermissionGroupList{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组绑定人员
func PermissionGroupAddPersons(req *model.PermissionGroupAddPersons) (*model.Hikvision, error) {
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/actions/addPersons", req)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组解绑人员
func PermissionGroupRemovePersons(groupid string, employeeNos []string) (*model.PermissionDeleteRes, error) {
req := &struct {
GroupId string `json:"groupId"`
EmployeeNos []string `json:"employeeNos"`
}{
GroupId: groupid,
EmployeeNos: employeeNos,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/actions/removePersons", req)
if err != nil {
return nil, err
}
var result = &model.PermissionDeleteRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组获取人员编号列表
func PermissionGroupGetEmployeeNos(pageNo, pageSize int, groupId string) (*model.PermissionGroupGetEmployeeNos, error) {
req := &struct {
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
GroupId string `json:"groupId"`
}{
PageNo: pageNo,
PageSize: pageSize,
GroupId: groupId,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/actions/getEmployeeNos", req)
if err != nil {
return nil, err
}
var result = &model.PermissionGroupGetEmployeeNos{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组绑定设备
func PermissionGroupAddDevice(groupId string, checkCapability bool, deviceSerials []string, autoIssue bool) (*model.Hikvision, error) {
req := &struct {
GroupId string `json:"groupId"`
CheckCapability bool `json:"checkCapability"` //绑定时校验是否有能力集。该配置建议开启,用于过滤没有能力集的设备并告知开发者。
DeviceSerials []string `json:"deviceSerials"`
AutoIssue bool `json:"autoIssue"` //是否自动下发,true或者不填默认调用本接口后自动下发权限组,false为手动下发(需要调用根据权限组下发接口下发)
}{
GroupId: groupId,
CheckCapability: checkCapability,
DeviceSerials: deviceSerials,
AutoIssue: autoIssue,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/actions/addDevices", req)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组解绑设备
func PermissionGroupRemoveDevice(groupId string, deviceSerials []string) (*model.PermissionDeleteRes, error) {
req := &struct {
GroupId string `json:"groupId"`
DeviceSerials []string `json:"deviceSerials"`
}{
GroupId: groupId,
DeviceSerials: deviceSerials,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/actions/removeDevices", req)
if err != nil {
return nil, err
}
var result = &model.PermissionDeleteRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 权限组获取设备序列号列表
func PermissionGroupGetDeviceSerials(pageNo, pageSize int, groupId string) (*model.PermissionGroupGetDeviceSerials, error) {
req := &struct {
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
GroupId string `json:"groupId"`
}{
PageNo: pageNo,
PageSize: pageSize,
GroupId: groupId,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/permissionGroups/actions/getDeviceSerials", req)
if err != nil {
return nil, err
}
var result = &model.PermissionGroupGetDeviceSerials{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 人员权限信息查询
func PermissionGroupGetPersonPermission(employeeNo, groupId string) (*model.PermissionPersonPermissionRes, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("/api/v1/open/accessControl/personPermission/get?employeeNo=%s&groupId=%s", employeeNo, groupId), nil)
if err != nil {
return nil, err
}
var result = &model.PermissionPersonPermissionRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
/*-----------------------------------*/
// 根据权限组下发权限
func PermissionAllotsIssuedByGroup(groupId string) (*model.PermissionDeleteRes, error) {
req := &struct {
GroupId string `json:"groupId"`
}{
GroupId: groupId,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/allots/actions/issuedByGroup", req)
if err != nil {
return nil, err
}
var result = &model.PermissionDeleteRes{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 查询下发失败记录
func PermissionAllotsSearchStatus(pageNo, pageSize int, groupId, deviceSerial, employeeNo, statisticsId string) (*model.PermissionAllotsSearchStatus, error) {
req := &struct {
PageNo int `json:"pageNo"` //必填
PageSize int `json:"pageSize"` //必填
GroupId string `json:"groupId"`
DeviceSerial string `json:"deviceSerial"`
EmployeeNo string `json:"employeeNo"`
StatisticsId string `json:"statisticsId"`
}{
PageNo: pageNo,
PageSize: pageSize,
GroupId: groupId,
DeviceSerial: deviceSerial,
EmployeeNo: employeeNo,
StatisticsId: statisticsId,
}
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/allots/actions/searchStatus", req)
if err != nil {
return nil, err
}
var result = &model.PermissionAllotsSearchStatus{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 下发所有失败人员
//
// 将所有权限组下发失败的权限重新下发到权限组关联的设备中;请勿对该接口设置很频繁的定时任务!!!
func PermissionAllotsIssuedAllGroups() (*model.Hikvision, error) {
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/allots/actions/issuedAllGroups", nil)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 清空设备本地权限
func PermissionAllotsClearDeviceAllAuth(deviceSerial string) (*model.Hikvision, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("%s?deviceSerial=%s", "/api/v1/open/accessControl/allots/actions/clearDeviceAllAuth", deviceSerial), nil)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 获取设备能力集
// 补偿获取设备添加时未能获取到的能力集。
// 该接口仅在设备添加后,设备绑定权限组提示“设备没有能力集”时使用,请勿频繁调用。
// 该接口不返回任何参数,如果遇到“获取能力集失败”异常,请从设备是否支持门禁能力集、设备是否在线、设备网络是否畅通等几个方面进行排查。
func PermissionAllotsGetCapability(deviceSerial string) (*model.Hikvision, error) {
resp, err := hikvisionRequest("GET", fmt.Sprintf("%s?deviceSerial=%s", "/api/v1/open/accessControl/allots/actions/getCapability", deviceSerial), nil)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 人员权限信息更新
func PermissionGroupUpdatePersonPermission(req *model.PermissionPersonPermissionUpdate) (*model.Hikvision, error) {
resp, err := hikvisionRequest("POST", "/api/v1/open/accessControl/personPermission/update", req)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}
// 人员同步下发
// 单个人员下发到单个设备用户在人员绑定权限组时设置不自动下发autoIssue=false再调用同步下发接口下发人员权限。
func PermissionAllotsSyncIssued(deviceSerial, employeeNo string) (*model.Hikvision, error) {
req := &struct {
DeviceSerial string `json:"deviceSerial"`
EmployeeNo string `json:"employeeNo"`
}{
DeviceSerial: deviceSerial,
EmployeeNo: employeeNo,
}
resp, err := hikvisionRequest("POST", fmt.Sprintf("%s?deviceSerial=%s", "/api/v1/open/accessControl/allots/actions/syncIssued", deviceSerial), req)
if err != nil {
return nil, err
}
var result = &model.Hikvision{}
if err := json.Unmarshal(resp, &result); err != nil {
return nil, err
}
return result, nil
}