Files
Ticket/history/Codex三期工程执行文档.md
2026-05-07 10:25:02 +08:00

329 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Codex 三期工程执行文档
适用范围:基于当前已经完成的通用后台底座,继续建设“农产品收购发票开票平台”业务闭环。
使用方式:建议你后续给 Codex 下任务时,一次只下发一个“任务包”,不要跨太多模块,这样实现时间更短、回归范围更可控。
## 1. 业务功能规划
### 1.1 新增业务菜单
当前系统管理、日志管理等菜单已经具备,后续只新增业务菜单,不重复建设已有后台功能。
建议新增一级菜单:
- `发票业务`
建议在 `发票业务` 下新增 4 个菜单:
- `待开票列表`
- 用于查看业务系统返回的待开票数据、筛选、勾选、发起开票
- `开票任务`
- 用于查看开票状态、失败原因、票号信息、重试操作
- `认证中心`
- 用于处理票通认证状态、短信认证、扫码认证
- `票通账号配置`
- 用于维护公司与票通账号、默认开票参数、基础映射关系
说明:
- `开票结果` 不建议单独再做一个菜单,直接并入 `开票任务`
- `票通回调``主动查询补偿``业务系统回写` 不需要前端菜单,做后端能力即可
### 1.2 建议目录规划
为了适配当前项目结构,建议继续沿用现有 `modules` / `features` 风格,不要一开始就做大规模重构。
后端建议新增目录:
```text
server/src/main/kotlin/com/bbit/platform/
database/invoice/
InvoiceJobTable.kt
InvoiceJobItemTable.kt
TaxAccountTable.kt
InvoiceSyncLogTable.kt
integration/biz/
BizSystemClient.kt
BizInvoiceDtos.kt
integration/piaotong/
PiaotongClient.kt
PiaotongCrypto.kt
PiaotongDtos.kt
modules/invoice/candidate/
InvoiceCandidateModule.kt
modules/invoice/job/
InvoiceJobModule.kt
modules/invoice/auth/
InvoiceAuthModule.kt
modules/invoice/settings/
TaxAccountModule.kt
modules/invoice/callback/
PiaotongCallbackModule.kt
modules/invoice/shared/
InvoiceStatus.kt
InvoiceServices.kt
```
前端建议新增目录:
```text
web/src/
api/invoice/
candidates.ts
jobs.ts
auth.ts
settings.ts
types/invoice/
candidate.ts
job.ts
auth.ts
settings.ts
features/invoice/
candidates/index.vue
jobs/index.vue
auth-center/index.vue
settings/index.vue
components/invoice/
InvoiceConfirmDialog.vue
InvoiceAuthDialog.vue
InvoiceJobStatusTag.vue
```
### 1.3 模块职责划分
建议后续只围绕 4 个业务模块推进:
- `待开票模块`
- 对接业务系统待开票列表
- 支持筛选、勾选、金额汇总、发起开票
- `开票任务模块`
- 负责本地任务记录、状态流转、重试、详情查询
- `认证模块`
- 负责认证状态查询、短信认证、扫码认证、认证后继续开票
- `账号配置模块`
- 负责公司与票通账号、默认参数、启停状态维护
Codex 执行建议:
- 不要把“票通对接、业务系统对接、前端页面、状态补偿”揉成一个任务
- 最适合的粒度是“一个模块的一条主链路”
- 每次任务尽量能做到“改完即可本地验证一个页面或一个接口”
## 2. 需要准备的内容
这一章只写你这边需要准备的内容。票通接口文档已经在项目 `doc/` 目录里,后续不需要你再重复整理一遍。
### 2.1 你自己的业务系统接口资料
这是最关键的一部分,建议你提前准备并确认下面这些接口或数据来源:
- `当前登录人/公司上下文接口`
- 至少要能拿到 `userId``companyId`、公司名称、销方税号
- `待开票列表接口`
- 至少要能返回待开票主数据、金额、税率、商品信息、购销双方信息、唯一业务单号
- `开票前写库/锁单接口`
- 发起开票前锁定业务数据,避免重复开票
- `开票结果回写接口`
- 回写成功/失败状态、发票号码、数电发票号码、失败原因、票通流水号
- `可选:解锁或撤销接口`
- 如果开票失败后需要解除业务锁定,最好也提前明确
每个接口至少准备 5 类信息:
- 请求地址和调用方式
- 鉴权方式
- 请求参数说明
- 返回字段说明
- 一份真实示例报文
### 2.2 业务规则说明
Codex 能写代码,但业务规则如果不明确,后面很容易返工。建议你提前确认这些规则:
- 一条待开票数据是否对应一张发票,还是允许合并开票
- 发票商品行从哪里来,是业务系统直接给,还是平台侧组装
- 税率、税收分类编码、商品名称是否有默认规则
- 哪些字段缺失时不能发起开票
- 开票失败后,业务系统状态如何处理
- 同一业务单据的重复开票判断依据是什么
- 一个公司是否可能配置多个票通账号
### 2.3 联调和测试资源
建议你至少准备一套可联调的数据环境:
- 业务系统测试地址
- 可用的测试公司
- 至少 1 个可用测试账号
- 3 组待开票测试数据
- 正常成功
- 需要认证
- 明确失败
最好再补两类样例:
- 一份真实的待开票列表返回数据
- 一份真实的开票结果回写样例
### 2.4 环境和配置准备
建议你提前准备好下面这些配置:
- 后端数据库连接信息
- Redis 连接信息
- 前端、后端联调地址
- 业务系统的接口鉴权配置
- 票通测试账号、密钥、平台编码
- 能接收回调的测试域名或内网穿透地址
说明:
- 票通接口定义已经在 `doc/` 中,重点是确认账号和环境真实可用
- 如果业务系统接口还没稳定,建议先给一版 mock 或示例 JSON,Codex 可以先按样例落代码
## 3. 具体的三期工程执行内容
### 总体执行原则
三期都建议按“任务包”推进。每个任务包尽量满足下面三个条件:
- 改动范围集中,不跨太多目录
- 能在一次对话里做完并验证
- 做完后能形成明确可见结果
建议你后续给 Codex 下指令时,也按下面的任务包来发,不要一次塞完整三期。
### 第一期:业务骨架和数据接入
目标:先把“业务菜单、业务数据接入、基础配置、任务落库”搭起来,不急着一次打通所有票通细节。
一期任务包建议:
1. `新增业务菜单和前端页面骨架`
- 新增发票业务菜单
- 新建 4 个业务页面空壳
- 接通路由和权限码
2. `新增业务表和后端模块骨架`
- 新增开票任务、任务明细、票通账号等表
- 新增 invoice 相关后端模块目录和路由注册
3. `接入公司上下文和待开票列表`
- 打通当前用户所属公司信息
- 对接业务系统待开票列表接口
- 前端完成待开票列表查询展示
4. `完成票通账号配置页`
- 后端完成账号配置增删改查
- 前端完成配置页面
5. `完成本地开票任务创建骨架`
- 支持勾选数据创建本地任务
- 先把锁单、落库、状态初始化串起来
一期验收结果:
- 能看到新菜单
- 能查到待开票数据
- 能保存票通账号配置
- 能创建本地开票任务
### 第二期:开票主流程和认证流程
目标:把“发起开票 -> 遇到认证 -> 完成认证 -> 继续开票”这条主链路打通。
二期任务包建议:
1. `接入票通开票主接口`
- 完成票通报文组装、加密、签名
- 打通蓝字开票主调用
2. `补齐开票状态机和幂等控制`
- 固化 `invoiceReqSerialNo`
- 完成 `PENDING / PROCESSING / NEED_AUTH / SUCCESS / FAILED` 状态流转
3. `完成认证中心后端接口`
- 查询认证状态
- 短信验证码
- 短信登录
- 扫码二维码和扫码状态查询
4. `完成前端开票确认和认证交互`
- 开票确认弹窗
- 短信认证弹窗
- 扫码认证弹窗
- 认证完成后继续原任务
5. `完成开票任务列表和详情页`
- 展示任务状态、失败原因、票号信息
- 支持查看任务明细
二期验收结果:
- 能从待开票列表发起真实开票
- 遇到认证时可以完成短信或扫码认证
- 认证后可以继续原任务
- 能看到任务状态和开票结果
### 第三期:回调、补偿、稳定性收口
目标:把“结果同步、失败补偿、重试、运维可见性”补齐,让系统进入可持续使用状态。
三期任务包建议:
1. `完成票通回调接收`
- 新增回调接口
- 完成验签、去重、状态更新
2. `完成主动查询补偿`
- 定时查询处理中任务
- 补齐回调未达或超时场景
3. `完成业务系统结果回写和补偿`
- 开票成功/失败回写业务系统
- 回写失败时记录补偿状态并支持重试
4. `完成任务重试和异常处理`
- 支持失败任务重试
- 保证原幂等号复用
- 明确错误提示和异常留痕
5. `完成页面收口和交付文档`
- 页面细节优化
- 状态文案统一
- 补一份联调说明和部署说明
三期验收结果:
- 开票结果可以通过回调或主动查询最终落定
- 结果能稳定回写业务系统
- 失败任务可以重试
- 系统具备基本可运维性
### 给 Codex 的推荐下发方式
后续你可以直接按下面这种方式给 Codex 发任务:
- `按一期第 1 个任务包做,只做菜单、路由和 4 个页面骨架,不做接口`
- `按一期第 3 个任务包做,只打通待开票列表前后端,不碰票通`
- `按二期第 3 个任务包做,只做认证中心后端接口和页面交互`
- `按三期第 2 个任务包做,只做处理中任务的主动查询补偿`
这样做最适合 Codex
- 单次上下文更清晰
- 改动范围更集中
- 验证更容易
- 出问题时也更容易回退和继续推进