Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Process 工单处理大屏

本大屏使用本地 SQLite 作为页面数据源,主同步直连 Process 列表和详情接口增量更新本地库。历史 Notion process数据库 数据源 ID:

37cbac6d-4c23-8033-808c-000b3dbb63e5

技术栈

  • 后端:Python 3 标准库 http.server,提供本地静态资源服务、主大屏 API 和工时大屏 API。
  • Process 接入:Python 标准库 urllib.request 直连 Process 列表、详情、评论和筛选项接口。
  • TAPD 接入:工时同步优先直连 TAPD 任务列表页抓取任务标题和 effort,再按 Process 工单标题做归一化/模糊匹配;未配置 TAPD Cookie 时自动回退到团队日程本地服务 http://10.5.11.59:8888/api/tapd/taskList
  • 本地数据源:SQLite,数据库文件默认位于 data/process_dashboard.db
  • 前端:原生 HTML、CSS、JavaScript,无构建步骤。
  • 图表:ECharts CDN,用于处理人排行、产品分布、状态分布、月度趋势和工时趋势。
  • 数据刷新:页面“刷新最新数据”按钮调用本地 /api/dashboard,只从 SQLite 读取并聚合返回。
  • 反馈同步:页面“同步最近50条”按钮调用本地 /api/sync-feedback/start,读取 SQLite 中的大屏同步配置,直连 Process 列表接口只拉取最近 50 条数据写入 SQLite,并刷新 AI 字段后读取 SQLite 聚合返回。
  • 工时大屏:页面 /work-hours 调用本地 /api/work-hours-dashboard,展示每月中位数工时、每月耗时最长工单、本月耗时 Top 工单;“同步本月工时”调用 /api/sync-work-hours/start,按当前月 SQLite 工单标题匹配 TAPD 任务并写入工时。
  • 同步配置:页面 /config 调用本地 /api/filter-config 读取和保存筛选配置,配置持久化到 SQLite。
  • 反馈导入:scripts/import_team_feedback_to_sqlite.py 复用本机 Hermes 反馈接口抓取脚本,分页读取团队日程反馈页数据并写入 SQLite。
  • 测试:Python 标准库 unittest,覆盖 Notion 字段解析、SQLite upsert、月度查询、处理人/产品/SLA/子系统/未完成聚合逻辑。

启动

cd "F:/myclaw/process-dashboard"
python "server.py" 8765

打开:

http://127.0.0.1:8765

如需通过本机指定网卡 IP 访问:

python "server.py" 8765 10.20.32.1

打开:

http://10.20.32.1:8765

数据口径

  • 月度范围:按 process创建时间 过滤自然月。
  • 处理人:读取 处理人,展示时只保留人名,去掉账号后缀。
  • 产品分布:优先读取 产品模块,为空时读取 产品模式
  • 子系统:读取 子系统,为空时归为 未分类
  • SLA 预警:按反馈页同口径计算。优先读取接口直出 sla / hsfx_text;为空时读取 Process 返回的分配、响应、解决 3 个 SLA 哈希字段,组合出“分配倒计时 / 响应倒计时 / 解决倒计时 / 已超时”。
  • 月度工单趋势:直接从 SQLite 全量数据按 YYYY-MM 聚合最近月份,不受页面当前月份筛选影响;包含总量以及成本、采招、售楼、工程、计划、费用 6 条业务维度曲线。
  • 当前未完成:状态 不属于 完成已完成已关闭关闭 的单据。
  • 工单标题:读取 名称
  • 状态:读取 状态
  • 刷新最新数据:重新调用本地 /api/dashboard 接口,只读取 SQLite 聚合。
  • 同步最近50条:调用本地 /api/sync-feedback/start 接口,将 SQLite 中的大屏同步配置转换为 Process query_fields,触发 Process 列表接口最近 50 条 → SQLite 增量更新 → 逐条刷新 AI 字段 → 再读取 SQLite 聚合。
  • 同步配置:访问 /config 可通过多选下拉维护处理人、状态、类型、子系统、产品模式、创建人、关键词等筛选条件;保存后写入 SQLite,下一次同步最近50条生效。
  • 去重规则:SQLite 以 process_id 作为工单唯一业务键;同一个 process_id 再次导入时只更新原行,不新增重复行。
  • 工时口径:只统计 SQLite 中 work_hours > 0 的工单;work_hours 来自匹配到的 TAPD 任务 effort 字段。同步后同时保存 tapd_idtapd_linktapd_titlework_hours_match_statuswork_hours_synced_at,后续 Process 同步不会覆盖已写入的工时字段。
  • TAPD 匹配:先精确匹配标题,再去掉空格、标点、【P】 等常见前缀后匹配,最后用标题相似度做模糊匹配;多个候选相似度过近时写入 ambiguous 且不写工时,避免误把别的 TAPD 工时挂到当前工单。

