bea288e414
== 已部署上线 (9项) == - 代办事项真实数据源集成 (企微审批API 8bug修复链) - H5/坐席端 Logo样式统一+绿色背景 - 视频引导页修复 (localStorage key v2) - 坐席端 v9 Vue版本修复 (ElMessage._context) - 截图按钮 v10 修复 (getDisplayMedia user gesture) - 扫码样式恢复+H5扫码登录跳转修复 - H5截图快捷键提示 == 代码完成待部署 (3项) == - 知识迭代3Bug修复 (#8 POST端点/#7 MERGE幂等/#6 过期检查) - 会议室预定-小鱼易联终端 (40文件, 40/40测试通过) - IT资产升级审批推送 (asset_service.py) == 需求文档 (2项) == - 坐席端AI辅助消息框-PRD (4项新功能确认) - 坐席端布局优化建议 v2.0 (7天计划) == 新增文档 == - 日报-2026-07-11.md - 知识迭代Bug修复报告-20260711.md - 会议室预定-部署指南.md - CHANGELOG.md 更新 == 测试 == - test_todo_integration.py: 40/40 - test_meetingroom.py: 40/40 - test_bugfix_ki_suggestions.py: 21/21
100 lines
3.5 KiB
Plaintext
100 lines
3.5 KiB
Plaintext
# 代办事项时序图
|
||
|
||
## 1. 代办列表查询流程
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant FE as 前端 TodoPanel
|
||
participant API as GET /api/todo-items
|
||
participant Agg as TodoAggregatorService
|
||
participant Cache as Redis Cache
|
||
participant Appr as ApprovalTodoService
|
||
participant Wecom as 企微审批API
|
||
participant ITSM as ITSMService
|
||
participant ITSM_API as ITSM OpenAPI
|
||
|
||
FE->>API: GET /api/todo-items?type=approval
|
||
API->>Agg: get_todo_list(agent_userid, type="approval")
|
||
Agg->>Cache: GET todo:cache:{userid}:approval
|
||
alt 缓存命中
|
||
Cache-->>Agg: cached_data
|
||
Agg-->>API: {items, total, cached:true}
|
||
else 缓存未命中
|
||
Agg->>Agg: asyncio.gather(approval_svc, itsm_svc, return_exceptions=True)
|
||
par 并行查询审批
|
||
Agg->>Appr: get_todo_list()
|
||
Appr->>Wecom: getapprovaldata(sp_status=1, templates=18)
|
||
Wecom-->>Appr: sp_no_list
|
||
Appr->>Appr: asyncio.gather(getapprovaldetail × N)
|
||
loop 每个sp_no并发获取详情
|
||
Appr->>Wecom: getapprovaldetail(sp_no)
|
||
Wecom-->>Appr: approval_detail
|
||
end
|
||
Appr->>Appr: _filter_by_current_approver(details)
|
||
Appr->>Appr: _map_to_todo_item(detail)
|
||
Appr-->>Agg: List[TodoItemData]
|
||
and 并行查询工单
|
||
Agg->>ITSM: get_todo_list()
|
||
Note over ITSM: ITSM列表API待实现<br/>当前返回空列表+日志告警
|
||
ITSM-->>Agg: List[TodoItemData] (空)
|
||
end
|
||
Agg->>Agg: merge + sort by priority
|
||
Agg->>Cache: SET todo:cache:{userid}:approval TTL=45s
|
||
Agg-->>API: {items, total, cached:false}
|
||
end
|
||
API-->>FE: {code:0, data:{items, total}}
|
||
```
|
||
|
||
## 2. 代办详情查询流程
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant FE as 前端 TaskDetailView
|
||
participant API as GET /api/todo-items/{id}
|
||
participant Agg as TodoAggregatorService
|
||
participant Appr as ApprovalTodoService
|
||
participant ITSM as ITSMService
|
||
participant Wecom as 企微审批API
|
||
participant ITSM_API as ITSM OpenAPI
|
||
|
||
FE->>API: GET /api/todo-items/approval:{sp_no}
|
||
API->>Agg: get_todo_detail(agent_userid, item_id, todo_type="approval")
|
||
|
||
alt type == "approval"
|
||
Agg->>Appr: get_todo_detail(sp_no)
|
||
Appr->>Wecom: getapprovaldetail(sp_no)
|
||
Wecom-->>Appr: approval_detail
|
||
Appr->>Appr: _map_to_todo_item(detail)
|
||
Appr-->>Agg: TodoItemData
|
||
else type == "ticket"
|
||
Agg->>ITSM: get_todo_detail(workitem_id)
|
||
ITSM->>ITSM_API: POST /openapi/v1/process/workitem/detail
|
||
ITSM_API-->>ITSM: {code:20000, data:{workitem_detail}}
|
||
ITSM->>ITSM: _map_to_todo_item(detail)
|
||
ITSM-->>Agg: TodoItemData
|
||
end
|
||
|
||
Agg-->>API: TodoItemData
|
||
API-->>FE: {code:0, data:{item}}
|
||
```
|
||
|
||
## 3. ITSM 签名认证流程
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Svc as ITSMService
|
||
participant Signer as ITSMSigner
|
||
participant API as ITSM OpenAPI
|
||
|
||
Svc->>Svc: timestamp = str(int(time.time()*1000))
|
||
Svc->>Signer: compute_signature(app_id, timestamp, app_secret, biz_data)
|
||
Signer->>Signer: sign_params = {appId, timestamp, appSecret, bizData}
|
||
Signer->>Signer: sort by key ASC
|
||
Signer->>Signer: concat all values → canonicalized_str
|
||
Signer->>Signer: quote_plus(canonicalized_str)
|
||
Signer->>Signer: sha1(q2).hexdigest().upper()
|
||
Signer-->>Svc: sign_str
|
||
Svc->>API: POST url, headers={appId, timestamp, sign}, json=body
|
||
API-->>Svc: {code:20000, data:{...}}
|
||
```
|