# Board4 看板真实数据接口实现方案 ## 一、接口概述 ### 1.1 接口列表 | 序号 | 接口路径 | 请求方式 | 功能描述 | 实体类 | |------|----------|----------|----------|--------| | 1 | `/board4/productionTotal` | GET | 产量统计(年/月/日累计) | Board4ProductionTotalVo | | 2 | `/board4/orderStatistics` | GET | 工单统计(计划/完成/差异/完成率) | Board4OrderStatisticsVo | | 3 | `/board4/orderProgressList` | GET | 工单进度列表 | Board4OrderProgressVo | | 4 | `/board4/deviceStatus` | GET | 设备状态统计 | Board4DeviceStatusVo | | 5 | `/board4/alarmInfo` | GET | 最新报警信息 | Board4AlarmInfoVo | | 6 | `/board4/repairAnalysisList` | GET | 维修分析列表(按设备聚合) | Board4RepairAnalysisVo | | 7 | `/board4/repairTrendList` | GET | 报修趋势列表 | Board4RepairTrendVo | | 8 | `/board4/qualityStatistics` | GET | 质量统计 | Board4QualityStatisticsVo | | 9 | `/board4/qualityTraceList` | GET | 质量追溯列表 | Board4QualityTraceVo | | 10 | `/board4/deviceProductionList` | GET | 设备分析/产量列表 | Board4DeviceProductionVo | ### 1.2 前端页面 - **页面位置**: `zs_aucma-mes-ui/src/views/board/board4/index.vue` - **前端API**: `zs_aucma-mes-ui/src/api/board/board4.js` --- ## 二、后端文件清单 ### 2.1 VO实体类(10个) | 序号 | 文件路径 | 说明 | |------|----------|------| | 1 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4ProductionTotalVo.java` | 产量统计 | | 2 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4OrderStatisticsVo.java` | 工单统计 | | 3 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4OrderProgressVo.java` | 工单进度 | | 4 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4DeviceStatusVo.java` | 设备状态 | | 5 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4AlarmInfoVo.java` | 报警信息 | | 6 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4RepairAnalysisVo.java` | 维修分析 | | 7 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4RepairTrendVo.java` | 报修趋势 | | 8 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4QualityStatisticsVo.java` | 质量统计 | | 9 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4QualityTraceVo.java` | 质量追溯 | | 10 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board4DeviceProductionVo.java` | 设备产量 | ### 2.2 后端核心文件(4个) | 序号 | 文件类型 | 文件路径 | |------|----------|----------| | 1 | Mapper接口 | `aucma-report/src/main/java/com/aucma/report/mapper/Board4Mapper.java` | | 2 | Mapper XML | `aucma-report/src/main/resources/mapper/report/Board4Mapper.xml` | | 3 | Service接口 | `aucma-report/src/main/java/com/aucma/report/service/IBoard4Service.java` | | 4 | Service实现 | `aucma-report/src/main/java/com/aucma/report/service/impl/Board4ServiceImpl.java` | | 5 | Controller | `aucma-report/src/main/java/com/aucma/report/controller/Board4Controller.java` | ### 2.3 前端文件 | 序号 | 文件类型 | 文件路径 | |------|----------|----------| | 1 | API文件 | `zs_aucma-mes-ui/src/api/board/board4.js` | --- ## 三、实体类定义 ### 3.1 Board4ProductionTotalVo - 产量统计 ```java public class Board4ProductionTotalVo { /** 年累计产量(去年数据,来源BASE_ORDERINFO) */ private Long yearTotal; /** 月累计产量(当月数据,来源BASE_DEVICE_PARAM_VAL,按设备取当月最新“机台状态-实际产出数量”汇总) */ private Long monthTotal; /** 日累计产量(当天数据,来源BASE_DEVICE_PARAM_VAL,PARAM_NAME='机台状态-实际产出数量') */ private Long dayTotal; } ``` ### 3.2 Board4OrderStatisticsVo - 工单统计 ```java public class Board4OrderStatisticsVo { /** 今日计划数 */ private Long planCount; /** 今日完成数 */ private Long completeCount; /** 今日差异数(计划-完成) */ private Long diffCount; /** 今日完成率(百分比,不含%) */ private String completeRate; } ``` ### 3.3 Board4OrderProgressVo - 工单进度 ```java public class Board4OrderProgressVo { /** 型号/物料名称 */ private String materialName; /** 计划数 */ private Long planCount; /** 完成数 */ private Long completeCount; /** 差异数 */ private Long diffCount; /** 执行进度(如 90%) */ private String progress; } ``` ### 3.4 Board4DeviceStatusVo - 设备状态 ```java public class Board4DeviceStatusVo { /** 设备正常数(DEVICE_STATUS='0') */ private Long normalCount; /** 设备告警数(DEVICE_STATUS='1') */ private Long alarmCount; /** 设备停机数(DEVICE_STATUS='2') */ private Long stopCount; /** 设备总数 */ private Long totalCount; /** 总维修次数 */ private Long repairCount; } ``` ### 3.5 Board4AlarmInfoVo - 报警信息 ```java public class Board4AlarmInfoVo { /** 是否有报警 */ private Boolean hasAlarm; /** 报警设备名称 */ private String deviceName; /** 报警原因 */ private String alarmReason; /** 报警时间 */ private String alarmTime; } ``` ### 3.6 Board4RepairAnalysisVo - 维修分析 ```java public class Board4RepairAnalysisVo { /** 设备名称 */ private String deviceName; /** 占比(百分比数值) */ private Long percent; /** 维修次数 */ private Long repairCount; } ``` ### 3.7 Board4RepairTrendVo - 报修趋势 ```java public class Board4RepairTrendVo { /** 时间(小时,如 08:00) */ private String timeHour; /** 报修次数 */ private Long repairCount; } ``` ### 3.8 Board4QualityStatisticsVo - 质量统计 ```java public class Board4QualityStatisticsVo { /** 合格数(TREATMENT_MEASURE='3') */ private Long qualifiedCount; /** 不合格数(TREATMENT_MEASURE='1') */ private Long unqualifiedCount; } ``` ### 3.9 Board4QualityTraceVo - 质量追溯 ```java public class Board4QualityTraceVo { /** 产品名/物料名称 */ private String materialName; /** 合格率(百分比数值) */ private Long passRate; /** 合格上限(默认100) */ private Long passLimit; } ``` ### 3.10 Board4DeviceProductionVo - 设备产量 ```java public class Board4DeviceProductionVo { /** 设备名称 */ private String deviceName; /** 实际产量(当天工艺参数,PARAM_NAME='机台状态-实际产出数量') */ private Long production; } ``` --- ## 四、数据源与业务逻辑 ### 4.1 接口数据源映射表 | 接口 | 数据源表 | 业务逻辑 | | productionTotal | BASE_ORDERINFO, BASE_DEVICE_PARAM_VAL | 年累计=去年SUM(COMPLETE_AMOUNT);月累计=当月每台设备最新PARAM_NAME='机台状态-实际产出数量'汇总;日累计=当天每台设备最新PARAM_NAME='机台状态-实际产出数量'汇总 | | orderStatistics | BASE_ORDERINFO | 当天SUM(ORDER_AMOUNT)和SUM(COMPLETE_AMOUNT),差异=计划-完成,完成率=完成/计划 | | orderProgressList | BASE_ORDERINFO | 当天工单列表,进度=完成/计划百分比并带% | | deviceStatus | BASE_DEVICELEDGER, DMS_BILLS_FAULT_INSTANCE | IS_FLAG=0有效设备,按DEVICE_STATUS分组统计+总维修次数 | | alarmInfo | DMS_RECORD_ALARM_INFO, BASE_DEVICELEDGER | 最新一条报警记录,通过DEVICE_ID关联设备名称,时间格式HH24:MI:SS | | repairAnalysisList | DMS_BILLS_FAULT_INSTANCE, BASE_DEVICELEDGER | 按设备聚合故障次数,按次数倒序取TOP10 | | repairTrendList | DMS_BILLS_FAULT_INSTANCE | 按小时统计当天报修次数 | | qualityStatistics | REPORT_QUALITY_INSPECTION | 当天TREATMENT_MEASURE='3'和'1'分组统计 | | qualityTraceList | REPORT_QUALITY_INSPECTION | 近7天按产品统计合格率,按合格率倒序取TOP10 | | deviceProductionList | BASE_DEVICE_PARAM_VAL, BASE_DEVICELEDGER | 仅生产设备DEVICE_TYPE='1'且IS_FLAG=0,取当天每台设备最新产出值 | ### 4.2 关键SQL说明 #### 4.2.1 日累计产量(BASE_DEVICE_PARAM_VAL) ```sql SELECT NVL(SUM(TO_NUMBER(PARAM_VALUE)), 0) -- 汇总当天实际产出数量 FROM ( SELECT DEVICE_CODE, PARAM_VALUE, ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC) AS RN -- 每台设备取最新记录 FROM BASE_DEVICE_PARAM_VAL WHERE PARAM_NAME = '机台状态-实际产出数量' -- 固定参数名称 AND TO_CHAR(COLLECT_TIME, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD') -- 当天数据 ) WHERE RN = 1 -- 仅保留最新一条 ``` **业务逻辑说明**: - **使用 PARAM_NAME 而非 PARAM_CODE**:`PARAM_CODE` 可能因不同设备而变化,但 `PARAM_NAME` 是固定的,始终为 "机台状态-实际产出数量" - **窗口函数作用**:`ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC)` 按设备分组,按采集时间倒序排列,取 RN=1 即每台设备当天最新的一条记录 - **汇总逻辑**:将所有设备的最新实际产出数量求和,得到日累计产量 #### 4.2.2 月累计产量(BASE_DEVICE_PARAM_VAL) ```sql SELECT NVL(SUM(TO_NUMBER(PARAM_VALUE)), 0) -- 汇总当月实际产出数量 FROM ( SELECT DEVICE_CODE, PARAM_VALUE, ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC) AS RN -- 每台设备取最新记录 FROM BASE_DEVICE_PARAM_VAL WHERE PARAM_NAME = '机台状态-实际产出数量' -- 固定参数名称 AND COLLECT_TIME >= TRUNC(SYSDATE, 'MM') AND COLLECT_TIME < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1) -- 当月数据 ) WHERE RN = 1 -- 仅保留最新一条 ``` **业务逻辑说明**: - 与日累计一致的取数口径,但时间范围是本自然月(当月1日00:00:00至下月1日00:00:00) - 按设备取当月最新一条"机台状态-实际产出数量",再汇总得到月累计产量 > 原先的月累计(工单完成量 SUM(COMPLETE_AMOUNT))已替换为上述设备参数口径,旧逻辑在 Mapper XML 中以注释保留。 #### 4.2.3 维修分析(按设备聚合) ```sql SELECT d.DEVICE_NAME AS deviceName, -- 设备名称 COUNT(*) AS repairCount, -- 设备故障次数 ROUND(COUNT(*) * 100.0 / NULLIF((SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = 1), 0), 0) AS percent -- 次数占比 FROM DMS_BILLS_FAULT_INSTANCE f LEFT JOIN BASE_DEVICELEDGER d ON f.DEVICE_ID = d.OBJ_ID -- 关联设备台账 WHERE f.IS_FLAG = 1 AND f.DEVICE_ID IS NOT NULL -- 只统计有效故障 GROUP BY d.OBJ_ID, d.DEVICE_NAME -- 按设备聚合 ORDER BY repairCount DESC -- 按次数降序 ``` #### 4.2.4 设备产量列表 ```sql SELECT d.DEVICE_NAME AS deviceName, -- 设备名称 NVL(TO_NUMBER(p.PARAM_VALUE), 0) AS production -- 当天实际产出 FROM BASE_DEVICELEDGER d LEFT JOIN ( SELECT DEVICE_CODE, PARAM_VALUE FROM ( SELECT DEVICE_CODE, PARAM_VALUE, ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC) AS RN -- 每台设备最新记录 FROM BASE_DEVICE_PARAM_VAL WHERE PARAM_NAME = '机台状态-实际产出数量' -- 固定参数名称 AND COLLECT_TIME >= TRUNC(SYSDATE) AND COLLECT_TIME < TRUNC(SYSDATE) + 1 -- 当天数据 ) WHERE RN = 1 -- 仅保留最新一条 ) p ON d.DEVICE_CODE = p.DEVICE_CODE -- 关联设备编码 WHERE d.IS_FLAG = 1 -- 有效设备 ORDER BY production DESC -- 按产量降序 ``` **业务逻辑说明**: - **关联查询**:将设备台账表(BASE_DEVICELEDGER)与设备工艺参数表(BASE_DEVICE_PARAM_VAL)通过 DEVICE_CODE 关联 - **筛选条件**:`PARAM_NAME = '机台状态-实际产出数量'` 获取实际产出数量参数 - **设备过滤**:`IS_FLAG = 1`(有效设备) - **排序逻辑**:按产量降序排列,产量高的设备排在前面 ### 4.3 服务层返回规则补充 - 所有统计类数值默认返回0,避免空值导致前端异常 - 完成率等比例字段返回的是数字字符串,不包含“%” - 工单进度列表的 progress 字段为带“%”的字符串(如 90%) - 最新报警无数据时:hasAlarm=false,其他字段为空字符串 --- ## 五、前端API ### 5.1 API文件 **文件**: `zs_aucma-mes-ui/src/api/board/board4.js` ```javascript import request from '@/utils/request' // 获取产量统计(年累计、月累计、日累计) export function getProductionTotal() { return request({ url: '/board4/productionTotal', method: 'get' }) } // 获取今日工单统计 export function getOrderStatistics() { return request({ url: '/board4/orderStatistics', method: 'get' }) } // 获取今日工单进度列表 export function getOrderProgressList() { return request({ url: '/board4/orderProgressList', method: 'get' }) } // 获取设备状态统计 export function getDeviceStatus() { return request({ url: '/board4/deviceStatus', method: 'get' }) } // 获取最新报警信息 export function getAlarmInfo() { return request({ url: '/board4/alarmInfo', method: 'get' }) } // 获取维修分析列表 export function getRepairAnalysisList() { return request({ url: '/board4/repairAnalysisList', method: 'get' }) } // 获取报修趋势列表 export function getRepairTrendList() { return request({ url: '/board4/repairTrendList', method: 'get' }) } // 获取质量统计 export function getQualityStatistics() { return request({ url: '/board4/qualityStatistics', method: 'get' }) } // 获取质量追溯列表 export function getQualityTraceList() { return request({ url: '/board4/qualityTraceList', method: 'get' }) } // 获取设备分析/产量列表 export function getDeviceProductionList() { return request({ url: '/board4/deviceProductionList', method: 'get' }) } ``` --- ## 六、数据库表结构参考 ### 6.1 BASE_ORDERINFO(工单表) | 字段 | 类型 | 说明 | |------|------|------| | OBJ_ID | NUMBER | 主键 | | MATERIAL_NAME | VARCHAR2 | 物料名称 | | ORDER_AMOUNT | NUMBER | 订单数量 | | COMPLETE_AMOUNT | NUMBER | 完成数量 | | BEGIN_DATE | DATE | 计划开始日期 | ### 6.2 BASE_DEVICE_PARAM_VAL(设备工艺参数表) | 字段 | 类型 | 说明 | |------|------|------| | PARAM_NAME | VARCHAR2 | 参数名称(固定值,如 "机台状态-实际产出数量") | | DEVICE_CODE | VARCHAR2 | 设备编号 | | PARAM_VALUE | VARCHAR2 | 参数值 | | COLLECT_TIME | DATE | 采集时间 | ### 6.3 BASE_DEVICELEDGER(设备台账表) | 字段 | 类型 | 说明 | |------|------|------| | OBJ_ID | NUMBER | 主键标识(用于关联查询) | | DEVICE_CODE | VARCHAR2(64) | 设备编号 | | DEVICE_NAME | VARCHAR2(64) | 设备名称 | | DEVICE_STATUS | NUMBER(1,0) | 设备状态(0=使用,1=停用,2=报废) | | DEVICE_TYPE | VARCHAR2(32) | 设备类型(1=生产设备,2=计量设备) | | IS_FLAG | NUMBER(1,0) | 是否标识(0=有效) | **重要说明**: - `DEVICE_STATUS` 和 `IS_FLAG` 是 `NUMBER(1,0)` 类型,SQL查询时不加引号 - 关联查询使用 `OBJ_ID` 作为主键,不是 `DEVICE_ID` ### 6.4 RECORD_ALARM_DEVICE(设备告警记录表) | 字段 | 类型 | 说明 | |------|------|------| | OBJ_ID | NUMBER(38,0) | 主键 | | DEVICE_CODE | VARCHAR2(128) | 设备编号 | | DEVICE_NAME | VARCHAR2(128) | 设备名称 | | DEVICE_TYPE | VARCHAR2(32) | 设备类型 | | ALARM_INFO | VARCHAR2(255) | 报警信息 | | ALARM_TIME | DATE | 报警时间 | | REMARK | VARCHAR2(255) | 备注 | | IS_FLAG | NUMBER | 是否标识(0=有效) | | CREATED_BY | VARCHAR2(32) | 创建人 | | CREATED_TIME | DATE | 创建时间 | | BATCH_ID | VARCHAR2(128) | 批次ID | | PARAM_CODE | VARCHAR2(32) | 参数编码 | | PARAM_VALUE | VARCHAR2(32) | 参数值 | **报警信息来源**:使用 `RECORD_ALARM_DEVICE` 表,字段 `ALARM_INFO` 和 `ALARM_TIME`,并以 `IS_FLAG = 0` 过滤有效记录 ### 6.5 DMS_BILLS_FAULT_INSTANCE(故障报修工单表) --- ## 七、接口返回示例 ### 7.1 产量统计 ```json { "code": 200, "data": { "yearTotal": 125000, "monthTotal": 12500, "dayTotal": 27218 } } ``` ### 7.2 工单统计 ```json { "code": 200, "data": { "planCount": 1000, "completeCount": 850, "diffCount": 150, "completeRate": "85" } } ``` ### 7.3 维修分析列表 ```json { "code": 200, "data": [{ "deviceName": "YZM-01", "percent": 40, "repairCount": 10 }] } ``` ### 7.4 设备产量列表 ```json { "code": 200, "data": [{ "deviceName": "YZM-02", "production": 27218 }] } ``` --- ## 八、注意事项 1. **❗重要:使用 PARAM_NAME 而非 PARAM_CODE** - 错误写法:`WHERE PARAM_CODE = '19'` - 正确写法:`WHERE PARAM_NAME = '机台状态-实际产出数量'` - 原因:`PARAM_CODE` 可能因不同设备而变化,但 `PARAM_NAME` 是固定的 2. **设备状态映射**(NUMBER类型,不加引号):0=正常/使用,1=告警/停用,2=停机/报废 3. **❗重要:BASE_DEVICELEDGER 表字段类型** - `OBJ_ID`:NUMBER 主键,用于关联 DMS_BILLS_FAULT_INSTANCE.DEVICE_ID - `DEVICE_STATUS`:NUMBER(1,0),查询时使用 `= 0`,不是 `= '0'` - `IS_FLAG`:NUMBER(1,0),查询时使用 `= 0`,不是 `= '0'` 4. **质检结果映射**:TREATMENT_MEASURE='3'=合格,'1'=不合格 5. **日累计产量查询逻辑**: - 使用窗口函数 `ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC)` 取每台设备当天最新的一条记录 - 避免重复计算,确保每台设备只取一个值 - 将所有设备的最新值求和得到日累计产量 6. **维修分析**:使用 DMS_BILLS_FAULT_INSTANCE 故障报修表,通过 `DEVICE_ID = BASE_DEVICELEDGER.OBJ_ID` 关联设备表 7. **报警信息来源**:使用 DMS_RECORD_ALARM_INFO 表,字段 `ALARM_REASON` 和 `ALARM_BEGIN_TIME`,通过 `DEVICE_ID` 关联 BASE_DEVICELEDGER 获取设备名称 --- ## 九、变更记录 | 日期 | 版本 | 变更内容 | 作者 | |------|------|----------|------| | 2026-01-21 | 1.0 | 初始版本 | YinQ | | 2026-01-21 | 2.0 | 重构为独立接口模式,一个接口一个实体类 | YinQ | | 2026-01-21 | 2.1 | 修复产量查询逻辑,使用 PARAM_NAME 替代 PARAM_CODE | YinQ | | 2026-01-21 | 2.2 | 修复设备表结构:BASE_DEVICELEDGER 字段类型修正,DEVICE_STATUS/IS_FLAG 为 NUMBER 类型 | YinQ | | 2026-01-21 | 2.3 | 修复报警表来源:使用 RECORD_ALARM_DEVICE 替代 DMS_RECORD_ALARM_INFO | YinQ | | 2026-01-22 | 2.4 | 报警数据源切换回 DMS_RECORD_ALARM_INFO,该表由外部设备插入数据 | YinQ | --- # Board5 看板真实数据接口实现方案 ## 一、接口概述 ### 1.1 接口列表 | 序号 | 接口路径 | 请求方式 | 功能描述 | 实体类 | |------|----------|----------|----------|--------| | 1 | `/board5/orderWorkStatistics` | GET | 工单统计(总数、已完成、完成率、停机) | Board5OrderWorkStatisticsVo | | 2 | `/board5/repairTimeStatistics` | GET | 维修时间统计(平均响应时间、平均维修时间) | Board5RepairTimeStatisticsVo | | 3 | `/board5/maintStatistics` | GET | 保养执行情况统计 | Board5MaintStatisticsVo | | 4 | `/board5/inspectStatistics` | GET | 巡检执行情况统计 | Board5InspectStatisticsVo | | 5 | `/board5/deviceStatusDistribution` | GET | 设备状态分布 | Board5DeviceStatusDistributionVo | | 6 | `/board5/faultSourceDistribution` | GET | 故障来源分布 | Board5FaultSourceDistributionVo | | 7 | `/board5/faultTrendList` | GET | 故障数量曲线(近30天) | Board5FaultTrendVo | | 8 | `/board5/productionTop5` | GET | 产量机台TOP5 | Board5ProductionTopVo | ### 1.2 前端页面 - **页面位置**: `zs_aucma-mes-ui/src/views/board/board5/index.vue` - **前端API**: `zs_aucma-mes-ui/src/api/board/board5.js` --- ## 二、后端文件清单 ### 2.1 VO实体类(8个) | 序号 | 文件路径 | 说明 | |------|----------|------| | 1 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5OrderWorkStatisticsVo.java` | 工单统计 | | 2 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5RepairTimeStatisticsVo.java` | 维修时间统计 | | 3 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5MaintStatisticsVo.java` | 保养执行情况 | | 4 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5InspectStatisticsVo.java` | 巡检执行情况 | | 5 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5DeviceStatusDistributionVo.java` | 设备状态分布 | | 6 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultSourceDistributionVo.java` | 故障来源分布 | | 7 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5FaultTrendVo.java` | 故障数量曲线 | | 8 | `aucma-report/src/main/java/com/aucma/report/domain/vo/Board5ProductionTopVo.java` | 产量机台TOP5 | ### 2.2 后端核心文件(5个) | 序号 | 文件类型 | 文件路径 | |------|----------|----------| | 1 | Mapper接口 | `aucma-report/src/main/java/com/aucma/report/mapper/Board5Mapper.java` | | 2 | Mapper XML | `aucma-report/src/main/resources/mapper/report/Board5Mapper.xml` | | 3 | Service接口 | `aucma-report/src/main/java/com/aucma/report/service/IBoard5Service.java` | | 4 | Service实现 | `aucma-report/src/main/java/com/aucma/report/service/impl/Board5ServiceImpl.java` | | 5 | Controller | `aucma-report/src/main/java/com/aucma/report/controller/Board5Controller.java` | ### 2.3 前端文件 | 序号 | 文件类型 | 文件路径 | |------|----------|----------| | 1 | API文件 | `zs_aucma-mes-ui/src/api/board/board5.js` | --- ## 三、实体类定义 ### 3.1 Board5OrderWorkStatisticsVo - 工单统计 ```java public class Board5OrderWorkStatisticsVo { /** 工单总数 */ private Long totalCount; /** 已完成数量 */ private Long completeCount; /** 完成率(百分比数值,不含%) */ private String completeRate; /** 停机工单数量 */ private Long stopCount; } ``` ### 3.2 Board5RepairTimeStatisticsVo - 维修时间统计 ```java public class Board5RepairTimeStatisticsVo { /** 平均响应时间(分钟) */ private String avgResponseTime; /** 平均维修时间(小时) */ private String avgRepairTime; } ``` ### 3.3 Board5MaintStatisticsVo - 保养执行情况 ```java public class Board5MaintStatisticsVo { /** 计划保养数量 */ 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; } ``` ### 3.4 Board5InspectStatisticsVo - 巡检执行情况 ```java public class Board5InspectStatisticsVo { /** 应检设备数量 */ private Long deviceCount; /** 设备巡检完成率 */ private String completeRate; } ``` ### 3.5 Board5DeviceStatusDistributionVo - 设备状态分布 ```java public class Board5DeviceStatusDistributionVo { /** 实验设备占比 */ private Long experimentPercent; /** 未检设备占比 */ private Long uncheckedPercent; /** 正常设备占比 */ private Long normalPercent; /** 异常设备占比 */ private Long abnormalPercent; } ``` ### 3.6 Board5FaultSourceDistributionVo - 故障来源分布 ```java public class Board5FaultSourceDistributionVo { /** 维护故障占比(FAULT_SOURCE_TYPE=1) */ private Long maintainPercent; /** 运行故障占比(FAULT_SOURCE_TYPE=2,3) */ private Long runningPercent; /** 自然故障占比(FAULT_SOURCE_TYPE=9) */ private Long naturalPercent; } ``` ### 3.7 Board5FaultTrendVo - 故障数量曲线 ```java public class Board5FaultTrendVo { /** 日期(格式:日,如 01、02...) */ private String dateValue; /** 故障数量 */ private Long faultCount; } ``` ### 3.8 Board5ProductionTopVo - 产量机台TOP5 ```java public class Board5ProductionTopVo { /** 设备名称 */ private String deviceName; /** 百分比(相对于最大产量) */ private Long percent; /** 产量 */ private Long production; } ``` --- ## 四、数据源与业务逻辑 ### 4.1 接口数据源映射表 | 接口 | 数据源表 | 业务逻辑 | |------|----------|----------| | orderWorkStatistics | DMS_BILLS_FAULT_INSTANCE, DMS_BILLS_MAINT_INSTANCE, DMS_BILLS_INSPECT_INSTANCE | 工单总数=维修+保养+巡检;已完成=维修完成(BILLS_STATUS='2')+保养完成(MAINT_STATUS='3')+巡检完成(INSPECT_STATUS='3');停机=维修中(BILLS_STATUS='1') | | repairTimeStatistics | DMS_BILLS_FAULT_INSTANCE | 平均响应时间=(REAL_BEGIN_TIME-APPLY_TIME)*24*60分钟;平均维修时间=(REAL_END_TIME-REAL_BEGIN_TIME)*24小时;仅统计BILLS_STATUS='2' | | maintStatistics | DMS_BILLS_MAINT_INSTANCE | 按MAINT_STATUS分组统计:1=待保养,2=保养中,3=已完成,4=待验证(无此数据返回0) | | inspectStatistics | DMS_BILLS_INSPECT_INSTANCE | 应检设备=COUNT(DISTINCT PLAN_INSPECT_ID)*18;已检设备=INSPECT_STATUS='3'的数量 | | deviceStatusDistribution | BASE_DEVICELEDGER | 按DEVICE_STATUS和DEVICE_TYPE分组统计,WHERE IS_FLAG=1 | | faultSourceDistribution | DMS_BILLS_FAULT_INSTANCE | 按FAULT_SOURCE_TYPE分组:1=维护故障,2/3=运行故障,9=自然故障;WHERE IS_FLAG='1' | | faultTrendList | DMS_RECORD_ALARM_INFO | 近30天每日告警数量,按ALARM_BEGIN_TIME日期分组 | | productionTop5 | BASE_DEVICE_PARAM_VAL, BASE_DEVICELEDGER | 各设备当天PARAM_NAME='机台状态-实际产出数量'最新值,取TOP5 | ### 4.2 关键SQL说明 #### 4.2.1 工单统计 ```sql SELECT (SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1') + (SELECT COUNT(*) FROM DMS_BILLS_MAINT_INSTANCE) + (SELECT COUNT(*) FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1') AS TOTAL_COUNT, (SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1' AND BILLS_STATUS = '2') + (SELECT COUNT(*) FROM DMS_BILLS_MAINT_INSTANCE WHERE MAINT_STATUS = '3') + (SELECT COUNT(*) FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1' AND INSPECT_STATUS = '3') AS COMPLETE_COUNT, (SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1' AND BILLS_STATUS = '1') AS STOP_COUNT FROM DUAL ``` **业务逻辑说明**: - **工单总数** = 维修工单数 + 保养工单数 + 巡检工单数 - **已完成数** = 维修完成(BILLS_STATUS='2') + 保养完成(MAINT_STATUS='3') + 巡检完成(INSPECT_STATUS='3') - **停机工单数** = 维修中(BILLS_STATUS='1'),即设备正在维修无法生产的工单数 - **数据范围**:全量历史数据,无时间限制 #### 4.2.2 维修时间统计 ```sql SELECT ROUND(NVL(AVG((REAL_BEGIN_TIME - APPLY_TIME) * 24 * 60), 0), 2) AS AVG_RESPONSE_TIME, ROUND(NVL(AVG((REAL_END_TIME - REAL_BEGIN_TIME) * 24), 0), 2) AS AVG_REPAIR_TIME FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1' AND REAL_BEGIN_TIME IS NOT NULL AND REAL_END_TIME IS NOT NULL AND BILLS_STATUS = '2' AND APPLY_TIME IS NOT NULL ``` **业务逻辑说明**: - **平均响应时间** = (实际开始时间 - 申请时间) × 24 × 60,单位:分钟 - **平均维修时间** = (实际结束时间 - 实际开始时间) × 24,单位:小时 - **仅统计已完成工单**:`BILLS_STATUS = '2'`,确保时间数据完整 #### 4.2.3 保养执行情况统计 ```sql SELECT COUNT(*) AS PLAN_COUNT, SUM(CASE WHEN MAINT_STATUS = '3' THEN 1 ELSE 0 END) AS COMPLETE_COUNT, SUM(CASE WHEN MAINT_STATUS = '1' THEN 1 ELSE 0 END) AS WAITING_COUNT, SUM(CASE WHEN MAINT_STATUS = '2' THEN 1 ELSE 0 END) AS DOING_COUNT, 0 AS VERIFY_COUNT FROM DMS_BILLS_MAINT_INSTANCE ``` **业务逻辑说明**: - **数据来源**:`DMS_BILLS_MAINT_INSTANCE` 保养工单表(非计划表) - **状态映射**:1=待保养,2=保养中,3=已完成 - **待验证数量**:工单表中无 MAINT_STATUS=4 状态,固定返回 0 - **数据范围**:全量历史数据,该表无 IS_FLAG 字段 #### 4.2.4 巡检执行情况统计 ```sql SELECT (SELECT COUNT(DISTINCT PLAN_INSPECT_ID) * 18 FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1') AS DEVICE_COUNT, (SELECT COUNT(*) FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1' AND INSPECT_STATUS = '3') AS COMPLETE_COUNT FROM DUAL ``` **业务逻辑说明**: - **应检设备数** = 不同巡检计划数 × 18(每计划覆盖18台设备) - **已检设备数** = 已完成的巡检工单数(`INSPECT_STATUS = '3'`) - **数据来源**:`DMS_BILLS_INSPECT_INSTANCE` 巡检工单表 #### 4.2.5 设备状态分布 ```sql SELECT COUNT(*) AS TOTAL_COUNT, SUM(CASE WHEN DEVICE_STATUS = 0 THEN 1 ELSE 0 END) AS NORMAL_COUNT, SUM(CASE WHEN DEVICE_STATUS = 1 THEN 1 ELSE 0 END) AS ABNORMAL_COUNT, SUM(CASE WHEN DEVICE_STATUS = 2 THEN 1 ELSE 0 END) AS SCRAP_COUNT, SUM(CASE WHEN DEVICE_TYPE = '2' THEN 1 ELSE 0 END) AS EXPERIMENT_COUNT FROM BASE_DEVICELEDGER WHERE IS_FLAG = 1 ``` **业务逻辑说明**: - **DEVICE_STATUS**:0=正常,1=异常,2=报废 - **DEVICE_TYPE**:'2'=实验设备 - **IS_FLAG = 1**:仅统计有效设备 #### 4.2.6 故障数量曲线 ```sql SELECT TO_CHAR(ALARM_BEGIN_TIME, 'DD') AS dateValue, COUNT(*) AS faultCount FROM DMS_RECORD_ALARM_INFO WHERE ALARM_BEGIN_TIME >= TRUNC(SYSDATE) - 30 GROUP BY TO_CHAR(ALARM_BEGIN_TIME, 'DD'), TRUNC(ALARM_BEGIN_TIME) ORDER BY TRUNC(ALARM_BEGIN_TIME) ``` **业务逻辑说明**: - **数据来源**:`DMS_RECORD_ALARM_INFO` 设备报警记录表(由外部设备插入) - **时间范围**:近30天(`ALARM_BEGIN_TIME >= TRUNC(SYSDATE) - 30`) - **分组方式**:按日期分组,返回每日告警数量 #### 4.2.7 产量机台TOP5 ```sql SELECT * FROM ( SELECT d.DEVICE_NAME AS deviceName, NVL(TO_NUMBER(p.PARAM_VALUE), 0) AS production, 0 AS percent FROM BASE_DEVICELEDGER d LEFT JOIN ( SELECT DEVICE_CODE, PARAM_VALUE FROM ( SELECT DEVICE_CODE, PARAM_VALUE, ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC) AS RN FROM BASE_DEVICE_PARAM_VAL WHERE PARAM_NAME = '机台状态-实际产出数量' AND COLLECT_TIME >= TRUNC(SYSDATE) AND COLLECT_TIME < TRUNC(SYSDATE) + 1 ) WHERE RN = 1 ) p ON d.DEVICE_CODE = p.DEVICE_CODE ORDER BY production DESC ) WHERE ROWNUM <= 5 ``` **业务逻辑说明**: - 使用 `PARAM_NAME = '机台状态-实际产出数量'` 获取各设备当天实际产出 - 取每台设备当天最新的一条记录(使用窗口函数ROW_NUMBER) - 按产量降序排列,取前5名 - 百分比在Service层计算:`percent = production / maxProduction * 100` #### 4.2.8 故障来源分布 ```sql SELECT COUNT(*) AS TOTAL_COUNT, SUM(CASE WHEN FAULT_SOURCE_TYPE = 1 THEN 1 ELSE 0 END) AS MAINTAIN_COUNT, SUM(CASE WHEN FAULT_SOURCE_TYPE IN (2, 3) THEN 1 ELSE 0 END) AS RUNNING_COUNT, SUM(CASE WHEN FAULT_SOURCE_TYPE = 9 THEN 1 ELSE 0 END) AS NATURAL_COUNT FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1' ``` **业务逻辑说明**: - **FAULT_SOURCE_TYPE = 1**(检修)→ 维护故障 - **FAULT_SOURCE_TYPE = 2, 3**(点检/巡检)→ 运行故障 - **FAULT_SOURCE_TYPE = 9**(其他)→ 自然故障 - **数据范围**:全量历史数据,`WHERE IS_FLAG = '1'` --- ## 五、前端API ### 5.1 API文件 **文件**: `zs_aucma-mes-ui/src/api/board/board5.js` ```javascript import request from '@/utils/request' // 获取工单统计(工单总数、已完成、完成率、停机工单) export function getOrderWorkStatistics() { return request({ url: '/board5/orderWorkStatistics', method: 'get' }) } // 获取维修时间统计(平均响应时间、平均维修时间) export function getRepairTimeStatistics() { return request({ url: '/board5/repairTimeStatistics', method: 'get' }) } // 获取保养执行情况统计 export function getMaintStatistics() { return request({ url: '/board5/maintStatistics', method: 'get' }) } // 获取巡检执行情况统计 export function getInspectStatistics() { return request({ url: '/board5/inspectStatistics', method: 'get' }) } // 获取设备状态分布 export function getDeviceStatusDistribution() { return request({ url: '/board5/deviceStatusDistribution', method: 'get' }) } // 获取故障来源分布 export function getFaultSourceDistribution() { return request({ url: '/board5/faultSourceDistribution', method: 'get' }) } // 获取故障数量曲线 export function getFaultTrendList() { return request({ url: '/board5/faultTrendList', method: 'get' }) } // 获取产量机台TOP5 export function getProductionTop5() { return request({ url: '/board5/productionTop5', method: 'get' }) } ``` --- ## 六、数据库表结构参考 ### 6.1 DMS_BILLS_FAULT_INSTANCE(故障报修工单表) | 字段 | 类型 | 说明 | |------|------|------| | REPAIR_INSTANCE_ID | NUMBER(20) | 主键 | | APPLY_TIME | DATE | 申请时间 | | REAL_BEGIN_TIME | DATE | 实际开始时间 | | REAL_END_TIME | DATE | 实际完成时间 | | BILLS_STATUS | CHAR(1) | 工单状态(0待维修,1维修中,2维修完成) | | FAULT_SOURCE_TYPE | NUMBER | 报修来源类型(1检修 2点检 3巡检 9其他) | | IS_FLAG | CHAR(1) | 激活标识(1是 0否) | ### 6.2 DMS_BILLS_MAINT_INSTANCE(保养工单表) | 字段 | 类型 | 说明 | |------|------|------| | OBJ_ID | NUMBER | 主键 | | MAINT_STATUS | CHAR(1) | 保养状态(1待保养,2保养中,3已完成) | | PLAN_MAINT_ID | NUMBER | 关联的保养计划ID | **注意**:该表无 IS_FLAG 字段,统计时全量查询。 ### 6.3 DMS_BILLS_INSPECT_INSTANCE(巡检工单表) | 字段 | 类型 | 说明 | |------|------|------| | OBJ_ID | NUMBER | 主键 | | PLAN_INSPECT_ID | NUMBER | 关联的巡检计划ID | | INSPECT_STATUS | CHAR(1) | 巡检状态(3已完成) | | IS_FLAG | CHAR(1) | 激活标识(1是 0否) | ### 6.4 DMS_RECORD_ALARM_INFO(设备告警记录表) | 字段 | 类型 | 说明 | |------|------|------| | OBJ_ID | NUMBER(38) | 主键 | | DEVICE_ID | NUMBER | 设备ID(关联BASE_DEVICELEDGER.OBJ_ID) | | ALARM_REASON | VARCHAR2(255) | 报警原因 | | ALARM_BEGIN_TIME | DATE | 报警开始时间 | ### 6.5 BASE_DEVICELEDGER(设备台账表) | 字段 | 类型 | 说明 | |------|------|------| | OBJ_ID | NUMBER | 主键(用于关联DMS_BILLS_FAULT_INSTANCE.DEVICE_ID) | | DEVICE_CODE | VARCHAR2(64) | 设备编号 | | DEVICE_NAME | VARCHAR2(64) | 设备名称 | | DEVICE_STATUS | NUMBER(1,0) | 设备状态(0正常,1异常,2报废) | | DEVICE_TYPE | VARCHAR2(32) | 设备类型(1生产设备,2计量设备) | | IS_FLAG | NUMBER(1,0) | 是否标识(1有效,0无效) | ### 6.6 BASE_DEVICE_PARAM_VAL(设备工艺参数表) | 字段 | 类型 | 说明 | |------|------|------| | RECORD_ID | NUMBER | 主键 | | DEVICE_CODE | VARCHAR2(255) | 设备编号 | | PARAM_NAME | VARCHAR2(255) | 参数名称(固定值,如"机台状态-实际产出数量") | | PARAM_VALUE | VARCHAR2(255) | 参数值 | | COLLECT_TIME | DATE | 采集时间 | --- ## 七、接口返回示例 ### 7.1 工单统计 ```json { "code": 200, "data": { "totalCount": 100, "completeCount": 85, "completeRate": "85", "stopCount": 5 } } ``` ### 7.2 维修时间统计 ```json { "code": 200, "data": { "avgResponseTime": "123.45", "avgRepairTime": "0.25" } } ``` ### 7.3 保养执行情况 ```json { "code": 200, "data": { "planCount": 10, "completeCount": 5, "waitingCount": 2, "waitingRate": "20", "doingCount": 2, "doingRate": "20", "verifyCount": 1, "verifyRate": "10", "completeRate": "50" } } ``` ### 7.4 故障数量曲线 ```json { "code": 200, "data": [{ "dateValue": "01", "faultCount": 5 }, { "dateValue": "02", "faultCount": 3 }] } ``` ### 7.5 产量机台TOP5 ```json { "code": 200, "data": [{ "deviceName": "YZM-02", "percent": 100, "production": 27218 }, { "deviceName": "YZM-01", "percent": 80, "production": 21774 }] } ``` --- ## 八、注意事项 1. **❗重要:工单统计使用三类工单表汇总** - 维修工单:`DMS_BILLS_FAULT_INSTANCE`(WHERE IS_FLAG='1') - 保养工单:`DMS_BILLS_MAINT_INSTANCE`(无 IS_FLAG 字段,全量统计) - 巡检工单:`DMS_BILLS_INSPECT_INSTANCE`(WHERE IS_FLAG='1') 2. **❗重要:巡检应检设备数计算** - 应检设备数 = COUNT(DISTINCT PLAN_INSPECT_ID) × 18 - 每个巡检计划覆盖18台设备(固定值) 3. **保养状态映射**(DMS_BILLS_MAINT_INSTANCE.MAINT_STATUS): - 1 = 待保养 - 2 = 保养中 - 3 = 已完成 - 无 MAINT_STATUS=4 状态,verifyCount 固定返回 0 4. **故障来源类型映射**(DMS_BILLS_FAULT_INSTANCE.FAULT_SOURCE_TYPE): - 1 = 检修 → 维护故障 - 2 = 点检 → 运行故障 - 3 = 巡检 → 运行故障 - 9 = 其他 → 自然故障 5. **设备表字段类型**(BASE_DEVICELEDGER): - `DEVICE_STATUS`:NUMBER(1,0),查询时使用 `= 0/1/2` - `IS_FLAG`:NUMBER(1,0),值可以是 0 或 1(不同接口使用不同值) 6. **前端页面字段映射**: - text1-text4 → orderWorkStatistics(工单总数、已完成、完成率、停机工单) - text5-text6 → repairTimeStatistics(平均响应时间、平均维修时间) - text7-text15 → maintStatistics(保养执行情况) - text16-text17 → inspectStatistics(巡检执行情况) - value1-value4 → deviceStatusDistribution(设备状态分布) - value5-value7 → faultSourceDistribution(故障来源分布) - chart1 → faultTrendList(故障数量曲线) - chart2 → productionTop5(产量机台TOP5) --- ## 九、变更记录 | 日期 | 版本 | 变更内容 | 作者 | |------|------|----------|------| | 2026-01-21 | 1.0 | Board5看板接口初始版本 | YinQ | | 2026-01-21 | 1.1 | 故障数量曲线使用RECORD_ALARM_DEVICE表真实数据 | YinQ | | 2026-01-21 | 1.2 | 产量机台TOP5替代备件消耗费用TOP5 | YinQ | | 2026-01-22 | 1.3 | 故障数量曲线切换为DMS_RECORD_ALARM_INFO表 | YinQ | | 2026-01-26 | 2.0 | 根据Mapper XML更新业务逻辑:工单统计改用工单表汇总、保养/巡检改用工单实例表、更新所有SQL示例和表结构 | Claude |