feat(douyu): 拆分鱼翅积分与兑换记录查询

This commit is contained in:
yml2213
2026-10-23 10:42:42 +08:00
parent 2c87deed78
commit 2de5d374df
5 changed files with 359 additions and 105 deletions
+75 -12
View File
@@ -79,6 +79,22 @@ def _publish_change(current: User, *, scope: str, action: str) -> None:
collab_events.publish(scope=scope, action=action, actor_id=int(current.id))
def _query_result_out(db: Session, result: dict) -> dict:
return {
"order": _one(db, result["order"]),
"metric": collab.serialize_metric(result["metric"]),
"scope": result["scope"],
"verdict": result["verdict"],
"message": result["message"],
"points_reason": result["points_reason"],
"fish_fin_balance": result["fish_fin_balance"],
"points_balance": result["points_balance"],
"required_total": result["required_total"],
"surplus": result["surplus"],
"errors": result["errors"],
}
@router.websocket("/external-orders/ws")
async def ws_external_orders(websocket: WebSocket):
"""协作台账实时失效通知:前端收到后按自己的筛选静默重拉。"""
@@ -400,18 +416,29 @@ def query_external_order_activity(
order = collab.get_order(db, order_id)
result = collab.query_activity(db, current, order, source="manual")
_publish_change(current, scope="orders", action="order.activity")
return {
"order": _one(db, result["order"]),
"metric": collab.serialize_metric(result["metric"]),
"verdict": result["verdict"],
"message": result["message"],
"points_reason": result["points_reason"],
"fish_fin_balance": result["fish_fin_balance"],
"points_balance": result["points_balance"],
"required_total": result["required_total"],
"surplus": result["surplus"],
"errors": result["errors"],
}
return _query_result_out(db, result)
except collab.CollabError as exc:
raise _http_error(exc) from exc
@router.post("/external-orders/{order_id}/balances/query")
def query_external_order_balances(
order_id: int,
db: Session = Depends(get_db),
current: User = Depends(require_permission("douyu:collab:edit")),
):
"""只刷新鱼翅和手册积分,不查兑换记录、不判定、不改状态。"""
try:
order = collab.get_order(db, order_id)
result = collab.query_activity(
db,
current,
order,
source="balance_manual",
include_records=False,
)
_publish_change(current, scope="orders", action="order.balances")
return _query_result_out(db, result)
except collab.CollabError as exc:
raise _http_error(exc) from exc
@@ -467,6 +494,42 @@ def set_external_order_status_batch(
return {"results": results, "success": all(item["success"] for item in results)}
@router.post("/external-orders/balances/query")
def query_external_orders_balances(
ids: list[int],
db: Session = Depends(get_db),
current: User = Depends(require_permission("douyu:collab:edit")),
):
"""批量刷新鱼翅和手册积分,不查兑换记录、不判定、不改状态。"""
results: list[dict] = []
for order_id in ids:
try:
order = collab.get_order(db, order_id)
result = collab.query_activity(
db,
current,
order,
source="balance_batch",
include_records=False,
)
results.append(
{
"id": order_id,
"success": True,
"message": result["message"],
"fish_fin_balance": result["fish_fin_balance"],
"points_balance": result["points_balance"],
"points_reason": result["points_reason"],
}
)
except Exception as exc: # noqa: BLE001
db.rollback()
results.append({"id": order_id, "success": False, "message": str(exc)})
if any(item["success"] for item in results):
_publish_change(current, scope="orders", action="order.balances_batch")
return {"results": results, "success": all(item["success"] for item in results)}
@router.post("/external-orders/activity/query")
def query_external_orders_activity(
ids: list[int],