"""商家派单金额/押金要求限额 — 读 XcxSysPeizhi,后台可配""" from decimal import Decimal, InvalidOperation from utils.xcx_sys_config import wx_cfg DEFAULT_MIN = Decimal('10') DEFAULT_MAX = Decimal('10000') DEFAULT_YAJIN_MIN = Decimal('0.10') DEFAULT_YAJIN_MAX = Decimal('10000') def get_shangjia_paifa_jiage_limits(): """返回 (min, max) Decimal""" min_v = getattr(wx_cfg, 'SHANGJIA_PAIFA_JIAGE_MIN', None) or DEFAULT_MIN max_v = getattr(wx_cfg, 'SHANGJIA_PAIFA_JIAGE_MAX', None) or DEFAULT_MAX min_v = Decimal(str(min_v)) max_v = Decimal(str(max_v)) if min_v > max_v: min_v, max_v = max_v, min_v return min_v, max_v def get_shangjia_paifa_yajin_limits(): """返回派单「要求接单员押金」金额 (min, max) Decimal""" min_v = getattr(wx_cfg, 'SHANGJIA_PAIFA_YAJIN_MIN', None) or DEFAULT_YAJIN_MIN max_v = getattr(wx_cfg, 'SHANGJIA_PAIFA_YAJIN_MAX', None) or DEFAULT_YAJIN_MAX min_v = Decimal(str(min_v)) max_v = Decimal(str(max_v)) if min_v > max_v: min_v, max_v = max_v, min_v return min_v, max_v def validate_shangjia_paifa_jiage(jiage_str): """ 校验派单金额 @return (ok, msg, jiage_float|None) """ if jiage_str is None or str(jiage_str).strip() == '': return False, '缺少价格', None jiage_raw = str(jiage_str).strip() try: jiage = Decimal(jiage_raw) except (InvalidOperation, ValueError, TypeError): return False, '价格格式错误', None if '.' in jiage_raw and len(jiage_raw.split('.')[1]) > 2: return False, '最多支持两位小数', None min_v, max_v = get_shangjia_paifa_jiage_limits() if jiage < min_v or jiage > max_v: return False, f'价格需在{min_v}-{max_v}元之间', None return True, '', float(jiage) def validate_shangjia_paifa_yajin(yajin_str): """ 校验派单押金要求金额 @return (ok, msg, yajin_decimal|None) """ if yajin_str is None or str(yajin_str).strip() == '': return False, '押金金额不能为空', None raw = str(yajin_str).strip() try: amount = Decimal(raw) except (InvalidOperation, ValueError, TypeError): return False, '押金格式错误', None if '.' in raw and len(raw.split('.')[1]) > 2: return False, '押金最多支持两位小数', None min_v, max_v = get_shangjia_paifa_yajin_limits() if amount < min_v or amount > max_v: return False, f'押金需在{min_v}-{max_v}元之间', None return True, '', amount