# 报价单管理模块迁移方案 — 06 分步实施计划 > **范围**:报价单 **全量功能**(含 PDF、分享、转合同、统计、导出),无 MVP 裁剪。 > **快照**:每步 **Sub-step 0** 执行 `snapshot-java.sh`,只拷本步文件(见 `reference/java/README.md`)。 > **完成标准**:`04-api-spec.md` 对应行 ✅ + 该步手测通过。 --- ## 阶段 A:方案(已完成) | 步骤 | 内容 | 状态 | |------|------|------| | A1 | `01` / `04` / `05` / `06` + 前置方案 | ✅ | | A2 | 决策:供方同步 + 合同 create 先行 + 全量功能 + 按需快照 | ✅ | --- ## 阶段 P0:供方信息 `crm_supplier_info` > 详案:`plans/supplier-info/01-overview.md` > **阻塞**:报价单 C4(新增)及编号生成。 | 步骤 | Sub-step 0 快照 | 实施 | 完成标准 | |------|-----------------|------|----------| | P0-1 | `supplier-info` Controller + ServiceImpl + domain + mapper | DDL + Model + Schema + CRUD + API(list/listAll/detail/add/update/delete/export) | ✅ 2026-05-31 | --- ## 阶段 P1:合同 create(报价转合同前置) > 详案:`plans/contract/01-prerequisite-create-for-quote.md` > **阻塞**:报价单 C14(转合同)。 | 步骤 | Sub-step 0 快照 | 实施 | 完成标准 | |------|-----------------|------|----------| | P1-1 | `contract` Controller + ContractServiceImpl + ProductServiceImpl + Bo/Entity | `crm_contract` 字段补全 + `crm_contract_product` DDL + `create_contract`(含产品 batch) | ✅ 2026-05-31 | --- ## 阶段 P2:报价单后端(全量 C1–C16) ### P2-0 基础设施 | 步骤 | 快照 | 实施 | 状态 | |------|------|------|------| | B1 | — | `incremental_crm_quote.sql`(4 表) | ✅ | | B2 | `domain/CrmQuote*.java` | Model + Schema 骨架 | ✅ | ### P2-1 对照翻译 每步:**0 快照 → 1 写 Python → 2 打 ✅** | 步骤 | Sub-step 0 快照(示例命令) | 翻译范围 | 04-api | |------|----------------------------|----------|--------| | C1 | `quote service/impl/CrmQuoteServiceImpl.java`(整文件,首拷) | `buildQueryWrapper` + `list` + `canApprove` + `fillContractLinkedCount` | #1 | | C2 | 同上(已快照则跳过) | `queryById` | #2 | | C3 | `quote service/impl/CrmQuoteProductServiceImpl.java` + mapper | 产品 CRUD + batchInsert/deleteByQuoteId | product | | C4 | `quote` ServiceImpl + **`product` `CrmProductServiceImpl.resolveProductIdForQuoteItem`** | `insertByBo` + 编号 + 金额 | #3 | | C5 | `quote` ServiceImpl | `updateByBo` + `deleteWithValidByIds` | #4-5 | | C6 | `quote` ServiceImpl + `quote` ApprovalServiceImpl | `submitQuote` + `createApprovalRecords` | #6 | | C7 | `quote` Approval* + `resources/mapper/crm/CrmQuoteApprovalMapper.xml` | 审批 list + approve | approval #1-2 | | C8 | `quote` ApprovalServiceImpl | withdraw + canUserApprove | approval #3-4 | | C9 | `quote` ServiceImpl | accept / reject / invalid | #12-13, #22 | | C10 | `quote` ServiceImpl | newVersion + versions | #15-16 | | C11 | `quote` ServiceImpl | saveTemplate + getTemplate | #7-8 | | C12 | `quote` PdfServiceImpl + `resources/templates/quote-pdf.html` | generatePdf → MinIO | #9 | | C13 | `quote` ServiceImpl + ShareLogServiceImpl | generateShare + 公开 share + shareLog | #10-11, shareLog | | C14 | `quote` ServiceImpl `toContract` + **P1 已实现的 contract create** | 转合同联调 | ✅ 2026-05-31 | | C15 | `quote` ServiceImpl | statistics ×3 | #18-20 | | C16 | `quote domain/vo/CrmQuoteVo.java` | export + `QUOTE_EXPORT_COLUMNS` | #17 | **C4 额外快照**(产品解析,非报价目录): ```bash ./docs/crm-migration/scripts/snapshot-java.sh product \ service/impl/CrmProductServiceImpl.java ``` **C13 公开路由**:`GET /api/public/crm/quote/share/{shareCode}`(无 JWT)。 --- ## 阶段 P3:前端 ✅(2026-05-31) | 步骤 | 内容 | 说明 | 状态 | |------|------|------|------| | D1 | 拷贝 `views/crm/quote/` + API | 与线索/商机相同 | ✅ | | D2 | POST + `/web/crm/quote/*` | 对齐 `04-api-spec` | ✅ | | D3 | Fresh Mint + 组件适配 | DictTag / ListPagination / modal shim | ✅ | | D4 | `useQuotePerm` | menu-codes | ✅ | 可与 P2 C1 之后并行联调。 --- ## 阶段 P4:验证 | 步骤 | 内容 | |------|------| | E1 | `07-verify.md` 全功能清单(含 PDF/分享/转合同) | | E2 | 状态机全路径手测 | | E3 | `check_field_consistency.py` | | E4 | 更新 `module-status.md` | --- ## 禁止 - ❌ 暂缓 PDF / 分享 / 转合同 - ❌ 方案阶段全量快照 Java(探索性 `quote/` 目录保留即可,不作为「已实施」依据) - ❌ 供方默认写死 SX(须 P0 真实数据)