6.7 KiB
6.7 KiB
合同管理模块 — 重写移植断点记录
日期:2026-05-31
状态:阶段 E 已完成(步骤 28 代码验收 + 文档更新;联调手测见08-verify.md)
原则:业务逻辑先梳理再开发;Java → Python 逐行翻译;HTTP 语义对齐原 CRM(GET/PUT/DELETE),不强制门户 POST 约定
已完成
| 项 | 说明 |
|---|---|
| 删除后端 | contract.py、contract_approval.py、contract_product.py、contract_change.py、contract_template.py、crm_contract_routes.py、crm_contract_sub_routes.py、对应 schemas/crm/contract*.py |
| 删除前端 | views/crm/contract/、api/crm/contract/、useContractPerm.ts、migrate-contract-*.py |
| 拷贝前端 | 自 shanxia/crm/web/src/views/crm/contract/ 与 api/crm/contract/ 原样覆盖 |
| 路由保留 | sqxp.ts 中 contract 相关路由未动 |
| ORM 保留 | backend/app/models/crm_models.py 中 CrmContract* 模型保留(映射已有表) |
| 报价转合同 | quote.to_contract 已恢复,调用 create_from_quote |
| Java 快照 | docs/crm-migration/reference/java/contract/ 保留作翻译权威源 |
已知阻塞(下一步机械适配前)
- 拷贝页使用
@/utils/request、useDict、v-hasPermi— 需按ref-lessons-learned.md适配 shanxia2.0 — 步骤 9 已补全CustomerDetailDialog.vue仍 import@/api/crm/contract/typestypes.ts并接通跨模块引用合同 API 路由已全部移除 — 列表/详情请求会 404,属预期— 步骤 16–19 已恢复GET /contract/list与GET /contract/{id}— 步骤 26 已恢复ToContractDialog转合同后端暂不可用to_contract
28 步实施方案(续做从此勾选)
阶段 A:业务梳理(不写代码)
- 1 阅读
CrmContractController.java+ICrmContractService.java,导出完整接口矩阵到04-api-spec.md(含 HTTP 方法) | ✅ 2026-05-31 - 2 阅读
CrmContractServiceImpl.buildQueryWrapper,写 Tab/联合搜索/审批子查询中文说明 →02-business-logic.md| ✅ 2026-05-31 - 3 梳理状态机:draft → approving → approved → executing → finished;invalid 分支与删除约束 | ✅
02-business-logic.md§10(2026-05-31) - 4 梳理审批流:
crm_contract_approval多步、is_current、canApprove| ✅02-business-logic.md§4、§10.4(2026-05-31) - 5 对比
docs/sql/sx.sql与shanxia2.0.sql的crm_contract*字段差异,列 DDL 清单 | ✅03-ddl-diff.md+incremental_crm_contract_rewrite.sql(2026-05-31) - 6 标注跨模块调用:
updateReceivedAmount、updateInvoiceAmount、回款/开票 Service 触发点 | ✅05-cross-module-calls.md(2026-05-31)
阶段 B:前端 OpenSpec 适配(功能对齐,列表页 Fresh Mint)
- 7 API + 列表页 Fresh Mint:
@/utils/http+/web/crm/contract(Java GET/PUT/DELETE 语义);types.ts;useContractPerm;index.vue按 quote 骨架改造 | ✅ 2026-05-31 - 8 拷贝页全局替换:
useDict→dictStore;proxy.$modal→$modal;移除 RuoYi 专有 import(含 OSS →crm-attachment、产品 API 路径、exportContract) | ✅ 2026-05-31 - 9 补
types.ts(主合同 + 变更/模板/审批子类型 +CreateFromQuoteForm);CustomerDetailDialog/ToContractDialog跨模块引用@/api/crm/contract/types| ✅ 2026-05-31 - 10 权限:
v-hasPermi→useContractPerm(列表/详情/变更/模板/审批子页 + menuCode 对齐 04-api-spec) | ✅ 2026-05-31 - 11 依赖组件:
CustomerDetail、ImagePreview、TinyMceEditor、QuoteSelector路径核对 | ✅ 2026-05-31 - 12
pnpm dev编译通过,合同列表页可打开(API 可报错) | ✅ 2026-05-31
阶段 C:DDL
- 13 输出
docs/sql/incremental_crm_contract_rewrite.sql| ✅ 2026-05-31(见03-ddl-diff.md;须在测试库手动执行) - 14 测试库执行 DDL,核对 Model 字段顺序与 SQL 一致 | ✅ 2026-05-31(用户已执行 SQL;已补
CrmContractProductPriceTierModel)
阶段 D:后端逐段翻译(对齐原 CRM HTTP)
Java 快照:docs/crm-migration/reference/java/contract/
- 15 新建
schemas/crm/contract.py(Bo/Vo 字段与 Java 一致) | ✅ 2026-05-31 - 16
buildQueryWrapper+queryPageList+canApprove→crud/crm/contract.py| ✅ 2026-05-31 - 17
queryById+ 产品明细 + 供方名称 enrichment | ✅ 2026-05-31 - 18
insertByBo/updateByBo/deleteWithValidByIds| ✅ 2026-06-01 - 19
crm_contract_routes.py:注册GET /crm/contract/list等(不用门户 POST 包装,或双轨:原路径 + 网关转发) | ✅ 2026-05-31(list + detail);2026-06-01 全量写/审批/统计路由 - 20 审批:
submitApproval/batch/withdraw+contract_approval.py| ✅ 2026-06-01 - 21 状态:
startExecute/finishContract/invalidContract| ✅ 2026-06-01 - 22 附件:
uploadFile/uploadAttachmentsWithCategory| ✅ 2026-06-01 - 23 统计:
statisticsOverview/ByStatus/ByType/Trend/queryExpiring| ✅ 2026-06-01 - 24 扩展:
renewContract/createFromQuote/export;signContract/batchAssign/downloadPdf/createFromOpportunity| ✅ 2026-06-01 - 25 子模块路由(按需):change / template / approval 独立页 →
crm_contract_sub_routes.py(含 CRUD、export、transfer) | ✅ 2026-06-01 - 26 恢复
quote.to_contract调用create_from_quote| ✅ 2026-06-01
阶段 E:UI Fresh Mint + 验收
- 27
index.vue+ 4 对话框 Fresh Mint(参照quote/index.vue) | ✅ 2026-05-31(4 子对话框 + 修复handlePrintContract模板损坏) - 28 手测 Tab/筛选/审批/执行/作废/导出;更新
module-status.md| ✅ 2026-05-31(08-verify.md代码项 ✅;浏览器手测待联调)
新会话续做粘贴模板
继续合同管理重写移植。
断点文档:docs/crm-migration/plans/contract/07-restart-checkpoint.md
当前步骤:__ / 28
业务逻辑速查(步骤 A 展开版见 02-business-logic.md)
| 操作 | 前置状态 | 结果状态 |
|---|---|---|
| 提交审批 | draft | approving + approval pending 记录 |
| 撤回 | approving | draft + 删 pending 审批 |
| 开始执行 | approved | executing |
| 完成 | executing | finished |
| 作废 | 非 finished | invalid |
| 删除 | draft | 软删 |
无合同专用定时任务;回款/开票金额回写由其它 Service 调用 updateReceivedAmount / updateInvoiceAmount。