123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479 |
- package service
- import (
- "city_chips/internal/model"
- "city_chips/internal/repository"
- "encoding/json"
- "errors"
- "strings"
- "github.com/spf13/viper"
- "github.com/zxbit2011/hikvisionOpenAPIGo"
- )
- type HikvisionService interface {
- Hikvision(url string, body map[string]string, timeout int) (hikvisionOpenAPIGo.Result, error)
- DeviceResource(Device string) (error, model.DeviceResource)
- GetRegionsRoot() (error, model.RegionsRoot)
- GetRegionsSubRegions(pageNo, pageSize string) (error, model.RegionsSubRegions)
- GetVqdByIndexCodes(pageNo, pageSize string, indexCodes []string) (error, model.VqdList)
- GetCameraOnline(regionId, includeSubNode, status, pageNo, pageSize string, indexCodes []string) (error, model.CameraOnline)
- GetRecordList(beginTime, endTime, pageNo, pageSize string, indexCodes []string) (error, model.RecordList)
- GetCamerasList(pageNo, pageSize string) (error, model.Cameras)
- GetVisitingRecords(receptionistId, receptionistName, visitorName, pageNo, pageSize string) (error, model.VisitingRecords)
- GetVisitorTypeInfo(pageNo, pageSize string) (error, model.VisitorTypeInfo)
- GetAppointmentRecords(receptionistId, visitorName, phoneNo, pageNo, pageSize string) (error, model.VisitorTypeInfo)
- GetVisitorTypeList() (error, model.VisitorTypeList)
- GetTurnoverSearch(pageNo, pageSize string) (error, model.TurnoverSearch)
- }
- func NewHikvisionService(service *Service, hikvisionRepository repository.HikvisionRepository, conf *viper.Viper) HikvisionService {
- return &hikvisionService{
- Service: service,
- hikvisionRepository: hikvisionRepository,
- conf: conf,
- }
- }
- type hikvisionService struct {
- *Service
- hikvisionRepository repository.HikvisionRepository
- conf *viper.Viper
- }
- // Hikvision 海康威视对接
- func (s *hikvisionService) Hikvision(url string, body map[string]string, timeout int) (hikvisionOpenAPIGo.Result, error) {
- config := hikvisionOpenAPIGo.HKConfig{
- Ip: s.conf.GetString("hikvision.Ip"),
- Port: s.conf.GetInt("hikvision.Port"),
- AppKey: s.conf.GetString("hikvision.AppKey"),
- Secret: s.conf.GetString("hikvision.Secret"),
- IsHttps: s.conf.GetBool("hikvision.IsHttps"),
- }
- result, err := config.HttpPost(url, body, timeout)
- return result, err
- }
- // DeviceResource 根据设备类型获取设备资源
- func (s *hikvisionService) DeviceResource(Device string) (error, model.DeviceResource) {
- var deviceResource model.DeviceResource
- m := make(map[string]string)
- m["pageNo"] = "1"
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- m["resourceType"] = Device
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.deviceResource"), m, 15)
- if err != nil {
- return errors.New("获取设备资源失败"), deviceResource
- }
- if hikvision.Code != "0" {
- return errors.New("获取设备资源失败"), deviceResource
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), deviceResource
- }
- err = json.Unmarshal(marshalString, &deviceResource)
- if err != nil {
- return errors.New("json反序列化失败"), deviceResource
- }
- return nil, deviceResource
- }
- // GetRegionsRoot 获取根目录资源信息
- func (s *hikvisionService) GetRegionsRoot() (error, model.RegionsRoot) {
- var regionsRoot model.RegionsRoot
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.regionsRoot"), nil, 15)
- if err != nil {
- return errors.New("获取根目录资源失败"), regionsRoot
- }
- if hikvision.Code != "0" {
- return errors.New("获取根目录资源失败"), regionsRoot
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), regionsRoot
- }
- err = json.Unmarshal(marshalString, ®ionsRoot)
- if err != nil {
- return errors.New("json反序列化失败"), regionsRoot
- }
- return nil, regionsRoot
- }
- // GetRegionsSubRegions 获取子目录资源信息
- func (s *hikvisionService) GetRegionsSubRegions(pageNo, pageSize string) (error, model.RegionsSubRegions) {
- var regionsSubRegions model.RegionsSubRegions
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- m["parentIndexCode"] = "0"
- m["resourceType"] = "0"
- m["cascadeFlag"] = "0"
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.regionsSubRegions"), m, 15)
- if err != nil {
- return errors.New("获取子目录资源信息失败"), regionsSubRegions
- }
- if hikvision.Code != "0" {
- return errors.New("获取子目录资源信息失败"), regionsSubRegions
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), regionsSubRegions
- }
- err = json.Unmarshal(marshalString, ®ionsSubRegions)
- if err != nil {
- return errors.New("json反序列化失败"), regionsSubRegions
- }
- return nil, regionsSubRegions
- }
- // GetVqdByIndexCodes 根据监控点列表查询视频质量诊断结果
- func (s *hikvisionService) GetVqdByIndexCodes(pageNo, pageSize string, indexCodes []string) (error, model.VqdList) {
- var vqdlist model.VqdList
- // 获取门禁状态
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- m["indexCodes"] = strings.Join(indexCodes, ",")
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.vqdList"), m, 15)
- if err != nil {
- return errors.New("获取视频质量诊断信息失败"), vqdlist
- }
- if hikvision.Code != "0" {
- return errors.New("获取视频质量诊断失败"), vqdlist
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), vqdlist
- }
- err = json.Unmarshal(marshalString, &vqdlist)
- if err != nil {
- return errors.New("json反序列化失败"), vqdlist
- }
- return nil, vqdlist
- }
- // GetCameraOnline 获取监控点在线状态
- //
- // regionId string false 区域编号,可从查询区域列表v2接口获取返回参数indexCode
- // includeSubNode string false 是否包含下级,1包含,0不包含(若regionId为空,则该参数不起作用)
- // indexCodes string[] false 监控点编码集,最大500,查询监控点列表接口获取返回参数cameraIndexCode
- // status string false 状态,1-在线,0-离线,-1-未检测
- func (s *hikvisionService) GetCameraOnline(regionId, includeSubNode, status, pageNo, pageSize string, indexCodes []string) (error, model.CameraOnline) {
- var cameraOnline model.CameraOnline
- // 获取门禁状态
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- if regionId != "" {
- m["regionId"] = regionId
- }
- if includeSubNode != "" {
- m["includeSubNode"] = includeSubNode
- }
- if status != "" {
- m["status"] = status
- }
- if len(indexCodes) > 0 {
- m["indexCodes"] = strings.Join(indexCodes, ",")
- }
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.getCameraOnline"), m, 15)
- if err != nil {
- return errors.New("获取监控点在线状态信息失败"), cameraOnline
- }
- if hikvision.Code != "0" {
- return errors.New("获取监控点在线状态失败"), cameraOnline
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), cameraOnline
- }
- err = json.Unmarshal(marshalString, &cameraOnline)
- if err != nil {
- return errors.New("json反序列化失败"), cameraOnline
- }
- return nil, cameraOnline
- }
- // GetRecordList 根据监控点列表查询录像完整性结果
- // pageNo integer true 当前页码,0 < pageNo
- // pageSize integer true 分页大小,0<pageSize≤1000
- // beginTime string true 录像开始日期,IOS8601格式
- // endTime string true 录像结束日期,IOS8601格式
- // indexCodes string[] true 监控点编号集,
- // 查询监控点列表接口获取返回参数cameraIndexCode
- func (s *hikvisionService) GetRecordList(beginTime, endTime, pageNo, pageSize string, indexCodes []string) (error, model.RecordList) {
- var recordList model.RecordList
- // 获取门禁状态
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- m["beginTime"] = beginTime
- m["endTime"] = endTime
- if len(indexCodes) > 0 {
- m["indexCodes"] = strings.Join(indexCodes, ",")
- }
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.recordList"), m, 15)
- if err != nil {
- return errors.New("获取监控点列表查询录像完整性失败"), recordList
- }
- if hikvision.Code != "0" {
- return errors.New("获取监控点列表查询录像完整性失败"), recordList
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), recordList
- }
- err = json.Unmarshal(marshalString, &recordList)
- if err != nil {
- return errors.New("json反序列化失败"), recordList
- }
- return nil, recordList
- }
- // GetCamerasList 分页获取监控点资源
- func (s *hikvisionService) GetCamerasList(pageNo, pageSize string) (error, model.Cameras) {
- var cameras model.Cameras
- // 获取门禁状态
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.cameras"), m, 15)
- if err != nil {
- return errors.New("获取监控点列表查询录像完整性失败"), cameras
- }
- if hikvision.Code != "0" {
- return errors.New("获取监控点列表查询录像完整性失败"), cameras
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), cameras
- }
- err = json.Unmarshal(marshalString, &cameras)
- if err != nil {
- return errors.New("json反序列化失败"), cameras
- }
- return nil, cameras
- }
- // GetVisitingRecords 查询访客来访记录v2
- // receptionistId 被访人唯一标识
- // receptionistName 被访人姓名
- // visitorName 访客名称
- func (s *hikvisionService) GetVisitingRecords(receptionistId, receptionistName, visitorName, pageNo, pageSize string) (error, model.VisitingRecords) {
- var visitingRecords model.VisitingRecords
- // 获取门禁状态
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- if receptionistId != "" {
- m["receptionistId"] = receptionistId
- }
- if receptionistName != "" {
- m["receptionistName"] = receptionistName
- }
- if visitorName != "" {
- m["visitorName"] = visitorName
- }
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitingRecords"), m, 15)
- if err != nil {
- return errors.New("获取查询访客来访记录失败"), visitingRecords
- }
- if hikvision.Code != "0" {
- return errors.New("获取查询访客来访记录失败"), visitingRecords
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), visitingRecords
- }
- err = json.Unmarshal(marshalString, &visitingRecords)
- if err != nil {
- return errors.New("json反序列化失败"), visitingRecords
- }
- return nil, visitingRecords
- }
- // GetVisitorTypeInfo 查询访客类型
- func (s *hikvisionService) GetVisitorTypeInfo(pageNo, pageSize string) (error, model.VisitorTypeInfo) {
- var visitorTypeInfo model.VisitorTypeInfo
- // 获取门禁状态
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitorTypeInfo"), m, 15)
- if err != nil {
- return errors.New("获取查询访客类型失败"), visitorTypeInfo
- }
- if hikvision.Code != "0" {
- return errors.New("获取查询访客类型失败"), visitorTypeInfo
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), visitorTypeInfo
- }
- err = json.Unmarshal(marshalString, &visitorTypeInfo)
- if err != nil {
- return errors.New("json反序列化失败"), visitorTypeInfo
- }
- return nil, visitorTypeInfo
- }
- // GetAppointmentRecords 查询预约记录v2
- // receptionistId 被访人唯一标识
- // visitorName 访客名称
- // phoneNo 手机号码
- func (s *hikvisionService) GetAppointmentRecords(receptionistId, visitorName, phoneNo, pageNo, pageSize string) (error, model.VisitorTypeInfo) {
- var visitorTypeInfo model.VisitorTypeInfo
- // 获取门禁状态
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- if receptionistId != "" {
- m["receptionistId"] = receptionistId
- }
- if visitorName != "" {
- m["visitorName"] = visitorName
- }
- if phoneNo != "" {
- m["phoneNo"] = phoneNo
- }
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitorTypeInfo"), m, 15)
- if err != nil {
- return errors.New("获取查询预约记录失败"), visitorTypeInfo
- }
- if hikvision.Code != "0" {
- return errors.New("获取查询预约记录失败"), visitorTypeInfo
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), visitorTypeInfo
- }
- err = json.Unmarshal(marshalString, &visitorTypeInfo)
- if err != nil {
- return errors.New("json反序列化失败"), visitorTypeInfo
- }
- return nil, visitorTypeInfo
- }
- // GetVisitorTypeList 查询全部访客类型
- func (s *hikvisionService) GetVisitorTypeList() (error, model.VisitorTypeList) {
- var visitorTypeList model.VisitorTypeList
- // 获取门禁状态
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitorTypeInfo"), nil, 15)
- if err != nil {
- return errors.New("获取访客类型失败"), visitorTypeList
- }
- if hikvision.Code != "0" {
- return errors.New("获取访客类型失败"), visitorTypeList
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), visitorTypeList
- }
- err = json.Unmarshal(marshalString, &visitorTypeList)
- if err != nil {
- return errors.New("json反序列化失败"), visitorTypeList
- }
- return nil, visitorTypeList
- }
- // GetTurnoverSearch 查询访客出入事件
- func (s *hikvisionService) GetTurnoverSearch(pageNo, pageSize string) (error, model.TurnoverSearch) {
- var turnoverSearch model.TurnoverSearch
- m := make(map[string]string)
- if pageNo != "" {
- m["pageNo"] = pageNo
- } else {
- m["pageNo"] = "1"
- }
- if pageSize != "" {
- m["pageSize"] = pageSize
- } else {
- m["pageSize"] = s.conf.GetString("hikvision.pageSize")
- }
- // 获取门禁状态
- hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.turnoverSearch"), m, 15)
- if err != nil {
- return errors.New("获取访客出入事件失败"), turnoverSearch
- }
- if hikvision.Code != "0" {
- return errors.New("获取访客出入事件失败"), turnoverSearch
- }
- marshalString, err := json.Marshal(hikvision)
- if err != nil {
- return errors.New("json序列化失败"), turnoverSearch
- }
- err = json.Unmarshal(marshalString, &turnoverSearch)
- if err != nil {
- return errors.New("json反序列化失败"), turnoverSearch
- }
- return nil, turnoverSearch
- }
|