56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
"""配送预警:任务完成/取消时自动结案(写历史后更新主表)"""
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models.models import BizDeliveryWarning, BizDeliveryWarningHis
|
|
|
|
|
|
def auto_resolve_open_warnings_for_task(db: Session, task_id: str) -> int:
|
|
"""将某配送任务下未结案预警全部自动处理(配送完成等场景)。"""
|
|
warnings = (
|
|
db.query(BizDeliveryWarning)
|
|
.filter(
|
|
BizDeliveryWarning.task_id == task_id,
|
|
BizDeliveryWarning.is_del == 0,
|
|
BizDeliveryWarning.is_resolved == 0,
|
|
)
|
|
.all()
|
|
)
|
|
if not warnings:
|
|
return 0
|
|
|
|
now = datetime.now()
|
|
for warning in warnings:
|
|
his = BizDeliveryWarningHis(
|
|
id=warning.id,
|
|
task_id=warning.task_id,
|
|
order_id=warning.order_id,
|
|
warning_type=warning.warning_type,
|
|
urgency_level=warning.urgency_level,
|
|
remaining_minutes=warning.remaining_minutes,
|
|
message=warning.message,
|
|
is_sent=warning.is_sent,
|
|
sent_time=warning.sent_time,
|
|
is_resolved=warning.is_resolved,
|
|
resolved_time=warning.resolved_time,
|
|
resolved_by=warning.resolved_by,
|
|
resolved_note=warning.resolved_note,
|
|
create_at=warning.create_at,
|
|
create_by=warning.create_by,
|
|
create_name=warning.create_name,
|
|
update_at=warning.update_at,
|
|
update_by=warning.update_by,
|
|
his_create_at=now,
|
|
)
|
|
db.add(his)
|
|
warning.is_resolved = 1
|
|
warning.resolved_time = now
|
|
warning.resolved_by = "system"
|
|
warning.resolved_note = "auto:配送已完成"
|
|
warning.update_at = now
|
|
warning.update_by = "system"
|
|
|
|
db.commit()
|
|
return len(warnings)
|