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