feat:风控Agent(规则引擎+前置拦截+人工处置+工单闭环)
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""风控处置路由:预警列表 + 放行/拦截/冻结(仅风控专员)。"""
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from api.deps import require_risk_officer
|
||||
from config.deps import get_db
|
||||
from model.sys_user import SysUser
|
||||
from service.risk import handle as risk_handle
|
||||
from utils.response import success
|
||||
|
||||
router = APIRouter(prefix="/risk", tags=["风控"])
|
||||
|
||||
|
||||
@router.get("/alert/list", summary="预警列表")
|
||||
async def list_alerts(
|
||||
status: str | None = None,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
alerts = await risk_handle.list_alerts(db, status)
|
||||
return success([a.model_dump(mode="json") for a in alerts])
|
||||
|
||||
|
||||
@router.post("/alert/{alert_id}/release", summary="放行")
|
||||
async def release(
|
||||
alert_id: int,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await risk_handle.release(db, user, alert_id)
|
||||
return success(result)
|
||||
|
||||
|
||||
@router.post("/alert/{alert_id}/block", summary="拦截")
|
||||
async def block(
|
||||
alert_id: int,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await risk_handle.block(db, user, alert_id)
|
||||
return success(result)
|
||||
|
||||
|
||||
@router.post("/alert/{alert_id}/freeze", summary="冻结")
|
||||
async def freeze(
|
||||
alert_id: int,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await risk_handle.freeze(db, user, alert_id)
|
||||
return success(result)
|
||||
@@ -0,0 +1,62 @@
|
||||
"""业务工单路由:列表 / 详情 / 认领 / 提交审核 / 复核(仅风控专员)。"""
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from api.deps import require_risk_officer
|
||||
from config.deps import get_db
|
||||
from model.sys_user import SysUser
|
||||
from schemas.work_order import WorkOrderIdReq, WorkOrderReviewReq
|
||||
from service import work_order as work_order_service
|
||||
from utils.response import success
|
||||
|
||||
router = APIRouter(prefix="/work-order", tags=["工单"])
|
||||
|
||||
|
||||
@router.get("/list", summary="工单列表")
|
||||
async def list_work_orders(
|
||||
status: str | None = None,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
orders = await work_order_service.list_work_orders(db, status)
|
||||
return success([o.model_dump(mode="json") for o in orders])
|
||||
|
||||
|
||||
@router.get("/{work_order_id}", summary="工单详情")
|
||||
async def get_work_order(
|
||||
work_order_id: int,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
wo = await work_order_service.get_work_order(db, work_order_id)
|
||||
return success(wo.model_dump(mode="json"))
|
||||
|
||||
|
||||
@router.post("/claim", summary="认领")
|
||||
async def claim(
|
||||
req: WorkOrderIdReq,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await work_order_service.claim(db, user, req.work_order_id)
|
||||
return success(result)
|
||||
|
||||
|
||||
@router.post("/submit-review", summary="提交审核")
|
||||
async def submit_review(
|
||||
req: WorkOrderIdReq,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await work_order_service.submit_review(db, user, req.work_order_id)
|
||||
return success(result)
|
||||
|
||||
|
||||
@router.post("/review", summary="复核")
|
||||
async def review(
|
||||
req: WorkOrderReviewReq,
|
||||
user: SysUser = Depends(require_risk_officer),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await work_order_service.review(db, user, req.work_order_id, req.approve, req.comment)
|
||||
return success(result)
|
||||
Reference in New Issue
Block a user