Explorar el Código

refactor(relay): enhance remix logic for billing context extraction

- Updated the remix handling in ResolveOriginTask to prioritize extracting OtherRatios from the BillingContext of the original task if available.
- Retained the previous logic for extracting seconds and size from task data as a fallback.
- Improved clarity and maintainability of the remix logic by separating the new and old approaches.
CaIon hace 1 semana
padre
commit
76892e8376
Se han modificado 1 ficheros con 23 adiciones y 15 borrados
  1. 23 15
      relay/relay_task.go

+ 23 - 15
relay/relay_task.go

@@ -106,21 +106,29 @@ func ResolveOriginTask(c *gin.Context, info *relaycommon.RelayInfo) *dto.TaskErr
 
 	// 提取 remix 参数(时长、分辨率 → OtherRatios)
 	if info.Action == constant.TaskActionRemix {
-		var taskData map[string]interface{}
-		_ = common.Unmarshal(originTask.Data, &taskData)
-		secondsStr, _ := taskData["seconds"].(string)
-		seconds, _ := strconv.Atoi(secondsStr)
-		if seconds <= 0 {
-			seconds = 4
-		}
-		sizeStr, _ := taskData["size"].(string)
-		if info.PriceData.OtherRatios == nil {
-			info.PriceData.OtherRatios = map[string]float64{}
-		}
-		info.PriceData.OtherRatios["seconds"] = float64(seconds)
-		info.PriceData.OtherRatios["size"] = 1
-		if sizeStr == "1792x1024" || sizeStr == "1024x1792" {
-			info.PriceData.OtherRatios["size"] = 1.666667
+		if originTask.PrivateData.BillingContext != nil {
+			// 新的 remix 逻辑:直接从原始任务的 BillingContext 中提取 OtherRatios(如果存在)
+			for s, f := range originTask.PrivateData.BillingContext.OtherRatios {
+				info.PriceData.AddOtherRatio(s, f)
+			}
+		} else {
+			// 旧的 remix 逻辑:直接从 task data 解析 seconds 和 size(如果存在)
+			var taskData map[string]interface{}
+			_ = common.Unmarshal(originTask.Data, &taskData)
+			secondsStr, _ := taskData["seconds"].(string)
+			seconds, _ := strconv.Atoi(secondsStr)
+			if seconds <= 0 {
+				seconds = 4
+			}
+			sizeStr, _ := taskData["size"].(string)
+			if info.PriceData.OtherRatios == nil {
+				info.PriceData.OtherRatios = map[string]float64{}
+			}
+			info.PriceData.OtherRatios["seconds"] = float64(seconds)
+			info.PriceData.OtherRatios["size"] = 1
+			if sizeStr == "1792x1024" || sizeStr == "1024x1792" {
+				info.PriceData.OtherRatios["size"] = 1.666667
+			}
 		}
 	}