perf(qc): 优化检验任务查询性能
- 添加WMS钢卷服务依赖注入以支持批量查询 - 实现批量获取钢卷信息功能,避免N+1查询问题 - 在检验任务VO中新增钢卷列表属性 - 通过一次性查询所有相关钢卷数据提升查询效率 - 添加钢卷ID解析和数据过滤逻辑 - 移除Excel导出中的钢卷ID集合字段注解
This commit is contained in:
@@ -1,11 +1,14 @@
|
|||||||
package com.klp.mes.qc.domain.vo;
|
package com.klp.mes.qc.domain.vo;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.klp.common.annotation.ExcelDictFormat;
|
import com.klp.common.annotation.ExcelDictFormat;
|
||||||
import com.klp.common.convert.ExcelDictConvert;
|
import com.klp.common.convert.ExcelDictConvert;
|
||||||
|
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
@@ -113,8 +116,9 @@ public class QcInspectionTaskVo {
|
|||||||
/**
|
/**
|
||||||
* 钢卷ID集合,多个使用英文逗号分隔
|
* 钢卷ID集合,多个使用英文逗号分隔
|
||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "钢卷ID集合")
|
|
||||||
private String coilIds;
|
private String coilIds;
|
||||||
|
|
||||||
|
private List<WmsMaterialCoilVo> coilList;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.klp.common.utils.StringUtils;
|
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.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
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.domain.WmsInspectionItemTemplate;
|
||||||
import com.klp.mes.qc.mapper.WmsInspectionItemTemplateMapper;
|
import com.klp.mes.qc.mapper.WmsInspectionItemTemplateMapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Map;
|
import java.util.stream.Collectors;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检验任务主Service业务层处理
|
* 检验任务主Service业务层处理
|
||||||
@@ -44,6 +44,7 @@ public class QcInspectionTaskServiceImpl implements IQcInspectionTaskService {
|
|||||||
private final QcInspectionItemMapper inspectionItemMapper;
|
private final QcInspectionItemMapper inspectionItemMapper;
|
||||||
private final WmsCheckItemMapper checkItemMapper;
|
private final WmsCheckItemMapper checkItemMapper;
|
||||||
private final WmsInspectionItemTemplateMapper templateMapper;
|
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) {
|
public TableDataInfo<QcInspectionTaskVo> queryPageList(QcInspectionTaskBo bo, PageQuery pageQuery) {
|
||||||
LambdaQueryWrapper<QcInspectionTask> lqw = buildQueryWrapper(bo);
|
LambdaQueryWrapper<QcInspectionTask> lqw = buildQueryWrapper(bo);
|
||||||
Page<QcInspectionTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
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);
|
return TableDataInfo.build(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user