package service import ( "city_chips/internal/model" "city_chips/internal/repository" "encoding/json" "errors" "github.com/spf13/viper" "github.com/zxbit2011/hikvisionOpenAPIGo" ) type HikvisionService interface { Hikvision(url string, body map[string]string, timeout int) (hikvisionOpenAPIGo.Result, error) } 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 }