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

@@ -51,4 +51,5 @@ class LegacyProjectSyncResult(BaseModel):
created: int
updated: int
skipped: int
sync_run_code: str | None = None
items: list[dict[str, Any]]

View File

@@ -13,7 +13,7 @@ from app.core.config import get_settings
from app.core.database import legacy_engine
from app.modules.audit.schemas import AuditLogCreate
from app.modules.audit.service import AuditService
from app.modules.business.models import Project
from app.modules.business.models import LegacySyncRun, Project
from app.modules.business.service import serialize_model
FORBIDDEN_SQL_TOKENS = {
@@ -256,6 +256,22 @@ class LegacyMySQLService:
"skipped": skipped,
"items": items,
}
sync_run = LegacySyncRun(
code=f"SYNC-PROJECTS-{datetime.utcnow():%Y%m%d%H%M%S%f}",
domain="projects",
source_table="LEGACY_PROJECT_QUERY",
status="dry_run" if dry_run else "success",
finished_at=datetime.utcnow(),
created_count=created,
updated_count=updated,
skipped_count=skipped,
note="Project sync from readonly legacy MySQL",
)
self.db.add(sync_run)
self.db.commit()
self.db.refresh(sync_run)
result["sync_run_code"] = sync_run.code
AuditService(self.db).log(
AuditLogCreate(
actor=actor,