59 lines
2.1 KiB
Markdown
59 lines
2.1 KiB
Markdown
# 合同 create — 报价单前置(P1)
|
||
|
||
> **角色**:支撑报价单 **转合同**(`CrmQuoteServiceImpl.toContract`)及 `ToContractDialog`。
|
||
> **范围**:仅实现 **create 闭环**,不含合同审批/变更/模板等完整合同模块。
|
||
|
||
---
|
||
|
||
## 须对齐的 Java
|
||
|
||
| 文件 | 方法 |
|
||
|------|------|
|
||
| `CrmContractController.java` | `POST /` → `insertByBo` |
|
||
| `CrmContractServiceImpl.java` | `insertByBo`(主表 + 产品明细) |
|
||
| `CrmContractProductServiceImpl.java` | `batchInsert` / 明细保存 |
|
||
|
||
报价单转合同调用链(快照 `CrmQuoteServiceImpl.toContract` 时一并阅读):
|
||
|
||
1. 校验报价单 `accepted`、有产品、未转过
|
||
2. 组装 `CrmContractBo` + `CrmContractProductBo` 列表
|
||
3. `contractService.insertByBo`
|
||
4. 回写报价单 `status=contract`、`contract_id`
|
||
|
||
## 涉及表(最小集)
|
||
|
||
| 表 | 说明 |
|
||
|----|------|
|
||
| `crm_contract` | 门户已有简化 Model,须补字段 + create CRUD |
|
||
| `crm_contract_product` | **须新建** DDL |
|
||
|
||
其余合同表(approval/change/template…)**本阶段不做**。
|
||
|
||
## 门户 API(最小)
|
||
|
||
| 门户 | 说明 |
|
||
|------|------|
|
||
| POST `/web/crm/contract/add` | 对齐 Java `insertByBo` |
|
||
| POST `/web/crm/contract/detail` | 转合同后可选查看 |
|
||
| POST `/web/crm/contract/product/list` | 明细(若前端需要) |
|
||
|
||
`toContract` 在报价单 CRUD 内调用 `create_contract_from_bo(...)`,不暴露为独立合同「从报价创建」路由亦可(与 Java 内联调用一致)。
|
||
|
||
## 快照清单(P1-1 实施前执行)
|
||
|
||
```bash
|
||
./docs/crm-migration/scripts/snapshot-java.sh contract \
|
||
controller/CrmContractController.java \
|
||
service/impl/CrmContractServiceImpl.java \
|
||
service/impl/CrmContractProductServiceImpl.java \
|
||
domain/CrmContract.java \
|
||
domain/CrmContractProduct.java \
|
||
domain/bo/CrmContractBo.java \
|
||
domain/bo/CrmContractProductBo.java
|
||
```
|
||
|
||
## 完成标准
|
||
|
||
- [x] 可从 Python 传入与 Java `toContract` 相同语义的 Bo,创建合同 + 产品行
|
||
- [ ] 报价单 `C14 转合同` 可联调(在报价单全量功能范围内,**不可 stub**)
|