视频复刻积分规则优化

This commit is contained in:
Azmat@qq.com
2026-09-04 17:51:16 +08:00
parent 15718a60bf
commit ee3ddb49b4
8 changed files with 132 additions and 21 deletions
+19 -2
View File
@@ -646,6 +646,14 @@ def start_pending_free_video(task: AITask) -> AITask:
team=task.team,
)
reserve_amount = video_reserve_amount(quote.points, rule=quote.meta.get("rule"))
try:
digest_points = Decimal(str(payload.get("digest_points") or 0))
except Exception:
digest_points = Decimal("0")
if digest_points < 0:
digest_points = Decimal("0")
# 视频复刻·商品:拆镜 Gemini 挂牌已记在 digest_points,与 Seedance 一并预留
reserve_amount = reserve_amount + digest_points
with transaction.atomic():
locked = (
@@ -671,8 +679,10 @@ def start_pending_free_video(task: AITask) -> AITask:
next_payload["estimated_tokens"] = tokens
next_payload["review_pending"] = False
next_payload.update(video_quote_payload(quote))
# 保留拆镜挂牌,结算时加回
next_payload["digest_points"] = str(digest_points)
locked.request_payload = next_payload
locked.estimated_cost = quote.points
locked.estimated_cost = quote.points + digest_points
locked.status = AITask.Status.RESERVED
locked.save(update_fields=["request_payload", "estimated_cost", "status", "updated_at"])
@@ -992,10 +1002,17 @@ def finalize_free_video(*, task: AITask) -> AITask:
except (TypeError, ValueError):
total_tokens = 0
settle = settle_video_from_payload(actual_model, payload=payload, tokens=total_tokens)
try:
digest_points = Decimal(str(payload.get("digest_points") or 0))
except Exception:
digest_points = Decimal("0")
if digest_points < 0:
digest_points = Decimal("0")
if settle.meta.get("rule") == "missing_usage":
# estimated_cost 已含 digest_points
actual, base_cost = locked.estimated_cost, locked.base_cost
else:
actual, base_cost = settle.points, settle.base_cost_yuan
actual, base_cost = settle.points + digest_points, settle.base_cost_yuan
if total_tokens > 0:
payload["actual_tokens"] = total_tokens
if settle.meta.get("rate"):