feat: Auto-Verify闭环 — verify API+定时验证+OKR联动+周报
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python3
|
||||
"""行动计划执行周报 — 每周一08:00推送
|
||||
|
||||
统计本周通过/失败/升级/待处理计划数,推送任总
|
||||
"""
|
||||
import sys, os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from app.database import get_db
|
||||
from app.models import ActionPlan
|
||||
from app.utils.notifier import send_wecom_message
|
||||
|
||||
|
||||
def generate_weekly_report():
|
||||
db = next(get_db())
|
||||
try:
|
||||
week_ago = datetime.now() - timedelta(days=7)
|
||||
# 本周所有计划(最近7天创建的)
|
||||
plans = db.query(ActionPlan).filter(ActionPlan.created_at >= week_ago).all()
|
||||
if not plans:
|
||||
plans = db.query(ActionPlan).order_by(ActionPlan.created_at.desc()).limit(10).all()
|
||||
|
||||
total = len(plans)
|
||||
passed = sum(1 for p in plans if p.verify_status == "passed")
|
||||
failed = sum(1 for p in plans if p.verify_status == "failed")
|
||||
escalated = sum(1 for p in plans if p.verify_status == "escalated")
|
||||
pending = sum(1 for p in plans if p.verify_status in ("pending", "retrying"))
|
||||
done = sum(1 for p in plans if p.status == "done")
|
||||
|
||||
msg = (
|
||||
f"📋 行动计划执行周报({datetime.now().strftime('%Y-%m-%d')})\n"
|
||||
f"统计范围:近7天计划 {total} 个\n"
|
||||
f"✅ 验证通过: {passed}\n"
|
||||
f"❌ 验证失败: {failed}\n"
|
||||
f"🚨 升级人工: {escalated}\n"
|
||||
f"⏳ 待验证: {pending}\n"
|
||||
f"🏁 已完成: {done}\n"
|
||||
)
|
||||
# 列出待验证/升级项
|
||||
urgent = [p for p in plans if p.verify_status in ("escalated", "retrying")]
|
||||
if urgent:
|
||||
msg += "\n⚠️ 需关注:\n"
|
||||
for p in urgent[:5]:
|
||||
msg += f" #{p.id} {p.title} ({p.verify_status})\n"
|
||||
|
||||
try:
|
||||
send_wecom_message(msg, title="行动计划周报")
|
||||
except Exception:
|
||||
pass
|
||||
print(msg)
|
||||
return {"total": total, "passed": passed, "failed": failed, "escalated": escalated}
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_weekly_report()
|
||||
Reference in New Issue
Block a user