144 lines
5.7 KiB
Markdown
144 lines
5.7 KiB
Markdown
# rpa_cart
|
||
|
||
加购与支付回传。两个班次,同一个包。
|
||
|
||
| 班次 | 状态 |
|
||
| --- | --- |
|
||
| 加购 `operateType=1` | 领表 2 选品成功行,按仓加进购物车。成功盖章,失败改 `status=2` |
|
||
| 支付回传 `operateType=2` | **1 号药城已做落表**。不推接口 2 |
|
||
|
||
## 加购
|
||
|
||
选品已经把「哪个仓、加几件」写成表 2:`operate_type=1`、`status=1`、`push_status=0`、`update_user_name=系统管理员`。本班读这些行,登录 1 号药城 / 药帮忙,按条形码再搜一次,对上 `supplier_name`,改数量,加入购物车。同一 `omsId` 拆两仓、两平台要加齐。
|
||
|
||
成功不插新行,只把 `update_user_name` 改成 `加购班`。加不进去(登录挂、库存没了、中包装加不进、对不上仓)改该行 `status=2`,写失败原因。领取时先盖 `加购中`;中途崩溃停在这一戳。`update_time` 超过 30 分钟的「加购中」下一班会再领;未过期的需改回 `系统管理员` 再跑。
|
||
|
||
不推订单中心,不清空购物车,不碰合同。表 2 没有 `sku_id`,加购必须再搜条形码。选完到加购之间库存可能变,已知。
|
||
|
||
```bash
|
||
cd rpa_cart
|
||
uv sync --python 3.12
|
||
uv run python main.py cart
|
||
uv run python main.py cart --limit 20
|
||
uv run python main.py cart --platform yaoex
|
||
```
|
||
|
||
账号用 `rpa_selection/.env` 的 `YAOEX_*` / `YBM_*`,库用 `RPA_ORACLE_*`。
|
||
|
||
验收(内存、不连库):
|
||
|
||
```bash
|
||
uv run pytest tests/test_cart_job.py::test_job_adds_split_rows_without_insert -q
|
||
```
|
||
|
||
杭州 3 + 广东 7 两行都加车,表 2 仍两行。失败点名 `test_job_marks_out_of_stock`、`test_job_marks_login_fail_as_system_error`。
|
||
|
||
接口 2 仍捞全部 `push_status=0`。加购班跑完之前不要组装推送。
|
||
|
||
## 运维
|
||
|
||
### 怎么跑
|
||
|
||
```bash
|
||
cd rpa_cart
|
||
uv sync --python 3.12
|
||
uv run python main.py cart --limit 20
|
||
```
|
||
|
||
账号用 `rpa_selection/.env` 的 `YAOEX_*` / `YBM_*`,Oracle 空缺时补 `rpa_oms/.env`。连接从 `rpa_oracle` 池取,班次默认池大小 1。缺 `RPA_ORACLE_HOST` / 用户 / 密码时入口失败,文案「数据库不可用」。未捕获异常原文进 `rpa_shift_error_audit`,Windows 上先执行 `docs/ddl/rpa_oms_staging_tables.sql` 里这张表。
|
||
|
||
### 看哪张表哪几列
|
||
|
||
- 表 2 `rpa_cart_settlement_goods_data`:`operate_type=1`、`status`(1 成功,2 失败)、`push_status=0`、`update_user_name`(`系统管理员` 待领,`加购中` 处理中,`加购班` 本班已盖)、`fail_reason`、`update_time`、`oms_id`、`supplier_name`、`purchase_qty`
|
||
|
||
### 崩溃改回 SQL
|
||
|
||
停在「加购中」且未过 30 分钟租约:
|
||
|
||
```sql
|
||
UPDATE rpa_cart_settlement_goods_data
|
||
SET update_user_name = '系统管理员'
|
||
WHERE update_user_name = '加购中' AND fid = :fid;
|
||
```
|
||
|
||
过期的「加购中」下一班会再领,不必改。
|
||
|
||
### 原因列 vs 日志原文
|
||
|
||
表 2 `fail_reason`:登录挂写 `系统故障:LOGIN_FAILED`,查询抛错写 `系统故障:QUERY_FAILED`,加车抛错写 `系统故障:ADD_FAILED`。异常原文打本机日志,不进这一列。库存不足 / 中包装 / 对不上仓仍写业务中文。
|
||
|
||
### 点名命令
|
||
|
||
```bash
|
||
cd rpa_cart
|
||
uv run pytest tests/test_cart_job.py::test_job_adds_split_rows_without_insert -q
|
||
uv run pytest tests/test_cart_job.py::test_job_marks_out_of_stock -q
|
||
uv run pytest tests/test_cart_repo.py::test_from_env_without_user_raises -q
|
||
uv run pytest tests/test_cart_repo.py::test_claim_reclaims_expired_claiming_stamp tests/test_cart_repo.py::test_claim_skips_fresh_claiming_stamp -q
|
||
```
|
||
|
||
## 1 号药城支付落表
|
||
|
||
从买家中心导出已付订单,按导出行字段写入表 2 `operate_type=2`。不对加购行。购物车和支付单没有强关联,`oms_id` 表上 NOT NULL,先填 `0`,等人后选。
|
||
|
||
```bash
|
||
cd rpa_cart
|
||
uv sync --python 3.12
|
||
# 账号用 rpa_selection/.env 的 YAOEX_*,库用 RPA_ORACLE_*
|
||
uv run python main.py
|
||
```
|
||
|
||
过滤:只落 待发货 / 待收货 / 已完成。单价用折后单价,总价 `round(折后单价×数量, 4)`。`pay_order_no` 用商城订单号。`pay_order_dtl_id` 落库时自生成(UUID hex),不是平台数据,给订单中心防重传。
|
||
|
||
幂等:同一 `pay_order_no` 不重复插入。Excel 没有细单 ID,不再打详情接口。
|
||
|
||
```bash
|
||
uv run pytest -v
|
||
```
|
||
|
||
## Windows 真库
|
||
|
||
Mac 打不到 `192.168.12.244`,**改表 2 在 Windows 上测**。支付导出/解析在 Mac 已经跑过;Win 上要测登录、导出、落表,以及加购登录和对仓加车。
|
||
|
||
Python 3.12 + Instant Client(位数一致)+ Chrome。密码不要写进仓库。把本包和 `rpa_selection/.env` 一起带过去。
|
||
|
||
PowerShell:
|
||
|
||
```powershell
|
||
cd rpa_cart
|
||
uv sync --python 3.12
|
||
uv run playwright install chrome
|
||
$env:RPA_ORACLE_HOST = "192.168.12.244"
|
||
$env:RPA_ORACLE_PORT = "1521"
|
||
$env:RPA_ORACLE_SERVICE = "rpa"
|
||
$env:RPA_ORACLE_USER = "rpainit"
|
||
$env:RPA_ORACLE_PASSWORD = "这里填密码"
|
||
$env:RPA_ORACLE_THICK = "1"
|
||
$env:RPA_ORACLE_CLIENT_LIB = "C:\oracle\instantclient"
|
||
|
||
uv run pytest tests/test_cart_job.py::test_job_adds_split_rows_without_insert -q
|
||
uv run python main.py cart
|
||
uv run python main.py
|
||
```
|
||
|
||
看控制台 `inserted / skipped_dup / unmatched`。同一订单号再跑应 `skipped_dup` 上升。
|
||
|
||
查库:
|
||
|
||
```sql
|
||
SELECT operate_type, oms_id, platform_type, supplier_name, bar_code,
|
||
purchase_price, purchase_qty, purchase_total,
|
||
pay_order_no, pay_order_dtl_id, push_status
|
||
FROM rpa_cart_settlement_goods_data
|
||
WHERE operate_type = 2 AND platform_type = 66
|
||
ORDER BY fid DESC;
|
||
```
|
||
|
||
再跑一遍同一天,`skipped_dup` 应上升,行数不再增加。
|
||
|
||
不要在页面点「确认收货」。脚本自己导出,过滤待发货/待收货/已完成。
|
||
|
||
## 本期不做
|
||
|
||
清空购物车、药帮忙支付、接口 2 推送。
|