# ReleaseKit **Repository Path**: fbigun/release-kit ## Basic Information - **Project Name**: ReleaseKit - **Description**: 产品放行报告自动化工具集 — 从信息获取到文档生成,一站式完成。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-17 - **Last Updated**: 2026-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ReleaseKit 产品放行报告自动化工具集 — 从信息获取到文档生成,一站式完成。 ## 功能 | 工具 | 子命令 | 说明 | |---|---|---| | **getproductinfo** | `query` | 从内网 QC 系统 API 拉取产品批号信息,写入 CSV | | **generate_reports** | `generate` | 读取 CSV + 模板,批量生成放行单和 COA/COC 文档 | | **convert_to_pdf** | `to-pdf` | 将 DOCX/XLSX 转 PDF,并按批号合并为放行报告 | | **split_certs** | `split-pdf` | 将多页证书 PDF 按产品切分为单页并重命名 | | **product_pass** | `pass` | 自动完成产品检验、SAP 同步和放行操作 | | **py-launcher** | — | 嵌入式 Python 自动发现与启动器 | | **py-assoc** | — | Windows `.py` 文件关联管理 | ## 工作流程 ``` 1. 获取信息 2. 生成文档 3. 生成 PDF 4. 处理证书 5. 产品放行 ┌──────────────┐ ┌────────────────┐ ┌──────────────────┐ ┌──────────────┐ ┌──────────────┐ │query │──→│generate │──→│to-pdf │──→│split-pdf │ │pass │ │API → CSV │ │CSV+模板 → │ │DOCX/XLSX → PDF │ │多页PDF切分 │ │API 自动放行 │ │ │ │放行单+COA/COC │ │分类 + 合并 │ │ │ │ │ └──────────────┘ └────────────────┘ └──────────────────┘ └──────────────┘ └──────────────┘ ``` **步骤说明:** 1. 在 `input/config-productinfo next.csv` 中维护放行批次,运行 `ReleaseKit.bat` 选择「维护放行批号配置」,用 LibreOffice 编辑并另存为 `config-productinfo.csv`(删除本次不放行的批次),程序自动将本次放行批次从 next.csv 中剔除 2. 运行 `ReleaseKit.bat` 选择「生成报告」,自动匹配模板生成放行单和 COA/COC 文档 3. 运行 `ReleaseKit.bat` 选择「生成 PDF」,将生成的 DOCX/XLSX 转为 PDF 并按批号合并为 `output/放行报告.pdf` 4. 运行 `ReleaseKit.bat` 选择「切分 PDF」,将证书 PDF 切分到 output 目录 5. 运行 `ReleaseKit.bat` 选择「产品放行」,自动完成检验、同步SAP、放行操作 ## 目录结构 ``` ReleaseKit/ ├── pyproject.toml # 项目元数据、依赖声明 ├── ReleaseKit.bat # 主入口(交互菜单,统一所有功能) ├── productInfo.csv # 产品主数据(区域、规格、有效期等) ├── input/ # 源 PDF 文件 + 产品数据源 │ ├── config-productinfo next.csv # 下次放行批次数据 │ └── config-productinfo.csv # 本次放行批次数据 ├── bin/ # 嵌入式 Python + 启动器 + LibreOffice │ ├── python-*-embed-*/ # 嵌入式 Python 发行版 │ ├── LibreOfficePortable/ # LibreOffice Portable(文档转 PDF) │ ├── py-launcher.bat # Python 启动器 │ └── py-assoc.bat # .py 文件关联管理 ├── template/ # 文档模板 │ ├── release.docx # 放行单模板(国内/国际共用) │ ├── coc.docx # COC 模板(国际) │ └── {产品编号}.xlsx # 对外 COA 模板(国内,按产品编号) ├── output/ # 生成文件输出 ├── releasekit/ # Python 包 │ ├── __init__.py # 包初始化 │ ├── __main__.py # python -m releasekit 入口 │ ├── config.py # 共享路径常量、字段定义、API/主数据配置 │ ├── utils.py # CSV 读写、日期格式化、主数据读取、有效期校验 │ ├── cli.py # 交互菜单 + 子命令分派 │ ├── api/ │ │ └── qc_client.py # QC 系统 API 客户端 │ ├── services/ │ │ ├── config_editor.py # 批次配置编辑业务逻辑 │ │ ├── product_info.py # 产品信息查询 + 有效期校验 │ │ ├── report_gen.py # 报告生成业务逻辑 │ │ ├── doc_to_pdf.py # 文档转 PDF 业务逻辑 │ │ ├── pdf_split.py # PDF 切分业务逻辑 │ │ └── product_pass.py # 产品放行业务逻辑 │ └── docops/ │ ├── zip_utils.py # ZIP 重新打包工具 │ ├── docx_ops.py # docx XML 占位符替换 │ └── xlsx_ops.py # xlsx XML 单元格替换 ├── tests/ # 单元测试 └── req/ # API 参考文档 ``` ## 使用方法 双击 `.bat` 文件即可运行,无需安装 Python。 ### 交互菜单模式 双击 `ReleaseKit.bat` 进入引导式菜单。 ### 子命令模式 ```cmd python -m releasekit query # 查询产品信息 python -m releasekit generate # 生成报告 python -m releasekit to-pdf # 生成 PDF python -m releasekit split-pdf # 切分 PDF python -m releasekit pass # 产品放行 ``` ### 生成放行报告 1. 编辑 `input/config-productinfo.csv`,填写产品批号 2. 双击 `ReleaseKit.bat`,选「查询产品信息」— 自动获取产品信息并校验有效期 3. 双击 `ReleaseKit.bat`,选「生成报告」— 生成放行单和 COA/COC 文档 4. 在 `output/` 目录查看结果 ### 产品放行 自动完成产品的检验标记、SAP 同步和最终放行操作: 1. 编辑 `input/config-productinfo.csv`,填写产品批号和产品编号 2. 双击 `ReleaseKit.bat`,选「产品放行」— 确认后自动逐批号执行放行 3. 放行流程:搜索 → 更新区域 → 标记已检 → 同步SAP → 放行 → 验证 4. 完成后输出结果汇总(成功/失败统计) ### 处理证书 PDF 双击 `ReleaseKit.bat`,选「切分 PDF」,将多页 PDF 按批号切分到 `output/` 目录。 ### 生成 PDF 将 `output/` 目录下的 DOCX/XLSX 文档转为 PDF 并按批号合并: 1. 安装 LibreOffice Portable 到 `bin/LibreOfficePortable/`(详见 `bin/readme.md`) 2. 双击 `ReleaseKit.bat`,选「生成 PDF」 3. 最终产物输出到 `output/放行报告.pdf` 合并逻辑:放行单类 PDF 按批号排序合并 → 对外COA+COC 类 PDF 按批号排序合并 → 两组合并为最终 PDF。 ### 管理文件关联 以管理员身份运行 `bin\py-assoc.bat`,可增加、移除或查看 `.py` 文件关联。 ## 产品数据格式 ### 产品主数据 `productInfo.csv` 项目根目录下的产品主数据文件(GBK 编码),统一管理所有产品的固定信息: | 字段 | 含义 | 示例 | |---|---|---| | 产品编号 | 唯一标识 | `30010613` | | 产品名称 | 中英文名称 | `阿奇霉素干混悬剂` | | 产品规格 | 规格说明 | `0.1g` | | 包装规格 | 包装形式 | `6袋/盒` | | 单位 | 计量单位 | `盒` | | 质量标准 | 检验标准编号 | `PL-QS-5.154` | | 区域 | 国内 / 国际 | `国内` | | 有效期 | 有效期月数 | `48` | | 批量 | 批次产量 | `61250盒` | ### 批次配置 CSV `input/config-productinfo.csv`(本次放行)与 `input/config-productinfo-next.csv`(下次放行)字段说明: | 字段 | 含义 | 来源 | 示例 | |---|---|---|---| | 产品批号 | 批次编号 | API | `260423100` | | 检验编号 | 质检编号 | 手工 | `FP20260506-001` | | 报告日期 | YYYY.MM.DD | 手工 | `2026.05.13` | | 生产日期 | YYYY.MM.DD | API | `2026.04.23` | | 有效期 | YYYY.MM | API | `2029.03` | | 数量 | 产品数量 | API | `106200` | | 产品编号 | 关联主数据 | API | `30010034` | | 产品名称 | 中文名称(仅供人工识别) | API | `左氧氟沙星片` | **区域**不再存储在批次 CSV 中,统一从 `productInfo.csv` 获取。 **国内**生成放行单(`release.docx`) + 对外COA(`{产品编号}.xlsx`);**国际**生成放行单(`release.docx`) + COC(`coc.docx`),日期自动转换为英文格式。 ## 技术说明 - **零安装部署**:通过嵌入式 Python + `py-launcher.bat`,双击即用 - **格式完整保留**:直接编辑 ZIP 内 XML,不经过 python-docx / openpyxl 序列化,完美保留上标、下标等格式 - **LibreOffice 无头转换**:通过 LibreOffice Portable `--headless` 模式将 DOCX/XLSX 转为 PDF,无界面弹窗 - **PDF 合并**:使用 PyPDF2 按 CSV 批号顺序分类合并,输出单一放行报告 PDF - **国内/国际双轨**:根据产品主数据中的区域字段自动选择模板和日期格式 - **有效期校验**:查询产品信息时自动校验「生产日期 + 有效期月数 = 有效期至」 - **产品放行**:通过 QC 系统 API 自动完成检验标记、SAP 同步和最终放行,替代手动 Web 操作 - **批量匹配**:根据实际数量自动匹配产品主数据中的多个批量值(±5% 容差) - **标准 Python 包结构**:`python -m releasekit` 入口,支持子命令和交互菜单两种模式 ## 开发 ```cmd pip install -e ".[pdf,dev]" pytest ```