Files

60 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()