From 3dbb29ea39c7ac7483173f8a81559cb8a45ec00f Mon Sep 17 00:00:00 2001 From: xuyuncong <3422692813@qq.com> Date: Tue, 4 Nov 2025 15:17:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BB=9F=E8=AE=A1=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/RepairStatisticsController.java | 13 ++ .../base/mapper/RepairStatisticsMapper.java | 11 ++ .../base/mapper/RepairWorkerMapper.java | 9 +- .../base/service/RepairStatisticsService.java | 8 ++ .../base/service/RepairWorkerService.java | 7 ++ .../impl/RepairStatisticsServiceImpl.java | 115 +++++++++++++++++- .../service/impl/RepairWorkerServiceImpl.java | 5 + .../mapper/base/RepairStatisticsMapper.xml | 50 ++++++++ .../mapper/base/RepairWorkerMapper.xml | 14 ++- 9 files changed, 228 insertions(+), 4 deletions(-) diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java index f807f2c6..998cbdb6 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java @@ -328,4 +328,17 @@ public class RepairStatisticsController { return CommonResult.success(statisticsService.workTypeStatistics(reqVO)); } + /** + * 根据班组(工种类型)统计班组下员工的工作量 + * + * @param workType 工种类型 + * @param reqVO 查询条件 + * @return 员工工作量统计列表 + */ + @GetMapping("/workerStatisticsByWorkType") + @Operation(summary = "根据班组统计班组下员工的工作量") + public CommonResult workerStatisticsByWorkType(@RequestParam String workType, QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.workerStatisticsByWorkType(workType, reqVO)); + } + } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java index c52cb6de..5fff2528 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java @@ -275,4 +275,15 @@ public interface RepairStatisticsMapper { List> selectSumAmountByWorkType(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("workType") String workType); + + /** + * 根据员工ID列表查询员工工作量统计 + * @param userIds 员工ID列表 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 员工工作量统计数据列表 + */ + List> selectWorkerStatisticsByUserIds(@Param("userIds") List userIds, + @Param("startDate") String startDate, + @Param("endDate") String endDate); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairWorkerMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairWorkerMapper.java index 589ea9bf..10d0408e 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairWorkerMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairWorkerMapper.java @@ -52,4 +52,11 @@ public interface RepairWorkerMapper extends BaseMapper { * @return cn.iocoder.yudao.module.base.vo.RepairWorkerRespVO **/ List listAllWorker(); -} + + /** + * 根据工种类型查询维修工信息 + * @param workType 工种类型 + * @return 维修工列表 + */ + List listByWorkType(String workType); +} \ No newline at end of file diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java index 5d29d9b2..8d531d81 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java @@ -217,4 +217,12 @@ public interface RepairStatisticsService { * @return java.util.List> **/ List> workTypeStatistics(QueryBusinessReqVO reqVO); + + /** + * 根据班组(工种类型)统计班组下员工的工作量 + * @param workType 工种类型 + * @param reqVO 查询条件 + * @return 员工工作量统计列表 + */ + List> workerStatisticsByWorkType(String workType, QueryBusinessReqVO reqVO); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java index a710ad75..0299034d 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java @@ -121,4 +121,11 @@ public interface RepairWorkerService extends IService { * @return boolean **/ boolean getIfLeader(); + + /** + * 根据工种类型查询维修工信息 + * @param workType 工种类型 + * @return 维修工列表 + */ + List listByWorkType(String workType); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java index aaebcef9..90a44231 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java @@ -1,10 +1,14 @@ package cn.iocoder.yudao.module.base.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.common.RecordTypeEnum; import cn.iocoder.yudao.common.TicketsStatusEnum; +import cn.iocoder.yudao.module.base.entity.RepairRecords; import cn.iocoder.yudao.module.base.entity.StaffStatisticsResp; import cn.iocoder.yudao.module.base.mapper.RepairStatisticsMapper; +import cn.iocoder.yudao.module.base.service.RepairRecordsService; import cn.iocoder.yudao.module.base.service.RepairStatisticsService; +import cn.iocoder.yudao.module.base.service.RepairWorkerService; import cn.iocoder.yudao.module.base.vo.*; import cn.iocoder.yudao.module.business.entity.DlBusinessChannel; import cn.iocoder.yudao.module.business.service.BusinessChannelService; @@ -59,6 +63,12 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { @Resource private DictDataApi dictDataApi; + @Resource + private RepairRecordsService repairRecordsService; + + @Resource + private RepairWorkerService workerService; + /** * 将统计结果列表转换为Map格式 * @param list 统计结果列表,每个元素包含key和value字段 @@ -495,8 +505,8 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { String startDate = null; String endDate = null; if (dateRange != null && dateRange.size() >= 2 && dateRange.get(0) != null && dateRange.get(1) != null) { - startDate = dateRange.get(0); - endDate = dateRange.get(1); + startDate = dateRange.get(0) + " 00:00:00"; + endDate = dateRange.get(1) + " 23:59:59"; } /* 查询维修工类型的班组数据*/ @@ -540,7 +550,22 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { }}); /*总检 合格了多少 返工了多少*/ + //查询记录表 nfpg的数量 + long nfpgCount = repairRecordsService.count(Wrappers.lambdaQuery() + .eq(RepairRecords::getType, RecordTypeEnum.NFPG.getCode()) + .between(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate), RepairRecords::getCreateTime, startDate, endDate)); + //查询记录表 zj的数量 + long zjCount = repairRecordsService.count(Wrappers.lambdaQuery() + .eq(RepairRecords::getType, RecordTypeEnum.ZJ.getCode()) + .between(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate), RepairRecords::getCreateTime, startDate, endDate)); + + resp.add(new HashMap() {{ + put("name", "总检"); + put("id", "zj"); + put("count", nfpgCount); + put("count2", zjCount); + }}); return resp; } @@ -653,4 +678,90 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { return node; } + + @Override + public List> workerStatisticsByWorkType(String workType, QueryBusinessReqVO reqVO) { + // 检查日期范围是否有效 + List dateRange = reqVO.getDateRange(); + String startDate = null; + String endDate = null; + if (dateRange != null && dateRange.size() >= 2 && dateRange.get(0) != null && dateRange.get(1) != null) { + startDate = dateRange.get(0) + " 00:00:00"; + endDate = dateRange.get(1) + " 23:59:59"; + } + + List> resp = new ArrayList<>(); + + // 根据workType查询该工种下的所有员工 + List workers = workerService.listByWorkType(workType); + + // 如果没有员工,直接返回空列表 + if (workers == null || workers.isEmpty()) { + return resp; + } + + // 对每个员工进行统计 + for (RepairWorkerRespVO worker : workers) { + Long userId = worker.getUserId(); + if (userId == null) { + continue; + } + + List userIds = Collections.singletonList(userId); + try { + // 查询员工的统计数据 + List> workerStats = statisticsMapper.selectWorkerStatisticsByUserIds(userIds, startDate, endDate); + if (workerStats != null && !workerStats.isEmpty()) { + Map workerStat = workerStats.get(0); + + Map respMap = new HashMap<>(); + respMap.put("name", worker.getUserName()); + respMap.put("id", userId); + + // 构造与workTypeStatistics相同格式的数据 + Map dataMap = new HashMap<>(); + List> statsList = new ArrayList<>(); + + // 添加进厂数统计 + Map newOrderNode = new HashMap<>(); + newOrderNode.put("code", "newOrderNum"); + newOrderNode.put("name", "订单(进厂数)"); + newOrderNode.put("selectType", "jinchang"); + newOrderNode.put("total", workerStat.get("ticketCount")); + statsList.add(newOrderNode); + + // 添加维修中统计 + Map workingNode = new HashMap<>(); + workingNode.put("code", "workingNum"); + workingNode.put("name", "维修中"); + workingNode.put("selectType", "weixiuzhong"); + workingNode.put("total", workerStat.get("workingCount")); + statsList.add(workingNode); + + // 添加已竣工统计 + Map completedNode = new HashMap<>(); + completedNode.put("code", "overNum"); + completedNode.put("name", "已竣工"); + completedNode.put("selectType", "yijungong"); + completedNode.put("total", workerStat.get("completedCount")); + statsList.add(completedNode); + + dataMap.put("stats", statsList); + respMap.put("data", dataMap); + + resp.add(respMap); + } + } catch (Exception e) { + // 记录异常但不中断整个流程 + log.warn("获取员工统计信息时发生异常,员工ID: {}", userId, e); + // 添加一个默认的统计对象,避免前端出现空值 + Map defaultStats = new HashMap<>(); + defaultStats.put("name", worker.getUserName()); + defaultStats.put("id", userId); + resp.add(defaultStats); + } + } + + return resp; + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java index f872e5e7..8be309a0 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java @@ -312,4 +312,9 @@ public class RepairWorkerServiceImpl extends ServiceImpl list = this.list(queryWrapper); return !list.isEmpty() && "1".equals(list.get(0).getIsLeads()); } + + @Override + public List listByWorkType(String workType) { + return workerMapper.listByWorkType(workType); + } } diff --git a/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml b/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml index 9f45dc67..64546262 100644 --- a/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml @@ -637,4 +637,54 @@ AND drt.create_time BETWEEN CONCAT(#{startDate}, ' 00:00:00') AND CONCAT(#{endDate}, ' 23:59:59') + + + + + + diff --git a/dl-module-repair/src/main/resources/mapper/base/RepairWorkerMapper.xml b/dl-module-repair/src/main/resources/mapper/base/RepairWorkerMapper.xml index bfd5afe6..16d31213 100644 --- a/dl-module-repair/src/main/resources/mapper/base/RepairWorkerMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/base/RepairWorkerMapper.xml @@ -58,6 +58,18 @@ WHERE main.deleted = 0 + + - + \ No newline at end of file