map_service.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package map_service
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/cloudwego/hertz/pkg/app"
  7. "github.com/cloudwego/hertz/pkg/protocol/consts"
  8. "io/ioutil"
  9. "net/http"
  10. "pji_desktop_http/common/config"
  11. "pji_desktop_http/common/entity"
  12. "pji_desktop_http/common/util"
  13. "strings"
  14. )
  15. // CheckMapBufConsistency .
  16. // @router /map/checkmapbuf [GET]
  17. func CheckMapBufConsistency(ctx context.Context, c *app.RequestContext) {
  18. var err error
  19. var req []string
  20. err = c.BindAndValidate(&req)
  21. if err != nil {
  22. c.String(consts.StatusBadRequest, err.Error())
  23. return
  24. }
  25. fmt.Println(req)
  26. if len(req) == 0 { // 请求数据为空
  27. c.JSON(consts.StatusBadRequest, entity.HttpResult{Status: false, Code: "", Message: "请求数据为空。"})
  28. } else if len(req) == 1 { // 只有一条数据则直接返回
  29. c.JSON(consts.StatusOK, entity.HttpResult{Status: true, Code: "", Message: "mapBuf文件夹数据一致。"})
  30. } else {
  31. var firstValue int
  32. for i, v := range req {
  33. // 根据id获取对应的oss文件列表
  34. fileList, err := getFileObjectBYId(v)
  35. if err != nil {
  36. c.String(consts.StatusBadRequest, err.Error())
  37. return
  38. }
  39. // 过滤特定后缀的文件列表
  40. suffixes := []string{
  41. "map.pgm",
  42. "map.yaml",
  43. "map.json",
  44. "forbid_area.json",
  45. }
  46. filteredFileList := filterBySuffixes(fileList, suffixes...)
  47. fmt.Println("Filtered Strings:", filteredFileList)
  48. // 获取文件列表的总大小
  49. totalSize := calculateTotalFileSize(filteredFileList)
  50. fmt.Println("Total Size:", totalSize)
  51. // 判断不同文件列表(mapBuf)中文件的总大小是否一致
  52. if i == 0 {
  53. firstValue = totalSize
  54. } else {
  55. if totalSize != firstValue {
  56. c.JSON(consts.StatusOK, entity.HttpResult{Status: false, Code: "", Message: "mapBuf文件夹数据不一致。"})
  57. return
  58. }
  59. }
  60. }
  61. c.JSON(consts.StatusOK, entity.HttpResult{Status: true, Code: "", Message: "mapBuf文件夹数据一致。"})
  62. }
  63. }
  64. // 根据id获取对应的oss文件列表
  65. func getFileObjectBYId(id string) (fileList []string, err error) {
  66. url := config.SenceOssDownUrl + id
  67. // 构建请求
  68. req, err := http.NewRequest("GET", url, nil)
  69. if err != nil {
  70. fmt.Println("Error creating request:", err)
  71. return
  72. }
  73. // 添加认证头
  74. req.Header.Set("Authorization", config.Token)
  75. // 发送请求
  76. client := &http.Client{}
  77. resp, err := client.Do(req)
  78. if err != nil {
  79. fmt.Println("Error executing request:", err)
  80. return
  81. }
  82. defer resp.Body.Close()
  83. body, _ := ioutil.ReadAll(resp.Body)
  84. // Json转换为map
  85. var data map[string]interface{}
  86. err = json.Unmarshal(body, &data)
  87. // 提取响应体中的data字段
  88. dataField, ok := data["data"].([]interface{})
  89. if !ok {
  90. fmt.Println("Error extracting data field")
  91. return
  92. }
  93. // 转换字符串切片
  94. for _, item := range dataField {
  95. str, ok := item.(string)
  96. if !ok {
  97. fmt.Println("Error converting item to string")
  98. return
  99. }
  100. fileList = append(fileList, str)
  101. }
  102. return fileList, err
  103. }
  104. // 从字符串切片中筛选出以特定后缀结尾的字符串
  105. func filterBySuffixes(strList []string, suffixes ...string) []string {
  106. var filtered []string
  107. for _, s := range strList {
  108. for _, suffix := range suffixes {
  109. if strings.HasSuffix(s, suffix) {
  110. filtered = append(filtered, s)
  111. break
  112. }
  113. }
  114. }
  115. return filtered
  116. }
  117. // 计算oss中文件列表的总大小
  118. func calculateTotalFileSize(fileList []string) int {
  119. var totalSize int
  120. for _, file := range fileList {
  121. size, err := util.GetOSSFileSize(config.OssBucket, file) // 获取oss中单个文件的大小
  122. if err != nil {
  123. return 0
  124. }
  125. totalSize += size
  126. }
  127. return totalSize
  128. }