当前位置:首页>工作报告>S2-项目实战篇-04-审查工作流编排:从 PDF 到报告,一条 DAG 跑完

S2-项目实战篇-04-审查工作流编排:从 PDF 到报告,一条 DAG 跑完

  • 2026-08-26 12:10:44
S2-项目实战篇-04-审查工作流编排:从 PDF 到报告,一条 DAG 跑完

第二季第 4 篇:审查工作流编排——从 PDF 到报告,一条 DAG 跑完

📌 本文是《项目实战:从零搭建智能合同审查平台》(第二季)的第 4 篇🎯 读完本文你将:① 理解 DAG 工作流在合同审查中的编排逻辑 ② 实现条件分支 / 并行执行 / 失败重试 / 超时熔断 ③ 把前三篇的插件串成端到端流水线 ④ 对 5 份合同跑出完整审查报告(Markdown + 结构化 JSON)⏱️ 预计阅读时间:22 分钟 | 动手实践:30 分钟💻 前置要求:完成第二季第 1、2、3 篇🔗 原理对照:万悟平台的「工作流编排」能力讲的是"节点定义 → DAG 拓扑排序 → 调度执行 → 执行上下文"。本篇做的是同一件事——解析、规则审查、偏差对比、报告生成是四个节点,DAG 决定谁先谁后、谁能并行、谁失败了怎么重试。没读过万悟源码不影响本篇阅读。


一、本篇要解决什么问题?

1.1 前三篇的碎片

第 1 篇:parse_contract(text, contract_id) → ParsedContract第 2 篇:route_and_review(parsed, rules_by_type) → List[Finding]第 3 篇:evaluate_deviations(parsed, baselines) → DeviationReport         verify_standards(parsed, baselines) → StandardReport

四个函数,四次手动调用。法务不会写 Python。

1.2 本篇目标

输入:一个 PDF 文件路径(或一批)输出:  ├── review_report.md(人读)  ├── review_report.json(机读,对接 OA / ERP)  └── 控制台摘要(风险评分 + HIGH 条目)约束:  ├── 端到端 < 3 秒(纯规则层)/ < 15 秒(含 LLM)  ├── 单节点失败不阻塞全链路(降级继续)  └── 支持批量(5 份合同并行审查)

1.3 为什么需要工作流引擎?

直接串行调用
DAG 工作流
一个节点挂了全挂
节点级隔离,失败可跳过/重试
无法并行
规则审查 ∥ 偏差对比(无依赖)
无法条件分支
NDA 跳过"付款条款"检查
无超时控制
LLM 节点 10s 超时自动降级
无审计日志
每节点记录耗时/输入/输出/状态

二、核心概念

2.1 DAG 拓扑

                    ┌─────────────────┐                    │  N1: 合同解析    │                    │  (parser)       │                    └────────┬────────┘                             │                    ┌────────▼────────┐                    │  N2: 规则审查    │──────────────┐                    │  (含类型路由)    │              │  ← N2 与 N3 并行(都只读 ParsedContract)                    └────────┬────────┘              │                             │              ┌────────▼────────┐                    ┌────────▼────────┐    │ N3: 偏差对比     │                    │ N4: 标准校验     │    │ (deviation)     │                    │ (verify_standards)              │                    └────────┬────────┘              │                             │              └────────┬────────┘                             │                       │                    ┌────────▼────────┐              │                    │ N5: LLM第二意见 │◀─条件:仅当   │                    │ (可选,可关闭)   │  注入LLM客户端 │                    └────────┬────────┘              │                             │◀──────────────────────┘                    ┌────────▼────────┐                    │ N6: 构建RiskCard │                    │ (build_risk_card)│                    └─────────────────┘

关键设计:N2(规则审查)与 N3(偏差对比)无数据依赖,可以并行;N4(标准校验)对所有类型运行,但无基线 JSON 的类型(NDA/lease)自然返回空报告;N5(LLM 第二意见)是可选节点,没注入 LLM 客户端时直接 SKIPPED,不阻塞主链路。

2.2 节点状态机

PENDING → RUNNING → SUCCESS                  → FAILED → SKIPPED(标记失败,链路降级继续)

超时/重试是 DAGNode 的可配置字段timeout_s 默认 30s、retry 默认 0)。教学版执行器以"节点隔离 + SKIPPED"为主,不实现自动重试循环——retry 字段预留给生产环境接指数退避。

2.3 并行策略

# N3 和 N4 并行执行with ThreadPoolExecutor(max_workers=2) as pool:    f_review = pool.submit(review_contract, parsed)    f_deviation = pool.submit(analyze_deviations, parsed, engine)    review_result = f_review.result(timeout=5)    deviation_report = f_deviation.result(timeout=10)

