From 092c444722bd41281f89a584f3e3e8957fc9c909 Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期四, 10 十月 2019 20:43:13 +0800
Subject: [PATCH] 增加分组的接口
---
gb28181Api.go | 143 ++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 140 insertions(+), 3 deletions(-)
diff --git a/gb28181Api.go b/gb28181Api.go
index 7b0ad94..d9d6560 100644
--- a/gb28181Api.go
+++ b/gb28181Api.go
@@ -161,10 +161,10 @@
}
if len(camerasPerPage.Data) > 0 {
- for i, v := range camerasPerPage.Data {
- if v.ResType == 2 {
- log.Println("v.restype == 2")
+ for i := 0; i < len(camerasPerPage.Data); i++ {
+ if camerasPerPage.Data[i].ResType == 2 {
camerasPerPage.Data = append(camerasPerPage.Data[:i], camerasPerPage.Data[i+1:]...)
+ i--
}
}
}
@@ -267,6 +267,143 @@
return cameraSlice, true
}
+//getAllGroupBygroupIDAndpage get all group by groupID ang page 鎸夐〉鍜岀粍id鑾峰彇涓嬪睘鍒嗙粍
+func (api Gb28181Api) getAllGroupBygroupIDAndpage(groupID string, pageNo int) ([]DomainUnit, bool) {
+ url := BASIC_URL + DATA_URL_PREFIX + "/get_all_channel/" + groupID + "/node/" + strconv.Itoa(pageNo)
+ client := NewClient()
+
+ var camerasPerPage CamerasInOnePage
+ body, err := client.DoGetRequest(url, nil, nil)
+ if err != nil {
+ log.Println("err:", err)
+ return nil, false
+ }
+
+ if camerasPerPage.ErrCode != 0 {
+ log.Println("errcode: ", camerasPerPage.ErrCode, " errdesc: ", camerasPerPage.ErrDesc)
+ return nil, false
+ }
+
+ //瑙f瀽 cameras
+ //log.Println("body:", body)
+ if err = json.Unmarshal(body, &camerasPerPage); err != nil {
+ log.Println("jsonErr:", err)
+ return nil, false
+ }
+
+ //cameraInfo 杞� DomainUnit
+ var dmUnits []DomainUnit
+ var tmpUnit DomainUnit
+ for _, cam := range camerasPerPage.Data {
+ if cam.ResType == 2 {
+ tmpUnit.Name = cam.Name
+ tmpUnit.DevPubID = cam.DevPubID
+ tmpUnit.OnlineNum = 0
+ tmpUnit.ParentID = cam.ParentID
+ tmpUnit.PublicID = cam.PublicID
+ tmpUnit.ResType = cam.ResType
+ tmpUnit.TotalNum = 0
+ dmUnits = append(dmUnits, tmpUnit)
+ }
+ }
+
+ return dmUnits, true
+}
+
+//GetAllGroupByDevID 鎸夌粍id鑾峰彇涓嬪睘鍒嗙粍
+func (api Gb28181Api) getAllGroupByGroupID(groupID string) []DomainUnit {
+ var dmUnitAll []DomainUnit
+ pageNo := 1
+ for {
+ dmUnitsPerPage, flag := api.getAllGroupBygroupIDAndpage(groupID, pageNo)
+ if !flag || dmUnitsPerPage == nil {
+ break
+ }
+ dmUnitAll = append(dmUnitAll, dmUnitsPerPage...)
+ pageNo++
+ }
+
+ return dmUnitAll
+}
+
+//
+func (api Gb28181Api) getGroupsByGroupID(groupID string, groupsAll *[]DomainUnit) {
+ if groupID != "" {
+ groups := api.getAllGroupByGroupID(groupID)
+ if groups == nil {
+ return
+ }
+ if len(groups) > 0 {
+ *groupsAll = append(*groupsAll, groups...)
+ for _, groupid := range groups {
+ api.getGroupsByGroupID(groupid.PublicID, groupsAll)
+ }
+ }
+ }
+}
+
+//GetAllGroupByDevID get all group by devid 鎸夎澶噄d鑾峰彇鍒嗙粍
+func (api Gb28181Api) GetAllGroupBydevID(devID string) []DomainUnit {
+ var dmUnitAll []DomainUnit
+
+ api.getGroupsByGroupID(devID, &dmUnitAll)
+
+ return dmUnitAll
+}
+
+//getAllCamerasByGroupIDAndPage 鎸夊垎缁勫拰椤佃幏鍙栨憚鍍忔満鍒楄〃
+func (api Gb28181Api) getAllCamerasByGroupIDAndPage(groupID string, pageNo int) (CamerasInOnePage, bool) {
+ url := BASIC_URL + DATA_URL_PREFIX + "/get_all_channel/" + groupID + "/node/" + strconv.Itoa(pageNo)
+ client := NewClient()
+
+ var camerasPerPage CamerasInOnePage
+ body, err := client.DoGetRequest(url, nil, nil)
+ if err != nil {
+ log.Println("err:", err)
+ return camerasPerPage, false
+ }
+
+ //瑙f瀽 cameras
+ if err = json.Unmarshal(body, &camerasPerPage); err != nil {
+ log.Println("jsonErr:", err)
+ return camerasPerPage, false
+ }
+
+ if len(camerasPerPage.Data) > 0 {
+ for i := 0; i < len(camerasPerPage.Data); i++ {
+ if camerasPerPage.Data[i].ResType == 2 {
+ camerasPerPage.Data = append(camerasPerPage.Data[:i], camerasPerPage.Data[i+1:]...)
+ i--
+ }
+ }
+ }
+
+ return camerasPerPage, true
+}
+
+//GetAllGroupByDevID get all group by devid 鎸夎澶噄d鑾峰彇鍒嗙粍
+func (api Gb28181Api) GetAllCamerasByGroupID(groupID string) ([]CameraInfo, bool) {
+
+ var cameraSlice []CameraInfo
+ camerasPerPage, flag := api.getAllCamerasByGroupIDAndPage(groupID, 1)
+ if !flag {
+ log.Println("GetCamsByDevAndPage Error, deviceSlice is nil")
+ return cameraSlice, false
+ }
+ cameraSlice = camerasPerPage.Data
+
+ for i := 1; i < camerasPerPage.TotalPage; i++ {
+ camerasPerPage, flag := api.getAllCamerasByGroupIDAndPage(groupID, i+1)
+ if !flag {
+ log.Println("getAllCamerasByGroupIDAndPage Error! devID:" + groupID + ",type:all,pageno:" + strconv.Itoa(i+1) + " ,cameraSlice is not completed")
+ return cameraSlice, false
+ }
+ cameraSlice = append(cameraSlice, camerasPerPage.Data...)
+ }
+
+ return cameraSlice, true
+}
+
//SetCameraPtz 2.3 PTZ浜戝彴鎺у埗
//"channelid": (瀛楃涓�) 閫氶亾20浣嶇紪鍙�
//"ptztype"锛� (瀛楃涓�) 鎺у埗绫诲瀷锛氫笂"up",涓�"down",宸�"left",鍙�"right",宸︿笂"leftup",宸︿笅"leftdown",鍙充笂"rightup",鍙充笅"rightdown",闀滃ご杩�"zoomin",闀滃ご杩�"zoomout",
--
Gitblit v1.8.0