在准备环境前提交次全部更改。

This commit is contained in:
Neo
2026-02-19 08:35:13 +08:00
parent ded6dfb9d8
commit 4eac07da47
1387 changed files with 6107191 additions and 33002 deletions

View File

@@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
"""
DWS 层公共辅助函数
从多个 DWS 子类中提取的纯函数,不依赖实例状态。
"""
from __future__ import annotations
from datetime import date, datetime
from decimal import Decimal
from typing import Any, Optional
def mask_mobile(mobile: Optional[str]) -> Optional[str]:
"""手机号脱敏138****1234
短于 7 位的号码原样返回,避免截断后信息丢失。
"""
if not mobile or len(mobile) < 7:
return mobile
return mobile[:3] + "****" + mobile[-4:]
def calc_days_since(stat_date: date, last_date: Optional[date]) -> Optional[int]:
"""计算距离目标日期的天数
若 last_date 为 datetime 则自动取 .date()。
"""
if not last_date:
return None
if isinstance(last_date, datetime):
last_date = last_date.date()
return (stat_date - last_date).days
def parse_id_list(value: Any) -> set[int]:
"""解析逗号分隔的 ID 列表字符串为 int 集合
支持 str / list / tuple / set 输入;非法值静默跳过。
"""
if not value:
return set()
if isinstance(value, str):
items = [v.strip() for v in value.split(",") if v.strip()]
return {int(v) for v in items if v.isdigit()}
if isinstance(value, (list, tuple, set)):
result: set[int] = set()
for item in value:
if item is None:
continue
try:
result.add(int(item))
except (ValueError, TypeError):
continue
return result
return set()
def safe_division(
numerator: Any,
denominator: Any,
default: Decimal = Decimal("0"),
) -> Decimal:
"""安全除法,分母为零或 None 时返回默认值"""
try:
d = Decimal(str(denominator))
if d == 0:
return default
return Decimal(str(numerator)) / d
except (ValueError, TypeError, ArithmeticError):
return default