feat: 综合平台services多服务支持+SW网络优先缓存修复+适配层/定时任务完善

This commit is contained in:
gouki
2026-08-05 11:57:17 +00:00
parent 7f1268f508
commit 1b7d4823c3
47 changed files with 2895 additions and 1189 deletions
+15 -10
View File
@@ -3,7 +3,7 @@
检查即将到期的资产,生成提醒消息并通过通知渠道发送。
"""
from datetime import date
from datetime import date, timedelta
from sqlmodel import Session, select
@@ -16,16 +16,21 @@ _SKIP_STATUS = {AssetStatus.CANCELLED}
def get_expiring_assets(session: Session, threshold_days: int) -> list:
"""返回 threshold_days 天内到期的资产列表 [(asset, days), ...],按剩余天数升序"""
"""返回 threshold_days 天内到期的资产列表 [(asset, days), ...],按剩余天数升序
性能优化:日期范围与状态过滤均下推到 SQL 层。
"""
today = date.today()
assets = session.exec(select(Asset).where(Asset.expiry_date.is_not(None))).all()
expiring = []
for asset in assets:
if asset.status in _SKIP_STATUS:
continue
days = (asset.expiry_date - today).days
if 0 <= days <= threshold_days:
expiring.append((asset, days))
deadline = today + timedelta(days=threshold_days)
assets = session.exec(
select(Asset).where(
Asset.expiry_date.is_not(None),
Asset.expiry_date >= today,
Asset.expiry_date <= deadline,
Asset.status.notin_(_SKIP_STATUS),
)
).all()
expiring = [(asset, (asset.expiry_date - today).days) for asset in assets]
expiring.sort(key=lambda x: x[1])
return expiring