2.4 条件分支

# 标准校验节点对所有合同类型都会执行;# 但无基线 JSON 的类型(如 nda / lease)会自然返回空报告(0 条校验),不报错。CONDITIONS = {# 仅当注入了 LLM 客户端时才跑”LLM 第二意见”节点,否则 SKIPPED    ”N5_llm_second_opinion”: lambda ctx: ctx.llm_client is not None,}# 不满足条件 → 节点状态 = SKIPPED,不执行

2.5 风险卡:一份输出、三处消费的枢纽

前三篇的产物散落在 ReviewResult(规则发现)、DeviationReport(偏差)、StandardVerification(标准验证)里。实战里,一份审查报告要同时被三种消费者用到:

  • 人读:第 7 篇的可视化报告 + 协作批注;
  • 机读:对接 OA / ERP / 审批流(本篇 JSON 报告);
  • 回流:人工反馈(采纳/驳回/改写)回流规则库(第 7 篇)。

如果每处消费端都各读各的结构,就会产生"同一结论三套表示"的混乱。本季把这类产物收敛成RiskCard(风险卡)作为统一枢纽——一份输出,三处消费

@dataclassclass RiskCard:    ”””风险卡:一份审查的枢纽产物(跨节点 / 跨消费端共享)”””    contract_id: str    contract_type: str    tenant_id: str = ””    risk_score: int = 0# 由 score_findings(findings) 计算    findings: List[dict] = field(default_factory=list)# 规则 / 模型发现    deviations: List[dict] = field(default_factory=list)# 基线偏差    standard_verifications: List[dict] = field(default_factory=list)    config_snapshot: str = ””# 配置 SHA256 快照(第 2 篇 2.6)    degraded_sources: List[str] = field(default_factory=list)# 降级的外部源    llm_opinion: Optional[str] = None# LLM 第二意见(可选,可关闭)    llm_degraded: bool = False    feedback: List[dict] = field(default_factory=list)# 人工反馈预留位(第 7 篇)    elapsed_ms: int = 0

RiskCard 既是第 7 篇可视化的输入,也是第 8 篇业务集成的输入——一篇生产、多篇消费,避免重复建模。第 5 节「报告生成」即把它渲染为 Markdown + JSON 两种形态。

2.6 外部服务并行调用与降级

第 3 篇 2.5 定义了「外部权威数据源接入层」。把它接到工作流里,就要解决并行 + 降级:多个外部源(主体核验 / 法规时效)应并行查,且任一不可用都不能拖垮整条链。

import asyncioasync def verify_external_sources(queries: List[str]) -> List[SourceResult]:    ”””并行调用外部源,单源失败不影响整体”””    async def _one(q):        try:# 真实实现:await real_source.verify(q),带独立超时            return mock_source.verify(q)        except Exception:            return SourceResult(source_id=”ext”, available=False,                                 status=”暂不可用”, degraded=True)# return_exceptions:单源异常被捕获,不中断其余    return await asyncio.gather(*[_one(q) for q in queries], return_exceptions=True)# 落地为 DAG 节点(N5 之后的并行节点,或并入 N5):#   服务不可用 → RiskCard.degraded_sources 追加该源,标「暂不可用」#   注意:降级时标「暂不可用」,**绝不**标「无风险」

实战要求(呼应第 2 篇 2.6 降级三原则):

  1. 不中断:外部源挂了,规则 + 基线照常出报告;
  2. 结构化降级RiskCard.degraded_sources 明确记录哪些源没拿到数据;
  3. 宁少不误报:缺外部数据标「暂不可用」,不误判为「合规」。

三、核心代码拆解(完整代码见《附录-合同审查平台完整代码库精讲》(本季最后附录))

# workflow/review_pipeline.py”””合同审查 DAG 工作流引擎串联:解析 → 规则审查(含路由) ∥ 偏差对比 → 标准校验 → [可选 LLM 第二意见] → 构建 RiskCard”””import timefrom dataclasses import dataclass, fieldfrom typing import CallableDictListOptional    // …(完整代码见《附录-合同审查平台完整代码库精讲》(本季最后附录))

四、运行结果(真实引擎输出,与第 2 篇 §四 一致)

💡 下表用真实引擎 engine.review_for_tenant(tenant_id, text, contract_id)(默认 tenant_yuanda_v1)对 5 份样本跑出的 规则审查风险评分,与第 2 篇 §四 同源、同口径。偏差比对 / 标准校验另见第 3 篇(NDA/lease 无基线 JSON,自然为空)。

