# 员工亲属关系维护双 Sheet 导入后端实施计划

## 目标
- 将员工亲属关系维护导入模板改为双 Sheet：
  - `员工亲属关系信息`
  - `亲属资产信息`
- 将导入提交入口统一到 `/ccdi/staffFmyRelation/importData`。
- 统一补充失败记录定位字段，支持前端展示 `Sheet / Excel行号 / 失败原因`。

## 实施内容
- Controller 调整
  - `CcdiStaffFmyRelationController#importTemplate` 改为输出双 Sheet 模板，模板文件名统一为“员工亲属关系维护导入模板”。
  - `CcdiStaffFmyRelationController#importData` 一次读取两个 Sheet。
  - 按有数据的 Sheet 分别提交亲属关系导入任务和亲属资产导入任务。
  - 返回新的提交结果 VO，包含 `relationTaskId`、`assetTaskId` 和提示文案。
- VO 调整
  - `StaffFmyRelationImportFailureVO` 增加 `sheetName`、`rowNum`。
  - `AssetImportFailureVO` 增加 `sheetName`、`rowNum`。
  - 新增 `StaffFmyRelationImportSubmitResultVO`。
- 导入服务调整
  - `CcdiStaffFmyRelationImportServiceImpl` 失败记录写入固定 `sheetName=员工亲属关系信息`，并记录 Excel 数据行号。
  - `CcdiAssetInfoImportServiceImpl` 失败记录写入固定 `sheetName=亲属资产信息`，并记录 Excel 数据行号。
- 兼容策略
  - 保留原 `CcdiAssetInfoController` 的状态查询与失败记录查询接口，前端继续复用原有资产任务轮询与失败记录查看能力。

## 验证
- 后端优先验证：
  - `CcdiStaffFmyRelationControllerTest`
  - `CcdiAssetInfoControllerTest`
- 编译验证：
  - `mvn -pl ccdi-info-collection -am -Dmaven.test.skip=true compile`

## 影响范围
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiStaffFmyRelationController.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiStaffFmyRelationImportServiceImpl.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoImportServiceImpl.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/StaffFmyRelationImportFailureVO.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/AssetImportFailureVO.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/StaffFmyRelationImportSubmitResultVO.java`
