# 员工亲属关系导入 API 文档

## 概述

员工亲属关系导入模块提供员工亲属关系的批量导入功能。

**基础路径**: `/ccdi/staffFmyRelation`

**权限标识前缀**: `ccdi:staffFmyRelation`

**数据表**: `ccdi_cust_fmy_relation`

**关联表**:

- `ccdi_base_staff` - 员工基础信息表(通过id_card关联)

---

## API 接口

### 1. 异步导入员工亲属关系

**接口地址**: `POST /ccdi/staffFmyRelation/importData`

**权限要求**: `ccdi:staffFmyRelation:import`

**请求参数**: FormData

| 参数名           | 类型      | 必填 | 说明                  |
|---------------|---------|----|---------------------|
| file          | File    | 是  | Excel文件             |
| updateSupport | Boolean | 否  | 是否更新已存在的记录(默认false) |

**响应示例**:

```json
{
  "code": 200,
  "msg": "导入任务已提交,正在后台处理",
  "data": {
    "taskId": "abc123-def456-ghi789",
    "status": "PROCESSING",
    "message": "导入任务已提交,正在后台处理"
  }
}
```

**导入流程**:

1. 上传Excel文件
2. 后台立即返回taskId
3. 使用taskId轮询查询导入状态
4. 导入完成后查看失败记录(如有)

**导入验证规则**:

导入时会验证以下字段：

| 字段名     | 验证规则                             | 错误提示                                |
|---------|----------------------------------|-------------------------------------|
| 员工身份证号  | 必须在员工信息表(ccdi_base_staff)中存在     | "第N行: 身份证号[XXX]不存在于员工信息表中，请先添加员工信息" |
| 关系类型    | 不能为空，必须在字典中存在                    | "第N行: 关系类型不能为空"                     |
| 关系人姓名   | 不能为空                             | "第N行: 关系人姓名不能为空"                    |
| 关系人证件类型 | 不能为空                             | "第N行: 关系人证件类型不能为空"                  |
| 关系人证件号码 | 不能为空                             | "第N行: 关系人证件号码不能为空"                  |
| 手机号码1   | 如果填写，必须为有效手机号                    | "第N行: 手机号码1格式不正确"                   |
| 手机号码2   | 如果填写，必须为有效手机号                    | "第N行: 手机号码2格式不正确"                   |
| 性别      | 如果填写，必须是"男"、"女"、"其他"或"M"、"F"、"O" | "第N行: 性别只能是：男、女、其他 或 M、F、O"         |

**性能优化**:

- 采用批量预验证方式，仅1次数据库查询身份证号存在性
- 批量查询已存在的身份证号+关系人证件号码组合，避免重复导入

---

### 2. 查询导入状态

**接口地址**: `GET /ccdi/staffFmyRelation/importStatus/{taskId}`

**权限要求**: `ccdi:staffFmyRelation:import`

**路径参数**:

| 参数名    | 类型     | 必填 | 说明     |
|--------|--------|----|--------|
| taskId | String | 是  | 导入任务ID |

**响应示例**:

```json
{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "taskId": "abc123-def456-ghi789",
    "status": "COMPLETED",
    "total": 100,
    "successCount": 95,
    "failureCount": 5,
    "message": "导入完成"
  }
}
```

**状态说明**:

| 状态              | 说明   |
|-----------------|------|
| PENDING         | 等待处理 |
| PROCESSING      | 处理中  |
| SUCCESS         | 全部成功 |
| PARTIAL_SUCCESS | 部分成功 |
| FAILED          | 处理失败 |

---

### 3. 查询导入失败记录

**接口地址**: `GET /ccdi/staffFmyRelation/importFailures/{taskId}`

**权限要求**: `ccdi:staffFmyRelation:import`

**路径参数**:

| 参数名    | 类型     | 必填 | 说明     |
|--------|--------|----|--------|
| taskId | String | 是  | 导入任务ID |

**响应示例**:

```json
{
  "code": 200,
  "msg": "查询成功",
  "data": [
    {
      "personId": "999999999999999999",
      "relationType": "父亲",
      "relationName": "张三",
      "relationCertType": "身份证",
      "relationCertNo": "110101195501017890",
      "errorMessage": "第2行: 身份证号[999999999999999999]不存在于员工信息表中，请先添加员工信息",
      "rowNumber": 2
    }
  ]
}
```

**失败记录字段说明**:

| 字段名              | 类型      | 说明      |
|------------------|---------|---------|
| personId         | String  | 员工身份证号  |
| relationType     | String  | 关系类型    |
| relationName     | String  | 关系人姓名   |
| relationCertType | String  | 关系人证件类型 |
| relationCertNo   | String  | 关系人证件号码 |
| errorMessage     | String  | 错误信息    |
| rowNumber        | Integer | Excel行号 |

---

## Excel 模板字段说明

| 字段名     | 是否必填 | 说明          |
|---------|------|-------------|
| 员工身份证号  | 是    | 必须在员工信息表中存在 |
| 关系类型    | 是    | 下拉选择字典      |
| 关系人姓名   | 是    | 不能为空        |
| 性别      | 否    | 下拉选择字典      |
| 出生日期    | 否    | 日期格式        |
| 关系人证件类型 | 是    | 下拉选择字典      |
| 关系人证件号码 | 是    | 不能为空        |
| 手机号码1   | 否    | 手机号格式       |
| 手机号码2   | 否    | 手机号格式       |
| 微信名称1-3 | 否    | 自由输入        |
| 详细联系地址  | 否    | 自由输入        |
| 关系详细描述  | 否    | 自由输入        |
| 生效日期    | 否    | 日期格式        |
| 失效日期    | 否    | 日期格式        |
| 备注      | 否    | 自由输入        |

---

## 错误码说明

| 错误码 | 说明    |
|-----|-------|
| 200 | 操作成功  |
| 401 | 未授权   |
| 403 | 无权限   |
| 500 | 服务器错误 |

---

## 更新日志

**2026-02-11**:

- 新增员工身份证号存在性校验
- 优化导入性能，采用批量预验证方式
