|
@@ -3,12 +3,10 @@ package map_service
|
|
|
import (
|
|
|
"archive/zip"
|
|
|
"context"
|
|
|
- "encoding/json"
|
|
|
"fmt"
|
|
|
"github.com/cloudwego/hertz/pkg/app"
|
|
|
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
|
|
"io"
|
|
|
- "io/ioutil"
|
|
|
"net/http"
|
|
|
"os"
|
|
|
"path/filepath"
|
|
@@ -39,9 +37,9 @@ func CheckMapBufConsistency(ctx context.Context, c *app.RequestContext) {
|
|
|
var firstValue int
|
|
|
for i, id := range req {
|
|
|
// 根据id获取对应的oss文件列表
|
|
|
- fileList, err := getExactedMapFileById(id)
|
|
|
+ fileList, err := util.GetExactedMapFileById(id)
|
|
|
// 过滤特定后缀的文件列表
|
|
|
- fileList = filterBySuffixes(fileList, config.MapBufFiltersuffixes...)
|
|
|
+ fileList = util.FilterBySuffixes(fileList, config.MapBufFiltersuffixes...)
|
|
|
//fmt.Println("Filtered Strings:", fileList)
|
|
|
|
|
|
if err != nil {
|
|
@@ -146,9 +144,9 @@ func DownLoadMapBagFile(ctx context.Context, c *app.RequestContext) {
|
|
|
fmt.Println("id: ", id)
|
|
|
|
|
|
// 根据id获取对应的oss文件列表
|
|
|
- fileList, err := getExactedMapFileById(id)
|
|
|
+ fileList, err := util.GetExactedMapFileById(id)
|
|
|
// 过滤特定后缀的文件列表
|
|
|
- fileList = filterBySuffixes(fileList, "map.bag")
|
|
|
+ fileList = util.FilterBySuffixes(fileList, "map.bag")
|
|
|
//fmt.Println("fileList", fileList)
|
|
|
|
|
|
objectKey := fileList[0]
|
|
@@ -178,184 +176,13 @@ func DownLoadMapBagFile(ctx context.Context, c *app.RequestContext) {
|
|
|
c.JSON(consts.StatusOK, entity.HttpResult{Status: true, Code: "", Message: "解析地图Bag下载成功。"})
|
|
|
}
|
|
|
|
|
|
-// 根据id获取解析后的地图文件列表
|
|
|
-func getExactedMapFileById(id string) (fileList []string, err error) {
|
|
|
- url := config.SenceOssDownUrl + id
|
|
|
-
|
|
|
- // 构建请求
|
|
|
- req, err := http.NewRequest("GET", url, nil)
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Error creating request:", err)
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- // 添加认证头
|
|
|
- req.Header.Set("Authorization", config.Token)
|
|
|
-
|
|
|
- // 发送请求
|
|
|
- client := &http.Client{}
|
|
|
- resp, err := client.Do(req)
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Error executing request:", err)
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- defer resp.Body.Close()
|
|
|
- body, _ := ioutil.ReadAll(resp.Body)
|
|
|
-
|
|
|
- // Json转换为map
|
|
|
- var data map[string]interface{}
|
|
|
- err = json.Unmarshal(body, &data)
|
|
|
-
|
|
|
- // 提取响应体中的data字段
|
|
|
- dataField, ok := data["data"].([]interface{})
|
|
|
- if !ok {
|
|
|
- fmt.Println("Error extracting data field")
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- // 转换字符串切片
|
|
|
- for _, item := range dataField {
|
|
|
- str, ok := item.(string)
|
|
|
- if !ok {
|
|
|
- fmt.Println("Error converting item to string")
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- fileList = append(fileList, str)
|
|
|
- }
|
|
|
-
|
|
|
- return fileList, nil
|
|
|
-}
|
|
|
-
|
|
|
-// 根据id获取对应的原始bag文件
|
|
|
-func getRosFileById(id string) (file string, err error) {
|
|
|
- url := config.SenceInfoUrl + id
|
|
|
-
|
|
|
- // 构建请求
|
|
|
- req, err := http.NewRequest("GET", url, nil)
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Error creating request:", err)
|
|
|
- return "", err
|
|
|
- }
|
|
|
-
|
|
|
- // 添加认证头
|
|
|
- req.Header.Set("Authorization", config.Token)
|
|
|
-
|
|
|
- // 发送请求
|
|
|
- client := &http.Client{}
|
|
|
- resp, err := client.Do(req)
|
|
|
- if err != nil {
|
|
|
- fmt.Println("Error executing request:", err)
|
|
|
- return "", err
|
|
|
- }
|
|
|
-
|
|
|
- defer resp.Body.Close()
|
|
|
- body, _ := ioutil.ReadAll(resp.Body)
|
|
|
-
|
|
|
- // Json转换为map
|
|
|
- var data map[string]interface{}
|
|
|
- err = json.Unmarshal(body, &data)
|
|
|
-
|
|
|
- //fmt.Println("data:", data)
|
|
|
- // 提取响应体中的data字段
|
|
|
- dataField, ok := data["data"].(map[string]interface{})
|
|
|
- if !ok {
|
|
|
- fmt.Println("Error extracting data field")
|
|
|
- return "", err
|
|
|
- }
|
|
|
- // 从 data字段中提取 rosField
|
|
|
- rosField, ok := dataField["rosFileId"].(string)
|
|
|
- if !ok {
|
|
|
- fmt.Println("ID not found or not a string")
|
|
|
- return
|
|
|
- }
|
|
|
- if !ok {
|
|
|
- fmt.Println("Error extracting rosFileId field")
|
|
|
- return "", err
|
|
|
- }
|
|
|
- //println("rosFileId:", rosField)
|
|
|
-
|
|
|
- return rosField, nil
|
|
|
-}
|
|
|
-
|
|
|
-//// 根据id生成用于地图更新的压缩包
|
|
|
-//func generateZipById(id string) (file string, tmpDir string, err error) {
|
|
|
-// // 根据id获取对应的oss文件列表
|
|
|
-// fileList, err := getExactedMapFileById(id)
|
|
|
-// // 过滤特定后缀的文件列表
|
|
|
-// fileList = filterBySuffixes(fileList, config.MapBufFiltersuffixes...)
|
|
|
-// //fmt.Println("Filtered Strings:", fileList)
|
|
|
-// if err != nil {
|
|
|
-// return
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 创建临时文件夹
|
|
|
-// tmpDir, err = os.MkdirTemp("", "temp-download-*")
|
|
|
-// fmt.Println("tmpDir:", tmpDir)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error creating temporary directory:", err)
|
|
|
-// return "", "", err
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 创建根文件夹(文件打包的根目录)
|
|
|
-// baseDir := filepath.Join(tmpDir, "data")
|
|
|
-// if err := os.Mkdir(baseDir, 0755); err != nil {
|
|
|
-// fmt.Println("Error creating subdirectory:", err)
|
|
|
-// return "", "", err
|
|
|
-// }
|
|
|
-// // 创建子文件夹 mapBuf
|
|
|
-// subDir := filepath.Join(baseDir, "mapBuf")
|
|
|
-// if err := os.Mkdir(subDir, 0755); err != nil {
|
|
|
-// fmt.Println("Error creating subdirectory:", err)
|
|
|
-// return "", "", err
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 从oss下载文件到 mapBuf文件夹
|
|
|
-// for _, file := range fileList {
|
|
|
-// err = config.OssBucket.GetObjectToFile(file, filepath.Join(subDir, filepath.Base(file)))
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error downloading mapBuf file:", err)
|
|
|
-// return "", "", err
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 从oss下载bag文件到 data文件夹
|
|
|
-// RosFileId, _ := getRosFileById(id)
|
|
|
-// err = config.OssBucket.GetObjectToFile(RosFileId, filepath.Join(baseDir, filepath.Base(RosFileId)))
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error downloading Bag file:", err)
|
|
|
-// return "", "", err
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 创建压缩文件
|
|
|
-// zipPath := filepath.Join(tmpDir, "mapFile-"+id+".zip")
|
|
|
-// zipFile, err := os.Create(zipPath)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error creating ZIP file:", err)
|
|
|
-// return "", "", err
|
|
|
-// }
|
|
|
-// defer zipFile.Close()
|
|
|
-//
|
|
|
-// zipWriter := zip.NewWriter(zipFile)
|
|
|
-// defer zipWriter.Close()
|
|
|
-//
|
|
|
-// // 压缩文件夹
|
|
|
-// if err := addDirToZip(baseDir, zipWriter); err != nil {
|
|
|
-// fmt.Println("Error adding directory to ZIP:", err)
|
|
|
-// return "", "", err
|
|
|
-// }
|
|
|
-// fmt.Println("ZIP file created successfully.")
|
|
|
-//
|
|
|
-// return zipPath, tmpDir, nil
|
|
|
-//}
|
|
|
-
|
|
|
// 根据id生成用于地图更新的压缩包
|
|
|
func generateZipById(id string) (file string, tmpDir string, err error) {
|
|
|
// 根据id获取对应的oss文件列表
|
|
|
- allFileList, err := getExactedMapFileById(id)
|
|
|
+ allFileList, err := util.GetExactedMapFileById(id)
|
|
|
|
|
|
// 过滤特定后缀的文件列表
|
|
|
- mapBuFileList := filterBySuffixes(allFileList, config.MapBufFiltersuffixes...)
|
|
|
+ mapBuFileList := util.FilterBySuffixes(allFileList, config.MapBufFiltersuffixes...)
|
|
|
//fmt.Println("Filtered Strings:", fileList)
|
|
|
if err != nil {
|
|
|
return
|
|
@@ -405,7 +232,7 @@ func generateZipById(id string) (file string, tmpDir string, err error) {
|
|
|
|
|
|
// 从oss下载build_map.bag文件到 bag_folder 文件夹
|
|
|
// 过滤特定后缀的文件列表
|
|
|
- buildMapBagFileList := filterBySuffixes(allFileList, config.BuildMapBagFiltersuffixes...)
|
|
|
+ buildMapBagFileList := util.FilterBySuffixes(allFileList, config.BuildMapBagFiltersuffixes...)
|
|
|
buildMapBagFile := buildMapBagFileList[0]
|
|
|
err = config.OssBucket.GetObjectToFile(buildMapBagFile, filepath.Join(bagFolderDir, filepath.Base(buildMapBagFile)))
|
|
|
if err != nil {
|
|
@@ -426,7 +253,7 @@ func generateZipById(id string) (file string, tmpDir string, err error) {
|
|
|
|
|
|
// 从oss下载bag文件到 origin_map_folder 文件夹
|
|
|
// 过滤特定后缀的文件列表
|
|
|
- originMapFileList := filterBySuffixes(allFileList, config.OriginMapFiltersuffixes...)
|
|
|
+ originMapFileList := util.FilterBySuffixes(allFileList, config.OriginMapFiltersuffixes...)
|
|
|
for _, file := range originMapFileList {
|
|
|
err = config.OssBucket.GetObjectToFile(file, filepath.Join(originMapFolderDir, filepath.Base(file)))
|
|
|
if err != nil {
|
|
@@ -460,24 +287,6 @@ func generateZipById(id string) (file string, tmpDir string, err error) {
|
|
|
return zipPath, tmpDir, nil
|
|
|
}
|
|
|
|
|
|
-// 从字符串切片中筛选出以特定后缀结尾的字符串
|
|
|
-func filterBySuffixes(strList []string, suffixes ...string) []string {
|
|
|
- var filtered []string
|
|
|
- for _, s := range strList {
|
|
|
- for _, suffix := range suffixes {
|
|
|
- //if strings.HasSuffix(s, suffix) {
|
|
|
- // filtered = append(filtered, s)
|
|
|
- // break
|
|
|
- //}
|
|
|
- if filepath.Base(s) == suffix {
|
|
|
- filtered = append(filtered, s)
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return filtered
|
|
|
-}
|
|
|
-
|
|
|
// 计算oss中文件列表的总大小
|
|
|
func calculateTotalFileSize(fileList []string) int {
|
|
|
var totalSize int
|