| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- """客户服务快捷登记:payload 规范化与字典回写(逐步扩展)。"""
- from typing import Any, Dict, FrozenSet, Optional
- CUSTOMER_SERVICE_FIELD_KEYS: FrozenSet[str] = frozenset(
- {
- "sms_send_date",
- "sms_send_status",
- "microbe_followup_date",
- "microbe_followup_status",
- "fullmoon_followup_date",
- "fullmoon_followup_status",
- "household_registered",
- "einvoice_send_time",
- "effective_address",
- }
- )
- def normalize_dict_value(raw) -> Optional[str]:
- """Trim; empty/None -> None."""
- if raw is None:
- return None
- text = str(raw).strip()
- return text or None
- def _is_empty_merge_value(value: Any) -> bool:
- if value is None:
- return True
- if isinstance(value, str):
- return not value.strip()
- return False
- def merge_customer_service_fields(
- existing: Optional[Dict[str, Any]],
- incoming: Optional[Dict[str, Any]],
- ) -> Dict[str, Any]:
- """Merge incoming onto existing; empty/None/whitespace incoming values do not overwrite."""
- existing = existing or {}
- incoming = incoming or {}
- keys = (set(existing.keys()) | set(incoming.keys())) & CUSTOMER_SERVICE_FIELD_KEYS
- merged: Dict[str, Any] = {k: existing.get(k) for k in keys}
- for key, value in incoming.items():
- if key not in CUSTOMER_SERVICE_FIELD_KEYS:
- continue
- if _is_empty_merge_value(value):
- continue
- merged[key] = value
- return merged
- def has_any_customer_service_payload(incoming: Optional[Dict[str, Any]]) -> bool:
- """True if any known customer-service field has a non-empty value."""
- incoming = incoming or {}
- for key in CUSTOMER_SERVICE_FIELD_KEYS:
- if key not in incoming:
- continue
- if not _is_empty_merge_value(incoming.get(key)):
- return True
- return False
|