feat(douyu): 拆分鱼翅积分与兑换记录查询
This commit is contained in:
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user