4.4 KiB
4.4 KiB
双商城查价流程技术可行性报告
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. 最终结论
基于当前实现与回归结果,该双商城查价流程在技术上可行、稳定性可接受、维护成本可控,满足当前业务使用条件。