53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
from __future__ import annotations
|
||
|
||
import argparse
|
||
from datetime import date
|
||
|
||
from .config import read_config
|
||
from .db import Database
|
||
from .report_service import ReportService
|
||
from .robot_service import create_reminder_payload, create_summary_payload, send_webhook
|
||
from .workday import is_workday
|
||
|
||
|
||
def send_reminder() -> dict:
|
||
config = read_config()
|
||
if not is_workday(date.today(), config.workday_calendar_path):
|
||
return {"skipped": True, "reason": "not a workday"}
|
||
payload = create_reminder_payload(f"{config.base_url}/submit")
|
||
return send_webhook(config.feishu_webhook_url, payload)
|
||
|
||
|
||
def send_summary(report_date: str | None = None) -> dict:
|
||
config = read_config()
|
||
selected_date = date.fromisoformat(report_date) if report_date else date.today()
|
||
if not is_workday(selected_date, config.workday_calendar_path):
|
||
return {"skipped": True, "reason": "not a workday", "date": selected_date.isoformat()}
|
||
|
||
database = Database(config.database_path, config.employee_seed_path)
|
||
try:
|
||
service = ReportService(database)
|
||
selected_date_text = selected_date.isoformat()
|
||
summary = service.list_reports_for_date(selected_date_text)
|
||
payload = create_summary_payload(f"{config.base_url}/manager?date={selected_date_text}", summary)
|
||
return send_webhook(config.feishu_webhook_url, payload)
|
||
finally:
|
||
database.close()
|
||
|
||
|
||
def main() -> None:
|
||
parser = argparse.ArgumentParser(description="发送飞书日报定时消息")
|
||
parser.add_argument("action", choices=["reminder", "summary"], help="reminder 发送提醒,summary 发送汇总")
|
||
parser.add_argument("--date", help="汇总日期,格式 YYYY-MM-DD;不传则使用当天")
|
||
args = parser.parse_args()
|
||
|
||
if args.action == "reminder":
|
||
result = send_reminder()
|
||
else:
|
||
result = send_summary(args.date)
|
||
print(result)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|