perf(qc): 优化检验任务查询性能

- 添加WMS钢卷服务依赖注入以支持批量查询
- 实现批量获取钢卷信息功能,避免N+1查询问题
- 在检验任务VO中新增钢卷列表属性
- 通过一次性查询所有相关钢卷数据提升查询效率
- 添加钢卷ID解析和数据过滤逻辑
- 移除Excel导出中的钢卷ID集合字段注解
This commit is contained in:
2026-05-16 10:36:53 +08:00
parent 74e5bd66a4
commit 98a3fa8c78
2 changed files with 56 additions and 6 deletions

View File

@@ -1,11 +1,14 @@
package com.klp.mes.qc.domain.vo;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
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.vo.WmsMaterialCoilVo;
import lombok.Data;
@@ -113,8 +116,9 @@ public class QcInspectionTaskVo {
/**
* 钢卷ID集合多个使用英文逗号分隔
*/
@ExcelProperty(value = "钢卷ID集合")
private String coilIds;
private List<WmsMaterialCoilVo> coilList;
}

View File

@@ -7,6 +7,9 @@ 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.bo.WmsMaterialCoilBo;
import com.klp.domain.vo.WmsMaterialCoilVo;
import com.klp.service.IWmsMaterialCoilService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -23,11 +26,8 @@ import com.klp.mes.qc.domain.vo.WmsCheckItemVo;
import com.klp.mes.qc.domain.WmsInspectionItemTemplate;
import com.klp.mes.qc.mapper.WmsInspectionItemTemplateMapper;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Date;
import java.util.*;
import java.util.stream.Collectors;
/**
* 检验任务主Service业务层处理
@@ -44,6 +44,7 @@ public class QcInspectionTaskServiceImpl implements IQcInspectionTaskService {
private final QcInspectionItemMapper inspectionItemMapper;
private final WmsCheckItemMapper checkItemMapper;
private final WmsInspectionItemTemplateMapper templateMapper;
private final IWmsMaterialCoilService wmsMaterialCoilService;
/**
* 查询检验任务主
@@ -60,6 +61,51 @@ public class QcInspectionTaskServiceImpl implements IQcInspectionTaskService {
public TableDataInfo<QcInspectionTaskVo> queryPageList(QcInspectionTaskBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<QcInspectionTask> lqw = buildQueryWrapper(bo);
Page<QcInspectionTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 批量查询钢卷信息避免N+1查询问题
if (result.getRecords() != null && !result.getRecords().isEmpty()) {
// 收集所有需要查询的coilIds
List<String> allCoilIdsList = new ArrayList<>();
for (QcInspectionTaskVo task : result.getRecords()) {
if (StringUtils.isNotBlank(task.getCoilIds())) {
allCoilIdsList.add(task.getCoilIds());
}
}
// 如果有需要查询的钢卷ID
if (!allCoilIdsList.isEmpty()) {
// 将所有coilIds合并成一个大的ID列表
String allCoilIds = String.join(",", allCoilIdsList);
WmsMaterialCoilBo wmsMaterialCoilBo = new WmsMaterialCoilBo();
wmsMaterialCoilBo.setCoilIds(allCoilIds);
List<WmsMaterialCoilVo> allCoils = wmsMaterialCoilService.queryList(wmsMaterialCoilBo);
// 为每个任务设置对应的钢卷列表
for (QcInspectionTaskVo task : result.getRecords()) {
if (StringUtils.isNotBlank(task.getCoilIds())) {
// 解析该任务的coilIds
String[] coilIdArray = task.getCoilIds().split(",");
List<Long> taskCoilIds = new ArrayList<>();
for (String id : coilIdArray) {
if (StringUtils.isNotBlank(id)) {
try {
taskCoilIds.add(Long.valueOf(id.trim()));
} catch (NumberFormatException e) {
log.warn("无效的钢卷ID: {}", id);
}
}
}
// 从所有钢卷中筛选出属于当前任务的钢卷
List<WmsMaterialCoilVo> taskCoils = allCoils.stream()
.filter(coil -> taskCoilIds.contains(coil.getCoilId()))
.collect(Collectors.toList());
task.setCoilList(taskCoils);
}
}
}
}
return TableDataInfo.build(result);
}