提交 18f5e1dc authored 作者: 陈泽健's avatar 陈泽健

feat(erp): 集成ERP项目资料上传功能并支持创建人指定

- 新增ERP项目资料上传接口配置和上传函数实现
- 在CLI和GUI模式下集成项目资料上传交互流程
- 添加创建人ID参数支持和人员列表匹配功能
- 更新.gitignore文件以忽略新生成的构建文件
- 修复GUI模式下上传ERP的参数解包错误问题
- 实现上传成功后的项目资料归档功能
上级 45db18ec
......@@ -58,3 +58,18 @@ __pycache__/
/AuxiliaryTool/FunctionalTestReportGeneration/testcases/
/AuxiliaryTool/ScriptTool/ApiSecurityTest/requirements.txt
/AuxiliaryTool/FunctionalTestReportGeneration/reports.docx
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/Analysis-00.toc
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/base_library.zip
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/EXE-00.toc
/AuxiliaryTool/FunctionalTestReportGeneration/temp/erp_upload_images/image_0.png
/AuxiliaryTool/FunctionalTestReportGeneration/temp/erp_upload_images/image_1.png
/AuxiliaryTool/FunctionalTestReportGeneration/temp/erp_upload_images/image_2.png
/AuxiliaryTool/FunctionalTestReportGeneration/temp/erp_upload_images/image_3.png
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/PYZ-00.pyz
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/PKG-00.toc
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/PYZ-00.toc
/AuxiliaryTool/FunctionalTestReportGeneration/temp/erp_upload_html/report_20260617_114244.html
/AuxiliaryTool/FunctionalTestReportGeneration/temp/erp_upload_html/report_20260617_120013.html
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/文档优化工具.pkg
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/xref-文档优化工具.html
/AuxiliaryTool/DocumentAutoOptimizationCalibration/build/文档优化工具/warn-文档优化工具.txt
# -*- mode: python ; coding: utf-8 -*-
from PyInstaller.utils.hooks import collect_all
datas = []
binaries = []
hiddenimports = ['win32com.client', 'win32timezone', 'pythoncom', 'pywintypes', 'translators', 'translators.apis', 'docx', 'docx.oxml', 'docx.opc']
tmp_ret = collect_all('translators')
datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2]
a = Analysis(
['run.py'],
pathex=[],
binaries=binaries,
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='文档优化工具',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
......@@ -361,18 +361,32 @@ def generate_report_main(
logger = setup_logger()
for report_path in docx_reports:
# 询问用户是否上传,获取测试单ID和抄送人列表
confirmed, testing_id, copyuser_ids = ask_upload_confirmation_cli(report_path)
# 询问用户是否上传,获取测试单ID、抄送人列表和创建人ID
confirmed, testing_id, copyuser_ids, creator_id = ask_upload_confirmation_cli(report_path)
if confirmed:
print(f"\n正在上传报告到ERP(测试单ID: {testing_id})...")
success = upload_report_to_erp(
report_path,
logger,
developtesting_id=testing_id,
copyuser_list=copyuser_ids
copyuser_list=copyuser_ids,
createuser_id=creator_id
)
if success:
print(f" [OK] 报告已成功上传到ERP(测试单ID: {testing_id})")
# 询问是否上传到项目资料
from src.erp_uploader import ask_project_upload_confirmation_cli, upload_file_to_project
proj_confirmed, project_id, file_name = ask_project_upload_confirmation_cli(report_path)
if proj_confirmed:
print(f"\n正在上传报告到ERP项目资料(项目ID: {project_id})...")
file_info = upload_file_to_project(report_path, project_id, file_name, logger)
if file_info:
print(f" [OK] 报告已成功上传到ERP项目资料(文件ID: {file_info.get('id')})")
else:
print(f" [X] 项目资料上传失败,请查看日志")
else:
print(f" [!] 跳过项目资料上传")
else:
print(f" [X] 报告上传失败,请查看日志")
else:
......
......@@ -333,6 +333,7 @@ ERP_MAX_RETRIES = 3
ERP_UPLOAD_IMAGE_URL = "/openclaw/upload/richtext" # 上传图片接口路径
ERP_CREATE_REPORT_URL = "/openclaw/report" # 创建报告接口路径
ERP_STUFF_URL = "/openclaw/stuff" # 获取人员列表接口路径
ERP_UPLOAD_PROJECT_URL = "/openclaw/upload/project" # 项目资料上传接口路径
# 请求超时时间(秒)
ERP_REQUEST_TIMEOUT = 30
......
# 问题描述
## 问题现象
- 在执行代码后GUI模式下上传ERP操作报错
# 报错日志信息
```ignorelang
# 问题描述
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
return self.func(*args)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 839, in callit
func(*args)
File "E:\gihub\ubains-module-test\AuxiliaryTool\FunctionalTestReportGeneration\src\gui.py", line 481, in <lambda>
self.root.after(0, lambda rp=report_path: self._ask_upload_to_erp(rp))
File "E:\gihub\ubains-module-test\AuxiliaryTool\FunctionalTestReportGeneration\src\gui.py", line 509, in _ask_upload_to_erp
confirmed, testing_id, copyuser_ids, creator_id, upload_project, project_id, file_name = self._show_upload_dialog(report_path)
ValueError: not enough values to unpack (expected 7, got 3)
```
\ No newline at end of file
# GUI模式下上传ERP报错 - 问题处理执行计划
## 执行概述
### 问题背景
在GUI模式下执行ERP上传操作时,发生 `ValueError: not enough values to unpack (expected 7, got 3)` 错误。
**错误原因**
- 代码更新后,`_ask_upload_to_erp()` 函数期望 `_show_upload_dialog()` 返回7个值(包含项目资料上传参数)
-`_show_upload_dialog()` 函数仍然只返回3个值(旧版本返回值)
- 导致值解包时数量不匹配
### 执行目标
1. 更新 `_show_upload_dialog()` 函数,确保返回7个值
2. 确保所有相关的GUI上传流程函数参数一致
3. 验证修复后GUI模式能正常执行上传操作
### 涉及范围
- 代码路径:`AuxiliaryTool/FunctionalTestReportGeneration/src/gui.py`
- 影响功能:GUI模式下的ERP上传功能
---
## 任务分解与实施计划
### 任务1:分析问题根源
#### 1.1 任务详情
- **问题定位**:检查 `_show_upload_dialog()` 函数的返回值
- **状态**`[ ]`
#### 1.2 实施步骤
- [ ] 1.2.1 检查 `_show_upload_dialog()` 函数的当前返回语句
- [ ] 1.2.2 确认返回值的数量和结构
- [ ] 1.2.3 对比 `_ask_upload_to_erp()` 期望的返回值
#### 1.3 输出产物
- 问题分析报告
- 修复方案确认
---
### 任务2:修复 _show_upload_dialog() 函数
#### 2.1 任务详情
- **功能目标**:更新 `_show_upload_dialog()` 函数,返回7个值
- **期望返回值**`(confirmed, testing_id, copyuser_ids, creator_id, upload_project, project_id, file_name)`
- **状态**`[ ]`
#### 2.2 实施步骤
- [ ] 2.2.1 检查函数的 docstring 是否需要更新
- [ ] 2.2.2 检查 `result` 列表是否包含7个元素
- [ ] 2.2.3 确认 `on_yes()` 函数设置所有7个返回值
- [ ] 2.2.4 确认 `on_no()` 函数设置所有7个返回值
- [ ] 2.2.5 如果不一致,修复返回值设置
#### 2.3 输出产物
- 更新后的 `_show_upload_dialog()` 函数
---
### 任务3:验证参数一致性
#### 3.1 任务详情
- **功能目标**:确保所有相关函数的参数数量和类型一致
- **状态**`[ ]`
#### 3.2 实施步骤
- [ ] 3.2.1 验证 `_ask_upload_to_erp()` 的解包语句
- [ ] 3.2.2 验证 `_upload_to_erp()` 的参数列表
- [ ] 3.2.3 验证 `_upload_to_erp_thread()` 的参数列表
- [ ] 3.2.4 确保所有函数签名一致
#### 3.3 输出产物
- 参数一致性验证报告
---
### 任务4:测试验证
#### 4.1 任务详情
- **功能目标**:测试修复后的GUI上传功能
- **状态**`[ ]`
#### 4.2 实施步骤
- [ ] 4.2.1 启动GUI模式
- [ ] 4.2.2 生成测试报告
- [ ] 4.2.3 测试上传到ERP(不选项目资料)
- [ ] 4.2.4 测试上传到ERP(选择项目资料)
- [ ] 4.2.5 验证所有功能正常
#### 4.3 输出产物
- 测试验证报告
---
## 验收标准
### 功能验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 函数返回值 | `_show_upload_dialog()` 返回7个值 | `[ ]` |
| 2 | 参数解包 | `_ask_upload_to_erp()` 正确解包7个值 | `[ ]` |
| 3 | 上传功能-基础 | GUI模式能正常上传报告到ERP | `[ ]` |
| 4 | 上传功能-项目资料 | GUI模式能正常上传报告到项目资料 | `[ ]` |
| 5 | 错误处理 | 各种输入错误有友好提示 | `[ ]` |
| 6 | 跳过功能 | 选择不上传能正常结束流程 | `[ ]` |
### 代码质量验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 语法检查 | Python语法检查通过 | `[ ]` |
| 2 | 参数一致性 | 所有相关函数参数数量一致 | `[ ]` |
| 3 | 返回值一致性 | 所有返回分支返回值数量一致 | `[ ]` |
| 4 | 异常处理 | 所有异常情况都有处理 | `[ ]` |
---
## 测试计划
### 单元测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| 返回值数量 | 检查 `_show_upload_dialog()` 返回值数量 | 返回7个值 | `[ ]` |
| 返回值类型 | 检查各返回值的类型 | 类型正确 | `[ ]` |
| on_yes分支 | 测试确认上传的返回值 | 返回7个有效值 | `[ ]` |
| on_no分支 | 测试取消上传的返回值 | 返回7个值(False和None) | `[ ]` |
### 集成测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| GUI完整流程-不上传 | 启动GUI,生成报告,选择不上传 | 流程正常结束 | `[ ]` |
| GUI完整流程-仅上传ERP | 启动GUI,生成报告,仅上传到ERP | 上传成功 | `[ ]` |
| GUI完整流程-上传项目资料 | 启动GUI,生成报告,上传到ERP和项目资料 | 两处上传成功 | `[ ]` |
| 输入验证测试 | 测试各种无效输入 | 有友好提示 | `[ ]` |
---
## 风险评估
| 风险项 | 风险等级 | 影响范围 | 应对措施 |
|--------|----------|----------|----------|
| 返回值不完整 | 高 | 导致程序崩溃 | 检查所有返回分支 |
| 参数传递错误 | 中 | 上传功能异常 | 仔细检查参数顺序 |
| 逻辑错误 | 中 | 功能不符合预期 | 充分测试验证 |
---
## 实施记录
### 实施时间线
| 日期 | 任务 | 状态 | 备注 |
|------|------|------|------|
| - | 任务1:分析问题根源 | `[ ]` | - |
| - | 任务2:修复 _show_upload_dialog() 函数 | `[ ]` | - |
| - | 任务3:验证参数一致性 | `[ ]` | - |
| - | 任务4:测试验证 | `[ ]` | - |
### 问题记录
| 日期 | 问题描述 | 解决方案 | 状态 |
|------|----------|----------|------|
| - | - | - | `[ ]` |
---
## 根因分析
### 问题代码位置
**文件**`src/gui.py`
**行号**:481, 509
### 问题详情
```python
# 行481:调用 _ask_upload_to_erp
self.root.after(0, lambda rp=report_path: self._ask_upload_to_erp(rp))
# 行509:解包返回值
confirmed, testing_id, copyuser_ids, creator_id, upload_project, project_id, file_name = self._show_upload_dialog(report_path)
```
**期望返回**:7个值
**实际返回**:3个值
### 修复方案
确保 `_show_upload_dialog()` 函数返回7个值:
1. `confirmed` - 是否确认上传
2. `testing_id` - 测试单ID
3. `copyuser_ids` - 抄送人ID列表
4. `creator_id` - 创建人ID
5. `upload_project` - 是否上传到项目资料
6. `project_id` - 项目ID
7. `file_name` - 文件名称
---
## 后续工作
### 优化建议
- [ ] 添加更多GUI错误处理
- [ ] 添加GUI模式下的日志输出
- [ ] 考虑添加上传进度显示
### 防范措施
- [ ] 代码审查时注意函数签名一致性
- [ ] 添加单元测试覆盖关键函数
- [ ] 修改返回值时全面检查所有调用点
---
## 附录
### 参考文档
- 代码规范:`Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结:`Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结:`Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
### 代码路径
- 主目录:`AuxiliaryTool/FunctionalTestReportGeneration`
- 问题文件:`src/gui.py`
### 错误日志
```
ValueError: not enough values to unpack (expected 7, got 3)
```
---
## 优化功能回填
> 此区域用于记录实施过程中的优化和改进
| 日期 | 优化内容 | 优化人 | 状态 |
|------|----------|--------|------|
| - | - | - | `[ ]` |
---
**文档版本**: 1.0
**创建日期**: 2026-06-17
**最后更新**: 2026-06-17
# 问题描述
## 问题现象
- 在执行代码后GUI模式下上传ERP操作报错提示未定义
# 报错日志信息
```ignorelang
开始上传报告到ERP(测试单ID: 445)...
[X] 上传异常: name 'upload_report_to_erp' is not defined
```
\ No newline at end of file
# GUI模式下上传ERP报错未定义 - 问题处理执行计划
## 执行概述
### 问题背景
在GUI模式下执行ERP上传操作时,发生 `NameError: name 'upload_report_to_erp' is not defined` 错误。
**错误原因**
- `_upload_to_erp_thread()` 函数中调用 `upload_report_to_erp()` 函数
- 但该函数没有在当前作用域中导入
- 导致运行时找不到该函数定义
### 执行目标
1. 确认 `upload_report_to_erp` 函数的调用位置
2. 添加正确的导入语句
3. 验证修复后GUI模式能正常执行上传操作
### 涉及范围
- 代码路径:`AuxiliaryTool/FunctionalTestReportGeneration/src/gui.py`
- 影响功能:GUI模式下的ERP上传功能
---
## 任务分解与实施计划
### 任务1:定位问题代码位置
#### 1.1 任务详情
- **问题定位**:找到调用 `upload_report_to_erp` 的代码位置
- **状态**`[ ]`
#### 1.2 实施步骤
- [ ] 1.2.1 搜索 `gui.py` 中所有调用 `upload_report_to_erp` 的位置
- [ ] 1.2.2 确认调用所在的函数
- [ ] 1.2.3 检查现有的导入语句
#### 1.3 输出产物
- 问题代码位置报告
---
### 任务2:添加导入语句
#### 2.1 任务详情
- **功能目标**:在正确的位置添加 `upload_report_to_erp` 函数的导入
- **导入模块**`from src.erp_uploader import upload_report_to_erp`
- **状态**`[ ]`
#### 2.2 实施步骤
- [ ] 2.2.1 确认导入语句应该添加的位置(函数内部或文件顶部)
- [ ] 2.2.2 添加导入语句
- [ ] 2.2.3 确保导入语句与其他ERP相关导入保持一致
#### 2.3 输出产物
- 更新后的导入语句
---
### 任务3:验证修复
#### 3.1 任务详情
- **功能目标**:验证修复后功能正常
- **状态**`[ ]`
#### 3.2 实施步骤
- [ ] 3.2.1 检查Python语法是否正确
- [ ] 3.2.2 启动GUI模式
- [ ] 3.2.3 测试ERP上传功能
- [ ] 3.2.4 验证不再出现 `NameError`
#### 3.3 输出产物
- 测试验证报告
---
## 验收标准
### 功能验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 导入语句 | `upload_report_to_erp` 已正确导入 | `[ ]` |
| 2 | 语法检查 | Python语法检查通过 | `[ ]` |
| 3 | GUI上传功能 | GUI模式能正常上传报告到ERP | `[ ]` |
| 4 | 项目资料上传 | GUI模式能正常上传到项目资料 | `[ ]` |
| 5 | 错误处理 | 无NameError异常 | `[ ]` |
### 代码质量验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 导入位置 | 导入语句位置合理 | `[ ]` |
| 2 | 代码风格 | 符合现有代码风格 | `[ ]` |
---
## 测试计划
### 单元测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| 导入验证 | 检查导入语句是否正确 | 导入无错误 | `[ ]` |
| 函数调用 | 验证函数能正常调用 | 函数执行成功 | `[ ]` |
### 集成测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| GUI完整流程 | 启动GUI,生成报告,上传到ERP | 上传成功,无报错 | `[ ]` |
---
## 风险评估
| 风险项 | 风险等级 | 影响范围 | 应对措施 |
|--------|----------|----------|----------|
| 导入位置错误 | 低 | 可能导致其他问题 | 参考现有导入语句的位置 |
| 循环导入 | 低 | 可能导致模块加载失败 | 确保导入语句在函数内部 |
---
## 实施记录
### 实施时间线
| 日期 | 任务 | 状态 | 备注 |
|------|------|------|------|
| - | 任务1:定位问题代码位置 | `[ ]` | - |
| - | 任务2:添加导入语句 | `[ ]` | - |
| - | 任务3:验证修复 | `[ ]` | - |
### 问题记录
| 日期 | 问题描述 | 解决方案 | 状态 |
|------|----------|----------|------|
| - | - | - | `[ ]` |
---
## 根因分析
### 问题代码位置
**文件**`src/gui.py`
**函数**`_upload_to_erp_thread()`
### 问题详情
```python
# 错误信息
NameError: name 'upload_report_to_erp' is not defined
```
**原因分析**
- `_upload_to_erp_thread()` 函数中直接调用 `upload_report_to_erp()`
- 但该函数没有在 `_upload_to_erp_thread()` 函数的作用域中导入
- 现有代码在 `_upload_to_erp()` 函数中有导入,但 `_upload_to_erp_thread()` 是独立执行的线程函数,无法访问该导入
### 修复方案
`_upload_to_erp_thread()` 函数开始处添加导入语句:
```python
from src.erp_uploader import upload_report_to_erp
```
---
## 后续工作
### 优化建议
- [ ] 考虑将所有ERP相关导入统一管理
- [ ] 添加更多错误处理机制
### 防范措施
- [ ] 代码审查时注意函数作用域和导入语句
- [ ] 添加单元测试覆盖关键函数
---
## 附录
### 参考文档
- 代码规范:`Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结:`Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结:`Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
### 代码路径
- 主目录:`AuxiliaryTool/FunctionalTestReportGeneration`
- 问题文件:`src/gui.py`
- 相关文件:`src/erp_uploader.py`
### 错误日志
```
NameError: name 'upload_report_to_erp' is not defined
```
---
## 优化功能回填
> 此区域用于记录实施过程中的优化和改进
| 日期 | 优化内容 | 优化人 | 状态 |
|------|----------|--------|------|
| - | - | - | `[ ]` |
---
**文档版本**: 1.0
**创建日期**: 2026-06-17
**最后更新**: 2026-06-17
# 报告生成优化需求文档
## 代码路径
- 代码路径:[AuxiliaryTool/FunctionalTestReportGeneration]
## ERP对接文档
- 需求文档路径:[Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_项目资料_上传接口_例子说明.md]
## 功能需求
### 功能目标
**目标:** 对接ERP项目资料上传接口,实现创建完成ERP测试报告后,将测试报告文件上传至ERP项目资料中。
### 需求描述
- 上传项目资料接口:
- 根据[Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_项目资料_上传接口_例子说明.md]第4.2 项目资料上传章节。
- 接口调用地址:https://office.ubainsyun.com:5082/api/uerp/openclaw/upload/project
- X-Api-Key: 保持原有的key传入就行。
- 请求示例:
```bash
curl -X POST "https://office.ubainsyun.com:5082/uerp/openclaw/upload/project" \
-H "X-Api-Key: your_api_key" \
-F "file=@/path/to/需求文档.pdf" \
-F "project_id=100" \
-F "name=项目需求文档"
```
- project_id和name通过用户输入。
- file就直接采用生产的测试报告word格式即可。
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# ERP对接优化文件归档至项目资料 - 计划执行文档
## 执行概述
### 项目背景
当前功能测试报告生成工具已实现将生成的报告上传到ERP测试报告模块。为方便项目资料管理,需要进一步对接ERP项目资料上传接口,在创建ERP测试报告后,自动将测试报告文件上传至ERP项目资料中归档。
### 执行目标
1. 实现项目资料上传接口调用(POST /openclaw/upload/project)
2. 在测试报告创建成功后,触发文件归档流程
3. 支持用户输入项目ID和文件名称
4. 集成到现有上传流程中
### 涉及范围
- 代码路径:`AuxiliaryTool/FunctionalTestReportGeneration`
- 参考文档:`Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_项目资料_上传接口_例子说明.md`
---
## 任务分解与实施计划
### 任务1:新增项目资料上传接口配置
#### 1.1 任务详情
- **接口地址**`POST /openclaw/upload/project`
- **接口目的**:上传测试报告文件到ERP项目资料
- **状态**`[ ]`
#### 1.2 实施步骤
- [ ] 1.2.1 在 `src/config.py` 中添加项目资料上传接口配置常量
- `ERP_UPLOAD_PROJECT_URL` = "/openclaw/upload/project"
- [ ] 1.2.2 确认现有 ERP_BASE_URL 和 ERP_API_KEY 配置可用
- [ ] 1.2.3 添加必要的配置说明注释
#### 1.3 输出产物
- config.py 中的新增配置常量
- 配置说明注释
---
### 任务2:实现项目资料上传函数
#### 2.1 任务详情
- **功能目标**:在 `src/erp_uploader.py` 中新增项目资料上传函数
- **函数签名**`upload_file_to_project(file_path: str, project_id: int, name: str, logger: logging.Logger) -> Optional[dict]`
- **状态**`[ ]`
#### 2.2 实施步骤
- [ ] 2.2.1 创建 `upload_file_to_project()` 函数
- [ ] 2.2.2 实现文件上传逻辑(multipart/form-data格式)
- [ ] 2.2.3 添加重试机制(复用现有 ERP_MAX_RETRIES 配置)
- [ ] 2.2.4 添加异常处理和日志记录
- [ ] 2.2.5 返回上传结果(包含文件ID、路径等信息)
#### 2.3 输出产物
- `upload_file_to_project()` 函数
- 完整的错误处理和日志记录
---
### 任务3:集成到现有上传流程
#### 3.1 任务详情
- **功能目标**:在报告创建成功后,询问用户是否上传到项目资料
- **集成位置**
- CLI: `src/cli.py``generate_report_main()` 函数
- GUI: `src/gui.py``_ask_upload_to_erp()` 函数
- **状态**`[ ]`
#### 3.2 实施步骤
- [ ] 3.2.1 在 CLI 交互中添加项目资料上传确认提示
- [ ] 3.2.2 获取用户输入的项目ID和文件名称
- [ ] 3.2.3 调用 `upload_file_to_project()` 执行上传
- [ ] 3.2.4 在 GUI 对话框中添加项目资料上传选项
- [ ] 3.2.5 实现GUI模式下的参数输入和上传
#### 3.3 输出产物
- CLI 模式下的项目资料上传交互
- GUI 模式下的项目资料上传对话框
---
### 任务4:优化交互体验
#### 4.1 任务详情
- **功能目标**:提供友好的用户输入提示和错误处理
- **状态**`[ ]`
#### 4.2 实施步骤
- [ ] 4.2.1 添加项目ID输入验证(确保为正整数)
- [ ] 4.2.2 添加文件名称输入验证(非空检查)
- [ ] 4.2.3 实现输入错误的友好提示
- [ ] 4.2.4 添加上传成功/失败的明确反馈
- [ ] 4.2.5 支持跳过项目资料上传的选项
#### 4.3 输出产物
- 完善的输入验证逻辑
- 友好的错误提示信息
---
## 验收标准
### 功能验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 项目资料上传接口 | 成功调用接口,返回正确的文件信息 | `[ ]` |
| 2 | 文件上传正确性 | 上传的文件内容与原报告一致 | `[ ]` |
| 3 | CLI交互模式 | 能正常输入项目ID和文件名称 | `[ ]` |
| 4 | GUI交互模式 | 对话框能正常显示和处理输入 | `[ ]` |
| 5 | 流程集成 | 报告创建后能正确触发项目资料上传询问 | `[ ]` |
| 6 | 跳过功能 | 用户可选择跳过项目资料上传 | `[ ]` |
| 7 | 异常处理 | 网络异常、接口失败有适当提示 | `[ ]` |
### 代码质量验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 代码规范 | 符合 `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md` | `[ ]` |
| 2 | 中文注释 | 所有新增代码有完整的中文注释 | `[ ]` |
| 3 | 异常处理 | 所有可能的异常情况都有处理逻辑 | `[ ]` |
| 4 | 日志记录 | 关键操作有日志输出,便于排查问题 | `[ ]` |
| 5 | 兼容性 | 不影响现有功能的正常运行 | `[ ]` |
| 6 | 重试机制 | 复用现有重试配置,确保上传可靠性 | `[ ]` |
---
## 测试计划
### 单元测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| 接口调用 | 调用项目资料上传接口 | 返回正确的文件信息 | `[ ]` |
| 参数验证 | 验证project_id和name参数 | 参数正确传入接口 | `[ ]` |
| 文件读取 | 读取并上传Word文件 | 文件内容完整上传 | `[ ]` |
| 重试机制 | 模拟网络异常情况 | 能正确重试指定次数 | `[ ]` |
| 异常处理 | 模拟各种异常情况 | 有友好的错误提示 | `[ ]` |
### 集成测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| CLI完整流程 | CLI模式下生成报告并上传项目资料 | 流程完整,上传成功 | `[ ]` |
| GUI完整流程 | GUI模式下生成报告并上传项目资料 | 对话框正常,上传成功 | `[ ]` |
| 跳过上传 | 选择跳过项目资料上传 | 流程正常结束,不影响报告创建 | `[ ]` |
| 输入验证 | 输入无效的项目ID | 提示错误并允许重新输入 | `[ ]` |
| 网络异常测试 | 模拟网络异常情况 | 有友好的错误提示,不影响主流程 | `[ ]` |
| 兼容性测试 | 执行现有报告上传功能 | 现有功能正常运行不受影响 | `[ ]` |
---
## 风险评估
| 风险项 | 风险等级 | 影响范围 | 应对措施 |
|--------|----------|----------|----------|
| 接口变更 | 中 | 项目资料上传失败 | 添加接口版本管理,做好兼容处理 |
| 网络不稳定 | 中 | 上传超时失败 | 复用现有重试机制和超时处理 |
| 用户输入错误 | 低 | 参数无效导致上传失败 | 添加输入验证和友好提示 |
| 现有功能影响 | 中 | 破坏现有上传流程 | 充分测试,保持向后兼容 |
| 文件过大 | 低 | 上传时间过长或失败 | 添加文件大小检查和提示 |
| API权限不足 | 中 | 接口返回权限错误 | 提示用户检查API Key权限配置 |
---
## 实施记录
### 实施时间线
| 日期 | 任务 | 状态 | 备注 |
|------|------|------|------|
| - | 任务1:新增项目资料上传接口配置 | `[ ]` | - |
| - | 任务2:实现项目资料上传函数 | `[ ]` | - |
| - | 任务3:集成到现有上传流程 | `[ ]` | - |
| - | 任务4:优化交互体验 | `[ ]` | - |
| - | 单元测试 | `[ ]` | - |
| - | 集成测试 | `[ ]` | - |
| - | 验收测试 | `[ ]` | - |
### 问题记录
| 日期 | 问题描述 | 解决方案 | 状态 |
|------|----------|----------|------|
| - | - | - | `[ ]` |
---
## 后续工作
### 优化建议
- [ ] 考虑支持批量上传(将历史报告上传到项目资料)
- [ ] 添加项目ID记忆功能,方便重复使用
- [ ] 支持从ERP项目列表中选择项目,而非手动输入ID
- [ ] 添加上传历史记录,便于追溯
### 待确认事项
- [ ] 确认API Key是否已授权 `upload_project` 权限
- [ ] 确认项目ID的有效范围和获取方式
- [ ] 确认文件名称的命名规范建议
- [ ] 确认是否需要支持协作文档上传(/cooperation接口)
---
## 附录
### 参考文档
- 代码规范:`Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结:`Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结:`Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范:`Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范:`Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
- ERP接口文档:`Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_项目资料_上传接口_例子说明.md`
### 代码路径
- 主目录:`AuxiliaryTool/FunctionalTestReportGeneration`
- 配置文件:`src/config.py`
- 上传模块:`src/erp_uploader.py`
- CLI模块:`src/cli.py`
- GUI模块:`src/gui.py`
### 接口信息
- **接口地址**`POST /openclaw/upload/project`
- **完整URL**`https://office.ubainsyun.com:5082/api/uerp/openclaw/upload/project`
- **认证方式**`X-Api-Key` 请求头
- **请求格式**`multipart/form-data`
- **请求参数**
- `file`:上传的文件(必填)
- `project_id`:关联的项目ID(必填)
- `name`:文件名称(可选,默认使用原文件名)
---
## 优化功能回填
> 此区域用于记录实施过程中的优化和改进
| 日期 | 优化内容 | 优化人 | 状态 |
|------|----------|--------|------|
| - | - | - | `[ ]` |
---
**文档版本**: 1.0
**创建日期**: 2026-06-17
**最后更新**: 2026-06-17
# 报告生成优化需求文档
## 代码路径
- 代码路径:[AuxiliaryTool/FunctionalTestReportGeneration]
## ERP对接文档
- 需求文档路径:[Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_测试列表_测试报告_例子说明.md]
## 功能需求
### 功能目标
**目标:** 对接获取人员列表接口以及调整上传文件接口的创建人传参。然后通过交互模式下输入的创建人姓名,最终通过接口传参实现。
### 需求描述
- 获取人员接口:
- 根据[Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_测试列表_测试报告_例子说明.md]第538–541实现获取人员列表。
- 上传文件接口调整:
- 新增`createuser_id`字段传参。
- 通过用户输入的创建者姓名,匹配对应的id赋值传入。
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# ERP对接优化新增创建人传参 - 计划执行文档
## 执行概述
### 项目背景
当前功能测试报告生成工具需要对接ERP系统的人员接口,并优化上传文件接口的创建人传参方式。通过交互模式下输入创建人姓名,自动匹配对应的ID并传入接口。
### 执行目标
1. 实现获取人员列表接口调用(GET /openclaw/stuff)
2. 调整上传文件接口,新增 `createuser_id` 字段传参
3. 在交互模式下支持输入创建人姓名,自动匹配并传入对应的ID
### 涉及范围
- 代码路径:`AuxiliaryTool/FunctionalTestReportGeneration`
- 参考文档:`Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_测试列表_测试报告_例子说明.md`
---
## 任务分解与实施计划
### 任务1:获取人员列表接口实现
#### 1.1 任务详情
- **接口地址**`GET /openclaw/stuff`
- **接口目的**:获取人员列表,用于匹配创建人ID
- **状态**`[ ]`
#### 1.2 实施步骤
- [ ] 1.2.1 在代码中添加获取人员列表的HTTP请求方法
- [ ] 1.2.2 实现人员列表数据的解析和缓存机制
- [ ] 1.2.3 添加人员姓名到ID的映射字典/函数
- [ ] 1.2.4 添加异常处理(网络异常、接口调用失败等)
#### 1.3 输出产物
- `get_personnel_list()` 方法
- 人员数据缓存结构
- 姓名-ID映射函数 `get_user_id_by_name()`
---
### 任务2:上传文件接口优化
#### 2.1 任务详情
- **接口调整**:POST 上传文件接口
- **新增字段**`createuser_id`
- **传参逻辑**:通过创建人姓名匹配对应的ID
- **状态**`[ ]`
#### 2.2 实施步骤
- [ ] 2.2.1 定位上传文件接口的代码位置
- [ ] 2.2.2 在接口参数中新增 `createuser_id` 字段
- [ ] 2.2.3 实现姓名到ID的匹配逻辑
- [ ] 2.2.4 添加参数验证(确保ID有效)
- [ ] 2.2.5 更新接口调用处的传参代码
#### 2.3 输出产物
- 更新后的上传文件接口方法
- 姓名匹配逻辑代码
- 相关的单元测试
---
### 任务3:交互模式输入优化
#### 3.1 任务详情
- **功能目标**:在交互模式下支持输入创建人姓名
- **交互流程**:用户输入姓名 → 匹配ID → 传入接口
- **状态**`[ ]`
#### 3.2 实施步骤
- [ ] 3.2.1 在交互流程中添加创建人姓名输入提示
- [ ] 3.2.2 实现姓名输入的验证逻辑
- [ ] 3.2.3 调用人员列表接口获取最新数据
- [ ] 3.2.4 实现姓名模糊匹配或精确匹配
- [ ] 3.2.5 处理匹配失败的情况(提示用户重新输入)
#### 3.3 输出产物
- 交互式输入代码
- 姓名匹配逻辑
- 错误提示和重试机制
---
## 验收标准
### 功能验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 获取人员列表接口 | 成功调用接口,返回完整的人员列表数据 | `[ ]` |
| 2 | 姓名-ID匹配 | 输入正确姓名,能匹配到对应的ID | `[ ]` |
| 3 | 上传接口传参 | 上传文件时正确传入 `createuser_id` 参数 | `[ ]` |
| 4 | 交互模式输入 | 能正常输入创建人姓名并完成后续流程 | `[ ]` |
| 5 | 异常处理 | 网络异常、接口失败、匹配失败有适当提示 | `[ ]` |
### 代码质量验收标准
| 序号 | 验收项 | 验收标准 | 状态 |
|------|--------|----------|------|
| 1 | 代码规范 | 符合 `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md` | `[ ]` |
| 2 | 中文注释 | 所有新增代码有完整的中文注释 | `[ ]` |
| 3 | 异常处理 | 所有可能的异常情况都有处理逻辑 | `[ ]` |
| 4 | 日志记录 | 关键操作有日志输出,便于排查问题 | `[ ]` |
| 5 | 兼容性 | 不影响现有功能的正常运行 | `[ ]` |
---
## 测试计划
### 单元测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| 人员列表接口 | 调用获取人员接口 | 返回正确的人员列表数据 | `[ ]` |
| 姓名-ID匹配 | 输入有效姓名 | 返回正确的用户ID | `[ ]` |
| 姓名匹配-异常 | 输入不存在的姓名 | 提示错误并允许重试 | `[ ]` |
| 接口传参 | 验证上传接口参数 | `createuser_id` 正确传入 | `[ ]` |
### 集成测试
| 测试项 | 测试内容 | 预期结果 | 状态 |
|--------|----------|----------|------|
| 完整流程测试 | 交互模式下输入姓名并上传报告 | 成功上传且创建人ID正确 | `[ ]` |
| 网络异常测试 | 模拟网络异常情况 | 有友好的错误提示 | `[ ]` |
| 兼容性测试 | 执行现有功能 | 现有功能正常运行不受影响 | `[ ]` |
---
## 风险评估
| 风险项 | 风险等级 | 影响范围 | 应对措施 |
|--------|----------|----------|----------|
| ERP接口变更 | 中 | 人员列表获取失败 | 添加接口版本管理,做好兼容处理 |
| 姓名重复 | 低 | 匹配到错误的用户ID | 支持工号或唯一标识输入 |
| 网络不稳定 | 中 | 接口调用超时失败 | 添加重试机制和超时处理 |
| 现有功能影响 | 中 | 破坏现有上传流程 | 充分测试,保持向后兼容 |
---
## 实施记录
### 实施时间线
| 日期 | 任务 | 状态 | 备注 |
|------|------|------|------|
| - | 任务1:获取人员列表接口实现 | `[ ]` | - |
| - | 任务2:上传文件接口优化 | `[ ]` | - |
| - | 任务3:交互模式输入优化 | `[ ]` | - |
| - | 单元测试 | `[ ]` | - |
| - | 集成测试 | `[ ]` | - |
| - | 验收测试 | `[ ]` | - |
### 问题记录
| 日期 | 问题描述 | 解决方案 | 状态 |
|------|----------|----------|------|
| - | - | - | `[ ]` |
---
## 后续工作
### 优化建议
- [ ] 考虑添加人员列表的本地缓存,减少接口调用
- [ ] 支持创建人姓名的自动补全功能
- [ ] 添加创建人历史记录,方便快速选择
### 待确认事项
- [ ] 确认ERP接口的认证方式和token获取机制
- [ ] 确认创建人姓名的唯一性要求
- [ ] 确认上传接口的其他必填参数
---
## 附录
### 参考文档
- 代码规范:`Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结:`Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结:`Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范:`Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范:`Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
- ERP对接文档:`Docs/PRD/自动化生成功能测试报告/ERP对接PRD/PRD_测试列表_测试报告_例子说明.md`
### 代码路径
- 主目录:`AuxiliaryTool/FunctionalTestReportGeneration`
---
## 优化功能回填
> 此区域用于记录实施过程中的优化和改进
| 日期 | 优化内容 | 优化人 | 状态 |
|------|----------|--------|------|
| - | - | - | `[ ]` |
---
**文档版本**: 1.0
**创建日期**: 2026-06-17
**最后更新**: 2026-06-17
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论