```
feat: 添加仪表板路由和响应数据脱敏功能 - 添加了仪表板模块路由并集成到主路由器中 - 实现了敏感数据响应脱敏配置和功能 - 增加了 Feishu 审批卡片操作处理功能 - 支持通过任务队列异步推送日常简报和项目周报 - 添加了风险事件生成的任务队列支持 - 在 smoke 测试中增加了相关功能验证 refactor: 格式化模型注册模块导入列表 - 将单行导入列表改为多行格式以提高可读性 ```
This commit is contained in:
@@ -3,8 +3,15 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.database import get_db
|
||||
from app.core.security import ApiPrincipal, require_api_key, require_approval_api_key
|
||||
from app.modules.approvals.schemas import ApprovalCreate, ApprovalDecision, ApprovalRead
|
||||
from app.modules.approvals.schemas import (
|
||||
ApprovalCreate,
|
||||
ApprovalDecision,
|
||||
ApprovalRead,
|
||||
PushApprovalCardRequest,
|
||||
)
|
||||
from app.modules.approvals.service import ApprovalService
|
||||
from app.modules.feishu.constants import FeishuResponseKey
|
||||
from app.modules.feishu.service import FeishuService
|
||||
|
||||
router = APIRouter(dependencies=[Depends(require_api_key)])
|
||||
|
||||
@@ -57,3 +64,28 @@ def reject(
|
||||
principal: ApiPrincipal = Depends(require_approval_api_key),
|
||||
):
|
||||
return ApprovalService(db).decide(ticket_id, principal.actor, False, payload.comment)
|
||||
|
||||
|
||||
@router.post("/{ticket_id}/push-feishu-card")
|
||||
def push_feishu_approval_card(
|
||||
ticket_id: str,
|
||||
payload: PushApprovalCardRequest,
|
||||
db: Session = Depends(get_db),
|
||||
principal: ApiPrincipal = Depends(require_api_key),
|
||||
) -> dict:
|
||||
ticket = ApprovalService(db).get_by_ticket(ticket_id)
|
||||
lines = [
|
||||
f"- 单号:{ticket.ticket_id}",
|
||||
f"- 领域:{ticket.domain}",
|
||||
f"- 动作:{ticket.action}",
|
||||
f"- 申请人:{ticket.applicant}",
|
||||
f"- 理由:{ticket.reason or '-'}",
|
||||
]
|
||||
card = FeishuService.build_approval_card("审批请求", lines, ticket.ticket_id)
|
||||
result = FeishuService(db).send_card(
|
||||
card,
|
||||
receive_id=payload.receive_id,
|
||||
receive_id_type=payload.receive_id_type,
|
||||
actor=principal.actor,
|
||||
)
|
||||
return {FeishuResponseKey.OK: True, FeishuResponseKey.PROVIDER_RESPONSE: result}
|
||||
|
||||
@@ -4,6 +4,7 @@ from typing import Any
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from app.core.constants import ActorValue
|
||||
from app.modules.feishu.constants import FeishuReceiveIdType
|
||||
|
||||
|
||||
class ApprovalCreate(BaseModel):
|
||||
@@ -19,6 +20,14 @@ class ApprovalDecision(BaseModel):
|
||||
comment: str | None = None
|
||||
|
||||
|
||||
class PushApprovalCardRequest(BaseModel):
|
||||
receive_id: str | None = Field(
|
||||
default=None,
|
||||
description="chat_id or open_id depending on receive_id_type.",
|
||||
)
|
||||
receive_id_type: str = FeishuReceiveIdType.CHAT_ID
|
||||
|
||||
|
||||
class ApprovalRead(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user