11 KiB
仓库布局:四接口一服务 + 四个英文作业包
| 文档属性 | 内容 |
|---|---|
| 日期 | 2026-10-02 |
| 状态 | 已锁定,本轮实施依据 |
| 范围 | 根目录命名与分家:选品流程/ 整包迁到 rpa_selection/;占位 rpa_cart/、rpa_contract/、rpa_rebate/;资料/ 并入 docs/。路径与文档引用。 |
| 替代 | 根 README.md 代码入口表;资料/README.md(并入后成为 docs/README.md) |
| 不变 | 四张表、四个口的作业语义、接口 1 行为、选品规则与拆量、rpa_yisaiqi 页面步骤 |
四个 HTTP 口不是四个服务。四条作业不是一个包。代码目录名全英文。
1. 要做成什么
根目录变成:
AutoRpa/
README.md
rpa_oms/ # 四个 HTTP 口,一个 FastAPI
rpa_selection/ # 选品班(现 选品流程/ 整包搬来)
rpa_cart/ # 加购 + 支付回传(占位)
rpa_contract/ # 合同班(占位)
rpa_rebate/ # 返利班(占位)
docs/ # 现行口径 + 归档(现 资料/ 并入)
rpa_yisaiqi/ # 过渡:合同班能跑之后整包删除
完成标准:
- 仓库根上不再有
选品流程/、资料/。 cd rpa_selection && uv run pytest -v与搬前同等通过。cd rpa_oms && uv run pytest -v通过。- 根 README、
docs/README.md、.gitignore、现行口径里的路径指向新目录。 rpa_cart/、rpa_contract/、rpa_rebate/各有 README 和空pyproject.toml,能看出职责,没有可运行作业代码。
2. 不做什么
- 不加购、不支付回传、不录合同、不录返利
- 不实现接口 2 / 3 / 4,不在
rpa_oms里建空路由模块 - 不改选品规则、班次判定、表结构、接口 1 报文
- 不整理、不改名、不删除
rpa_yisaiqi/(本轮只改指向它的现行文档路径,若文档从资料/搬走) - 不把作业改成
app/包;作业保持扁平脚本(main.py+job.py) - 不把四个作业收进
rpa_jobs/ - 不改
docs/superpowers/里历史 spec / plan 的死链(视为归档) - 不提交
state_center/等本轮无关的已删文件(那些删除不在本 spec 范围)
3. 已锁定决策
| 项 | 决定 |
|---|---|
| 四个口 | 继续住在 rpa_oms/。入站 1、3 在 app/inbound/,出站 2、4 做到时再加 app/outbound/。本轮只把这张地图写进 rpa_oms/README.md |
| 四个作业 | 根上并列:rpa_selection、rpa_cart、rpa_contract、rpa_rebate |
rpa_cart |
加购(接口 2 operateType=1)和支付回传(operateType=2)同一个包。两个班次,共享表 2 |
| 选品 | git mv 选品流程 rpa_selection。业务代码、扁平 import、pythonpath = ["."] 不动 |
| 占位包 | 只有 README.md + pyproject.toml。无 main.py、无 tests/ |
| 中文 | 代码目录全英文。文档文件名可以中文。docs/ 是目录名,里面的 .md 文件名不改 |
rpa_yisaiqi |
过渡资产。合同页面步骤仍以它为准。等 rpa_contract 能跑再整包删 |
docs/superpowers/ |
原地不动,归档 |
4. rpa_oms:四个口的地图
本轮不改 Python 文件(README 除外)。运行时仍只开放接口 1。
| 口 | 方向 | 底表 | 代码落点(做到再写) |
|---|---|---|---|
| 1 | 订单中心 → 本方 | rpa_sales_goods_mapping_data |
已有 app/inbound/sales_goods.py,POST /api/oms/v1/sales-goods |
| 2 | 本方 → 订单中心 | rpa_cart_settlement_goods_data |
未来 app/outbound/,由 rpa_cart 班次调用,本服务也可提供 push 客户端 |
| 3 | 订单中心 → 本方 | rpa_purchase_contract_data |
未来 app/inbound/,复用接口 1 信封/鉴权 |
| 4 | 本方 → 订单中心 | rpa_contract_agreement_result |
未来 app/outbound/,由合同/返利班次调用 |
rpa_oms/README.md 用上表替换「本期只开放接口 1」的单一叙述,并写明:HTTP 收件不同步跑作业。
5. 四个作业包
作业语义仍以 docs/RPA订单中心接口开发口径_20260930.md(搬后路径)为准。包只是落点。
5.1 rpa_selection/(整包搬)
来源:选品流程/。
| 动作 | 细节 |
|---|---|
| 移动 | git mv 选品流程 rpa_selection |
pyproject.toml |
name = "rpa-selection";description 改成带新目录名。依赖、requires-python、pytest 配置不动 |
README.md |
所有 cd 选品流程、`选品流程/` 改成 rpa_selection;口径路径改 docs/... |
| 代码 | 不改 import、不改 PROJECT_ROOT = Path(__file__).resolve().parent |
output/结果 |
不改名(gitignored 产物)。.gitignore 路径跟着父目录改 |
搬完后包内仍是扁平脚本:main.py、job.py、persist.py、repo.py、rules.py、pipeline.py、search_*.py、auth_login.py、tests/。
5.2 占位包共同形态
rpa_cart/、rpa_contract/、rpa_rebate/ 各两个文件,模板一致。
pyproject.toml:
[project]
name = "rpa-<slot>"
version = "0.1.0"
description = "<一句话职责>"
requires-python = ">=3.12"
dependencies = []
[tool.uv]
package = false
[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
三个 name / description:
| 目录 | name | description |
|---|---|---|
rpa_cart |
rpa-cart |
洁达加购与支付回传。表 2 → 接口 2。本包尚未实现。 |
rpa_contract |
rpa-contract |
洁达合同班。表 3 合单录入 → 表 4。本包尚未实现。 |
rpa_rebate |
rpa-rebate |
洁达返利班。按合同号查号、录协议 → 表 4。本包尚未实现。 |
每个 README 必须写清:
- 读哪张表、写哪张表、对应哪个口
- 班次(选品随接口 1;加购在选品之后另班;支付另班对准 12:30 / 17:30;合同/返利一天两班,返利建议合同班之后)
- 本期不做(占位)
- 合同包额外一句:页面步骤目前仍在
rpa_yisaiqi/,本包能跑之后再删艺赛旗
rpa_cart README 须写明两个入口将来都在本包:operateType=1 加购、operateType=2 支付回传。不要暗示会拆成第五个包。
5.3 作业与表的对照(写入根 README)
| 包 | 读 | 写 | 口 |
|---|---|---|---|
rpa_selection |
表 1 deal_flag=0 |
表 2 operate_type=1,表 1 处理标志 |
不直接调口;口 2 由 rpa_cart 推 |
rpa_cart |
表 2 | 表 2 push_status;支付行 |
口 2 |
rpa_contract |
表 3 process_status=0 |
表 4 actionCode=1 |
口 3 收件在 oms;口 4 回写 |
rpa_rebate |
表 3 / 表 4 待查号与待录协议 | 表 4 contractStatus=2、actionCode=2 |
口 4 |
6. 资料/ → docs/
docs/ 已有 superpowers/。不要新建第二套文档根。资料/ 拆开并入后删除空目录。
6.1 现行(docs/ 根下)
| 来源 | 去向 |
|---|---|
资料/README.md |
docs/README.md(重写路径,去掉「路径先不动」) |
资料/RPA订单中心接口开发口径_20260930.md |
docs/ 同名 |
资料/RPA订单中心接口口径讨论纪要_20260929.md |
docs/ 同名 |
资料/ddl/ |
docs/ddl/ |
资料/API鉴权.doc |
docs/ |
资料/下一会话任务_建表.md |
docs/ |
资料/合同系统录入流程.md |
docs/ |
资料/合同返利系统字段映射_20260911.xlsx |
docs/ |
资料/采购平台选品条件优先项_20260902.txt |
docs/ |
资料/【项目方案】福建洁达采购合同RPA自动化录入需求_v20260924.docx |
docs/ |
口径正文里的 `资料/...` 改成 `docs/...`;`选品流程/` 改成 `rpa_selection/`。合同系统录入流程.md 里指向 rpa_yisaiqi 的句子保留。
6.2 归档(docs/archive/)
一期 13 节点主链,以及未列入现行表的旧设计说明:
PLAN.md一期开发任务清单_表结构_API草案.md一期需求简版说明_业务版.md界面截图证据记录.md福建洁达采购合同自动化设计说明.md采购业务RPA思路20260625.docx采购主链RPA一期实施与验收规范.md采购主链RPA一期开发规划.md采购主链RPA一期设计文档.md采购主链RPA一期需求文档_三方会审版.md采购主链RPA一期需求文档_会议整理版.md
这些文件内部的 资料/ 链接不改。docs/README.md 的历史节指向 docs/archive/,并保留原警告:那套模型是「一单合同走状态机」,不要用来解释接口 1 收件箱。
6.3 必须改路径的现行文件
只改还在用的入口,不扫历史 spec。
| 文件 | 改什么 |
|---|---|
README.md(仓库根) |
代码入口表换成五包;文档入口改 docs/ |
docs/README.md |
见 6.1 |
rpa_oms/README.md |
四个口地图;文档链接 docs/ |
rpa_selection/README.md |
目录名与口径路径 |
rpa_yisaiqi/README.md |
`资料/合同系统录入流程.md` → `docs/合同系统录入流程.md` |
.gitignore |
选品流程/ → rpa_selection/(.vscode 例外规则、secrets、data/.auth、output/结果) |
docs/RPA订单中心接口开发口径_20260930.md |
选品流程/、资料/ 路径 |
docs/RPA订单中心接口口径讨论纪要_20260929.md |
资料/ 路径 |
docs/ddl/列对照.md |
资料/ddl/ → docs/ddl/ |
docs/下一会话任务_建表.md |
资料/ 路径 |
docs/合同系统录入流程.md |
若正文有 资料/ 自引用则改 |
docs/superpowers/specs/2026-10-02-selection-split-allocation-design.md 里的 选品流程/、资料/ 是当时实施记录,不改。
7. .gitignore
现有选品相关行整段替换为:
!rpa_selection/.vscode/
!rpa_selection/.vscode/**
rpa_selection/secrets.json
rpa_selection/data/.auth/
rpa_selection/output/结果/*.xlsx
rpa_selection/output/结果/*.txt
其余规则不动。
8. 错误与回归
这是搬家,没有新的运行时错误分支。失败模式只有路径漏改:
- 测试或文档还写
选品流程、资料/(现行入口) cd 选品流程还出现在现行 README- 占位包被误写成可运行作业(出现
main.py却无实现)
回归:
cd rpa_oms && uv run pytest -v
cd rpa_selection && uv run pytest -v
选品单测不得改断言、不得为搬家放宽。若有测试读仓库根路径或写死 选品流程,改为相对包根(Path(__file__).resolve().parents[1] 已是包根的保持不动)。
9. 实施顺序
git mv 选品流程 rpa_selection,改该包pyproject.toml与 README- 建三个占位包
- 把
资料/按第 6 节拆进docs/与docs/archive/,重写docs/README.md - 改根 README、
rpa_oms/README.md、rpa_yisaiqi/README.md、.gitignore、搬过来的现行口径 - 跑第 8 节两条 pytest
- 确认根上没有
选品流程/、资料/