You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.4 KiB
96 lines
2.4 KiB
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) |
|
} |