feat(pl): aggregate unique delivery dates from stop rows

Provide YYYY-MM-DD dedupe helper for plan list deliveryTimes.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
wuzilongandCursor committed 2026-09-12 21:08:54 +08:00
1 parent efe8aed409
commit 9c5a1cfb8e
2 files changed
+52 -1

No files matched your search

+23 -1
View File
@@ -2,7 +2,7 @@
from __future__ import annotations
from collections import defaultdict
from datetime import datetime
from datetime import date, datetime
from decimal import Decimal
from typing import Optional
@@ -434,6 +434,28 @@ def resolve_delivery_customer_summary(
return legacy or None
def collect_unique_delivery_date_strings(deliveries) -> list[str]:
"""送货段 delivery_time → 去重升序 YYYY-MM-DD。"""
days: set[date] = set()
for row in deliveries or []:
raw = getattr(row, "delivery_time", None)
if raw is None or raw == "":
continue
if isinstance(raw, datetime):
days.add(raw.date())
elif isinstance(raw, date):
days.add(raw)
else:
text = str(raw).strip()
if not text:
continue
try:
days.add(datetime.strptime(text[:10], "%Y-%m-%d").date())
except ValueError:
continue
return [d.isoformat() for d in sorted(days)]
def attach_plan_stops_to_item(
plan_item,
plan: PlPlan,
@@ -0,0 +1,29 @@
from datetime import date, datetime
from app.services.pl_plan_stop_service import collect_unique_delivery_date_strings
class _D:
def __init__(self, delivery_time):
self.delivery_time = delivery_time
def test_collect_unique_sorted_yyyy_mm_dd():
rows = [
_D(datetime(2026, 9, 14, 10, 0, 0)),
_D(datetime(2026, 9, 12, 8, 0, 0)),
_D(date(2026, 9, 12)),
_D(None),
_D(""),
_D("2026-09-13"),
]
assert collect_unique_delivery_date_strings(rows) == [
"2026-09-12",
"2026-09-13",
"2026-09-14",
]
def test_collect_empty():
assert collect_unique_delivery_date_strings([]) == []
assert collect_unique_delivery_date_strings([_D(None)]) == []