Files
shanxia2.0/docs/crm-migration/plans/quote/06-steps.md
T
2026-06-01 08:21:21 +08:00

112 lines
4.6 KiB
Markdown
Raw 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.
# 报价单管理模块迁移方案 — 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 真实数据)