feat(scheduler): MOM 日报改为仅工作日发送
在 _run_daily_report_job 入口加工作日闸门,位于抢锁与 app_context 之前,非工作日跳过零开销。日期按北京时间取,避免容器 UTC 时区在凌晨算错一天。库存预警 9:30 维持每日发送不变。
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
# inventory-backend/run.py
|
# inventory-backend/run.py
|
||||||
import sys
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from app import create_app
|
from app import create_app
|
||||||
|
|
||||||
@ -54,7 +55,18 @@ def _run_warning_job():
|
|||||||
|
|
||||||
|
|
||||||
def _run_daily_report_job():
|
def _run_daily_report_job():
|
||||||
"""MOM 系统日报(每天 17:30 北京时间)"""
|
"""MOM 系统日报(每天 17:30 北京时间,**仅工作日**发送)"""
|
||||||
|
# ★ 非工作日跳过。判定放在最前面 —— 连 app_context 和抢锁都不进:
|
||||||
|
# 工作日判定是纯本地计算,不需要数据库,跳过时零开销。
|
||||||
|
# 日期必须按**北京时间**取:容器时区通常是 UTC,而北京时间凌晨 0–8 点
|
||||||
|
# 对应 UTC 的前一天 16–24 点 —— 此时 date.today() 会拿到前一天。
|
||||||
|
# 节假日/调休口径见 app/utils/workday.py。
|
||||||
|
from app.utils.workday import is_workday
|
||||||
|
today = datetime.now(beijing_tz).date()
|
||||||
|
if not is_workday(today):
|
||||||
|
print(f"[Scheduler] 系统日报:{today} 非工作日,跳过发送", flush=True)
|
||||||
|
return
|
||||||
|
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
from app.utils.job_lock import advisory_lock, LOCK_DAILY_REPORT
|
from app.utils.job_lock import advisory_lock, LOCK_DAILY_REPORT
|
||||||
with advisory_lock(LOCK_DAILY_REPORT) as acquired:
|
with advisory_lock(LOCK_DAILY_REPORT) as acquired:
|
||||||
@ -85,7 +97,7 @@ scheduler.add_job(
|
|||||||
replace_existing=True
|
replace_existing=True
|
||||||
)
|
)
|
||||||
scheduler.start()
|
scheduler.start()
|
||||||
print("✅ 定时任务已启动:库存预警 9:30 / MOM系统日报 17:30(北京时间)", flush=True)
|
print("✅ 定时任务已启动:库存预警 9:30(每日)/ MOM系统日报 17:30(仅工作日,北京时间)", flush=True)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# =================================================
|
# =================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user