trade/refresh
This commit is contained in:
@@ -34,6 +34,9 @@ from surugaya_common.models import SurugayaOrderDetail
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["scrape"])
|
||||
|
||||
# 同一 trade_code 在该窗口内不因 /trade 未命中重复下发抓取任务
|
||||
TRADE_PENDING_TTL_SECONDS = 3600
|
||||
|
||||
|
||||
def _parse_callback_response_body(content_type: str, body_bytes: bytes) -> Any:
|
||||
if not body_bytes:
|
||||
@@ -317,7 +320,7 @@ async def trade(
|
||||
dedup_key = redis_keys.trade_pending_key(trade_code)
|
||||
dedup_exists = await container.session_store._redis.get(dedup_key)
|
||||
if not dedup_exists:
|
||||
await container.session_store._redis.setex(dedup_key, 3600, "1")
|
||||
await container.session_store._redis.setex(dedup_key, TRADE_PENDING_TTL_SECONDS, "1")
|
||||
await container.session_store._redis.xadd(
|
||||
name=redis_keys.trade_fetch_stream(),
|
||||
fields={"payload": json.dumps({"trade_code": trade_code})},
|
||||
@@ -352,6 +355,52 @@ async def trade(
|
||||
)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/trade/refresh",
|
||||
response_model=ApiResponse[None],
|
||||
dependencies=[Depends(require_bearer_token)],
|
||||
)
|
||||
async def trade_refresh(
|
||||
trade_code: str,
|
||||
container: ServiceContainer = Depends(get_container),
|
||||
) -> ApiResponse[None]:
|
||||
"""
|
||||
立即下发订单详情刷新任务(绕过 /trade 未命中时的去重窗口,强制重抓)
|
||||
"""
|
||||
if not trade_code or trade_code.strip() == "":
|
||||
return ApiResponse[None](
|
||||
success=False,
|
||||
msg="trade_code 不能为空",
|
||||
data=None,
|
||||
code=400,
|
||||
)
|
||||
|
||||
if container.session_store._redis is None:
|
||||
return ApiResponse[None](
|
||||
success=False,
|
||||
msg="Redis 未配置",
|
||||
data=None,
|
||||
code=500,
|
||||
)
|
||||
|
||||
# 强制下发并重置去重窗口,避免随后 /trade 未命中时再次重复下发
|
||||
await container.session_store._redis.setex(
|
||||
redis_keys.trade_pending_key(trade_code), TRADE_PENDING_TTL_SECONDS, "1"
|
||||
)
|
||||
await container.session_store._redis.xadd(
|
||||
name=redis_keys.trade_fetch_stream(),
|
||||
fields={"payload": json.dumps({"trade_code": trade_code})},
|
||||
maxlen=100,
|
||||
approximate=True,
|
||||
)
|
||||
|
||||
return ApiResponse[None](
|
||||
success=True,
|
||||
msg="success",
|
||||
data=None,
|
||||
code=0,
|
||||
)
|
||||
|
||||
|
||||
@router.post(
|
||||
"/test/check_task_callback_url",
|
||||
|
||||
Reference in New Issue
Block a user