feat(tasks): 运营端任务详情/竞标/报名端点 + 园区发布任务端点
- 运营端 /admin/tasks/{id} 详情、/{id}/bids、/{id}/claims、/{id}/bids/{bid_id}/win 开标定标(余标置lost+进 in_progress)
- 园区端 POST /park/api/park/tasks 发布任务(publisher_role=park/park_id=本园/发布即上架/默认公有)
This commit is contained in:
@@ -75,6 +75,59 @@ async def operator_escrow_release(
|
||||
return released
|
||||
|
||||
|
||||
@router.get("/tasks/{task_id}", summary="任务详情")
|
||||
async def get_task_detail(
|
||||
task_id: str,
|
||||
db: Database = Depends(get_db),
|
||||
_u: dict = Depends(require_roles("operator")),
|
||||
):
|
||||
task = await db.tasks.get(task_id)
|
||||
if task is None:
|
||||
raise HTTPException(status_code=404, detail="任务不存在")
|
||||
return task
|
||||
|
||||
|
||||
@router.get("/tasks/{task_id}/bids", summary="任务竞标(报名/投标情况)")
|
||||
async def get_task_bids(
|
||||
task_id: str,
|
||||
db: Database = Depends(get_db),
|
||||
_u: dict = Depends(require_roles("operator")),
|
||||
):
|
||||
return {"items": await db.bids.list_for_task(task_id)}
|
||||
|
||||
|
||||
@router.get("/tasks/{task_id}/claims", summary="任务报名/接单情况(抢单/指派/推荐)")
|
||||
async def get_task_claims(
|
||||
task_id: str,
|
||||
db: Database = Depends(get_db),
|
||||
_u: dict = Depends(require_roles("operator")),
|
||||
):
|
||||
return {"items": await db.task_claims.list_by_task(task_id)}
|
||||
|
||||
|
||||
@router.post("/tasks/{task_id}/bids/{bid_id}/win", summary="开标/定标(选定中标 OPC)")
|
||||
async def operator_win_bid(
|
||||
task_id: str,
|
||||
bid_id: str,
|
||||
request: Request,
|
||||
db: Database = Depends(get_db),
|
||||
_u: dict = Depends(require_roles("operator")),
|
||||
):
|
||||
from ...services.task_service import TaskService
|
||||
|
||||
bid = await db.bids.set_status(bid_id, "win")
|
||||
if bid is None:
|
||||
raise HTTPException(status_code=404, detail="竞标不存在")
|
||||
# 其余标置为 lost
|
||||
for b in await db.bids.list_for_task(task_id):
|
||||
if b["id"] != bid_id and b.get("status") == "submitted":
|
||||
await db.bids.set_status(b["id"], "lost")
|
||||
await db.tasks.set_status(task_id, "in_progress")
|
||||
await write_audit(db, action="bid.win", resource="bid", resource_id=bid_id,
|
||||
detail=f"task={task_id} winner={bid.get('opc_name')}", user=_u, request=request)
|
||||
return bid
|
||||
|
||||
|
||||
@router.get("/tasks", summary="任务列表")
|
||||
async def list_tasks(
|
||||
status: str | None = None,
|
||||
|
||||
Reference in New Issue
Block a user