# SAP C4C 附件批量下载工具 从 SAP C4C 下载 Ticket 附件并上传到群晖 DSM。 --- ## 环境要求 - Python >= 3.8 - Ubuntu 20.04+ 或 macOS --- ## 安装 ```bash pip install -r requirements.txt python -m playwright install chromium # Ubuntu 需额外执行(需要 sudo) python -m playwright install-deps chromium ``` --- ## 文件说明 | 文件 | 说明 | |---|---| | `sap-c4c-AttachmentFolder.py` | 核心下载脚本,支持单个 Ticket 下载 | | `batch_download.py` | 批量下载脚本,从 CSV 读取 ID 并行执行 | | `get_ticket_ids.py` | 从 CSV 提取 Ticket ID 工具 | | `datasource/` | 存放 SAP Analytics 导出的 CSV 文件 | | `downloads/` | 本地临时下载目录(上传 DSM 后自动清理) | | `error_log.txt` | 错误日志,每次批量运行时重置 | | `failed_tickets.csv` | 失败的 Ticket ID 列表,可用于下次重试 | --- ## 单个 Ticket 下载 ```bash python sap-c4c-AttachmentFolder.py \ --tenant https://my300375.c4c.saphybriscloud.cn \ --user admin \ --password 'your_password' \ --ticket 20950 \ --output-dir ./downloads ``` ### 同时上传到群晖 DSM ```bash python sap-c4c-AttachmentFolder.py \ --tenant https://my300375.c4c.saphybriscloud.cn \ --user admin \ --password 'your_password' \ --ticket 20950 \ --output-dir ./downloads \ --dsm-url http://10.0.10.235:5000 \ --dsm-user PLM \ --dsm-password 'dsm_password' \ --dsm-path /Newgonow/AU-SPFJ ``` ### 仅列出附件不下载 ```bash python sap-c4c-AttachmentFolder.py ... --list-only ``` ### JSON 输出模式 ```bash python sap-c4c-AttachmentFolder.py ... --json ``` --- ## 批量下载 将 SAP Analytics 导出的 CSV 文件放入 `datasource/` 目录,然后运行: ```bash python batch_download.py ``` - 读取 datasource 目录下 CSV/xlsx 的第二列,获取所有 Ticket ID - 最多 5 个任务并行执行 - 每个 Ticket 使用独立子目录 `downloads/{ticket_id}`,避免并行冲突 - 上传 DSM 完成后自动清理本地文件和子目录 - 错误记录到 `error_log.txt`,失败的 Ticket ID 保存到 `failed_tickets.csv` ### 守护进程 ```shell #启动后台下载 nohup python3 batch_download.py > run.log 2>&1 & echo $! > batch.pid #查看实时进度 tail -f run.log #查看进程是否还在运行 cat batch.pid | xargs ps -p #结束进程 cat batch.pid | xargs kill ``` ### 重试失败的 Ticket 将上一次运行生成的 `failed_tickets.csv` 移动到 `datasource/` 目录,然后重新运行: ```bash mv failed_tickets.csv datasource/ python batch_download.py ``` ### 修改并行数或 Ticket 数量 编辑 `batch_download.py` 顶部配置: ```python WORKERS = 5 # 并行数 # get_ticket_ids(10) 中的 10 为读取数量 ``` --- ## DSM 目录结构 上传后文件按以下结构组织: ``` {dsm_path}/ └── {ticket_id}_{serial_id}/ └── {issue_id}_{issue_description}/ └── 附件文件 ``` > `Quote & Chassis` 类型的附件会同时复制到所有其他 issue 目录下。 --- ## 环境变量(可选) 也可通过环境变量代替命令行参数: | 环境变量 | 对应参数 | |---|---| | `C4C_TENANT` | `--tenant` | | `C4C_USERNAME` | `--user` | | `C4C_PASSWORD` | `--password` | | `DSM_URL` | `--dsm-url` | | `DSM_USERNAME` | `--dsm-user` | | `DSM_PASSWORD` | `--dsm-password` | | `DSM_PATH` | `--dsm-path` |