package api import ( "changeme/internal/logic/cameraFunc" "changeme/internal/logic/util/response" "fmt" "strings" "sync" "github.com/gogf/gf/v2/net/ghttp" ) func DownLoadCameraJpg(r *ghttp.Request) { deviceId := r.Get("device_id").String() fileType := r.Get("file_type").String() id := r.Get("id").String() if deviceId == "" || id == "" { response.FailJson(true, r,"参数错误") return } if fileType == "" { err1 := cameraFunc.DownLoadCameraJpgByFtp(id,deviceId,"1") err2 := cameraFunc.DownLoadCameraJpgByFtp(id,deviceId,"2") if err1 != nil && err2 != nil { response.FailJson(true, r,"下载失败",[]string{err1.Error(),err2.Error()}) return } if err1 != nil && err2 == nil { response.FailJson(true, r,"预览图下载失败,高清图下载成功",[]string{err1.Error()}) return } if err1 == nil && err2 != nil { response.FailJson(true, r,"预览图下载成功,高清图下载失败",[]string{err2.Error()}) return } response.SusJson(true, r, "下载成功") }else{ err := cameraFunc.DownLoadCameraJpgByFtp(id,deviceId,fileType) if err != nil { response.FailJson(true, r,"下载失败",[]string{err.Error()}) return } response.SusJson(true, r, "下载成功") } } func DownLoadAllCameraJpg(r *ghttp.Request) { fileType := r.Get("file_type").String() ids := r.Get("ids").String() if ids == "" { response.FailJson(true, r, "参数错误") return } arrIds := strings.Split(ids, ",") arrDeviceId := []string{ "11", "12", "14", "22", "23", "32", "34", "42", "43", "52", "54", "62", "63", "71", "72", "74", "82", "83", "92", "94", "102", "103", "112", "114", "122", "123", } arrFail := make([]string, 0) var wg sync.WaitGroup var mu sync.Mutex // 控制并发数,限制最大并发goroutine数量 sem := make(chan struct{}, 26) // 限制并发数为10 for _, id := range arrIds { for _, deviceId := range arrDeviceId { wg.Add(1) go func(id, deviceId string) { defer wg.Done() // 控制并发数 sem <- struct{}{} defer func() { <-sem }() err := cameraFunc.DownLoadCameraJpgByFtp(id, deviceId, fileType) if err != nil { mu.Lock() arrFail = append(arrFail, fmt.Sprintf("%s_%s-error-%s", id, deviceId, err.Error())) mu.Unlock() } }(id, deviceId) } } // 等待所有goroutine完成 wg.Wait() // 所有下载成功 response.SusJson(true, r, "下载成功",arrFail) }