From 5b8259d934a293077594a8613c58e44605395481 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Mon, 29 Dec 2025 15:59:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(base):=20=E6=B7=BB=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=8A=B6=E6=80=81=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BF=AE=E5=A4=8DExcel=E5=AF=BC=E5=87=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 1. statusCode 含义 statusCode 状态 说明 0 未开机 当天无三色灯数据 1 运行 最新记录是"三色灯机器运行" 2 停机 最新记录是"三色灯机器暂停" 3 待机 最新记录是"三色灯机器待机" 2. 三个接口返回数据总结 接口 返回数据 /statistics 设备汇总统计:总数、运行/停机/待机/未开机台数、开机率 /deviceStatus 每台设备的实时状态列表:设备编号、名称、产线、状态文字、状态码 /deviceStartTime 每台设备的当天开机时间:设备编号、名称、产线、开机时间值 一句话总结:statistics 返回全局统计数字,deviceStatus 返回每台设备当前是运行/停机/待机/未开机,deviceStartTime 返回每台设备今天的开机时间。 - 修复AndonEventLog中Excel导出的操作类型显示问题 - 添加Anonymous注解支持设备参数访问 - 实现设备状态统计功能,包括开机率、运行台数、停机台数、待机台数、未开机台数 - 添加设备状态列表查询接口,返回设备编号、名称、三色灯状态 - 添加设备开机时间查询接口,返回设备当天最新开机时间 - 实现SQL查询统计设备三色灯状态数据 - 添加异常处理和数据验证机制 - 优化设备状态查询性能,使用CTE和窗口函数进行统计计算 --- .../BaseDeviceParamValController.java | 28 ++++++ .../base/mapper/BaseDeviceParamValMapper.java | 23 +++++ .../service/IBaseDeviceParamValService.java | 23 +++++ .../impl/BaseDeviceParamValServiceImpl.java | 77 +++++++++++++++ .../mapper/base/BaseDeviceParamValMapper.xml | 93 +++++++++++++++++++ .../production/domain/AndonEventLog.java | 2 +- 6 files changed, 245 insertions(+), 1 deletion(-) diff --git a/aucma-base/src/main/java/com/aucma/base/controller/BaseDeviceParamValController.java b/aucma-base/src/main/java/com/aucma/base/controller/BaseDeviceParamValController.java index 5c14a7a..593ab47 100644 --- a/aucma-base/src/main/java/com/aucma/base/controller/BaseDeviceParamValController.java +++ b/aucma-base/src/main/java/com/aucma/base/controller/BaseDeviceParamValController.java @@ -3,6 +3,7 @@ package com.aucma.base.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.aucma.common.annotation.Anonymous; import com.aucma.common.utils.DateUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -118,5 +119,32 @@ public class BaseDeviceParamValController extends BaseController { return success(list); } + /** + * 获取设备状态统计(基于三色灯参数) + * 返回:设备数量、开机率、运行台数、停机台数、待机台数、未开机台数 + */ + @PreAuthorize("@ss.hasPermi('baseDeviceParamVal:val:list')" ) + @GetMapping("/statistics" ) + public AjaxResult statistics() { + return success(baseDeviceParamValService.selectDeviceStatusStatistics()); + } + + /** + * 获取每个设备的编号、名称、三色灯状态 + */ + @PreAuthorize("@ss.hasPermi('baseDeviceParamVal:val:list')" ) + @GetMapping("/deviceStatus" ) + public AjaxResult deviceStatus() { + return success(baseDeviceParamValService.selectDeviceStatusList()); + } + + /** + * 获取每个设备的开机时间当天最新值 + */ + @PreAuthorize("@ss.hasPermi('baseDeviceParamVal:val:list')" ) + @GetMapping("/deviceStartTime" ) + public AjaxResult deviceStartTime() { + return success(baseDeviceParamValService.selectDeviceStartTimeList()); + } } diff --git a/aucma-base/src/main/java/com/aucma/base/mapper/BaseDeviceParamValMapper.java b/aucma-base/src/main/java/com/aucma/base/mapper/BaseDeviceParamValMapper.java index ca51bb3..dd8bda0 100644 --- a/aucma-base/src/main/java/com/aucma/base/mapper/BaseDeviceParamValMapper.java +++ b/aucma-base/src/main/java/com/aucma/base/mapper/BaseDeviceParamValMapper.java @@ -1,6 +1,8 @@ package com.aucma.base.mapper; import java.util.List; +import java.util.Map; + import com.aucma.base.domain.BaseDeviceParamVal; /** @@ -66,4 +68,25 @@ public interface BaseDeviceParamValMapper * @return 结果 */ public int deleteBaseDeviceParamValByRecordIds(Long[] recordIds); + + /** + * 查询设备状态统计(基于三色灯参数) + * + * @return 设备状态统计Map + */ + public Map selectDeviceStatusStatistics(); + + /** + * 获取每个设备的编号、名称、三色灯状态 + * + * @return 设备状态列表 + */ + public List> selectDeviceStatusList(); + + /** + * 获取每个设备的开机时间当天最新值 + * + * @return 设备开机时间列表 + */ + public List> selectDeviceStartTimeList(); } diff --git a/aucma-base/src/main/java/com/aucma/base/service/IBaseDeviceParamValService.java b/aucma-base/src/main/java/com/aucma/base/service/IBaseDeviceParamValService.java index 1918bd5..8ea6640 100644 --- a/aucma-base/src/main/java/com/aucma/base/service/IBaseDeviceParamValService.java +++ b/aucma-base/src/main/java/com/aucma/base/service/IBaseDeviceParamValService.java @@ -1,6 +1,8 @@ package com.aucma.base.service; import java.util.List; +import java.util.Map; + import com.aucma.base.domain.BaseDeviceParamVal; /** @@ -66,4 +68,25 @@ public interface IBaseDeviceParamValService * @return 结果 */ public int deleteBaseDeviceParamValByRecordId(Long recordId); + + /** + * 查询设备状态统计(基于三色灯参数) + * + * @return 设备状态统计Map + */ + public Map selectDeviceStatusStatistics(); + + /** + * 获取每个设备的编号、名称、三色灯状态 + * + * @return 设备状态列表 + */ + public List> selectDeviceStatusList(); + + /** + * 获取每个设备的开机时间当天最新值 + * + * @return 设备开机时间列表 + */ + public List> selectDeviceStartTimeList(); } diff --git a/aucma-base/src/main/java/com/aucma/base/service/impl/BaseDeviceParamValServiceImpl.java b/aucma-base/src/main/java/com/aucma/base/service/impl/BaseDeviceParamValServiceImpl.java index eaf30a4..167e859 100644 --- a/aucma-base/src/main/java/com/aucma/base/service/impl/BaseDeviceParamValServiceImpl.java +++ b/aucma-base/src/main/java/com/aucma/base/service/impl/BaseDeviceParamValServiceImpl.java @@ -1,7 +1,9 @@ package com.aucma.base.service.impl; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -116,4 +118,79 @@ public class BaseDeviceParamValServiceImpl implements IBaseDeviceParamValService { return baseDeviceParamValMapper.deleteBaseDeviceParamValByRecordId(recordId); } + + /** + * 查询设备状态统计(基于三色灯参数) + * + * @return 设备状态统计Map + */ + @Override + public Map selectDeviceStatusStatistics() + { + try { + Map result = baseDeviceParamValMapper.selectDeviceStatusStatistics(); + if (result == null) { + result = new HashMap<>(); + result.put("totalCount", 0); + result.put("runningCount", 0); + result.put("stoppedCount", 0); + result.put("standbyCount", 0); + result.put("notStartedCount", 0); + result.put("runningRate", "0%"); + return result; + } + // 计算开机率 + Object totalObj = result.get("TOTALCOUNT"); + Object runningObj = result.get("RUNNINGCOUNT"); + int total = totalObj != null ? ((Number) totalObj).intValue() : 0; + int running = runningObj != null ? ((Number) runningObj).intValue() : 0; + String runningRate = total > 0 ? String.format("%.2f%%", (running * 100.0 / total)) : "0%"; + result.put("runningRate", runningRate); + return result; + } catch (Exception e) { + log.error("查询设备状态统计失败: {}", e.getMessage()); + Map result = new HashMap<>(); + result.put("totalCount", 0); + result.put("runningCount", 0); + result.put("stoppedCount", 0); + result.put("standbyCount", 0); + result.put("notStartedCount", 0); + result.put("runningRate", "0%"); + return result; + } + } + + /** + * 获取每个设备的编号、名称、三色灯状态 + * + * @return 设备状态列表 + */ + @Override + public List> selectDeviceStatusList() + { + try { + List> list = baseDeviceParamValMapper.selectDeviceStatusList(); + return list != null ? list : Collections.emptyList(); + } catch (Exception e) { + log.error("查询设备状态列表失败: {}", e.getMessage()); + return Collections.emptyList(); + } + } + + /** + * 获取每个设备的开机时间当天最新值 + * + * @return 设备开机时间列表 + */ + @Override + public List> selectDeviceStartTimeList() + { + try { + List> list = baseDeviceParamValMapper.selectDeviceStartTimeList(); + return list != null ? list : Collections.emptyList(); + } catch (Exception e) { + log.error("查询设备开机时间列表失败: {}", e.getMessage()); + return Collections.emptyList(); + } + } } diff --git a/aucma-base/src/main/resources/mapper/base/BaseDeviceParamValMapper.xml b/aucma-base/src/main/resources/mapper/base/BaseDeviceParamValMapper.xml index 66bcabc..18aab62 100644 --- a/aucma-base/src/main/resources/mapper/base/BaseDeviceParamValMapper.xml +++ b/aucma-base/src/main/resources/mapper/base/BaseDeviceParamValMapper.xml @@ -111,4 +111,97 @@ ) WHERE rn = 1 ) WHERE row_num <= 200 + + + + + + + + + \ No newline at end of file diff --git a/aucma-production/src/main/java/com/aucma/production/domain/AndonEventLog.java b/aucma-production/src/main/java/com/aucma/production/domain/AndonEventLog.java index bafc982..3653160 100644 --- a/aucma-production/src/main/java/com/aucma/production/domain/AndonEventLog.java +++ b/aucma-production/src/main/java/com/aucma/production/domain/AndonEventLog.java @@ -26,7 +26,7 @@ private static final long serialVersionUID=1L; private Long eventId; /** 操作类型(创建/确认/分配/升级/解决/取消/评论) */ - @Excel(name = "操作类型", readConverterExp = "创=建/确认/分配/升级/解决/取消/评论") + @Excel(name = "操作类型", readConverterExp = "=创建/确认/分配/升级/解决/取消/评论") private String operation; /** 操作内容 */