This commit is contained in:
2025-02-07 22:58:01 +08:00
commit ba4aad0ae5
23 changed files with 1061 additions and 0 deletions

51
api/oss_upload.go Normal file
View File

@ -0,0 +1,51 @@
package api
import (
"ZhenTuLocalPassiveAdapter/dto"
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func UploadTaskFile(task dto.Task, file dto.FileObject) error {
url, err := QueryUploadUrlForTask(task.TaskID)
if err != nil {
return err
}
if err := OssUpload(url, file.URL); err != nil {
return err
}
return nil
}
func OssUpload(url, filePath string) error {
// 使用 http put 请求上传文件
file, err := os.Open(filePath)
defer os.Remove(filePath)
defer file.Close()
if err != nil {
return err
}
fileBytes, err := io.ReadAll(file)
if err != nil {
return err
}
req, err := http.NewRequest("PUT", url, bytes.NewBuffer(fileBytes))
if err != nil {
return err
}
req.Header.Set("Content-Length", fmt.Sprintf("%d", len(fileBytes)))
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("upload failed with status code %d", resp.StatusCode)
}
return nil
}

57
api/sync_task.go Normal file
View File

@ -0,0 +1,57 @@
package api
import (
"ZhenTuLocalPassiveAdapter/config"
"ZhenTuLocalPassiveAdapter/dto"
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
)
func SyncTask() ([]dto.Task, error) {
url := config.Config.Api.BaseUrl + "/sync"
requestBody := map[string]interface{}{
"version": "0.0.1",
"devices": config.Config.Devices,
}
jsonData, err := json.Marshal(requestBody)
if err != nil {
log.Println("Error marshaling JSON:", err)
return nil, err
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
log.Println("Error creating request:", err)
return nil, err
}
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Println("Error sending request:", err)
return nil, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Println("Error reading response body:", err)
return nil, err
}
// 解析响应体为 map
var response dto.TaskListResponse
err = json.Unmarshal(body, &response)
if err != nil {
log.Println("->:", string(body))
log.Println("Error unmarshaling response body:", err)
return nil, err
}
if response.Code != 200 {
log.Println("Error response code:", response.Code)
return nil, fmt.Errorf(response.Msg)
}
return response.Data, nil
}

72
api/task_report.go Normal file
View File

@ -0,0 +1,72 @@
package api
import (
"ZhenTuLocalPassiveAdapter/config"
"ZhenTuLocalPassiveAdapter/dto"
"bytes"
"encoding/json"
"io"
"log"
"net/http"
)
func QueryUploadUrlForTask(taskId string) (string, error) {
url := config.Config.Api.BaseUrl + "/" + taskId + "/uploadUrl"
req, err := http.NewRequest("POST", url, nil)
if err != nil {
log.Println("Error creating request:", err)
return "", err
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Println("Error sending request:", err)
return "", err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Println("Error reading response body:", err)
return "", err
}
return string(body), nil
}
func ReportTaskFailure(taskId string) {
url := config.Config.Api.BaseUrl + "/" + taskId + "/failure"
req, err := http.NewRequest("POST", url, nil)
if err != nil {
log.Println("Error creating request:", err)
return
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
}
func ReportTaskSuccess(taskId string, file *dto.FileObject) {
url := config.Config.Api.BaseUrl + "/" + taskId + "/success"
jsonData, err := json.Marshal(file)
if err != nil {
log.Println("Error marshaling JSON:", err)
return
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
log.Println("Error creating request:", err)
return
}
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
}