AutoRpa/rpa_selection
34BFF76918A9449ABAB323149DDCEA73 fa4df0f27b merge: 合入远程 oms + 四作业包布局
保留本机 .env 启动、审计字段和 deal_result GBK 截断。
选品目录按远程迁到 rpa_selection。
2026-10-03 10:29:44 +08:00
..
.vscode chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
output chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
tests merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
.env.example merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
.python-version chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
README.md merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
auth_login.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
db.py merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
http_util.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
job.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
main.py merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
mall_config.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
persist.py merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
pipeline.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
pyproject.toml chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
repo.py merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
rules.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
search_yaoex.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
search_ybm.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
secrets.example.json chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
start.ps1 merge: 合入远程 oms + 四作业包布局 2026-10-03 10:29:44 +08:00
util.py chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00
uv.lock chore: 根目录改成 oms + 四个英文作业包 2026-10-02 21:24:46 +08:00

README.md

洁达商城选品

班次作业:从表 1 捞 deal_flag=0,按条形码搜 1 号药城 / 药帮忙,规则选出仓,结果写入表 2。不加购,不推订单中心。

口径:docs/RPA订单中心接口开发口径_20260930.md 第 3 节。

数据流

rpa_sales_goods_mapping_data (deal_flag=0)
    → 领取并置 3
    → 登录一次 / 平台
    → 按条形码搜索(批准文号只落表,不拿去搜)
    → 选品规则(两平台合并,按仓序拆量)
    → rpa_cart_settlement_goods_data(operate_type=1, push_status=0)
    → 表 1 deal_flag=1 成功 / 2 失败

两平台搜完后合并统一判定。凑齐计划量才落成功行;凑不齐不落部分成功。一边故障、另一边单独能凑齐:按成功落。一边故障且剩下的凑不齐:系统故障(可把 deal_flag 改回 0 重跑)。两边都搜到但合计不够:业务失败「库存不足」,该 omsId 不重跑。

规则

硬过滤三项,再按仓序拆量(同一平台同一仓只留低价那条):

  1. 自营仓(商家名去 [自营] 后必须等于四级名单全称)
  2. 毛利 (销售价格 - 平台价) / 销售价格 >= 4%
  3. 效期 ≥ 12 个月
  4. 仓序(级内由近到远):药帮忙杭州/长沙/湖北小药药 → 1 药城广东/昆山/湖北亿昊 → 济南小药药、天津壹号、重庆亿昊 → 辽宁亿昊、陕西壹号、河南壹号、重庆壹号、重庆小药药
  5. 按序贪心拆量。凑齐则每个仓一行,purchase_qty 为该仓件数;凑不齐整单失败

multi_platform_flag=1 仅当成功行出现两个 platform_type。湖南壹号、甘肃壹号云不在自营集合。口径见 docs/superpowers/specs/2026-10-02-selection-split-allocation-design.md。

环境

cd rpa_selection
uv sync --python 3.12
uv run playwright install chromium

Oracle 与 rpa_oms 同一套变量:RPA_ORACLE_HOST / PORT / SERVICE / USER / PASSWORD,11.2 用 thick。Windows 还要 RPA_ORACLE_CLIENT_LIB。选品 .env 里 Oracle 密码留空时,会补 rpa_oms/.env 里已有的值。

商城账号(任选其一,不要提交真实密码):

  • 复制 .env.example 为 .env,填 YAOEX_USERNAME / YAOEX_PASSWORD / YBM_USERNAME / YBM_PASSWORD
  • 或复制 secrets.example.json 为 secrets.json

已有登录态可跳过浏览器:--yaoex-auth auth.json、--ybm-cookies cookies.json。

运行

cd rpa_selection
uv run pytest -v
uv run python main.py --limit 5
uv run python main.py --platform yaoex

Windows:

cd rpa_selection
uv sync --python 3.12
Copy-Item -LiteralPath .env.example -Destination .env
# 商城账号写本机 .env;Oracle 也可只留在 rpa_oms/.env
.\start.ps1 --limit 5

--limit 只领取本班前 N 条 deal_flag=0。跑的过程中新进入的留给下一班。

中途崩溃会停在 deal_flag=3。改回 0 再跑。系统故障不能靠订单中心重推同一 oms_id(接口 1 幂等),同样把 deal_flag 改回 0。

模块

文件 职责
main.py 登录编排
job.py 班次:领取 → 按行判定 → 落表
persist.py 判定结果 → 表 2 行 + 表 1 处理标志
repo.py Oracle / 内存仓库
rules.py 选品规则,两平台共用
pipeline.py 单行两平台统一判定
search_yaoex.py / search_ybm.py 搜索接口;查询键是条形码
auth_login.py Playwright 登录

本期不做

加购、接口 2 推送、支付回传、批准文号搜索、商家名模糊匹配。