Kaynağa Gözat

refactor: 提取可复用函数

HeWang 9 ay önce
ebeveyn
işleme
452fa8ec6e

+ 8 - 199
biz/handler/map_service/map_service.go

@@ -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

+ 0 - 1
common/config/c_log/log_config.go

@@ -35,5 +35,4 @@ func InitLog(logDir string, prefix string) {
 		},
 	})
 	GlobalLogger.Info("初始化GlobalLogger - 成功")
-
 }

+ 1 - 1
common/config/c_pji.go → common/config/c_pji/c_pji.go

@@ -1,4 +1,4 @@
-package config
+package c_pji
 
 var (
 	SenceOssDownUrl = "http://36.110.106.156:11121/open/scene/oss/down/"

+ 0 - 53
common/domain/d_service.go

@@ -1,53 +0,0 @@
-package domain
-
-import (
-	"cicv-data-closedloop/common/config/c_log"
-	"cicv-data-closedloop/common/entity"
-	"cicv-data-closedloop/common/util"
-	"os"
-	"strings"
-	"time"
-)
-
-func MoveFromDataToCopy(faultTime string, bagDataDir string, sourceBag string, bagCopyDir string) {
-	dir := GetCopyDir(bagCopyDir, faultTime)
-	util.CreateDir(dir)
-	targetBag := strings.Replace(sourceBag, bagDataDir, dir, 1)
-	err := os.Rename(sourceBag, targetBag)
-	if err != nil {
-		return
-	}
-	c_log.GlobalLogger.Infof("移动bag包 【%v】->【%v】", sourceBag, targetBag)
-
-}
-
-func GetCopyDir(bagDataDir string, faultTime string) string {
-	return bagDataDir + faultTime + "/"
-}
-
-// 如果 Copy目录下的包不够,则补充一些
-func SupplyCopyBags(bagDataDir string, bagCopyDir string, currentTimeWindow entity.TimeWindow) {
-	// 如果bag包没有达到length,补充几个
-	copyBags, _ := util.ListAbsolutePathWithSuffixAndSort(GetCopyDir(bagCopyDir, currentTimeWindow.FaultTime), ".bag")
-	copyBagsLength := len(copyBags)
-	if copyBagsLength >= currentTimeWindow.Length {
-		return
-	}
-	// 等待差距时间
-	gap := currentTimeWindow.Length - copyBagsLength
-	time.Sleep(time.Duration(gap) * time.Second)
-	// 获取data目录下的包列表
-	dataBags, _ := util.ListAbsolutePathWithSuffixAndSort(bagDataDir, ".bag")
-	c_log.GlobalLogger.Info("故障 ", currentTimeWindow.FaultTime, "需要从data目录找回 ", gap, " 个 bag 包")
-	for _, bag := range dataBags {
-		bagTime := util.GetBagTime(bag)
-		// 必须在区间内
-		if util.TimeCustom1GreaterEqualThanTimeCustom2(bagTime, currentTimeWindow.FaultTime) {
-			MoveFromDataToCopy(currentTimeWindow.FaultTime, bagDataDir, bag, bagCopyDir)
-			gap = gap - 1
-			if gap == 0 {
-				break
-			}
-		}
-	}
-}

+ 0 - 33
common/handler/h_validate_request_header/validate_request_header.go

@@ -1,33 +0,0 @@
-package h_validate_request_header
-
-import (
-	"cicv-data-closedloop/common/config/c_log"
-	"cicv-data-closedloop/common/entity"
-	"encoding/json"
-	"fmt"
-	"net/http"
-)
-
-var token = "1e8YmQMYwTTbfUYMZczkj1x17AeXjbdU"
-
-// HeaderValidationMiddleware Middleware function to add header validation
-func HeaderValidationMiddleware(next http.Handler) http.Handler {
-	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		acceptToken := r.Header["Authorization"]
-		if _, ok := r.Header["Authorization"]; !ok {
-			c_log.GlobalLogger.Errorf("未添加请求头 Authorization:%v", acceptToken)
-			result, _ := json.Marshal(entity.HttpResult{Status: false, Code: "1000", Message: "未添加请求头 Authorization。"})
-			_, _ = fmt.Fprintf(w, string(result))
-			return
-		}
-		if acceptToken[0] != token {
-			c_log.GlobalLogger.Errorf("请求头 Authorization 校验失败:%v --> %v", acceptToken[0], token)
-			result, _ := json.Marshal(entity.HttpResult{Status: false, Code: "1001", Message: "请求头 Authorization 校验失败。"})
-			_, _ = fmt.Fprintf(w, string(result))
-			return
-		}
-
-		// 如果通过校验,继续处理下一个处理程序
-		next.ServeHTTP(w, r)
-	})
-}

+ 105 - 0
common/util/u_map.go

@@ -1,6 +1,11 @@
 package util
 
 import (
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"pji_desktop_http/common/config/c_pji"
 	"sync"
 )
 
@@ -8,3 +13,103 @@ func ContainsKey(m *sync.Map, key string) bool {
 	_, found := m.Load(key)
 	return found
 }
+
+// 根据id获取解析后的地图文件列表
+func GetExactedMapFileById(id string) (fileList []string, err error) {
+	url := c_pji.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", c_pji.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 := c_pji.SenceInfoUrl + id
+
+	// 构建请求
+	req, err := http.NewRequest("GET", url, nil)
+	if err != nil {
+		fmt.Println("Error creating request:", err)
+		return "", err
+	}
+
+	// 添加认证头
+	req.Header.Set("Authorization", c_pji.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
+}

+ 19 - 0
common/util/u_string.go

@@ -3,6 +3,7 @@ package util
 import (
 	"fmt"
 	"github.com/google/uuid"
+	"path/filepath"
 	"strconv"
 )
 
@@ -21,3 +22,21 @@ func StringToInt(str string) int {
 	intVal, _ := strconv.Atoi(str)
 	return intVal
 }
+
+// 从字符串切片中筛选出以特定后缀结尾的字符串
+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
+}