# 保单PDF完整URL（OSS直链）

**日期**: 2026-03-23 19:40
**影响**: 管理端 + 小程序端
**已部署**: 测试服务器 ✅

---

## 核心变更：保单现在有完整的 `.pdf` OSS链接

每份保险保单投保成功后，系统自动下载PDF并上传到OSS，保存为 `policyPdfUrl` 字段。

**URL示例**: `https://hlgl-test.oss-cn-beijing.aliyuncs.com/test/insurance/policy/2026/03/23/policy_2036026235003478018.pdf`

前端直接用这个URL打开/下载PDF即可，**不需要调Base64接口**。

---

## 管理端

### 保险保障接口（已有）
```
GET /admin/insurance/coverage/{orderId}
```

返回的 `insuranceOrders[]` 每条新增 `policyPdfUrl` 字段：

```json
{
  "insuranceOrders": [
    {
      "insuranceOrderId": "2036026309016166401",
      "productName": "保游未来星研学旅行保险",
      "planName": "30万计划",
      "extPolicyNo": "11209006600506820271",
      "startDate": "2026-04-03",
      "endDate": "2026-04-05",
      "status": "INSURED",
      "policyPdfUrl": "https://hlgl-test.oss-cn-beijing.aliyuncs.com/test/insurance/policy/2026/03/23/policy_2036026309016166401.pdf"
    }
  ]
}
```

### 前端展示建议
在每个保险卡片上加 **"查看保单"** 按钮：
```javascript
window.open(item.policyPdfUrl)  // 直接打开PDF
```

---

## 小程序端

### 订单详情出行人保险数据

订单详情 `travelers[].insurancePolicies[]` 每条包含：

| 字段 | 类型 | 说明 |
|------|------|------|
| insuranceOrderId | String | 保险订单ID |
| productName | String | 保险产品名称 |
| planName | String | 保险计划名称 |
| extPolicyNo | String | 保单号 |
| startDate | String | 保障开始日期 |
| endDate | String | 保障结束日期 |
| status | String | INSURED=已承保, CANCELLED=已退保 |
| statusLabel | String | 中文状态 |
| totalPremium | String | 保费 |
| **policyPdfUrl** | **String** | **保单PDF的OSS完整链接（.pdf结尾，直接可访问）** |
| policyPdfApi | String | 备用：Base64下载接口路径 |

### 小程序展示建议

出行人信息下方展示保单卡片，点击"查看保单"用 `wx.downloadFile` + `wx.openDocument`：

```javascript
wx.downloadFile({
  url: item.policyPdfUrl,
  success(res) {
    wx.openDocument({ filePath: res.tempFilePath, fileType: 'pdf' })
  }
})
```

### 一个出行人多份保单

一个出行人可能有多份保单（覆盖不同日期段），`insurancePolicies` 是数组，按保障期间展示即可：

```
米明光
├── 保游未来星研学旅行保险 20万计划
│   保障期间：2026-03-31 ~ 2026-04-02  [查看保单]
└── 保游未来星研学旅行保险 30万计划
    保障期间：2026-04-03 ~ 2026-04-05  [查看保单]
```

---

## 旧数据

所有历史保单的PDF已补传完成，`policyPdfUrl` 已全部填充。
