From 78b6ea367ec8173fce7b0329bc194107cbcb42a7 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Wed, 21 Jan 2026 18:13:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(report):=20=E6=B7=BB=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BF=9D=E5=85=BB=E4=B8=8E=E6=95=85=E9=9A=9C=E5=88=86?= =?UTF-8?q?=E6=9E=90=E7=9C=8B=E6=9D=BF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增Board5Controller提供设备保养与故障分析看板的API接口 - 添加Board5Service服务层处理设备数据分析逻辑 - 创建Board5Mapper数据访问层实现数据库查询操作 - 新增多个VO类用于封装看板数据模型包括工单统计、维修时间、设备状态等 - 配置Board5Mapper.xml实现各类统计数据的SQL查询语句 - 实现设备状态分布、故障来源分析、产量TOP5等统计功能 - 添加保养执行情况、巡检执行情况等数据统计查询接口 --- .../report/controller/Board5Controller.java | 96 +++++++ .../vo/Board5DeviceStatusDistributionVo.java | 57 ++++ .../vo/Board5FaultSourceDistributionVo.java | 46 ++++ .../report/domain/vo/Board5FaultTrendVo.java | 35 +++ .../domain/vo/Board5InspectStatisticsVo.java | 35 +++ .../domain/vo/Board5MaintStatisticsVo.java | 112 ++++++++ .../vo/Board5OrderWorkStatisticsVo.java | 57 ++++ .../domain/vo/Board5ProductionTopVo.java | 46 ++++ .../vo/Board5RepairTimeStatisticsVo.java | 35 +++ .../com/aucma/report/mapper/Board5Mapper.java | 71 +++++ .../aucma/report/service/IBoard5Service.java | 54 ++++ .../service/impl/Board5ServiceImpl.java | 260 ++++++++++++++++++ .../resources/mapper/report/Board5Mapper.xml | 132 +++++++++ 13 files changed, 1036 insertions(+) create mode 100644 aucma-report/src/main/java/com/aucma/report/controller/Board5Controller.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5DeviceStatusDistributionVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultSourceDistributionVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultTrendVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5InspectStatisticsVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5MaintStatisticsVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5OrderWorkStatisticsVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5ProductionTopVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/domain/vo/Board5RepairTimeStatisticsVo.java create mode 100644 aucma-report/src/main/java/com/aucma/report/mapper/Board5Mapper.java create mode 100644 aucma-report/src/main/java/com/aucma/report/service/IBoard5Service.java create mode 100644 aucma-report/src/main/java/com/aucma/report/service/impl/Board5ServiceImpl.java create mode 100644 aucma-report/src/main/resources/mapper/report/Board5Mapper.xml diff --git a/aucma-report/src/main/java/com/aucma/report/controller/Board5Controller.java b/aucma-report/src/main/java/com/aucma/report/controller/Board5Controller.java new file mode 100644 index 0000000..92ea5e9 --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/controller/Board5Controller.java @@ -0,0 +1,96 @@ +package com.aucma.report.controller; + +import com.aucma.common.annotation.Anonymous; +import com.aucma.common.core.controller.BaseController; +import com.aucma.common.core.domain.AjaxResult; +import com.aucma.report.service.IBoard5Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Board5看板数据Controller + * 设备保养与故障分析看板 + * + * @author YinQ + */ +@RestController +@RequestMapping("/board5") +public class Board5Controller extends BaseController { + + @Autowired + private IBoard5Service board5Service; + + /** + * 获取工单统计(总数、已完成、完成率、停机) + */ + @Anonymous + @GetMapping("/orderWorkStatistics") + public AjaxResult getOrderWorkStatistics() { + return AjaxResult.success(board5Service.getOrderWorkStatistics()); + } + + /** + * 获取维修时间统计(平均响应时间、平均维修时间) + */ + @Anonymous + @GetMapping("/repairTimeStatistics") + public AjaxResult getRepairTimeStatistics() { + return AjaxResult.success(board5Service.getRepairTimeStatistics()); + } + + /** + * 获取保养执行情况统计 + */ + @Anonymous + @GetMapping("/maintStatistics") + public AjaxResult getMaintStatistics() { + return AjaxResult.success(board5Service.getMaintStatistics()); + } + + /** + * 获取巡检执行情况统计 + */ + @Anonymous + @GetMapping("/inspectStatistics") + public AjaxResult getInspectStatistics() { + return AjaxResult.success(board5Service.getInspectStatistics()); + } + + /** + * 获取设备状态分布 + */ + @Anonymous + @GetMapping("/deviceStatusDistribution") + public AjaxResult getDeviceStatusDistribution() { + return AjaxResult.success(board5Service.getDeviceStatusDistribution()); + } + + /** + * 获取故障来源分布 + */ + @Anonymous + @GetMapping("/faultSourceDistribution") + public AjaxResult getFaultSourceDistribution() { + return AjaxResult.success(board5Service.getFaultSourceDistribution()); + } + + /** + * 获取故障数量曲线 + */ + @Anonymous + @GetMapping("/faultTrendList") + public AjaxResult getFaultTrendList() { + return AjaxResult.success(board5Service.getFaultTrendList()); + } + + /** + * 获取产量机台TOP5 + */ + @Anonymous + @GetMapping("/productionTop5") + public AjaxResult getProductionTop5() { + return AjaxResult.success(board5Service.getProductionTop5()); + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5DeviceStatusDistributionVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5DeviceStatusDistributionVo.java new file mode 100644 index 0000000..c657695 --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5DeviceStatusDistributionVo.java @@ -0,0 +1,57 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 设备状态分布VO + * 实验设备、未检设备、正常设备、异常设备 + * + * @author YinQ + */ +public class Board5DeviceStatusDistributionVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 实验设备占比 */ + private Long experimentPercent; + + /** 未检设备占比 */ + private Long uncheckedPercent; + + /** 正常设备占比 */ + private Long normalPercent; + + /** 异常设备占比 */ + private Long abnormalPercent; + + public Long getExperimentPercent() { + return experimentPercent; + } + + public void setExperimentPercent(Long experimentPercent) { + this.experimentPercent = experimentPercent; + } + + public Long getUncheckedPercent() { + return uncheckedPercent; + } + + public void setUncheckedPercent(Long uncheckedPercent) { + this.uncheckedPercent = uncheckedPercent; + } + + public Long getNormalPercent() { + return normalPercent; + } + + public void setNormalPercent(Long normalPercent) { + this.normalPercent = normalPercent; + } + + public Long getAbnormalPercent() { + return abnormalPercent; + } + + public void setAbnormalPercent(Long abnormalPercent) { + this.abnormalPercent = abnormalPercent; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultSourceDistributionVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultSourceDistributionVo.java new file mode 100644 index 0000000..5db962f --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultSourceDistributionVo.java @@ -0,0 +1,46 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 故障来源分布VO + * 维护故障、运行故障、自然故障 + * + * @author YinQ + */ +public class Board5FaultSourceDistributionVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 维护故障占比(FAULT_SOURCE_TYPE=1) */ + private Long maintainPercent; + + /** 运行故障占比(FAULT_SOURCE_TYPE=2,3) */ + private Long runningPercent; + + /** 自然故障占比(FAULT_SOURCE_TYPE=9) */ + private Long naturalPercent; + + public Long getMaintainPercent() { + return maintainPercent; + } + + public void setMaintainPercent(Long maintainPercent) { + this.maintainPercent = maintainPercent; + } + + public Long getRunningPercent() { + return runningPercent; + } + + public void setRunningPercent(Long runningPercent) { + this.runningPercent = runningPercent; + } + + public Long getNaturalPercent() { + return naturalPercent; + } + + public void setNaturalPercent(Long naturalPercent) { + this.naturalPercent = naturalPercent; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultTrendVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultTrendVo.java new file mode 100644 index 0000000..cce4edf --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultTrendVo.java @@ -0,0 +1,35 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 故障数量曲线VO + * 日期、故障数量 + * + * @author YinQ + */ +public class Board5FaultTrendVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 日期(格式:日,如 01、02...) */ + private String dateValue; + + /** 故障数量 */ + private Long faultCount; + + public String getDateValue() { + return dateValue; + } + + public void setDateValue(String dateValue) { + this.dateValue = dateValue; + } + + public Long getFaultCount() { + return faultCount; + } + + public void setFaultCount(Long faultCount) { + this.faultCount = faultCount; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5InspectStatisticsVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5InspectStatisticsVo.java new file mode 100644 index 0000000..e94ad02 --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5InspectStatisticsVo.java @@ -0,0 +1,35 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 设备巡检执行情况VO + * 应检设备、完成率 + * + * @author YinQ + */ +public class Board5InspectStatisticsVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 应检设备数量 */ + private Long deviceCount; + + /** 设备巡检完成率 */ + private String completeRate; + + public Long getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(Long deviceCount) { + this.deviceCount = deviceCount; + } + + public String getCompleteRate() { + return completeRate; + } + + public void setCompleteRate(String completeRate) { + this.completeRate = completeRate; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5MaintStatisticsVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5MaintStatisticsVo.java new file mode 100644 index 0000000..77eca91 --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5MaintStatisticsVo.java @@ -0,0 +1,112 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 设备保养执行情况VO + * 计划保养、已保养、待保养、保养中、待验证、完成率 + * + * @author YinQ + */ +public class Board5MaintStatisticsVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 计划保养数量 */ + private Long planCount; + + /** 已保养数量(MAINT_STATUS=3) */ + private Long completeCount; + + /** 待保养数量(MAINT_STATUS=1) */ + private Long waitingCount; + + /** 待保养比例 */ + private String waitingRate; + + /** 保养中数量(MAINT_STATUS=2) */ + private Long doingCount; + + /** 保养中比例 */ + private String doingRate; + + /** 待验证数量(MAINT_STATUS=4) */ + private Long verifyCount; + + /** 待验证比例 */ + private String verifyRate; + + /** 设备保养完成率 */ + private String completeRate; + + public Long getPlanCount() { + return planCount; + } + + public void setPlanCount(Long planCount) { + this.planCount = planCount; + } + + public Long getCompleteCount() { + return completeCount; + } + + public void setCompleteCount(Long completeCount) { + this.completeCount = completeCount; + } + + public Long getWaitingCount() { + return waitingCount; + } + + public void setWaitingCount(Long waitingCount) { + this.waitingCount = waitingCount; + } + + public String getWaitingRate() { + return waitingRate; + } + + public void setWaitingRate(String waitingRate) { + this.waitingRate = waitingRate; + } + + public Long getDoingCount() { + return doingCount; + } + + public void setDoingCount(Long doingCount) { + this.doingCount = doingCount; + } + + public String getDoingRate() { + return doingRate; + } + + public void setDoingRate(String doingRate) { + this.doingRate = doingRate; + } + + public Long getVerifyCount() { + return verifyCount; + } + + public void setVerifyCount(Long verifyCount) { + this.verifyCount = verifyCount; + } + + public String getVerifyRate() { + return verifyRate; + } + + public void setVerifyRate(String verifyRate) { + this.verifyRate = verifyRate; + } + + public String getCompleteRate() { + return completeRate; + } + + public void setCompleteRate(String completeRate) { + this.completeRate = completeRate; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5OrderWorkStatisticsVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5OrderWorkStatisticsVo.java new file mode 100644 index 0000000..649d81e --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5OrderWorkStatisticsVo.java @@ -0,0 +1,57 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 工单统计VO + * 工单总数、已完成、完成率、停机工单 + * + * @author YinQ + */ +public class Board5OrderWorkStatisticsVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 工单总数 */ + private Long totalCount; + + /** 已完成数量 */ + private Long completeCount; + + /** 完成率(百分比数值,不含%) */ + private String completeRate; + + /** 停机工单数量 */ + private Long stopCount; + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + public Long getCompleteCount() { + return completeCount; + } + + public void setCompleteCount(Long completeCount) { + this.completeCount = completeCount; + } + + public String getCompleteRate() { + return completeRate; + } + + public void setCompleteRate(String completeRate) { + this.completeRate = completeRate; + } + + public Long getStopCount() { + return stopCount; + } + + public void setStopCount(Long stopCount) { + this.stopCount = stopCount; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5ProductionTopVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5ProductionTopVo.java new file mode 100644 index 0000000..f58596c --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5ProductionTopVo.java @@ -0,0 +1,46 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 产量机台TOP5 VO + * 设备名称、百分比、产量 + * + * @author YinQ + */ +public class Board5ProductionTopVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 设备名称 */ + private String deviceName; + + /** 百分比(相对于最大产量) */ + private Long percent; + + /** 产量 */ + private Long production; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public Long getPercent() { + return percent; + } + + public void setPercent(Long percent) { + this.percent = percent; + } + + public Long getProduction() { + return production; + } + + public void setProduction(Long production) { + this.production = production; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5RepairTimeStatisticsVo.java b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5RepairTimeStatisticsVo.java new file mode 100644 index 0000000..0d6b599 --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/domain/vo/Board5RepairTimeStatisticsVo.java @@ -0,0 +1,35 @@ +package com.aucma.report.domain.vo; + +import java.io.Serializable; + +/** + * Board5 维修时间统计VO + * 平均响应时间、平均维修时间 + * + * @author YinQ + */ +public class Board5RepairTimeStatisticsVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 平均响应时间(分钟) */ + private String avgResponseTime; + + /** 平均维修时间(小时) */ + private String avgRepairTime; + + public String getAvgResponseTime() { + return avgResponseTime; + } + + public void setAvgResponseTime(String avgResponseTime) { + this.avgResponseTime = avgResponseTime; + } + + public String getAvgRepairTime() { + return avgRepairTime; + } + + public void setAvgRepairTime(String avgRepairTime) { + this.avgRepairTime = avgRepairTime; + } +} diff --git a/aucma-report/src/main/java/com/aucma/report/mapper/Board5Mapper.java b/aucma-report/src/main/java/com/aucma/report/mapper/Board5Mapper.java new file mode 100644 index 0000000..f529e6d --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/mapper/Board5Mapper.java @@ -0,0 +1,71 @@ +package com.aucma.report.mapper; + +import com.aucma.report.domain.vo.*; +import org.apache.ibatis.annotations.Mapper; + +import java.util.HashMap; +import java.util.List; + +/** + * Board5看板数据Mapper接口 + * 设备保养与故障分析看板 + * + * @author YinQ + */ +@Mapper +public interface Board5Mapper { + + /** + * 查询工单统计(总数、已完成、停机) + * 数据来源:BASE_ORDERINFO + */ + HashMap selectOrderWorkStatistics(); + + /** + * 查询维修时间统计(平均响应时间、平均维修时间) + * 数据来源:DMS_BILLS_FAULT_INSTANCE + */ + HashMap selectRepairTimeStatistics(); + + /** + * 查询保养执行情况统计 + * 数据来源:DMS_PLAN_MAINT + */ + HashMap selectMaintStatistics(); + + /** + * 查询巡检执行情况统计 + * 数据来源:DMS_PLAN_INSPECT, DMS_BILLS_INSPECT_INSTANCE + */ + HashMap selectInspectStatistics(); + + /** + * 查询设备状态分布 + * 数据来源:BASE_DEVICELEDGER + */ + HashMap selectDeviceStatusDistribution(); + + /** + * 查询故障来源分布 + * 数据来源:DMS_BILLS_FAULT_INSTANCE + */ + HashMap selectFaultSourceDistribution(); + + /** + * 查询故障数量曲线(近30天每日告警数量) + * 数据来源:RECORD_ALARM_DEVICE + */ + List selectFaultTrendList(); + + /** + * 查询产量机台TOP5 + * 数据来源:BASE_DEVICE_PARAM_VAL + BASE_DEVICELEDGER + */ + List selectProductionTop5(); + + /** + * 查询最大产量(用于计算百分比) + * 数据来源:BASE_DEVICE_PARAM_VAL + */ + Long selectMaxProduction(); +} diff --git a/aucma-report/src/main/java/com/aucma/report/service/IBoard5Service.java b/aucma-report/src/main/java/com/aucma/report/service/IBoard5Service.java new file mode 100644 index 0000000..0398cf2 --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/service/IBoard5Service.java @@ -0,0 +1,54 @@ +package com.aucma.report.service; + +import com.aucma.report.domain.vo.*; + +import java.util.List; + +/** + * Board5看板数据Service接口 + * 设备保养与故障分析看板 + * + * @author YinQ + */ +public interface IBoard5Service { + + /** + * 获取工单统计(总数、已完成、完成率、停机) + */ + Board5OrderWorkStatisticsVo getOrderWorkStatistics(); + + /** + * 获取维修时间统计(平均响应时间、平均维修时间) + */ + Board5RepairTimeStatisticsVo getRepairTimeStatistics(); + + /** + * 获取保养执行情况统计 + */ + Board5MaintStatisticsVo getMaintStatistics(); + + /** + * 获取巡检执行情况统计 + */ + Board5InspectStatisticsVo getInspectStatistics(); + + /** + * 获取设备状态分布 + */ + Board5DeviceStatusDistributionVo getDeviceStatusDistribution(); + + /** + * 获取故障来源分布 + */ + Board5FaultSourceDistributionVo getFaultSourceDistribution(); + + /** + * 获取故障数量曲线 + */ + List getFaultTrendList(); + + /** + * 获取产量机台TOP5 + */ + List getProductionTop5(); +} diff --git a/aucma-report/src/main/java/com/aucma/report/service/impl/Board5ServiceImpl.java b/aucma-report/src/main/java/com/aucma/report/service/impl/Board5ServiceImpl.java new file mode 100644 index 0000000..faa8f9f --- /dev/null +++ b/aucma-report/src/main/java/com/aucma/report/service/impl/Board5ServiceImpl.java @@ -0,0 +1,260 @@ +package com.aucma.report.service.impl; + +import com.aucma.report.domain.vo.*; +import com.aucma.report.mapper.Board5Mapper; +import com.aucma.report.service.IBoard5Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Board5看板数据Service业务层处理 + * 设备保养与故障分析看板 + * + * @author YinQ + */ +@Service +public class Board5ServiceImpl implements IBoard5Service { + + @Autowired + private Board5Mapper board5Mapper; + + /** + * 获取工单统计(总数、已完成、完成率、停机) + */ + @Override + public Board5OrderWorkStatisticsVo getOrderWorkStatistics() { + Board5OrderWorkStatisticsVo vo = new Board5OrderWorkStatisticsVo(); + HashMap stats = board5Mapper.selectOrderWorkStatistics(); + if (stats != null) { + Long totalCount = getLongValue(stats.get("TOTAL_COUNT")); + Long completeCount = getLongValue(stats.get("COMPLETE_COUNT")); + Long stopCount = getLongValue(stats.get("STOP_COUNT")); + vo.setTotalCount(totalCount); + vo.setCompleteCount(completeCount); + vo.setStopCount(stopCount); + if (totalCount > 0) { + vo.setCompleteRate(String.valueOf(Math.round(completeCount * 100.0 / totalCount))); + } else { + vo.setCompleteRate("0"); + } + } else { + vo.setTotalCount(0L); + vo.setCompleteCount(0L); + vo.setStopCount(0L); + vo.setCompleteRate("0"); + } + return vo; + } + + /** + * 获取维修时间统计(平均响应时间、平均维修时间) + */ + @Override + public Board5RepairTimeStatisticsVo getRepairTimeStatistics() { + Board5RepairTimeStatisticsVo vo = new Board5RepairTimeStatisticsVo(); + HashMap stats = board5Mapper.selectRepairTimeStatistics(); + if (stats != null) { + vo.setAvgResponseTime(getStringValue(stats.get("AVG_RESPONSE_TIME"))); + vo.setAvgRepairTime(getStringValue(stats.get("AVG_REPAIR_TIME"))); + } else { + vo.setAvgResponseTime("0"); + vo.setAvgRepairTime("0"); + } + return vo; + } + + /** + * 获取保养执行情况统计 + */ + @Override + public Board5MaintStatisticsVo getMaintStatistics() { + Board5MaintStatisticsVo vo = new Board5MaintStatisticsVo(); + HashMap stats = board5Mapper.selectMaintStatistics(); + if (stats != null) { + Long planCount = getLongValue(stats.get("PLAN_COUNT")); + Long completeCount = getLongValue(stats.get("COMPLETE_COUNT")); + Long waitingCount = getLongValue(stats.get("WAITING_COUNT")); + Long doingCount = getLongValue(stats.get("DOING_COUNT")); + Long verifyCount = getLongValue(stats.get("VERIFY_COUNT")); + + vo.setPlanCount(planCount); + vo.setCompleteCount(completeCount); + vo.setWaitingCount(waitingCount); + vo.setDoingCount(doingCount); + vo.setVerifyCount(verifyCount); + + if (planCount > 0) { + vo.setWaitingRate(String.valueOf(Math.round(waitingCount * 100.0 / planCount))); + vo.setDoingRate(String.valueOf(Math.round(doingCount * 100.0 / planCount))); + vo.setVerifyRate(String.valueOf(Math.round(verifyCount * 100.0 / planCount))); + vo.setCompleteRate(String.valueOf(Math.round(completeCount * 100.0 / planCount))); + } else { + vo.setWaitingRate("0"); + vo.setDoingRate("0"); + vo.setVerifyRate("0"); + vo.setCompleteRate("0"); + } + } else { + vo.setPlanCount(0L); + vo.setCompleteCount(0L); + vo.setWaitingCount(0L); + vo.setDoingCount(0L); + vo.setVerifyCount(0L); + vo.setWaitingRate("0"); + vo.setDoingRate("0"); + vo.setVerifyRate("0"); + vo.setCompleteRate("0"); + } + return vo; + } + + /** + * 获取巡检执行情况统计 + */ + @Override + public Board5InspectStatisticsVo getInspectStatistics() { + Board5InspectStatisticsVo vo = new Board5InspectStatisticsVo(); + HashMap stats = board5Mapper.selectInspectStatistics(); + if (stats != null) { + Long deviceCount = getLongValue(stats.get("DEVICE_COUNT")); + Long completeCount = getLongValue(stats.get("COMPLETE_COUNT")); + vo.setDeviceCount(deviceCount); + if (deviceCount > 0) { + vo.setCompleteRate(String.valueOf(Math.round(completeCount * 100.0 / deviceCount))); + } else { + vo.setCompleteRate("0"); + } + } else { + vo.setDeviceCount(0L); + vo.setCompleteRate("0"); + } + return vo; + } + + /** + * 获取设备状态分布 + */ + @Override + public Board5DeviceStatusDistributionVo getDeviceStatusDistribution() { + Board5DeviceStatusDistributionVo vo = new Board5DeviceStatusDistributionVo(); + HashMap stats = board5Mapper.selectDeviceStatusDistribution(); + if (stats != null) { + Long totalCount = getLongValue(stats.get("TOTAL_COUNT")); + Long normalCount = getLongValue(stats.get("NORMAL_COUNT")); + Long abnormalCount = getLongValue(stats.get("ABNORMAL_COUNT")); + Long scrapCount = getLongValue(stats.get("SCRAP_COUNT")); + Long experimentCount = getLongValue(stats.get("EXPERIMENT_COUNT")); + + if (totalCount > 0) { + vo.setExperimentPercent(Math.round(experimentCount * 100.0 / totalCount)); + vo.setUncheckedPercent(Math.round(scrapCount * 100.0 / totalCount)); + vo.setNormalPercent(Math.round(normalCount * 100.0 / totalCount)); + vo.setAbnormalPercent(Math.round(abnormalCount * 100.0 / totalCount)); + } else { + vo.setExperimentPercent(0L); + vo.setUncheckedPercent(0L); + vo.setNormalPercent(0L); + vo.setAbnormalPercent(0L); + } + } else { + vo.setExperimentPercent(0L); + vo.setUncheckedPercent(0L); + vo.setNormalPercent(0L); + vo.setAbnormalPercent(0L); + } + return vo; + } + + /** + * 获取故障来源分布 + */ + @Override + public Board5FaultSourceDistributionVo getFaultSourceDistribution() { + Board5FaultSourceDistributionVo vo = new Board5FaultSourceDistributionVo(); + HashMap stats = board5Mapper.selectFaultSourceDistribution(); + if (stats != null) { + Long totalCount = getLongValue(stats.get("TOTAL_COUNT")); + Long maintainCount = getLongValue(stats.get("MAINTAIN_COUNT")); + Long runningCount = getLongValue(stats.get("RUNNING_COUNT")); + Long naturalCount = getLongValue(stats.get("NATURAL_COUNT")); + + if (totalCount > 0) { + vo.setMaintainPercent(Math.round(maintainCount * 100.0 / totalCount)); + vo.setRunningPercent(Math.round(runningCount * 100.0 / totalCount)); + vo.setNaturalPercent(Math.round(naturalCount * 100.0 / totalCount)); + } else { + vo.setMaintainPercent(0L); + vo.setRunningPercent(0L); + vo.setNaturalPercent(0L); + } + } else { + vo.setMaintainPercent(0L); + vo.setRunningPercent(0L); + vo.setNaturalPercent(0L); + } + return vo; + } + + /** + * 获取故障数量曲线 + */ + @Override + public List getFaultTrendList() { + List list = board5Mapper.selectFaultTrendList(); + return list != null ? list : new ArrayList<>(); + } + + /** + * 获取产量机台TOP5 + */ + @Override + public List getProductionTop5() { + List list = board5Mapper.selectProductionTop5(); + if (list == null || list.isEmpty()) { + return new ArrayList<>(); + } + Long maxProduction = board5Mapper.selectMaxProduction(); + if (maxProduction == null || maxProduction == 0) { + maxProduction = 1L; + } + for (Board5ProductionTopVo vo : list) { + if (vo.getProduction() != null && vo.getProduction() > 0) { + vo.setPercent(Math.round(vo.getProduction() * 100.0 / maxProduction)); + } else { + vo.setPercent(0L); + } + } + return list; + } + + /** + * 安全获取Long值 + */ + private Long getLongValue(Object obj) { + if (obj == null) { + return 0L; + } + if (obj instanceof Number) { + return ((Number) obj).longValue(); + } + try { + return Long.parseLong(obj.toString()); + } catch (NumberFormatException e) { + return 0L; + } + } + + /** + * 安全获取String值 + */ + private String getStringValue(Object obj) { + if (obj == null) { + return "0"; + } + return obj.toString(); + } +} diff --git a/aucma-report/src/main/resources/mapper/report/Board5Mapper.xml b/aucma-report/src/main/resources/mapper/report/Board5Mapper.xml new file mode 100644 index 0000000..7610a0e --- /dev/null +++ b/aucma-report/src/main/resources/mapper/report/Board5Mapper.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +