feat(ai_agent): 新增openclaw_hermes混合AI适配器

新增OpenClawHermesAdapter适配器,结合Hermes记忆功能和OpenClaw执行能力,
实现AI问答流程中的记忆召回、执行操作和记忆存储的完整闭环。
同时更新NoopAdapter提示信息,添加新的模型提供商选项。

feat(business): 新增考勤、工作报告和风险事件业务模型

新增AttendanceRecord、WorkReport、RiskEvent和LegacySyncRun四个业务模型,
扩展业务领域注册表,支持考勤管理、工作报告生成和风险事件跟踪等核心业务功能。

feat(reports): 实现考勤汇总和工作日报周报生成功能

新增attendance_summary方法用于统计每日考勤情况,
新增generate_work_report方法用于生成日/周经营报告,
包含任务完成情况、待处理事项和风险指标等综合信息。

feat(risk): 扩展风险管理API端点和供应商风险检测

新增供应商风险查询端点和风险事件管理端点,
提供风险事件列表查询和自动生成功能,
增强供应商风险评估能力。

feat(feishu): 添加考勤查询命令和风险摘要增强

集成考勤汇总查询功能到飞书命令系统,
在风险摘要中添加供应商风险和开放风险事件统计,
丰富日常经营管理信息展示。

refactor(service): 优化业务服务数据验证和类型转换

重构_model_payload函数实现数据验证和类型转换,
添加列值类型强制转换逻辑,提高API数据处理的准确性和安全性。

build(deps): 添加postgresql数据库驱动依赖

在Dockerfile中添加psycopg[binary]==3.2.3依赖包,
支持PostgreSQL数据库连接和操作。

chore(config): 更新.gitignore文件排除备份和迁移目录

在.gitignore中添加AGENTS.md.bak-*和migration/目录排除规则,
避免备份文件和本地迁移工作区被提交到版本控制系统。
```
This commit is contained in:
2026-06-24 10:30:59 +08:00
parent 09933b15ad
commit d82116d637
22 changed files with 953 additions and 81 deletions

View File

@@ -1,9 +1,15 @@
from datetime import date
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.core.security import require_api_key
from app.modules.reports.schemas import PushReportRequest, ReportResponse
from app.modules.reports.schemas import (
PushReportRequest,
ReportResponse,
WorkReportGenerateRequest,
)
from app.modules.reports.service import ReportService
router = APIRouter(dependencies=[Depends(require_api_key)])
@@ -19,6 +25,31 @@ def project_weekly(db: Session = Depends(get_db)) -> dict:
return ReportService(db).project_weekly()
@router.get("/attendance-summary")
def attendance_summary(
work_date: date | None = None,
db: Session = Depends(get_db),
) -> dict:
return ReportService(db).attendance_summary(work_date)
@router.post("/work-reports/generate")
def generate_work_report(
payload: WorkReportGenerateRequest,
db: Session = Depends(get_db),
) -> dict:
return ReportService(db).generate_work_report(
report_type=payload.report_type,
reporter=payload.reporter,
department=payload.department,
project_code=payload.project_code,
period_start=payload.period_start,
period_end=payload.period_end,
persist=payload.persist,
actor=payload.actor,
)
@router.post("/daily-brief/push")
def push_daily_brief(payload: PushReportRequest, db: Session = Depends(get_db)) -> dict:
report = ReportService(db).daily_brief()