certflow.services.query_builder module

动态查询构建器 - 对应 Access 窗体的筛选逻辑

自 Access 版本弃用: SignTb 直连 SQL 旧体系残留,与 ORM 版 QueryService 平行存在。 仅保留供 scripts/sync_databases_cli.py 同步 Access 刻印状态/合格证编号专用, 不通过 certflow.services 公共接口导出,亦不纳入 ORM 查询体系。 若未来 Access 同步脚本下线,本模块应整体删除(见 BLUEPRINT §2.3 偏差 6)。

class certflow.services.query_builder.QueryBuilder[源代码]

基类:object

动态查询构建器

对应 Access 窗体 Form_筛选数据到标牌刻印数据源表 的查询逻辑

FIELD_MAPPING = {'CCNF': 'ChuChangRiQiYear', 'CCYF': 'ChuChangRiQiMonth', 'CPMC': 'ChanPinMingCheng', 'CPXH': 'ChanPinXingHao', 'DHDW': 'DingHuoDanWei', 'DN': 'DN', 'FGCZ': 'FaGanCaiZhi', 'FTCZ': 'FaTiCaiZhi', 'JHRQ': 'JiHuaRiQi', 'KKS': 'KKS', 'PN': 'PN', 'QBJCZ': 'QiBiJianCaiZhi', 'SCLH': 'ZiXiangMu', 'SN': 'SN', 'SYJZ': 'ShiYongJieZhi', 'SYWD': 'ShiYongWenDu', 'Sign_ALL': 'Sign_ALL', 'XMMC': 'XiangMuMingCheng', 'XSDDH': 'SheBeiWeiHao', 'YHDH': 'YaoHuoDanHaoFromXSB', 'ZL': 'ZhongLei', 'ZXM': 'ZiXiangMu', 'hgz_PrintTime': 'hgz_PrintTime', 'hgz_ShuLiang': 'hgz_ShuLiang'}
set_condition(field, value)[源代码]

设置筛选条件

参数:
  • field (str) -- 字段名(如 JHRQ, DHDW, XMMC)

  • value (Any) -- 筛选值(支持 LIKE 模糊匹配)

返回类型:

None

set_dn_range(min_dn, max_dn)[源代码]

设置口径范围筛选

参数:
  • min_dn (int) -- 最小口径值

  • max_dn (int) -- 最大口径值

返回类型:

None

set_pn_range(min_pn, max_pn)[源代码]

设置公称压力范围筛选

参数:
  • min_pn (float) -- 最小公称压力值

  • max_pn (float) -- 最大公称压力值

返回类型:

None

set_id_range(min_id, max_id)[源代码]

设置 ID 范围筛选

参数:
  • min_id (int) -- 最小 ID 值

  • max_id (int) -- 最大 ID 值

返回类型:

None

set_quantity_range(min_qty, max_qty)[源代码]

设置合格证数量范围筛选

参数:
  • min_qty (int) -- 最小数量值

  • max_qty (int) -- 最大数量值

返回类型:

None

set_print_date_range(start_date, end_date)[源代码]

设置铭牌打印日期范围筛选

参数:
  • start_date (str) -- 开始日期 (YYYY-MM-DD 格式)

  • end_date (str) -- 结束日期 (YYYY-MM-DD 格式)

返回类型:

None

set_signed_only(signed)[源代码]

设置是否只查询已刻印的记录

参数:

signed (bool) -- True 只查询已刻印,False 只查询未刻印

返回类型:

None

set_has_certificate(has_cert)[源代码]

设置是否只查询有合格证的记录

参数:

has_cert (bool) -- True 只查询有合格证的记录,False 只查询无合格证的记录

返回类型:

None

set_combo_filter(field, value)[源代码]

设置下拉筛选条件(精确匹配)

参数:
  • field (str) -- 字段名

  • value (Any) -- 精确匹配值,为 None 则删除该条件

返回类型:

None

set_full_fields(full)[源代码]

设置是否返回全部字段

参数:

full (bool) -- True 返回全部字段,False 返回简化字段集

返回类型:

None

build_query()[源代码]

构建完整查询 SQL

返回:

(sql, params) 元组

返回类型:

tuple[str, list]

execute(db)[源代码]

执行查询并返回结果

构建 SQL 查询,将查询 SQL 记录到日志文件,然后执行查询。

参数:

db (Any) -- AccessDatabase 实例,需提供 query(sql, params) 方法

返回:

查询结果数据

返回类型:

pd.DataFrame

class certflow.services.query_builder.TempTableManager(max_tables=50)[源代码]

基类:object

临时表管理器 - 对应 Access 的分表查询和合并功能

参数:

max_tables (int)

temp_tables: list[str]
create_temp_table(db, query_builder, table_prefix='查询结果表_Path')[源代码]

创建临时表存储查询结果

参数:
  • db (Any) -- AccessDatabase 实例

  • query_builder (QueryBuilder) -- QueryBuilder 实例

  • table_prefix (str) -- 临时表前缀

返回:

创建的临时表名

返回类型:

str

merge_tables(db, target_table='FormResumeDataTb', distinct=True)[源代码]

合并所有临时表到目标表

参数:
  • db (Any) -- AccessDatabase 实例

  • target_table (str) -- 目标表名

  • distinct (bool) -- 是否去重

返回:

插入的记录数

返回类型:

int

clean_temp_tables(db)[源代码]

清理所有临时表

参数:

db (Any) -- AccessDatabase 实例

返回类型:

None

class certflow.services.query_builder.BatchUpdater(db)[源代码]

基类:object

批量更新管理器 - 对应 Access 的批量刻印状态更新

参数:

db (Any)

update_print_status(query_builder, signed, dry_run=True)[源代码]

批量更新刻印状态

参数:
  • query_builder (QueryBuilder) -- 查询条件构建器

  • signed (bool) -- 是否标记为已刻印

  • dry_run (bool) -- 是否试运行

返回:

更新结果统计

返回类型:

dict[str, int]

class certflow.services.query_builder.StatisticsReporter(db)[源代码]

基类:object

统计报表生成器 - 对应 Access 的按小时统计功能

参数:

db (Any)

get_hourly_stats(start_date=None, end_date=None)[源代码]

按小时统计合格证和铭牌打印数量

参数:
  • start_date (str | None) -- 开始日期 (YYYY-MM-DD)

  • end_date (str | None) -- 结束日期 (YYYY-MM-DD)

返回:

统计结果 DataFrame

返回类型:

DataFrame

get_customer_summary()[源代码]

按订货单位汇总统计。

返回:

各订货单位的记录数、已/未刻印数量及最早/最新刻印时间。

返回类型:

pd.DataFrame