导入反馈页数据

从团队日程反馈页接口导入到本地 SQLite:

cd "F:/myclaw/process-dashboard"
$env:PYTHONPATH="F:/myclaw/process-dashboard"
python "scripts/import_team_feedback_to_sqlite.py" --page-size 500

脚本默认读取:

  • 数据库:data/process_dashboard.db
  • 反馈抓取脚本:C:/Users/xus66/AppData/Local/hermes/scripts/fetch_team_feedback_all.py
  • 当前反馈页筛选条件:C:/Users/xus66/AppData/Local/hermes/state/app_feedback_filter_current.json

导入完成后可验证 process_id 是否重复:

python -c "import sqlite3; conn=sqlite3.connect('data/process_dashboard.db'); print(conn.execute(\"select count(*), count(distinct process_id) from process_tickets where process_id <> ''\").fetchone()); print(conn.execute(\"select process_id,count(*) from process_tickets where process_id<>'' group by process_id having count(*)>1 limit 10\").fetchall()); conn.close()"

数据流

刷新最新数据按钮
  -> GET /api/dashboard?month=YYYY-MM
  -> 从 SQLite 查询当前月份工单
  -> 聚合处理人、产品模块、状态、月度趋势和明细
  -> 返回前端渲染

同步最近50条按钮
  -> GET /api/sync-feedback/start?month=YYYY-MM
  -> 读取 SQLite 同步配置并转换为 Process query_fields
  -> 直连 Process 列表接口拉取筛选后的最近 50 条数据
  -> 按 process_id 写入或更新 SQLite process_tickets
  -> 调 Process 详情和评论接口刷新 AI 字段
  -> 从 SQLite 查询当前月份工单
  -> 聚合处理人、产品模块、状态和明细
  -> 返回前端渲染

同步本月工时按钮
  -> GET /api/sync-work-hours/start?month=YYYY-MM
  -> 读取 SQLite 当前月份工单
  -> 优先直连 TAPD 任务列表页读取任务;未配置 Cookie 时回退团队日程 taskList
  -> 按标题精确/归一化/模糊匹配 TAPD 任务
  -> 读取 TAPD effort 写入 SQLite work_hours,歧义候选标记 ambiguous
  -> 从 SQLite 全量工单聚合月度中位数和每月最长耗时工单
  -> 返回 /work-hours 前端渲染

TAPD 工时同步配置

直连 TAPD 页面需要登录 Cookie,可任选一种方式配置:

$env:TAPD_COOKIE="从浏览器复制的 TAPD Cookie"

或写入默认文件:

C:/Users/xus66/AppData/Local/hermes/scripts/tapd_cookie.txt

可选环境变量:

  • TAPD_WORKSPACE_ID:默认 66070363
  • TAPD_TASK_CONF_ID:默认 1166070363001770450
  • TAPD_TASK_FILTER_TOKEN:可选,TAPD 任务页保存筛选后的 filter_token,用于复用页面筛选条件。
  • TAPD_TASK_OWNERS:直连 TAPD 时的处理人筛选,默认 李宝,徐爽产品,沈顺和,方建桥
  • TAPD_DIRECT_TASK_PAGE_SIZE:直连 TAPD 每页数量,默认 100
  • TAPD_DIRECT_TASK_MAX_PAGES:直连 TAPD 最大页数,默认 20

验证

$env:PYTHONPATH="F:/myclaw/process-dashboard"
python -m unittest discover -s "tests"

About

工单大屏

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages