From 7f5d6c11433e2d9300e42fe0abbb0714b0d04c07 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 13 Dec 2025 15:45:57 +0800 Subject: [PATCH] =?UTF-8?q?refactor(oa):=20=E4=BC=98=E5=8C=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=88=97=E8=A1=A8=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 - 添加空列表检查避免空指针异常 - 使用流式收集项目ID用于后续范围查询 - 分别对工艺卡和送货单进行分组统计 - 通过Map结构提高查询效率避免重复数据库访问 - 保留原有VO转换及数据组装逻辑 - 确保只统计未删除的数据记录 - 提升接口性能减少不必要的循环查询 --- .../impl/OaProcessCardServiceImpl.java | 57 +++++++++++++------ 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java index cae9032..aebbeed 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java @@ -191,25 +191,46 @@ public class OaProcessCardServiceImpl implements IOaProcessCardService { public List queryProjectList() { // 拿到项目名字projectName projectNum projectCode List sysOaProjects = sysOaProjectMapper.selectList(); - // 现在已经有了projectId然后需要看到工艺还是发货哪个地方绑定了这个projectId + if (sysOaProjects == null || sysOaProjects.isEmpty()) { + return Collections.emptyList(); + } + + // 收集项目ID,后续仅在这些ID范围内分组统计 + List projectIds = sysOaProjects.stream() + .map(SysOaProject::getProjectId) + .collect(Collectors.toList()); + + // 1) 分组统计工艺卡数量(未删除) + QueryWrapper pcQw = Wrappers.query(); + pcQw.select("project_id AS projectId", "COUNT(1) AS cnt"); + pcQw.in(!projectIds.isEmpty(), "project_id", projectIds); + pcQw.eq("del_flag", 0); + pcQw.groupBy("project_id"); + Map processCardCountMap = baseMapper.selectMaps(pcQw).stream() + .collect(Collectors.toMap( + m -> ((Number) m.get("projectId")).longValue(), + m -> ((Number) m.get("cnt")).longValue() + )); + + // 2) 分组统计送货单数量(未删除) + QueryWrapper doQw = Wrappers.query(); + doQw.select("project_id AS projectId", "COUNT(1) AS cnt"); + doQw.in(!projectIds.isEmpty(), "project_id", projectIds); + doQw.eq("del_flag", 0); + doQw.groupBy("project_id"); + Map deliveryOrderCountMap = oaDeliveryOrderMapper.selectMaps(doQw).stream() + .collect(Collectors.toMap( + m -> ((Number) m.get("projectId")).longValue(), + m -> ((Number) m.get("cnt")).longValue() + )); + + // 3) 组装返回 List sysOaProjectVos = sysOaProjects.stream() - .map(sysOaProject -> { - SysOaProjectVo vo = BeanUtil.toBean(sysOaProject, SysOaProjectVo.class); - Long projectId = sysOaProject.getProjectId(); - // 统计工艺卡数量(未删除) - Long processCardCount = baseMapper.selectCount( - Wrappers.lambdaQuery() - .eq(OaProcessCard::getProjectId, projectId) - .eq(OaProcessCard::getDelFlag, 0) - ); - vo.setProcessCardCount(processCardCount); - // 统计送货单数量(未删除) - Long deliveryOrderCount = oaDeliveryOrderMapper.selectCount( - Wrappers.lambdaQuery() - .eq(OaDeliveryOrder::getProjectId, projectId) - .eq(OaDeliveryOrder::getDelFlag, 0) - ); - vo.setDeliveryOrderCount(deliveryOrderCount); + .map(p -> { + SysOaProjectVo vo = BeanUtil.toBean(p, SysOaProjectVo.class); + Long pid = p.getProjectId(); + vo.setProcessCardCount(processCardCountMap.getOrDefault(pid, 0L)); + vo.setDeliveryOrderCount(deliveryOrderCountMap.getOrDefault(pid, 0L)); return vo; }) .collect(Collectors.toList());