diff --git a/pricing/pricing.py b/pricing/pricing.py index 1cccd30..587cb77 100644 --- a/pricing/pricing.py +++ b/pricing/pricing.py @@ -635,11 +635,12 @@ order by b.enabled_date desc""" exception(f'{e}:{msg}') break - # 检查 filters 区间条件(新格式) + # 检查 filters 区间条件(新格式,AND逻辑:所有filter_item都要匹配) + # 带 unit_prices 的 filter_item 是 tiered 定价,跳过(由后面第二块处理) if p_ok and is_new_format and 'filters' in p: - # filters 是多个区间选项,只要有一个匹配就行 - filter_matched = False for filter_item in p['filters']: + if 'unit_prices' in filter_item: + continue # tiered定价项,不在此处检查 item_ok = True for fk, fv in filter_item.items(): if fk == 'unit_prices': @@ -650,7 +651,7 @@ order by b.enabled_date desc""" data_value = config_data.get(fk) data_value = data_mapping(d, fk, data_value) if data_value is None: - continue + continue # 数据中没有该键,视为匹配 try: flg = check_value(f, fv, data_value) if not flg: @@ -660,11 +661,9 @@ order by b.enabled_date desc""" debug(f'filter check error: {e}') item_ok = False break - if item_ok: - filter_matched = True + if not item_ok: + p_ok = False break - if not filter_matched: - p_ok = False if not p_ok: info(f'{config_data=}, {p=}, mismatched')