# 双商城查价流程技术可行性报告 ## 1. 报告目的 评估当前已实现的双商城自动查价流程(1号药城、药帮忙)在技术上的可行性、稳定性与可维护性,并给出上线建议。 ## 2. 结论摘要 - 结论:技术可行,已具备稳定运行条件,可投入日常使用。 - 现状:已完成双平台登录、接口抓取、字段映射、价格解密、异常兜底、结果导出与运行统计。 - 风险等级:中低(主要风险来自第三方页面结构和接口字段变更)。 ## 3. 当前实现范围 - 输入:桌面采购模板 `【单独】采购单比价模板.xlsx`(按“批准文号”查询)。 - 平台顺序:固定为 `1号药城 -> 药帮忙`。 - 输出:桌面目录 `比价结果` 下 `查价结果_时间戳.xlsx`。 - 输出表头(固定顺序): - 通用名, 规格, 生产厂家, 批准文号, 采购数量, 采购价格, 商城, 平台名称, 平台规格, 平台价格, 效期, 商家, 库存, 库存说明 ## 4. 技术方案与可行性分析 ### 4.1 技术栈 - Python 3.12(`uv` 管理) - `isa-rpa`:浏览器会话与密码箱读取 - `requests`:接口请求 - `pycryptodome`:1号药城价格 AES 解密 - `openpyxl`:Excel 读写 可行性判断: - 均为成熟组件,生态稳定,维护成本低。 - 方案是“浏览器登录 + 接口抓取”的混合模式,较纯 UI 点击方案更稳定、速度更快。 ### 4.2 登录与认证方案 - 1号药城:自动填账号密码,点击“开始验证”,登录后从 Cookie 提取 `token/userId/buyerCode`。 - 药帮忙:自动填账号密码,勾选“阅读并同意”,登录后复用 Cookie 进行接口查询。 - 凭据管理:使用 `SecretClient` 从密码箱读取,不在代码中硬编码明文凭据。 可行性判断: - 认证链路已跑通,多次回归可复现。 - 密码箱方案满足凭据安全与后续轮换需求。 ### 4.3 接口与字段映射方案 - 1号药城接口:`homeSearchList` - 新增映射:`平台名称 <- shortName`,`平台规格 <- spec` - 价格字段:`price` 支持解密后写入 - 药帮忙接口:`list-products` - 新增映射:`平台名称 <- showName`,`平台规格 <- spec` - 价格字段:优先 `price`,为空兜底 `fob` - 无货规则:`availableQty=0` 时 `平台价格=0`,`采购价格`保留原始值,`库存说明=无货` 可行性判断: - 字段来源明确、映射稳定,且包含业务兜底规则,能覆盖常见脏数据场景。 ### 4.4 数据处理与输出方案 - 读取采购模板后按“批准文号”查询,空批准文号自动跳过。 - 对同一批准文号做查询缓存,减少重复请求。 - 输出时强制按目标表头重排,避免模板历史列顺序导致错位。 - 运行结束输出统计指标: - 查询品种个数(批准文号去重) - 获取价格行数 - 流程运行用时 可行性判断: - 具备业务可用性与可审计性(统计输出可用于日常巡检)。 ## 5. 已验证结果(最新回归) - 运行命令:`uv run main.py` - 实测结果(最新一次): - 采购模板有效条目:7 - 抓取总行数:216(1号药城 133,药帮忙 83) - 查询品种个数:7 - 获取价格行数:216 - 流程运行用时:约 33 秒 - 最新结果文件:`查价结果_20260904_115656.xlsx` 可行性判断: - 说明在当前网络和账号状态下可稳定产出完整结果。 ## 6. 风险与应对 - 风险1:第三方站点登录页元素变更 - 应对:保留统一定位函数,定期做元素回归检查。 - 风险2:接口字段或鉴权参数调整 - 应对:对关键字段增加空值兜底,异常报错保留原始响应摘要。 - 风险3:价格密文规则变更(1号药城) - 应对:将解密逻辑独立函数化,变更时可局部更新。 - 风险4:网络波动导致请求失败 - 应对:可追加重试机制(建议后续迭代增加)。 ## 7. 上线建议 - 建议上线:是。 - 上线前建议完成: - 增加接口请求失败的有限重试(如 2~3 次指数退避)。 - 固化一份“字段变更检查清单”(登录元素、接口字段、返回码)。 - 建立日常监控阈值(如抓取行数异常、无价格占比异常告警)。 ## 8. 最终结论 基于当前实现与回归结果,该双商城查价流程在技术上可行、稳定性可接受、维护成本可控,满足当前业务使用条件。