From 4b28eb7d4b2b2fe69961f369265f5df2188a6f96 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 9 Jul 2026 16:41:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(perf):=20=E6=9F=A5=E8=AF=A2=E6=9C=88?= =?UTF-8?q?=E5=BA=A6=E8=96=AA=E8=B5=84=E8=AE=B0=E5=BD=95=E6=97=B6=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=91=98=E5=B7=A5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 WmsEmployeeInfo 和 WmsEmployeeInfoMapper 依赖 - 在 PerfSalaryVo 中添加 wmsEmployeeInfo 字段 - 实现 attachEmployeeInfo 方法批量填充员工信息 - 避免 N+1 查询问题,通过员工ID批量获取员工信息 - 更新查询方法以返回包含员工信息的完整数据 - 在 pom.xml 中添加 klp-wms 模块依赖 --- klp-perf/pom.xml | 4 ++ .../com/klp/perf/domain/vo/PerfSalaryVo.java | 6 ++- .../service/impl/PerfSalaryServiceImpl.java | 43 +++++++++++++++++-- 3 files changed, 48 insertions(+), 5 deletions(-) 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) {