审查总览(规则引擎 risk_score)┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━┳━━━━━┳━━━━━┓┃ 合同                     ┃ 类型       ┃ 评分 ┃ HIGH┃ MED ┃┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━╇━━━━━╇━━━━━┩│ labor_contract_001       │ labor      │  30  │  1  │  0  ││ procurement_contract_001 │ procurement│  30  │  0  │  2  ││ nda_001                  │ nda        │   0  │  0  │  0  ││ lease_contract_001       │ lease      │   0  │  0  │  0  ││ construction_contract_001│ construction│ 60  │  1  │  2  │└──────────────────────────┴────────────┴──────┴─────┴─────┘

诚实边界(务必和第 2 篇一起看)

  • 采购合同 HIGH 规则(预付款 60%、赔偿上限 200%)未触发——与第 2 篇 §四 一致,源于解析精度(取条款首个百分比)的已知局限,不是规则写错
  • NDA / lease 评分 0:本季未内置这两类的专属规则集与基线,规则引擎无命中、偏差比对无基线可比,属预期边界。
  • 采购合同的 2 条 MEDIUM 均为 YUANDA-PROC-003(违约金不对等:条款含"违约金"但缺"对等/一致/相同"措辞)。construction 的 1 条 HIGH 为 YUANDA-CONS-002(质保金 3% > 约定 1.5%)。

生成的 Markdown 报告(采购合同示例,真实命中)

# 合同审查报告| 项目 | 值 ||------|-----|| 合同编号 | procurement_contract_001 || 合同类型 | procurement || 风险评分 | **30/100** || HIGH 风险 | 0 条 || MEDIUM 风险 | 2 条 |---## 一、规则审查发现| 条款 | 规则 | 等级 | 风险描述 | 建议 ||------|------|------|----------|------|| 第七条 | YUANDA-PROC-003 | MEDIUM | 违约金条款未体现对等性(缺”对等/一致/相同”措辞) | 补充双方对等违约金约定 |(注:预付款 60%、赔偿上限 200% 的 HIGH 规则因解析精度未触发,见上方诚实边界)## 二、工作流执行日志(示意节点耗时)| 节点 | 状态 | 说明 ||------|------|------|| N1_parse | SUCCESS | 解析合同条款 || N2_review | SUCCESS | 规则审查(含类型路由) || N3_deviation | SUCCESS | 偏差比对(procurement 有基线) || N4_standard | SUCCESS | 标准校验(0 条:样本条款均已覆盖) || N5_llm | SKIPPED | 未注入 LLM 客户端(可关闭) || N6_build | SUCCESS | 构建 RiskCard |---*本报告由示例教学平台自动生成,仅供参考,不构成法律意见。*

五、踩坑记录

#
现象
原因
解决
1
N3/N4 并行时 ctx 写入冲突
deviation_report
 偶尔为 None
两个线程同时写 ctx 属性,GIL 不保护复合赋值
每个节点写自己的字段(N3 写 review_result,N4 写 deviation_report),无交叉
2
N5 条件节点在 N3/N4 之前执行
标准验证跑了但 parsed 还是 None
depends_on
 只写了 ["N2_route"],没等 N3/N4
改为 depends_on=["N3_review", "N4_deviation"]
3
无基线类型标准校验产出空报告
预期有校验结果
nda/lease 没内置 baseline JSON,verify_standards 直接返回空
在 baseline/baselines/ 加对应.json(见第 3 篇 §2.1)
4
报告文件名冲突
两份合同生成同一个 md
contract_id
 都是 xxx_001
文件名加时间戳:{id}_{timestamp}.md
5
ThreadPoolExecutor
 在 Windows 上卡死
批量审查挂起
Windows 默认 spawn 模式,子进程重新 import 触发 if __name__
加 if __name__ == "__main__": 保护 + freeze_support()

六、与万悟平台能力对照

维度
万悟平台·工作流编排(→ 第一季第 7 篇《工作流引擎》) 能力
第二季第 4 篇(审查流水线)
节点类型
LLM 调用 / 工具调用 / 条件判断
解析 / 规则 / 偏差比对 / 标准校验 / 报告(LLM 第二意见可选)
并行
多 LLM 并发(摘要+翻译)
规则审查 ∥ 偏差对比
条件分支
用户意图 → 不同子流程
是否注入 LLM 客户端 → 是否跑第二意见节点(标准校验对所有类型运行)
降级
LLM 超时 → 重试 + 指数退避
节点失败 → SKIPPED,报告标注"未完成"
共同原理
DAG 拓扑排序 + 执行上下文 + 节点隔离

