From 48e75676c5b67e2186f93b186cb342ebb182cecd Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 31 Jan 2026 14:08:19 +0800 Subject: [PATCH] =?UTF-8?q?refactor(mat):=20=E4=BC=98=E5=8C=96=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=9C=8D=E5=8A=A1=E4=B8=AD=E7=9A=84=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 替换 IMatPurchaseInDetailService 为 MatPurchaseInDetailMapper 直接访问数据库 - 修改 MatMaterialServiceImpl 和 MatPurchaseServiceImpl 中的依赖注入 - 将查询逻辑从 BO 对象查询改为 LambdaQueryWrapper 条件查询 - 统一使用 MatPurchaseInDetail 实体类替代 MatPurchaseInDetailVo 进行数据处理 - 优化批量查询入库详情的性能,解决 N+1 查询问题 - 更新流式处理中的方法引用以匹配实体类字段映射 --- .../service/impl/MatMaterialServiceImpl.java | 20 +++++++++---------- .../service/impl/MatPurchaseServiceImpl.java | 16 ++++++++------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java b/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java index 0db0da5..4251fd8 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java +++ b/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java @@ -9,9 +9,11 @@ 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.gear.mat.domain.MatPurchase; +import com.gear.mat.domain.MatPurchaseInDetail; import com.gear.mat.domain.bo.MatPurchaseBo; import com.gear.mat.domain.bo.MatPurchaseInDetailBo; import com.gear.mat.domain.vo.*; +import com.gear.mat.mapper.MatPurchaseInDetailMapper; import com.gear.mat.mapper.MatPurchaseMapper; import com.gear.mat.service.IMatPurchaseInDetailService; import lombok.RequiredArgsConstructor; @@ -40,7 +42,7 @@ public class MatMaterialServiceImpl implements IMatMaterialService { private final MatMaterialMapper baseMapper; private final MatPurchaseMapper matPurchaseMapper; - private final IMatPurchaseInDetailService matPurchaseInDetailService; + private final MatPurchaseInDetailMapper matPurchaseInDetailMapper; /** * 查询配料配件基础信息 @@ -214,15 +216,13 @@ public class MatMaterialServiceImpl implements IMatMaterialService { .distinct() .collect(Collectors.toList()); - Map> detailsByPurchaseId = Collections.emptyMap(); + Map> detailsByPurchaseId = Collections.emptyMap(); if (!purchaseIds.isEmpty()) { - MatPurchaseInDetailBo detailBo = new MatPurchaseInDetailBo(); - Map params = new HashMap<>(); - params.put("purchaseIds", purchaseIds); - detailBo.setParams(params); - List allDetails = matPurchaseInDetailService.queryList(detailBo); + LambdaQueryWrapper detailLqw = Wrappers.lambdaQuery(); + detailLqw.in(MatPurchaseInDetail::getPurchaseId, purchaseIds); + List allDetails = matPurchaseInDetailMapper.selectList(detailLqw); detailsByPurchaseId = allDetails.stream() - .collect(Collectors.groupingBy(MatPurchaseInDetailVo::getPurchaseId)); + .collect(Collectors.groupingBy(MatPurchaseInDetail::getPurchaseId)); } // 计算每个物料的库存信息 @@ -251,9 +251,9 @@ public class MatMaterialServiceImpl implements IMatMaterialService { planTotal = planTotal.add(planNum); // 计算该采购单的已入库数量 - List details = detailsByPurchaseId.getOrDefault(purchase.getPurchaseId(), Collections.emptyList()); + List details = detailsByPurchaseId.getOrDefault(purchase.getPurchaseId(), Collections.emptyList()); BigDecimal receivedInPurchase = details.stream() - .map(MatPurchaseInDetailVo::getInNum) + .map(MatPurchaseInDetail::getInNum) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); receivedTotal = receivedTotal.add(receivedInPurchase); diff --git a/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java b/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java index 4eaa7ac..578cd56 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java +++ b/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java @@ -8,7 +8,9 @@ import com.gear.common.core.domain.PageQuery; 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.gear.mat.domain.MatPurchaseInDetail; import com.gear.mat.domain.vo.*; +import com.gear.mat.mapper.MatPurchaseInDetailMapper; import lombok.RequiredArgsConstructor; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.beans.BeanUtils; @@ -42,7 +44,7 @@ public class MatPurchaseServiceImpl implements IMatPurchaseService { private final MatPurchaseMapper baseMapper; private final MatMaterialMapper matMaterialMapper; - private final IMatPurchaseInDetailService matPurchaseInDetailService; + private final MatPurchaseInDetailMapper matPurchaseInDetailMapper; /** * 查询采购单主(管理在途库存) @@ -185,18 +187,18 @@ public class MatPurchaseServiceImpl implements IMatPurchaseService { .collect(Collectors.toList()); // 批量查询所有入库详情(一次性查询,解决N+1) - Map> detailMap = new HashMap<>(); + Map> detailMap = new HashMap<>(); if (!purchaseIds.isEmpty()) { // 使用LambdaQueryWrapper批量查询,避免循环单查 LambdaQueryWrapper detailLqw = Wrappers.lambdaQuery(); - detailLqw.in(com.gear.mat.domain.MatPurchaseInDetail::getPurchaseId, purchaseIds); - List allDetails = matPurchaseInDetailService.queryList(new MatPurchaseInDetailBo()); + detailLqw.in(MatPurchaseInDetail::getPurchaseId, purchaseIds); + List allDetails = matPurchaseInDetailMapper.selectList(detailLqw); // 按purchaseId分组 detailMap = allDetails.stream() .filter(Objects::nonNull) .filter(detail -> detail.getPurchaseId() != null) - .collect(Collectors.groupingBy(MatPurchaseInDetailVo::getPurchaseId)); + .collect(Collectors.groupingBy(MatPurchaseInDetail::getPurchaseId)); log.debug("批量查询入库详情成功,采购单数量:{},明细总条数:{}", purchaseIds.size(), allDetails.size()); } @@ -214,12 +216,12 @@ public class MatPurchaseServiceImpl implements IMatPurchaseService { } // 获取入库详情 - List details = detailMap.get(purchase.getPurchaseId()); + List details = detailMap.get(purchase.getPurchaseId()); details = details != null ? details : Collections.emptyList(); // 计算已入库数量 BigDecimal receivedTotal = details.stream() - .map(MatPurchaseInDetailVo::getInNum) + .map(MatPurchaseInDetail::getInNum) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add);