iks 1 сар өмнө
parent
commit
449a8d832e
1 өөрчлөгдсөн 67 нэмэгдсэн , 22 устгасан
  1. 67 22
      service/transform.go

+ 67 - 22
service/transform.go

@@ -223,42 +223,87 @@ func TransformType6(arg1 string) (string, error) {
 // ProcessDeviceTime 解析设备和创建时间数据,入参为JSON字符串,返回带data包裹的JSON字符串
 func TransformType8(arg1 string) (string, error) {
 	// 定义入参结构体(匹配输入的code/msg/data格式)
-	type inputStruct struct {
-		Code int    `json:"code"`
-		Msg  string `json:"msg"`
-		Data struct {
-			Level string `json:"level"`
-			Msg   string `json:"msg"`
+	// type inputStruct struct {
+	// 	Code int    `json:"code"`
+	// 	Msg  string `json:"msg"`
+	// 	Data struct {
+	// 		Level string `json:"level"`
+	// 		Msg   string `json:"msg"`
+	// 	} `json:"data"`
+	// }
+	//
+	// // 用jsoniter解析输入JSON字符串
+	// var input inputStruct
+	// if err := jsoniter.UnmarshalFromString(arg1, &input); err != nil {
+	// 	return "", err
+	// }
+	//
+	// // 清理msg中的无效占位符(修复%!s(MISSING))
+	// cleanMsg := strings.ReplaceAll(input.Data.Msg, "%!s(MISSING)", "")
+	// // 去除末尾多余的、号
+	// cleanMsg = strings.TrimSuffix(cleanMsg, "、")
+	//
+	// // 构造仅单层data包裹的输出结构
+	// output := struct {
+	// 	Data struct {
+	// 		Level string `json:"level"`
+	// 		Msg   string `json:"msg"`
+	// 	} `json:"data"`
+	// }{}
+	// output.Data.Level = input.Data.Level
+	// output.Data.Msg = cleanMsg
+	//
+	// // 用jsoniter序列化为JSON字符串返回
+	// result, err := jsoniter.MarshalToString(output)
+	// if err != nil {
+	// 	return "", err
+	// }
+	// return result, nil
+	// 1. 解析输入JSON(data为数组结构)
+	var input struct {
+		Data []struct {
+			MetricEnCode string `json:"metric_en_code"`
+			MetricVal    string `json:"metric_val"`
+			MetricName   string `json:"metric_name"`
 		} `json:"data"`
 	}
-
-	// 用jsoniter解析输入JSON字符串
-	var input inputStruct
 	if err := jsoniter.UnmarshalFromString(arg1, &input); err != nil {
 		return "", err
 	}
 
-	// 清理msg中的无效占位符(修复%!s(MISSING))
-	cleanMsg := strings.ReplaceAll(input.Data.Msg, "%!s(MISSING)", "")
-	// 去除末尾多余的、号
-	cleanMsg = strings.TrimSuffix(cleanMsg, "、")
+	// 2. 初始化默认值(对齐Python)
+	level := "良好"
+	var msgBuilder strings.Builder // 高效拼接字符串,替代Python的+=
 
-	// 构造仅单层data包裹的输出结构
+	// 3. 遍历data数组,复刻Python的分支逻辑
+	for _, line := range input.Data {
+		if line.MetricEnCode == "water_quality" {
+			// 水质指标:判断值是否为"0",修改等级
+			if line.MetricVal == "0" {
+				level = "一般"
+			}
+		} else {
+			// 其他指标:拼接"指标名是值、"
+			if msgBuilder.Len() > 0 {
+				msgBuilder.WriteString("、") // 用分隔符替代末尾rstrip,更高效
+			}
+			msgBuilder.WriteString(line.MetricName + "是" + line.MetricVal)
+		}
+	}
+
+	// 4. 构造输出(单层data包裹)
 	output := struct {
 		Data struct {
 			Level string `json:"level"`
 			Msg   string `json:"msg"`
 		} `json:"data"`
 	}{}
-	output.Data.Level = input.Data.Level
-	output.Data.Msg = cleanMsg
+	output.Data.Level = level
+	output.Data.Msg = msgBuilder.String() // 无需rstrip,天然无末尾多余分隔符
 
-	// 用jsoniter序列化为JSON字符串返回
-	result, err := jsoniter.MarshalToString(output)
-	if err != nil {
-		return "", err
-	}
-	return result, nil
+	// 5. 序列化为JSON字符串返回
+	res, err := jsoniter.MarshalToString(output)
+	return res, err
 }
 
 func TransformType15(arg1 string) (string, error) {