七、小结 & 下一篇预告

⏱️ 30 秒速览

这篇你只需要记住 3 件事:

  1. 审查流程编排成 DAG:解析 → 规则审查 ∥ 偏差对比 → 标准校验 → [可选 LLM 第二意见] → 构建 RiskCard
  2. 节点可并行(规则审查 ∥ 偏差对比)、可降级(单节点失败标 SKIPPED 继续,无人工审批节点)
  3. 一份 RiskCard 被三处消费(Markdown 报告 / JSON 报告 / 可视化标注),避免重复建模

想深挖?

  • 完整代码(DAG 编排 + RiskCard 枢纽):见**《附录-合同审查平台完整代码库精讲》(本季最后附录)**;编排原理:§2 核心概念

本篇要点

  1. ✅ DAG 工作流:6 个节点,拓扑排序执行,规则审查 ∥ 偏差对比并行
  2. ✅ 标准校验对所有类型运行,无基线类型(NDA/lease)自然返回空报告
  3. ✅ 节点级隔离:单节点失败不阻塞全链路,标记 FAILED/SKIPPED 继续
  4. ✅ RiskCard 枢纽:Markdown(人读)+ JSON(机读)+ 可视化标注,三处消费
  5. ✅ 真实引擎 5 份输出:labor 30(H1) / procurement 30(M2) / construction 60(H1M2) / nda 0 / lease 0(详见 §4)

下一篇预告

第二季第 5 篇:批量性能与异步队列5 份合同 312ms 没问题。但法务部一次丢过来 200 份呢?本篇实现:异步任务队列(Celery/Redis)+ 进度推送(WebSocket)+ 背压控制 + 性能基准测试。目标:200 份合同 < 60 秒,P99 延迟 < 500ms/份。

🔗 原理对照:万悟平台的「工程实践·性能」能力


附录说明

本篇正文已讲清设计思路与关键片段;完整可运行源码库(解析 + 审查 / 批量 / 多租户 / 基线 / 可观测等全部模块,已测 63 passed)在《附录-合同审查平台完整代码库精讲》(本季最后附录)中逐一对应;源码可回复公众号关键词「第二季项目代码」,自动回复会给到付费文章《第二季·智能合同审查平台完整源码》(¥29)→ 付后解锁,文内附微云下载直链 + 二维码。

📦 获取方式:回复公众号关键词「第二季项目代码」→ 自动回复给付费文章《第二季·智能合同审查平台完整源码》(¥29)→ 付后解锁,文内附微云下载直链 + 二维码。


⚠️ 教学代码声明:本季配套源码 contract-review-platform 为示例教学代码,仅用于学习合同审查系统的设计思路与工程实现,不构成任何法律意见,也不保证适用于真实业务。作者不承担因使用、修改或部署本代码产生的任何问题解答义务或法律/商业后果;你可以在本示例代码基础上自行修改以满足你的需求。用于真实合同审查前,请务必由执业法律人士审核。

📱 关注公众号,追更不迷路

本系列文章首发于微信公众号「农夫三拳有点癫」,每周更新源码拆解与架构实战。

在微信扫描下方二维码即可关注:

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-29 16:13:37 HTTP/2.0 GET : https://b.15386.cn/a/504166.html
  2. 运行时间 : 0.136908s [ 吞吐率:7.30req/s ] 内存消耗:4,454.88kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=8d86589a8a04bbe4286aeafced1c9082
  1. /yingpanguazai/ssd/ssd1/www/b.15386.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/b.15386.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/b.15386.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/b.15386.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/b.15386.cn/runtime/temp/0f4637a61cc1a5e134efaf94b5a86ce4.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/b.15386.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000449s ] mysql:host=127.0.0.1;port=3306;dbname=b_15386;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000589s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000362s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000306s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000546s ]
  6. SELECT * FROM `set` [ RunTime:0.004233s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000586s ]
  8. SELECT * FROM `article` WHERE `id` = 504166 LIMIT 1 [ RunTime:0.011699s ]
  9. UPDATE `article` SET `lasttime` = 1787991217 WHERE `id` = 504166 [ RunTime:0.006048s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.001555s ]
  11. SELECT * FROM `article` WHERE `id` < 504166 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.002389s ]
  12. SELECT * FROM `article` WHERE `id` > 504166 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.014300s ]
  13. SELECT * FROM `article` WHERE `id` < 504166 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006454s ]
  14. SELECT * FROM `article` WHERE `id` < 504166 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004777s ]
  15. SELECT * FROM `article` WHERE `id` < 504166 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005069s ]
0.140600s