transform.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package service
  2. import (
  3. "fmt"
  4. "math"
  5. "strconv"
  6. "strings"
  7. jsoniter "github.com/json-iterator/go"
  8. )
  9. func TransformType2(responseData string) (string, error) {
  10. // 解析入参
  11. type inputData struct {
  12. Data struct {
  13. Today float64 `json:"Today"`
  14. Change float64 `json:"Change"`
  15. DsToday float64 `json:"DsToday"`
  16. DsChange float64 `json:"DsChange"`
  17. Items []string `json:"Items"`
  18. } `json:"data"`
  19. }
  20. var input inputData
  21. if err := jsoniter.Unmarshal([]byte(responseData), &input); err != nil {
  22. return "", err
  23. }
  24. // 处理内层数据
  25. inner := struct {
  26. Today float64 `json:"today"`
  27. Change string `json:"change"`
  28. Items string `json:"items"`
  29. DsChange string `json:"dsChange"`
  30. DsToday float64 `json:"dsToday"`
  31. }{Today: input.Data.Today, DsToday: input.Data.DsToday}
  32. // 处理百分比逻辑
  33. switch {
  34. case input.Data.Change > 0:
  35. inner.Change = fmt.Sprintf("增加%.0f%%", input.Data.Change)
  36. case input.Data.Change == 0:
  37. inner.Change = "无变化"
  38. default:
  39. inner.Change = fmt.Sprintf("减少%.0f%%", -input.Data.Change)
  40. }
  41. switch {
  42. case input.Data.DsChange > 0:
  43. inner.DsChange = fmt.Sprintf("增加%.0f%%", input.Data.DsChange)
  44. case input.Data.DsChange == 0:
  45. inner.DsChange = "无变化"
  46. default:
  47. inner.DsChange = fmt.Sprintf("减少%.0f%%", -input.Data.DsChange)
  48. }
  49. // 拼接Items
  50. if len(input.Data.Items) > 0 {
  51. inner.Items = strings.Join(input.Data.Items, ",")
  52. }
  53. // 正确的外层包裹
  54. outer := struct {
  55. Data interface{} `json:"data"`
  56. }{Data: inner}
  57. resultJSON, err := jsoniter.Marshal(outer)
  58. return string(resultJSON), err
  59. }
  60. func TransformType4(arg1 string) (string, error) {
  61. // 定义入参结构体(匹配真实格式)
  62. type inputData struct {
  63. Data struct {
  64. FeedFlow float64 `json:"feed_flow"`
  65. WaterQuantity string `json:"water_quantity"`
  66. Level string `json:"level"`
  67. PlantFeedFlow float64 `json:"plant_feed_flow"`
  68. } `json:"data"`
  69. }
  70. var input inputData
  71. if err := jsoniter.Unmarshal([]byte(arg1), &input); err != nil {
  72. return "", err
  73. }
  74. // 处理内层数据
  75. inner := struct {
  76. FeedFlow float64 `json:"feed_flow"`
  77. WaterQuantity string `json:"water_quantity"`
  78. Level string `json:"level"`
  79. PlantFeedFlow float64 `json:"plant_feed_flow"`
  80. }{
  81. FeedFlow: input.Data.FeedFlow,
  82. WaterQuantity: input.Data.WaterQuantity,
  83. }
  84. // 处理level(字符串转数字+容错)
  85. levelNum, _ := strconv.Atoi(input.Data.Level)
  86. inner.Level = "一般"
  87. if levelNum != 0 {
  88. inner.Level = "已达标"
  89. }
  90. // 保留2位小数
  91. inner.PlantFeedFlow = math.Round(input.Data.PlantFeedFlow*100) / 100
  92. // 外层包裹data
  93. outer := struct {
  94. Data interface{} `json:"data"`
  95. }{Data: inner}
  96. resultJSON, err := jsoniter.Marshal(outer)
  97. return string(resultJSON), err
  98. }