# 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` | 错误日志,每次批量运行时重置 | --- ## 单个 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 ``` - 默认读取 CSV 第二列的 Ticket ID,取前 10 个 - 最多 5 个任务并行执行 - 每个 Ticket 使用独立子目录 `downloads/{ticket_id}`,避免并行冲突 - 上传 DSM 完成后自动清理本地文件和子目录 - 错误记录到 `error_log.txt` ### 修改并行数或 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` |