优化了部分支付宝界面

This commit is contained in:
yml2213
2026-08-12 19:12:22 +08:00
parent 1a20c367db
commit 5074faf9f6
13 changed files with 980 additions and 117 deletions
+35 -7
View File
@@ -15,12 +15,27 @@ def _utcnow():
return datetime.now(timezone.utc)
def _from_ts(value) -> datetime | None:
try:
return datetime.fromtimestamp(int(value), tz=timezone.utc) if value else None
except (TypeError, ValueError, OSError):
return None
def cleanup_orphan_yyb_tasks(db: Session, message: str) -> int:
rows = db.query(YybRechargeTask).filter(YybRechargeTask.status.in_(["created", "waiting_login", "running", "ready"])).all()
rows = db.query(YybRechargeTask).filter(
YybRechargeTask.status.in_(["created", "waiting_login", "ready", "running", "ordering", "waiting_payment"])
).all()
for task in rows:
task.status = "failed"
task.message = message
task.finished_at = _utcnow()
if task.status == "ordering":
task.status = "waiting_payment"
task.message = "服务重启,支付流程中断,可重新检测到账"
elif task.status == "waiting_payment":
task.message = "服务重启,到账检测中断,可重新检测到账"
else:
task.status = "failed"
task.message = message
task.finished_at = _utcnow()
if rows:
db.commit()
return len(rows)
@@ -44,23 +59,36 @@ def sync_task(db: Session, task: YybRechargeTask, worker: YybWorkerClient) -> Yy
"logs": data.get("logs", []),
"payment_status": data.get("payment_status"),
}
qr_created_at = _from_ts(data.get("payment_qr_created_at"))
if qr_created_at:
task.payment_qr_created_at = qr_created_at
last_checked_at = _from_ts(data.get("payment_last_checked_at"))
if last_checked_at:
task.payment_last_checked_at = last_checked_at
if task.status in {"success", "failed"} and task.finished_at is None:
task.finished_at = _utcnow()
if task.status not in {"success", "failed", "stopped"} and task.finished_at is not None:
task.finished_at = None
db.commit()
db.refresh(task)
return task
def public_task(task: YybRechargeTask, include_qr: bool = True,
include_payment_qr: bool | None = None) -> dict[str, Any]:
include_payment_qr: bool | None = None,
creator_username: str = "") -> dict[str, Any]:
result: dict[str, Any] = {
"id": task.id, "task_id": task.task_id,
"provider": task.provider, "platform": task.platform, "points": task.points,
"price_fen": task.price_fen,
"product_id": task.product_id, "zone_id": task.zone_id, "zone_name": task.zone_name,
"role_id": task.role_id, "role_name": task.role_name, "status": task.status,
"phase": task.phase, "message": task.message, "result": task.result,
"created_by": task.created_by, "created_at": task.created_at,
"finished_at": task.finished_at,
"created_by": task.created_by, "created_by_username": creator_username,
"created_at": task.created_at, "finished_at": task.finished_at,
"payment_started_at": task.payment_started_at,
"payment_qr_created_at": task.payment_qr_created_at,
"payment_last_checked_at": task.payment_last_checked_at,
}
if task.result:
result["login_qr_mime_type"] = task.result.get("login_qr_mime_type", "image/jpeg")
@@ -53,5 +53,8 @@ class YybWorkerClient:
def payment(self, worker_job_id: str) -> dict[str, Any]:
return self._request("POST", f"/v1/jobs/{worker_job_id}/payment")
def payment_check(self, worker_job_id: str) -> dict[str, Any]:
return self._request("POST", f"/v1/jobs/{worker_job_id}/payment/check")
def stop(self, worker_job_id: str) -> dict[str, Any]:
return self._request("POST", f"/v1/jobs/{worker_job_id}/stop")