Files
shanxia2.0/docs/crm-migration/plans/contract/07-restart-checkpoint.md
T
2026-06-01 08:21:21 +08:00

6.7 KiB
Raw Blame History

合同管理模块 — 重写移植断点记录

日期: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/ 保留作翻译权威源

已知阻塞(下一步机械适配前)

  1. 拷贝页使用 @/utils/request、useDict、v-hasPermi — 需按 ref-lessons-learned.md 适配 shanxia2.0
  2. CustomerDetailDialog.vue 仍 import @/api/crm/contract/types — 步骤 9 已补全 types.ts 并接通跨模块引用
  3. 合同 API 路由已全部移除 — 列表/详情请求会 404,属预期 — 步骤 16–19 已恢复 GET /contract/list 与 GET /contract/{id}
  4. ToContractDialog 转合同后端暂不可用 — 步骤 26 已恢复 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;已补 CrmContractProductPriceTier Model)

阶段 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。