diff --git a/klp-perf/pom.xml b/klp-perf/pom.xml index 383f73a92..98e4c75d2 100644 --- a/klp-perf/pom.xml +++ b/klp-perf/pom.xml @@ -22,6 +22,10 @@ com.klp klp-common + + com.klp + klp-wms + diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java index ae34c92bf..f482dff5b 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java @@ -7,6 +7,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.klp.common.annotation.ExcelDictFormat; import com.klp.common.convert.ExcelDictConvert; +import com.klp.domain.WmsEmployeeInfo; import lombok.Data; @@ -208,5 +209,8 @@ public class PerfSalaryVo { @ExcelProperty(value = "备注") private String remark; - + /** + * 关联员工简要信息 (联查 wms_employee_info) + */ + private WmsEmployeeInfo wmsEmployeeInfo; } diff --git a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java index d6d65bcc4..01991b73d 100644 --- a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java +++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.utils.StringUtils; +import com.klp.domain.WmsEmployeeInfo; +import com.klp.mapper.WmsEmployeeInfoMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.perf.domain.bo.PerfSalaryBo; @@ -18,6 +20,8 @@ import com.klp.perf.service.IPerfSalaryService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 月度薪资计算记录Service业务层处理 @@ -30,9 +34,10 @@ import java.util.Collection; public class PerfSalaryServiceImpl implements IPerfSalaryService { private final PerfSalaryMapper baseMapper; + private final WmsEmployeeInfoMapper employeeMapper; /** - * 查询月度薪资计算记录 + * 查询月度薪资计算记录(含员工信息) */ @Override public PerfSalaryVo queryById(Long id){ @@ -40,22 +45,52 @@ public class PerfSalaryServiceImpl implements IPerfSalaryService { } /** - * 查询月度薪资计算记录列表 + * 查询月度薪资计算记录列表(含员工信息) */ @Override public TableDataInfo queryPageList(PerfSalaryBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + attachEmployeeInfo(result.getRecords()); return TableDataInfo.build(result); } /** - * 查询月度薪资计算记录列表 + * 查询月度薪资计算记录列表(含员工信息) */ @Override public List queryList(PerfSalaryBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List list = baseMapper.selectVoList(lqw); + attachEmployeeInfo(list); + return list; + } + + /** + * 批量填充员工简要信息 (避免 N+1 查询) + */ + private void attachEmployeeInfo(List voList) { + if (voList == null || voList.isEmpty()) { + return; + } + List employeeIds = voList.stream() + .map(PerfSalaryVo::getEmployeeId) + .filter(id -> id != null) + .distinct() + .collect(Collectors.toList()); + if (employeeIds.isEmpty()) { + return; + } + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(WmsEmployeeInfo::getInfoId, employeeIds); + List employees = employeeMapper.selectList(lqw); + Map empMap = employees.stream() + .collect(Collectors.toMap(WmsEmployeeInfo::getInfoId, Function.identity())); + for (PerfSalaryVo vo : voList) { + if (vo.getEmployeeId() != null) { + vo.setWmsEmployeeInfo(empMap.get(vo.getEmployeeId())); + } + } } private LambdaQueryWrapper buildQueryWrapper(PerfSalaryBo bo) {