From ee31f74aef997aa98d86a8644ab0e16b972ec03f Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Fri, 13 Mar 2026 16:07:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=B5=84=E4=BA=A7=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=8B=86=E5=88=86=E5=BD=93=E5=89=8D=E8=BF=9B=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CcdiAssetInfoController.java | 24 +- .../domain/excel/CcdiAssetInfoExcel.java | 4 +- .../mapper/CcdiAssetInfoMapper.java | 8 + .../impl/CcdiAssetInfoImportServiceImpl.java | 20 +- .../info/collection/CcdiAssetInfoMapper.xml | 11 + .../CcdiAssetInfoControllerTest.java | 4 +- .../CcdiAssetInfoImportServiceImplTest.java | 22 +- ...set-import-split-backend-implementation.md | 253 ++++++++++++++++++ ...ployee-family-asset-import-split-design.md | 241 +++++++++++++++++ ...et-import-split-frontend-implementation.md | 230 ++++++++++++++++ 10 files changed, 794 insertions(+), 23 deletions(-) create mode 100644 docs/plans/2026-03-13-employee-family-asset-import-split-backend-implementation.md create mode 100644 docs/plans/2026-03-13-employee-family-asset-import-split-design.md create mode 100644 docs/plans/2026-03-13-employee-family-asset-import-split-frontend-implementation.md diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiAssetInfoController.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiAssetInfoController.java index de6f572..bae9a0a 100644 --- a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiAssetInfoController.java +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiAssetInfoController.java @@ -28,12 +28,12 @@ import java.util.ArrayList; import java.util.List; /** - * 亲属资产信息Controller + * 资产信息导入Controller * * @author ruoyi * @date 2026-03-12 */ -@Tag(name = "亲属资产信息管理") +@Tag(name = "资产信息导入管理") @RestController @RequestMapping("/ccdi/assetInfo") public class CcdiAssetInfoController extends BaseController { @@ -44,18 +44,18 @@ public class CcdiAssetInfoController extends BaseController { /** * 下载导入模板 */ - @Operation(summary = "下载亲属资产导入模板") + @Operation(summary = "下载资产导入模板") @PostMapping("/importTemplate") public void importTemplate(HttpServletResponse response) { - EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiAssetInfoExcel.class, "亲属资产信息"); + EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiAssetInfoExcel.class, "资产信息"); } /** - * 导入亲属资产信息 + * 导入资产信息 */ - @Operation(summary = "导入亲属资产信息") - @PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:import')") - @Log(title = "亲属资产信息", businessType = BusinessType.IMPORT) + @Operation(summary = "导入资产信息") + @PreAuthorize("@ss.hasAnyPermi('ccdi:employee:import,ccdi:staffFmyRelation:import')") + @Log(title = "资产信息", businessType = BusinessType.IMPORT) @PostMapping("/importData") public AjaxResult importData(MultipartFile file) throws Exception { List list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiAssetInfoExcel.class); @@ -74,8 +74,8 @@ public class CcdiAssetInfoController extends BaseController { /** * 查询导入状态 */ - @Operation(summary = "查询亲属资产导入状态") - @PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:import')") + @Operation(summary = "查询资产导入状态") + @PreAuthorize("@ss.hasAnyPermi('ccdi:employee:import,ccdi:staffFmyRelation:import')") @GetMapping("/importStatus/{taskId}") public AjaxResult getImportStatus(@PathVariable String taskId) { return success(assetInfoImportService.getImportStatus(taskId)); @@ -84,8 +84,8 @@ public class CcdiAssetInfoController extends BaseController { /** * 查询导入失败记录 */ - @Operation(summary = "查询亲属资产导入失败记录") - @PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:import')") + @Operation(summary = "查询资产导入失败记录") + @PreAuthorize("@ss.hasAnyPermi('ccdi:employee:import,ccdi:staffFmyRelation:import')") @GetMapping("/importFailures/{taskId}") public TableDataInfo getImportFailures( @PathVariable String taskId, diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiAssetInfoExcel.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiAssetInfoExcel.java index 511be08..3ffff18 100644 --- a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiAssetInfoExcel.java +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiAssetInfoExcel.java @@ -24,8 +24,8 @@ public class CcdiAssetInfoExcel implements Serializable { @Serial private static final long serialVersionUID = 1L; - /** 关系人证件号 */ - @ExcelProperty(value = "关系人证件号*", index = 0) + /** 资产实际持有人证件号 */ + @ExcelProperty(value = "资产实际持有人证件号*", index = 0) @ColumnWidth(22) @Required @TextFormat diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiAssetInfoMapper.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiAssetInfoMapper.java index 7f2231d..93356fc 100644 --- a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiAssetInfoMapper.java +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiAssetInfoMapper.java @@ -75,6 +75,14 @@ public interface CcdiAssetInfoMapper extends BaseMapper { */ int insertBatch(@Param("list") List list); + /** + * 按资产实际持有人证件号查询员工本人归属候选 + * + * @param personIds 资产实际持有人证件号列表 + * @return 归属映射 + */ + List> selectOwnerCandidatesByPersonIds(@Param("personIds") List personIds); + /** * 按关系人证件号查询归属员工候选 * diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoImportServiceImpl.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoImportServiceImpl.java index 9dc4a37..12c8737 100644 --- a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoImportServiceImpl.java +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoImportServiceImpl.java @@ -97,10 +97,10 @@ public class CcdiAssetInfoImportServiceImpl implements ICcdiAssetInfoImportServi validateExcel(excel); Set familyIds = ownerMap.get(excel.getPersonId()); if (familyIds == null || familyIds.isEmpty()) { - throw new RuntimeException("未找到亲属资产归属员工"); + throw new RuntimeException("未找到资产归属员工"); } if (familyIds.size() > 1) { - throw new RuntimeException("亲属资产归属员工不唯一"); + throw new RuntimeException("资产归属员工不唯一"); } CcdiAssetInfo assetInfo = new CcdiAssetInfo(); @@ -164,7 +164,19 @@ public class CcdiAssetInfoImportServiceImpl implements ICcdiAssetInfoImportServi private Map> buildOwnerMap(List personIds) { Map> result = new LinkedHashMap<>(); - mergeOwnerMappings(result, assetInfoMapper.selectOwnerCandidatesByRelationCertNos(personIds)); + if (personIds == null || personIds.isEmpty()) { + return result; + } + List> selfMappings = assetInfoMapper.selectOwnerCandidatesByPersonIds(personIds); + mergeOwnerMappings(result, selfMappings); + + Set selfMatchedIds = result.keySet(); + List relationPersonIds = personIds.stream() + .filter(personId -> !selfMatchedIds.contains(personId)) + .toList(); + if (!relationPersonIds.isEmpty()) { + mergeOwnerMappings(result, assetInfoMapper.selectOwnerCandidatesByRelationCertNos(relationPersonIds)); + } return result; } @@ -184,7 +196,7 @@ public class CcdiAssetInfoImportServiceImpl implements ICcdiAssetInfoImportServi private void validateExcel(CcdiAssetInfoExcel excel) { if (StringUtils.isEmpty(excel.getPersonId())) { - throw new RuntimeException("关系人证件号不能为空"); + throw new RuntimeException("资产实际持有人证件号不能为空"); } if (StringUtils.isEmpty(excel.getAssetMainType())) { throw new RuntimeException("资产大类不能为空"); diff --git a/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiAssetInfoMapper.xml b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiAssetInfoMapper.xml index da3dd28..cc6dfbc 100644 --- a/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiAssetInfoMapper.xml +++ b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiAssetInfoMapper.xml @@ -77,6 +77,17 @@ + +