From 9bc741f1c160bc2a82508b6d99d58f8e86e30532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E4=BA=AE?= Date: Wed, 29 Oct 2025 13:35:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=88=E7=8E=87=E5=88=A9=E7=94=A8=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SjMaxDeviceController.java | 53 +++++++++++++++- .../screen/service/SjMaxDeviceService.java | 6 ++ .../service/impl/SjMaxDeviceServiceImpl.java | 63 ++++++++++++++----- .../resources/mapper/SjMaxDeviceMapper.xml | 22 ++++--- 4 files changed, 118 insertions(+), 26 deletions(-) diff --git a/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/controller/SjMaxDeviceController.java b/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/controller/SjMaxDeviceController.java index def57bd..ec52128 100644 --- a/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/controller/SjMaxDeviceController.java +++ b/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/controller/SjMaxDeviceController.java @@ -28,6 +28,55 @@ public class SjMaxDeviceController extends BaseController { private SjMaxDeviceService service; + /** + * 效率整体情况 + * + * @param o 传参 + * @return 资源应用利率控制层 + */ + @GetMapping("selectDeviceWorkerEfficiency") + public AjaxResult selectDeviceWorkerEfficiency(SjMaxDevice o) { + try { + return service.selectDeviceWorkerEfficiency(o); + } catch (Exception e) { + log.error(e.toString(),e); + return error("请求出错了"); + } + } + + /** + * 效率分析top5 + * + * @param o 传参 + * @return 资源应用利率控制层 + */ + @GetMapping("selectTeamEfficiencyEcharts") + public AjaxResult selectTeamEfficiencyEcharts(SjMaxDevice o) { + try { + return service.selectTeamEfficiencyEcharts(o); + } catch (Exception e) { + log.error(e.toString(),e); + return error("请求出错了"); + } + } + + /** + * 一周到岗人数趋势 + * + * @param o 传参 + * @return 资源应用利率控制层 + */ + @GetMapping("selectWeekOnDutyEcharts") + public AjaxResult selectWeekOnDutyEcharts(SjMaxDevice o) { + try { + return service.selectWeekOnDutyEcharts(o); + } catch (Exception e) { + log.error(e.toString(),e); + return error("请求出错了"); + } + } + + /** * 资源应用利率控制层 * @@ -35,7 +84,7 @@ public class SjMaxDeviceController extends BaseController { * @return 资源应用利率控制层 */ @GetMapping("selectDeviceEcharts") - public AjaxResult selectDeviceEcharts(SjMaxDevice o) { + public AjaxResult selectDeviceEcharts11(SjMaxDevice o) { try { return service.selectDeviceEcharts(o); } catch (Exception e) { @@ -45,4 +94,6 @@ public class SjMaxDeviceController extends BaseController { } + + } diff --git a/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/SjMaxDeviceService.java b/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/SjMaxDeviceService.java index 0b4dcbf..3ca0c05 100644 --- a/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/SjMaxDeviceService.java +++ b/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/SjMaxDeviceService.java @@ -6,4 +6,10 @@ public interface SjMaxDeviceService{ AjaxResult selectDeviceEcharts(SjMaxDevice o); + + AjaxResult selectTeamEfficiencyEcharts(SjMaxDevice o); + + AjaxResult selectWeekOnDutyEcharts(SjMaxDevice o); + + AjaxResult selectDeviceWorkerEfficiency(SjMaxDevice o); } diff --git a/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/impl/SjMaxDeviceServiceImpl.java b/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/impl/SjMaxDeviceServiceImpl.java index b09c7cb..8455f66 100644 --- a/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/impl/SjMaxDeviceServiceImpl.java +++ b/securitycontrol-model/securitycontrol-screen/src/main/java/com/securitycontrol/screen/service/impl/SjMaxDeviceServiceImpl.java @@ -24,10 +24,25 @@ public class SjMaxDeviceServiceImpl implements SjMaxDeviceService{ @Override public AjaxResult selectDeviceEcharts(SjMaxDevice o) { - Map result = new HashMap<>(); - //设备的图 List list = mapper.selectDeviceEcharts(o); - result.put("deviceEcharts", list); + return AjaxResult.success("查询成功",list); + } + + @Override + public AjaxResult selectTeamEfficiencyEcharts(SjMaxDevice o) { + //一周到岗率 + LocalDate endDate = LocalDate.now(); // 今天 + String endTime = endDate.toString(); + o.setStartTime(endTime); + o.setEndTime(endTime); + //效率分析 + List efficiencyList = mapper.selectEfficiency(o); + return AjaxResult.success("查询成功",efficiencyList); + } + + @Override + public AjaxResult selectWeekOnDutyEcharts(SjMaxDevice o) { + Map result = new HashMap<>(); //一周到岗率 LocalDate endDate = LocalDate.now(); // 今天 LocalDate startDate = endDate.minusDays(6); // 7天前 @@ -36,22 +51,43 @@ public class SjMaxDeviceServiceImpl implements SjMaxDeviceService{ o.setStartTime(startTime); o.setEndTime(endTime); List workerList = mapper.selectWorkerEcharts(o); - result.put("workerEcharts", workerList); + return AjaxResult.success("查询成功",workerList); + } + + @Override + public AjaxResult selectDeviceWorkerEfficiency(SjMaxDevice o) { + Map result = new HashMap<>(); + //设备的图 + List list = mapper.selectDeviceEcharts(o); + //一周到岗率 + LocalDate endDate = LocalDate.now(); // 今天 + LocalDate startDate = endDate.minusDays(6); // 6天前 + String startTime = startDate.toString(); // 格式:yyyy-MM-dd + String endTime = endDate.toString(); + o.setStartTime(startTime); + o.setEndTime(endTime); + List workerList = mapper.selectWorkerEcharts(o); result.put("todayDutyRate", 0); result.put("yesterdayDutyRate", 0); if(workerList != null && !workerList.isEmpty()){ - result.put("todayDutyRate", workerList.get(workerList.size()-1).getActualCount()/workerList.get(workerList.size()-1).getShouldCount()*100); + result.put("todayDutyRate", Math.round(workerList.get(workerList.size()-1).getActualCount()*100/Double.valueOf(workerList.get(workerList.size()-1).getShouldCount()) * 10.0) / 10.0); if(workerList.size()>1){ - result.put("yesterdayDutyRate", workerList.get(workerList.size()-2).getActualCount()/workerList.get(workerList.size()-2).getShouldCount()*100); + result.put("yesterdayDutyRate", Math.round(workerList.get(workerList.size()-2).getActualCount()*100/Double.valueOf(workerList.get(workerList.size()-2).getShouldCount()) * 10.0) / 10.0); } } //整体人员利用率和设备使用率 - double totalActualCount = workerList.stream() - .mapToDouble(SjMaxDevice::getActualCount) - .sum(); - double totalShouldCount = workerList.stream() - .mapToDouble(SjMaxDevice::getShouldCount) - .sum(); + double totalActualCount = 0; + if (workerList != null) { + totalActualCount = workerList.stream() + .mapToDouble(SjMaxDevice::getActualCount) + .sum(); + } + double totalShouldCount = 0; + if (workerList != null) { + totalShouldCount = workerList.stream() + .mapToDouble(SjMaxDevice::getShouldCount) + .sum(); + } double workerUtilization = 0; if (totalShouldCount > 0) { workerUtilization = (totalActualCount / totalShouldCount) * 100; @@ -70,9 +106,6 @@ public class SjMaxDeviceServiceImpl implements SjMaxDeviceService{ deviceUtilization = (double) Math.round(deviceUtilization * 10.0) / 10.0; } result.put("deviceUtilization", deviceUtilization); - //效率分析 - List efficiencyList = mapper.selectEfficiency(o); - result.put("efficiency", efficiencyList); return AjaxResult.success("查询成功",result); } } diff --git a/securitycontrol-model/securitycontrol-screen/src/main/resources/mapper/SjMaxDeviceMapper.xml b/securitycontrol-model/securitycontrol-screen/src/main/resources/mapper/SjMaxDeviceMapper.xml index 7cf8f7d..2d5e863 100644 --- a/securitycontrol-model/securitycontrol-screen/src/main/resources/mapper/SjMaxDeviceMapper.xml +++ b/securitycontrol-model/securitycontrol-screen/src/main/resources/mapper/SjMaxDeviceMapper.xml @@ -85,19 +85,20 @@ wt.team_name, wt.team_leader, tp_count.total_people, - ROUND( - COALESCE(SUM(actual.actual_count), 0) * 100.0 / - ((DATEDIFF(#{endTime} , #{startTime}) + 1) * tp_count.total_people), - 2 - ) AS utilization_rate -- 百分比形式(如 86.70) + IFNULL(ROUND( + COALESCE(SUM(actual.actual_count), 0) * 100.0 / + ((DATEDIFF(#{endTime} , #{startTime}) + 1) * tp_count.total_people), + 2 + ),0.0) AS utilization_rate FROM sj_work_team wt - INNER JOIN ( + Left JOIN ( -- 每个班组的总人数 SELECT - team_id, - COUNT(*) AS total_people - FROM sj_team_people - WHERE team_id IS NOT NULL + st.id as team_id, + COUNT(team_id) AS total_people + FROM + sj_work_team st + left join sj_team_people sp on st.id = sp.team_id GROUP BY team_id ) tp_count ON wt.id = tp_count.team_id CROSS JOIN ( @@ -129,5 +130,6 @@ GROUP BY wt.id, wt.team_name, wt.team_leader, tp_count.total_people ORDER BY utilization_rate DESC + limit 5