# 合同方案删除「管辖法院/仲裁委员会/争议解决方式」3 字段

> **服务**: hl-order-service-v2 (8094)
> **PR**: #1929
> **Issue**: #1928
> **日期**: 2026-05-09
> **影响范围**: admin「合同管理 → 合同方案」编辑/新增弹窗

---

## ⚠️ 关键变化

合同方案弹窗删除以下 3 个字段, **前端必须同步删 form item 否则保存接口会 400**:
- `disputeResolution` 争议解决方式 (1=诉讼 / 2=仲裁)
- `tribunalName` 仲裁委员会
- `litigationCourt` 管辖法院

travel_agency 表已有 `tribunal_name` `litigation_court` 字段, 合同生成时自动从所选旅行社读取, 用户不再需要在合同方案里重复填。

---

## 一、背景

代码 `ContractCreateService.java:1179` 注释明确写:
> 业务规则(2026-05-04 用户反馈): 合同方案表单移除"管辖法院"输入(走 agency 自动兜底)

历史改动只补了 fallback 逻辑没真删字段, 导致合同方案弹窗仍要求填这些字段, 用户多次反馈。本次彻底清理。

---

## 二、变更接口清单

| # | 接口 | 方法 | 路径 | 变更类型 |
|---|------|------|------|----------|
| 1 | 创建合同方案 | POST | `/admin/contract/scheme` | 请求体删 3 字段 |
| 2 | 更新合同方案 | PUT | `/admin/contract/scheme/{schemeId}` | 请求体删 3 字段 |
| 3 | 查询启用方案列表 | GET | `/admin/contract/scheme/list` | 响应体删 3 字段 |
| 4 | 查询单个方案 | GET | `/admin/contract/scheme/{id}` | 响应体删 3 字段 |

---

## 三、ContractSchemeRequest 入参变化

### 删除字段 (必删)

```java
// 删除前
private Integer disputeResolution;  // @Min(1) @Max(2)
private String tribunalName;        // @Size(max=100)
private String litigationCourt;     // @Size(max=100)
```

前端 form 必须删除对应 input/radio。如果前端继续传这 3 个字段, Spring 反序列化会忽略(因为 DTO 上没有), 但建议同步删除 UI 避免误导用户。

### 保留字段(关键)

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `schemeName` | String | ✅ | 方案名称 |
| `contractPlatform` | String | ✅ | 合同平台 (12301 / TENCENT_ESIGN) |
| `contractTemplateCode` | String | ✅ | 合同模板编码 |
| `agencyCode` | String | ❌ | 旅行社编码(不填走支付商户号自动匹配) |
| `transactorName` | String | ❌ | 经办人姓名 |
| `transactorPhone` | String | ❌ | 经办人电话 |
| `signatoryMode` | Integer | ❌ | 签署模式 |
| `contractMode` | String | ❌ | 签约模式 |
| `supplementaryClause` | String | ❌ | 补充条款 |

---

## 四、ContractSchemeVO 响应变化

响应体删除:
```json
// 修复前
{ "disputeResolution": 2, "tribunalName": "呼伦贝尔仲裁委员会", "litigationCourt": "海拉尔区人民法院", ... }

// 修复后
{ "schemeName": "...", "contractPlatform": "12301", ... }  // 3 字段消失
```

如果前端编辑表单的 echo 逻辑里取了这 3 个值, 改成不取(或对不存在字段做容错)。

---

## 五、合同生成兜底逻辑(后端自动, 前端无感)

走 12301 / 腾讯电子签生成合同时, 法律字段从所选 agency 读:

| 字段 | 兜底链 |
|---|---|
| 仲裁委员会 | `agency.tribunal_name` → 常量「呼伦贝尔仲裁委员会」 |
| 管辖法院 | `agency.litigation_court` → 常量「海拉尔区人民法院」 |
| 争议解决方式 | 默认 `2` (仲裁) |

travel_agency 表已存 `tribunal_name` `litigation_court`, admin「公司管理」编辑该公司时填写。

---

## 六、前端 mmg 改造点

### 文件: `hl-ui/src/views/contract/scheme/...`(合同方案弹窗)

1. **删除 3 个 form item**:
   - "争议解决方式" radio (1=诉讼 / 2=仲裁)
   - "仲裁委员会" input
   - "管辖法院" input
2. **submit 时不传** `disputeResolution / tribunalName / litigationCourt`
3. **echo 时不取** 这 3 个字段(响应体没有了, 取了会 undefined)
4. 弹窗变得更简洁(只剩方案名、合同平台、模板、签约/签署模式、旅行社、补充条款)

### 测试服 API 验证 (2026-05-09 21:25)

| Case | 实测 |
|---|---|
| `GET /admin/contract/scheme/list` | 200, 响应体已无 3 字段 |
| DB `SHOW COLUMNS FROM contract_scheme` | 3 列已 DROP, V20260510_001 success=1 |
| 合同生成走 12301 | tribunal/court 走 agency 字段, dispute 默认 2(仲裁), 单测 `disputeResolutionNull_fallbackToArbitration2` 验证通过 |

---

## 七、不在本 PR 范围

- travel_agency 加 `dispute_resolution` 字段(让公司维度可配)留后续工单
- 历史 contract_scheme 表 3 列值随 DROP COLUMN 丢失(业务上 agency 兜底, 不影响)
- 已签合同的渲染不受影响(渲染走快照, 此次只改新建合同的字段来源)

---

**联系人**: wx
