diff --git a/iot/model/permission-model.go b/iot/model/permission-model.go index 8cd7dc7..3da7b35 100644 --- a/iot/model/permission-model.go +++ b/iot/model/permission-model.go @@ -28,3 +28,73 @@ type PermissionGroupList struct { Rows []PermissionGroup `json:"rows"` } `json:"data"` } + +type PermissionGroupAddPersons struct { + GroupId string `json:"groupId"` + EmployeeNos []string `json:"employeeNos"` + AutoIssue bool `json:"autoIssue"` //是否自动下发 + Permissions []PermissionGroupAddPersonsData `json:"permissions"` //人员权限信息列表,如果人员绑定权限组时未指定门禁权限信息,则默认使用人员信息中的门禁权限信息;若人员信息中也没有门禁权限信息,则按默认值下发 +} + +type PermissionGroupAddPersonsData struct { + EmployeeNo string `json:"employeeNo"` + PersonPhone string `json:"personPhone"` + FloorNo int `json:"floorNo"` + RoomNo int `json:"roomNo"` + ValidBeginTime string `json:"validBeginTime"` + ValidEndTime string `json:"validEndTime"` + PlanTemplateNos []int `json:"planTemplateNos"` + DynamicCode string `json:"dynamicCode"` + MaxOpenDoorTime int `json:"maxOpenDoorTime"` + BelongGroup int `json:"belongGroup"` + CallNumbers []string `json:"callNumbers"` + FloorNumbers []int `json:"floorNumbers"` + LocalUIRight int `json:"localUIRight"` + AuthCode string `json:"authCode"` +} + +type PermissionGroupGetEmployeeNos struct { + Hikvision + Data struct { + PageNo int `json:"pageNo"` + PageSize int `json:"pageSize"` + Total int `json:"total"` + Rows []struct { + EmployeeNo string `json:"employeeNo"` + } `json:"rows"` + } `json:"data"` +} + +type PermissionGroupGetDeviceSerials struct { + Hikvision + Data struct { + PageNo int `json:"pageNo"` + PageSize int `json:"pageSize"` + Total int `json:"total"` + Rows []struct { + DeviceSerial string `json:"deviceSerial"` + HasCapability bool `json:"hasCapability"` + } `json:"rows"` + } `json:"data"` +} + +type PermissionGroupGetPersonPermission struct { + Hikvision + Data struct { + PhoneNo string `json:"phoneNo"` + PersonType string `json:"personType"` + FloorNo int `json:"floorNo"` + RoomNo int `json:"roomNo"` + ValidBeginTime string `json:"validBeginTime"` + ValidEndTime string `json:"validEndTime"` + PlanTemplateNos []int `json:"planTemplateNos"` + MaxOpenDoorTime int `json:"maxOpenDoorTime"` + DynamicCode string `json:"dynamicCode"` + BelongGroup string `json:"belongGroup"` + CreateTime string `json:"createTime"` + LocalUIRight int `json:"localUIRight"` + CallNumbers []string `json:"callNumbers"` + FloorNumbers []int `json:"floorNumbers"` + AuthCode string `json:"authCode"` + } `json:"data"` +} diff --git a/iot/model/person-model.go b/iot/model/person-model.go index 921119d..e1f06d1 100644 --- a/iot/model/person-model.go +++ b/iot/model/person-model.go @@ -3,7 +3,16 @@ package model type PersonCreateData struct { Hikvision Data struct { - Person + EmployeeNo string `json:"employeeNo"` + PersonName string `json:"personName"` + PersonPhone string `json:"personPhone"` + FaceUrl string `json:"faceUrl"` + PersonType string `json:"personType"` + FloorNo int `json:"floorNo"` + RoomNo int `json:"roomNo"` + ValidBeginTime string `json:"validBeginTime"` + ValidEndTime string `json:"validEndTime"` + PlanTemplateNos []int `json:"planTemplateNos"` DynamicCode string `json:"dynamicCode"` MaxOpenDoorTime int `json:"maxOpenDoorTime"` CallNumbers []string `json:"callNumbers"` diff --git a/iot/oauth_test.go b/iot/oauth_test.go index 0b4362e..aa0b7b5 100644 --- a/iot/oauth_test.go +++ b/iot/oauth_test.go @@ -4,10 +4,230 @@ import ( "fmt" "log" "testing" + + "myschools.me/suguo/hikvision/iot/model" ) func TestOauth(t *testing.T) { - // detail, err := DeviceDetail("AF8534579") + // result, err := PermissionGroupCreate("第一个权限组") + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(result) + + // r2, err := PermissionGroupCreate("第二个权限组") + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r2) + + // r3, err := PermissionGroupList(1, 20) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println("list ", r3) + + // r1, err := PermissionGroupUpdate(result.Data.GroupId, "第一个修改过权限组") + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r1) + + // r4, err := PermissionGroupDelete(r2.Data.GroupId) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r4) + + // r5, err := PermissionGroupList(1, 20) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println("list ", r5) + + r7, err := PersonCreate("666", "GBVFDAF", "18357062933", "", true) + if err != nil { + log.Fatal(err) + return + } + fmt.Println(r7) + + groupid := "4b9e7ab1068d45269b1acb6c8b50d855" + + r6, err := PermissionGroupAddPersons(&model.PermissionGroupAddPersons{ + GroupId: groupid, + EmployeeNos: []string{"666"}, + AutoIssue: true, + Permissions: []model.PermissionGroupAddPersonsData{ + { + EmployeeNo: "666", + PersonPhone: "18357062933", + FloorNo: 33, + RoomNo: 1, + ValidBeginTime: "2023-11-23T00:00:59+08:00", + ValidEndTime: "2023-11-23T00:00:59+08:00", + PlanTemplateNos: []int{1}, + DynamicCode: "123456", + MaxOpenDoorTime: 10, + BelongGroup: 2, + CallNumbers: []string{"1-1-1-101"}, + FloorNumbers: []int{1, 3}, + LocalUIRight: 1, + AuthCode: "123456", + }, + }, + }) + if err != nil { + log.Fatal(err) + return + } + fmt.Println("list ", r6) + + r8, err := PermissionGroupGetEmployeeNos(1, 20, groupid) + if err != nil { + log.Fatal(err) + return + } + fmt.Println(r8) + + // r9, err := PermissionGroupRemovePersons(groupid, []string{"333"}) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r9) + + // r10, err := PermissionGroupGetEmployeeNos(1, 20, groupid) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r10) + + // r10, err := PermissionGroupAddDevice(groupid, true, []string{"AF8534579"}, true) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r10) + + // r11, err := PermissionGroupGetDeviceSerials(1, 20, groupid) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r11) + + // r12, err := PermissionGroupRemoveDevice(groupid, []string{"AF8534579"}) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r12) + + // r13, err := PermissionGroupGetDeviceSerials(1, 20, groupid) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r13) + + r14, err := PermissionGroupGetPersonPermission("666", groupid) + if err != nil { + log.Fatal(err) + return + } + fmt.Println(r14) + +} + +/* +// result, err := PLANWEEKCreateOrUpdate("222", true, []model.PlanWeek{ + // { + // Week: "Monday", + // TimeSegment: []model.PlanPort{ + // { + // Index: 1, + // Enable: true, + // BeginTime: "08:00:00", + // EndTime: "10:30:00", + // }, + // }, + // }, + // }) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(result) + + // r1, err := PLANWEEKGetAll(1, 20) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r1) + + // r2, err := PLANWEEKDelete("111") + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r2) + + // r3, err := PLANWEEKGetAll(1, 20) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r3) +*/ + +/* + // result, err := PLANHolidayCreateOrUpdate("555", true, "2023-11-22", "2023-11-25", []model.PlanPort{ + // { + // Index: 1, + // Enable: true, + // BeginTime: "08:00:00", + // EndTime: "10:30:00", + // }, + // }) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(result) + + // r1, err := PLANHolidayGetAll(1, 20) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r1) + + // r2, err := PLANHolidayDelete("555") + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r2) + + // r3, err := PLANHolidayGetAll(1, 20) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(r3) +*/ + +/* +// detail, err := DeviceDetail("AF8534579") // if err != nil { // log.Fatal(err) // return @@ -21,7 +241,7 @@ func TestOauth(t *testing.T) { // } // fmt.Println(detail) - devid := "f65a8b5c05db49388efa04426047de48" + // devid := "f65a8b5c05db49388efa04426047de48" // fmt.Println(devid) // result, err := PlanWeekConfigSet("userRight", devid, 1, "222") @@ -122,20 +342,20 @@ func TestOauth(t *testing.T) { // } // fmt.Println(r9) - r10, err := PlanGlobalConfigClear(devid, true, true, true, true) - if err != nil { - log.Fatal(err) - return - } + // r10, err := PlanGlobalConfigClear(devid, true, true, true, true) + // if err != nil { + // log.Fatal(err) + // return + // } - fmt.Println(r10) + // fmt.Println(r10) - detail, err := PLANWeekTempleteGetAll(1, 20) - if err != nil { - log.Fatal(err) - return - } - fmt.Println(detail) + // detail, err := PLANWeekTempleteGetAll(1, 20) + // if err != nil { + // log.Fatal(err) + // return + // } + // fmt.Println(detail) // result, err := PlanWeekConfigGet("userRight", devid, 1) // if err != nil { @@ -150,83 +370,4 @@ func TestOauth(t *testing.T) { // return // } // fmt.Println(r4) -} - -/* -// result, err := PLANWEEKCreateOrUpdate("222", true, []model.PlanWeek{ - // { - // Week: "Monday", - // TimeSegment: []model.PlanPort{ - // { - // Index: 1, - // Enable: true, - // BeginTime: "08:00:00", - // EndTime: "10:30:00", - // }, - // }, - // }, - // }) - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(result) - - // r1, err := PLANWEEKGetAll(1, 20) - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(r1) - - // r2, err := PLANWEEKDelete("111") - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(r2) - - // r3, err := PLANWEEKGetAll(1, 20) - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(r3) -*/ - -/* - // result, err := PLANHolidayCreateOrUpdate("555", true, "2023-11-22", "2023-11-25", []model.PlanPort{ - // { - // Index: 1, - // Enable: true, - // BeginTime: "08:00:00", - // EndTime: "10:30:00", - // }, - // }) - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(result) - - // r1, err := PLANHolidayGetAll(1, 20) - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(r1) - - // r2, err := PLANHolidayDelete("555") - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(r2) - - // r3, err := PLANHolidayGetAll(1, 20) - // if err != nil { - // log.Fatal(err) - // return - // } - // fmt.Println(r3) */ diff --git a/iot/permission-iot.go b/iot/permission-iot.go index 5edd8de..8cb152e 100644 --- a/iot/permission-iot.go +++ b/iot/permission-iot.go @@ -99,15 +99,137 @@ func PermissionGroupList(pageno, pagesize int) (*model.PermissionGroupList, erro } // 权限组绑定人员 +func PermissionGroupAddPersons(req *model.PermissionGroupAddPersons) (*model.Hikvision, error) { + + resp, err := hikvisionRequest("POST", permission_group_addperson, 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.PermissionGroupDeleteRes, error) { + req := &struct { + GroupId string `json:"groupId"` + EmployeeNos []string `json:"employeeNos"` + }{ + GroupId: groupid, + EmployeeNos: employeeNos, + } + resp, err := hikvisionRequest("POST", permission_group_removePersons, req) + if err != nil { + return nil, err + } + var result = &model.PermissionGroupDeleteRes{} + 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", permission_group_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", permission_group_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.PermissionGroupDeleteRes, error) { + req := &struct { + GroupId string `json:"groupId"` + DeviceSerials []string `json:"deviceSerials"` + }{ + GroupId: groupId, + DeviceSerials: deviceSerials, + } + resp, err := hikvisionRequest("POST", permission_group_removeDevices, req) + if err != nil { + return nil, err + } + var result = &model.PermissionGroupDeleteRes{} + 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", permission_group_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.PermissionGroupGetPersonPermission, error) { + + resp, err := hikvisionRequest("GET", fmt.Sprintf("%s?employeeNo=%s&groupId=%s", permission_group_personPermission, employeeNo, groupId), nil) + if err != nil { + return nil, err + } + var result = &model.PermissionGroupGetPersonPermission{} + if err := json.Unmarshal(resp, &result); err != nil { + return nil, err + } + return result, nil +}