89 lines
3.5 KiB
Markdown
89 lines
3.5 KiB
Markdown
# 洁达商城选品
|
||
|
||
班次作业:从表 1 捞 `deal_flag=0`,按**条形码**搜 1 号药城 / 药帮忙,规则选出仓,结果写入表 2。不加购,不推订单中心。
|
||
|
||
口径:`资料/RPA订单中心接口开发口径_20260930.md` 第 3 节。
|
||
|
||
## 数据流
|
||
|
||
```text
|
||
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`。
|
||
|
||
## 环境
|
||
|
||
```bash
|
||
cd 选品流程
|
||
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`。
|
||
|
||
## 运行
|
||
|
||
```bash
|
||
cd 选品流程
|
||
uv run pytest -v
|
||
uv run python main.py --limit 5
|
||
uv run python main.py --platform yaoex
|
||
```
|
||
|
||
Windows:
|
||
|
||
```powershell
|
||
cd 选品流程
|
||
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 推送、支付回传、批准文号搜索、商家名模糊匹配。
|