# 【行为变更·司机H5+管理后台】司机审核驳回短信接通知中心真发上线,H5 驳回后原链接可重提

> 服务:hl-fleet-service(8087) + hl-user-service(8081/8181) | 分支:dev-v3 | PR:#3715(主) #3720 #3722(hotfix) | 工单:#3713
> 已部署测试服并 E2E 实测通过(2026-06-12):驳回短信经阿里云真实发出(模板 SMS_507190242),驳回后原链接重提回待审

## ⚠️ 关键说明

1. **驳回短信从「日志桩」变成「真发」**:此前 `LogStubNotificationServiceImpl` 只打日志、司机实际收不到任何短信;现在车管驳回司机档案申请时,系统经通知中心给司机手机号真实发送阿里云短信(签名「呼籁旅行」)。**测试环境驳回操作会真发短信,联调时请用可控手机号**。
2. **H5 行为变更(前端可感知)**:司机被驳回后用**原链接**重新打开/修改/提交,不再返回 `600302「邀请链接已使用」`——init/ocr/submit 全放行;重提成功后该申请单回到待审状态。**hl-ui 司机 H5 若对 600302 有特判文案/拦截页,请确认驳回场景不再命中**(600302 现在仅 approved 终态返回)。
3. **短信文案**(阿里云已过审模板,变量 ≤2):`${name}您好,您提交的司机档案审核未通过,原因:${reason},请重新打开原链接修改后提交。`
4. ⚠️ **阿里云模板变量 name 是[个人姓名]类型,有姓名规范校验**:实测非规范姓名(如带后缀的测试名)被拒发 `isv.TEMPLATE_PARAMS_ILLEGAL`。蒙古族长名/带「·」的姓名是否在规范内待实测,有拒发风险——拒发时业务不受影响(驳回正常生效),仅短信缺失,`notification_send_log` 留痕 status=1。

## 1. 管理后台行为变更(无接口契约变化)

| 场景 | 旧行为 | 新行为 |
|---|---|---|
| 驳回 `POST /admin/fleet/drivers/pending/{id}/reject` | 仅日志,司机无感 | 落库后异步发短信(姓名+驳回原因,原因超 30 字短信内截断,完整原因仍在申请单详情) |
| 司机重提后 | 不可能发生(链接被 600302 拦死) | 申请单**回到待审列表**(reviewStatus=pending),驳回原因/审核人/审核时间清空,可再次审核 |
| 同一申请单 60 秒内重复驳回 | — | 第二次短信被幂等抑制(只发一条),驳回本身正常 |

## 2. 司机 H5 行为变更

| 场景 | 旧行为 | 新行为 |
|---|---|---|
| 驳回后打开原链接 | init 可看,但 ocr/提交返回 `600302` | 全流程放行,可修改后重新提交 |
| 重提成功 | — | 返回 200 + pendingId(同一条申请单覆盖更新) |
| 审核通过(approved)后打开原链接 | `600302` | 不变,仍 `600302`(唯一终态) |

### 重提请求示例(与首次提交完全一致,无新参数)

```bash
curl -k -X POST "https://web.test.1814.love:9443/app/h5/driver-onboard/submit/new" \
  -H "Content-Type: application/json" \
  -d '{"token":"{原链接token}","name":"张三","phone":"13812341234","gender":"1"}'
```

## 3. 后端内部变更(前端无需关注,备查)

1. `NotificationEventMessage` 新增 `phone` 字段(directPhone 收件通道,给非 C 端/非员工的裸手机号收件人发短信,当前仅 SMS 通道消费)。
2. 通知中心 SMS 通道支持裸手机号:`phone` 优先,无则按原 `userId` 反查,双空跳过。
3. 新增事件码 `DRIVER_REVIEW_REJECTED`(Flyway V20260612_001 种子,模板码 SMS_507190242 已回填)。
4. fleet 新增错误码 `605701`(通知中心降级,业务旁路不阻断驳回)。
5. 发录入链接短信(DRIVER_ONBOARD_LINK_SENT)**未上线**——当前代码无「发送链接」动作,待重发端点立项时一并落地。
