返回 Skill 列表
extension
分类: 数据与分析需要 API Key

ecology9流程耗时&超时分析技能包

泛微 OA 流程耗时/超时分析大屏(通用版)。从 OA 拉取指定路径(流程模板)的流程列表、节点明细、表单详情、字段字典、人员字典、签字意见到本地, 按签字意见剔除规则清洗后生成"节点耗时分析+超时分析"双视图单文件大屏。触发词: OA流程分析、流程耗时大屏、超时分析大屏、流程节点耗时、拉XX路径流程数据、刷新流程大屏、workflowid、统计XX时间范围的数据、超时规则截图、按超时规则分析。用户需提供: 路径workflowid、路径名称、统计的数据范围(起止日期)、Cookie、超时规则(截图或描述, 可选)。

person作者: user_a8e710echubcommunity

OA 流程耗时/超时分析大屏(通用)

用户必须提供(开工前问清)

| 项 | 说明 | 示例 | |---|---|---| | workflowid | 路径(流程模板)ID | 525 | | 路径名称 | 大屏标题/数据目录名 | 采购需求 | | 时间范围 | 创建时间起止 | 2026-06-16 ~ 2026-08-16 | | Cookie | 登录态字符串(贴 curl 的 -b, randcode 每次变) | oauth2_access_token=...; __randcode__=... | | 超时规则(可选) | 节点名+时限+条件(截图提供) | 采购审核/5分钟/需求类型=其他劳务服务且公司不在MOROCCO |

Cookie 存 ~/.workbuddy/ecology_cookies_techstorm.json(最新覆盖)。过期特征=接口返回空/错误对象/401 → 向用户要新的。

数据目录

{工作区}/data/{路径名}/
├── {月份}/flows.json / node_logs.json / node_logs_clean.json / form_details.json
├── people_dict.json / manifest.json / field_dict.json / overtime_rules.json
├── duration_analysis.json / overtime_analysis.json / 流程分析大屏.html

刷新规则: 相同 路径+日期 重拉=覆盖最新; 人员字典增量(已有 userid 跳过)。

工作流

  1. 列表: fetch_flows.py --workflowid {id} --from {起} --to {止} --out {data/{路径名}} --cookie-file ~/.workbuddy/ecology_cookies_techstorm.json
  2. 节点明细(loadForm 拿签名 → wfstatusnew 拿节点): fetch_node_logs.py --data-dir {data/{路径名}} --cookie-file ...
  3. 表单详情(超时分析用): fetch_form_details.py --data-dir ... --cookie-file ...
  4. 字段字典(单独文件): fetch_field_dict.py --data-dir ... --cookie-file ...
  5. 人员(增量): fetch_people.py --data-dir ... --cookie-file ...
  6. 清洗: clean_node_logs.py --data-dir ...
  7. 耗时分析: analyze_duration.py --data-dir ...
  8. 超时分析(先写 overtime_rules.json): analyze_overtime.py --data-dir ...
  9. 大屏: build_dashboard.py --data-dir ... --path-name {名称}流程分析大屏.html
  10. 刷新服务(可选): serve_dashboard.py --data-dir ... --port 8000 → 打开 http://localhost:8000/, 右上角"刷新数据"重跑全流水线后 reload

超时规则文件 overtime_rules.json

{"rule": {"node": "采购审核", "timeout_minutes": 5, "pending_counts_as_timeout": true,
  "conditions": [{"field": "field10878", "op": "eq", "value": "0", "label": "需求类型=其他劳务服务"},
                 {"field": "field11569", "op": "not_contains", "value": "公司名"}]}}
  • op: eq / contains / not_contains(AND 叠加); 目标节点耗时>时限=超时, 停留中超过也算(可关)
  • 规则一律从用户截图/提示词获取, 不自动从数据推断(用户约定)
  • 名称按原文照抄不纠错(即使与数据不一致), 并提醒用户后果
  • 字段编号从 loadForm 标签字典匹配(field_dict.json), 与用户确认值映射

关键接口(techstorm OA, 基址 https://oa.techstorm.com:7443)

| 用途 | 接口 | |---|---| | sessionkey | POST /api/workflow/monitor/getSessionkey(body 带条件) | | 列表 | POST /api/ec/dev/table/datas(dataKey=&current=&pageSize=1000&sortParams=%5B%5D&; 上限1000超量提示缩小范围; 返回条数<pageSize=全量) | | 表单+签名 | POST /api/workflow/reqform/loadForm(ismonitor=1&requestid=&; 返回 maindata 字段值 + params.authSignatureStr 按 rid 动态生成不可复用 + 字段标签) | | 节点 | POST /api/workflow/reqform/wfstatusnew(requestid=&...&authStr=&authSignatureStr=; datas 按节点; key0/key1 顺序不代表流程顺序) | | 人员 | GET /api/hrm/simpleinfo/getHrmSimpleInfo?userid=&random= |

authStr: urllib.parse.quote(base64(f"viewChain={rid}|ismonitor=1|mainid={rid}|"))

清洗规则

  • 只保留节点操作者(op == 下一节点 recv); 转发/抄送/传阅剔除
  • 节点顺序按时间戳链排序(起点=statuscode3且op==recv), 不信 key0/key1
  • 旁路节点剔除; 归档只留 recv 最早一条; 申请发起只留第一个(先完整链过滤再跳过)

大屏功能

  • 视图切换: 耗时分析 / 超时分析
  • 耗时: KPI + 4统计卡(TOP5流程/节点/人员/占比) + 列表(分页 + 搜索级联分部→部门→人员 + 节点独立筛选 + 展开明细 + 状态Tab未归档扩展列)
  • 节点筛选: 列表加列(最小接收/最大操作/耗时/操作人逗号), 展开显每操作人明细
  • 超时: 规则条 + KPI + 统计卡(TOP5流程单行带⏰/⏳图标, 人员图, 各50%) + 列表(停留中/已处理Tab, 停留中加列当前操作人/接收时间/已超时时长, 展开超时节点操作人明细, nowrap单行)
  • 刷新按钮(需 serve_dashboard.py 服务)
  • 分部/部门总耗时 TOP N(5/10/20 下拉切换, 动态高度)
  • 时长条形图为"左图右表"(renderSplitBar): 左侧单色横条(长度=总耗时) + 右侧固定宽度类表格(表头 年/月/日/时/分/秒, 每行直接填数字, 0 灰色显示); 图表与表格同高行对齐, 表格行 hover 高亮对应 bar
  • 主题: 按当前时间自动深浅(7:00-19:00 浅色, 其余深色), 右上角按钮手动切换; ECharts 文本色随主题(curTheme())

  • 数据量>1000 提示缩小范围; 无 total 字段
  • 分页按钮勿用内联 onclick 访问 let 变量(ReferenceError), 用 addEventListener
  • 超时规则条显示用 conditions(数组), 兼容旧 condition(字符串)
  • 原始行大量 *span 冗余, 清洗见脚本