certflow.services.query_service module¶
查询服务模块
提供销售计划的多条件组合查询功能,支持参数化查询和分页。 支持关联 Certificate 表进行联合查询。
- class certflow.services.query_service.QueryService(session)[源代码]¶
基类:
object销售计划查询服务
提供灵活的多条件组合查询功能: - 支持模糊匹配、精确匹配、范围查询 - 支持多字段组合查询 - 支持分页和排序 - 支持关联 Certificate 表查询
示例
>>> service = QueryService(session) >>> results = service.query( ... conditions={ ... "product_model": {"value": "阀门", "operator": "contains"}, ... "customer": {"value": "东方电气", "operator": "contains"}, ... "quantity": {"value": 10, "operator": "gte"} ... } ... )
- 参数:
session (Session)
- OPERATORS = {'contains': <function QueryService.<lambda>>, 'endswith': <function QueryService.<lambda>>, 'eq': <function QueryService.<lambda>>, 'gt': <function QueryService.<lambda>>, 'gte': <function QueryService.<lambda>>, 'in': <function QueryService.<lambda>>, 'is_not_null': <function QueryService.<lambda>>, 'is_null': <function QueryService.<lambda>>, 'lt': <function QueryService.<lambda>>, 'lte': <function QueryService.<lambda>>, 'ne': <function QueryService.<lambda>>, 'not_contains': <function QueryService.<lambda>>, 'startswith': <function QueryService.<lambda>>}¶
- property saleplan_fields: set[str]¶
SalePlan 表全部列名集合。
惰性计算并缓存(
_salepian_fields),用于判定查询字段归属 SalePlan 表。
- property certificate_fields: set[str]¶
Certificate 表全部列名集合。
惰性计算并缓存(
_certificate_fields),用于判定查询字段归属 Certificate 表。
- FIELD_ALIASES = {'cert_status': 'print_status', 'print_status': 'print_status'}¶
- build_status_filter(status)[源代码]¶
构建状态筛选条件(同时匹配 production_status 和 execution_status)
当用户筛选标准化状态时,同时模糊匹配 execution_status 原始文本, 避免因原始文本包含状态关键词而遗漏记录。
关键词从 StatusInference 配置中获取(config.yaml production_status.query_keywords)。
- build_query(conditions, or_filters=None)[源代码]¶
根据条件构建查询对象
自动识别字段所属表: - SalePlan 字段直接过滤 - Certificate 字段通过 LEFT JOIN 过滤
- query(conditions=None, page=1, page_size=50, order_by='sort_group', order_desc=False, or_filters=None)[源代码]¶
执行多条件组合查询
- get_distinct_field_combos(fields, conditions=None)[源代码]¶
返回指定字段组合的去重值列表(全量,不受分页影响),用于快查框候选项。
跨整个结果集(尊重 conditions,但忽略分页)计算去重组合, 避免候选项仅来自当前页导致「越查越窄 / 只能选已显示项」。
- search(conditions=None, page=1, page_size=50, order_by='sort_group', order_desc=False)[源代码]¶
执行查询并返回与
query一致的结果字典兼容旧测试/调用方:在
query基础上将记录字段命名为results(query使用records),其余字段(total/page/page_size/ total_pages/conditions)保持一致。
- fill_plan_no(ids, sequence)[源代码]¶
填充计划单号(批量更新版本)
使用每条记录的 plan_date 生成对应的年月格式 plan_no。 如果 plan_date 为空,则回退到当前年月。