liuxiaolong
2021-05-17 f3a497f4e7ebe5611ccfb4c3a6e9657ad706bc15
gb28181Api.go
@@ -6,6 +6,7 @@
   "fmt"
   "log"
   "strconv"
   urlLib "net/url"
)
func SmartPrintStruct(src interface{}) string {
@@ -26,13 +27,16 @@
//SetPlatformServerInfo 设置服务器信息
func (api Gb28181Api) SetPlatformServerInfo(serverInfo GbServerInfo) bool {
   serverInfo.GbUsername = serverInfo.PublicID   //鉴权名字不生效,最好和设备id一致
   url := BASIC_URL + DATA_URL_PREFIX + "/set_platform_server?" +
      "gbsvrname=" + serverInfo.Name +
      "&gbsvrid=" + serverInfo.PublicID +
      "&gbsvrport=" + strconv.Itoa(serverInfo.GbServerPort) +
      "&registerauth=" + strconv.FormatBool(serverInfo.RegisterAuth) +
      "&gbusername=" + serverInfo.GbUsername +
      "&gbpasswd=" + serverInfo.GbPasswd
   u := urlLib.Values{}
   u.Set("gbsvrname", serverInfo.Name)
   u.Set("gbsvrid", serverInfo.PublicID)
   u.Set("gbsvrport", strconv.Itoa(serverInfo.GbServerPort))
   u.Set("registerauth", strconv.FormatBool(serverInfo.RegisterAuth))
   u.Set("gbusername", serverInfo.GbUsername)
   u.Set("gbpasswd", serverInfo.GbPasswd)
   str := u.Encode()
   url := BASIC_URL + DATA_URL_PREFIX + "/set_platform_server?" + str
   log.Println("url:", url)
   client := NewClient()
@@ -140,7 +144,7 @@
//pageNo (数字)   指定获取第几页,第一次为1,返回总页数,总条数等,再根据这些信息去再次查询,直到取完全部
//srcType (字符串) "all"-表示获取设备的所有资源  "node"-父节点下的第一级资源
//注意:根据"restype"字段,忽略资源组,只保留通道资源------"restype":(数字)1-通道资源 2-资源组
func (api Gb28181Api) getCamsByDevAndPage(devID string, srcType string, pageNo int) (CamerasInOnePage, bool) {
func (api Gb28181Api) getCamsAndGroupsByDevAndPage(devID string, srcType string, pageNo int) (CamerasInOnePage, bool) {
   url := BASIC_URL + DATA_URL_PREFIX + "/get_all_channel/" + devID + "/" + srcType + "/" + strconv.Itoa(pageNo)
   client := NewClient()
@@ -164,6 +168,14 @@
   if len(camerasPerPage.Data) > 0 {
      for i := 0; i < len(camerasPerPage.Data); i++ {
         if camerasPerPage.Data[i].ResType == 2 {
            di := camerasPerPage.Data[i]
            camerasPerPage.Groups = append(camerasPerPage.Groups, DomainUnit{
               DevPubID: di.DevPubID,
               ResType: 2,
               PublicID: di.PublicID,
               Name: di.Name,
               ParentID: di.ParentID,
            })
            camerasPerPage.Data = append(camerasPerPage.Data[:i], camerasPerPage.Data[i+1:]...)
            i--
         }
@@ -175,25 +187,27 @@
//GetAllCamerasByDevID 获取全部下级设备的摄像机列表
//devID  (字符串)  注册的设备的20位id
func (api Gb28181Api) GetAllCamerasByDevID(devID string) ([]CameraInfo, bool) {
func (api Gb28181Api) GetAllCamerasAndGroupsByDevID(devID string) ([]CameraInfo, []DomainUnit, bool) {
   var cameraSlice []CameraInfo
   camerasPerPage, flag := api.getCamsByDevAndPage(devID, "all", 1)
   var groups       []DomainUnit
   camerasPerPage, flag := api.getCamsAndGroupsByDevAndPage(devID, "all", 1)
   if !flag {
      log.Println("GetCamsByDevAndPage Error, deviceSlice is nil")
      return cameraSlice, false
      return cameraSlice, groups, false
   }
   cameraSlice = camerasPerPage.Data
   groups = camerasPerPage.Groups
   for i := 1; i < camerasPerPage.TotalPage; i++ {
      camerasPerPage, flag := api.getCamsByDevAndPage(devID, "all", i+1)
      camerasPerPage, flag := api.getCamsAndGroupsByDevAndPage(devID, "all", i+1)
      if !flag {
         log.Println("GetCamsByDevAndPage Error! devID:" + devID + ",type:all,pageno:" + strconv.Itoa(i+1) + " ,cameraSlice is not completed")
         return cameraSlice, false
         return cameraSlice, groups, false
      }
      cameraSlice = append(cameraSlice, camerasPerPage.Data...)
      groups = append(groups, camerasPerPage.Groups...)
   }
   return cameraSlice, true
   return cameraSlice, groups, true
}
//GetAllDomainUnit get all domainunit 获取所有行政区域
@@ -224,6 +238,7 @@
//GetAllCamerasByDomainUnit  get all cameras by domainunit 获取所有行政区域下的设备
func (api Gb28181Api) getAllCamerasByDomainUnitAndPage(domainpubid string, pageNo int) (CamerasInOnePage, bool) {
   url := BASIC_URL + DATA_URL_PREFIX + "/get_domainunit_channel/" + domainpubid + "/" + strconv.Itoa(pageNo)
   log.Println("getAllCamerasByDomainUnitAndPage:", url)
   client := NewClient()
   var camerasPerPage CamerasInOnePage