package com.rj.common; import com.rj.entity.Dealership; import com.rj.entity.ProjectManagement; import com.rj.entity.SalesManagement; import com.rj.service.IDealershipService; import com.rj.service.IProjectManagementService; import com.rj.service.ISalesManagementService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; /** * DataEnrichmentUtil 使用示例 * 展示如何使用数据丰富工具类来减少代码冗余 * * @author 系统生成 * @since 2025-08-07 */ @Component public class DataEnrichmentUtilExample { @Autowired private DataEnrichmentUtil dataEnrichmentUtil; @Autowired private IDealershipService dealershipService; @Autowired private IProjectManagementService projectManagementService; @Autowired private ISalesManagementService salesManagementService; /** * 示例1:基本用法 - 批量获取门店名称映射 */ public Map getDealershipNameMap(List dealershipIds) { return DataEnrichmentUtil.batchGetNameMap( dealershipIds, dealershipService, Dealership::getId, Dealership::getDealershipName ); } /** * 示例1-1:使用便捷方法 - 批量获取门店名称映射 */ public Map getDealershipNameMapEasy(List dealershipIds) { return dataEnrichmentUtil.getDealershipIdNameMap(dealershipIds); } /** * 示例2:带条件的批量获取 - 只获取启用的门店 */ public Map getActiveDealershipNameMap(List dealershipIds) { return DataEnrichmentUtil.batchGetNameMap( dealershipIds, dealershipService, Dealership::getId, Dealership::getDealershipName, queryWrapper -> queryWrapper.eq(Dealership::getStatus, true) ); } /** * 示例3:获取多个字段 - 获取门店的名称和地区 */ public Map> getDealershipInfoMap(List dealershipIds) { Map> fieldGetters = Map.of( "name", Dealership::getDealershipName, "region", Dealership::getRegion, "type", Dealership::getDealershipType ); return DataEnrichmentUtil.batchGetFieldMap( dealershipIds, dealershipService, Dealership::getId, fieldGetters ); } /** * 示例4:从实体列表中提取ID */ public List extractDealershipIds(List salesList) { return DataEnrichmentUtil.extractIds(salesList, SalesManagement::getDealershipId); } /** * 示例5:带过滤条件的ID提取 - 只提取有门店ID的记录 */ public List extractValidDealershipIds(List salesList) { return DataEnrichmentUtil.extractIds( salesList, SalesManagement::getDealershipId, sales -> sales.getDealershipId() != null && !sales.getDealershipId().trim().isEmpty() ); } /** * 示例6:完整的销售数据丰富流程 */ public void enrichSalesData(List salesList) { // 1. 提取关联ID List dealershipIds = DataEnrichmentUtil.extractIds(salesList, SalesManagement::getDealershipId); List projectIds = DataEnrichmentUtil.extractIds(salesList, SalesManagement::getProjectId); // 2. 批量获取关联数据 Map dealershipNameMap = DataEnrichmentUtil.batchGetNameMap( dealershipIds, dealershipService, Dealership::getId, Dealership::getDealershipName); Map projectNameMap = DataEnrichmentUtil.batchGetNameMap( projectIds, projectManagementService, ProjectManagement::getId, ProjectManagement::getProjectName); // 3. 填充关联数据 salesList.forEach(sales -> { sales.setDealershipName(dealershipNameMap.get(sales.getDealershipId())); sales.setProjectName(projectNameMap.get(sales.getProjectId())); }); } /** * 示例6-1:使用便捷方法的销售数据丰富流程 */ public void enrichSalesDataEasy(List salesList) { // 1. 提取关联ID List dealershipIds = DataEnrichmentUtil.extractIds(salesList, SalesManagement::getDealershipId); List projectIds = DataEnrichmentUtil.extractIds(salesList, SalesManagement::getProjectId); // 2. 使用便捷方法批量获取关联数据 Map dealershipNameMap = dataEnrichmentUtil.getDealershipIdNameMap(dealershipIds); Map projectNameMap = dataEnrichmentUtil.getProjectIdNameMap(projectIds); // 3. 填充关联数据 salesList.forEach(sales -> { sales.setDealershipName(dealershipNameMap.get(sales.getDealershipId())); sales.setProjectName(projectNameMap.get(sales.getProjectId())); }); } /** * 示例7:获取项目详细信息(包含多个字段) */ public Map> getProjectDetailMap(List projectIds) { Map> fieldGetters = Map.of( "name", ProjectManagement::getProjectName, "version", ProjectManagement::getScriptVersion, "status", ProjectManagement::getStatus, "group", ProjectManagement::getGroupName ); return DataEnrichmentUtil.batchGetFieldMap( projectIds, projectManagementService, ProjectManagement::getId, fieldGetters ); } }