feat(report): 新增Board4看板数据功能

- 创建Board4AlarmInfoVo、Board4DeviceProductionVo、Board4DeviceStatusVo等多个数据传输对象
- 实现Board4Controller控制器提供生产统计、工单进度、设备状态、报警信息等10个数据接口
- 开发Board4Mapper数据访问层包含年月日产量统计、工单统计、设备状态、维修分析等查询方法
- 配置Board4Mapper.xml实现各类统计数据的SQL查询逻辑
- 创建Board4OrderProgressVo、Board4OrderStatisticsVo、Board4ProductionTotalVo等视图对象
- 实现Board4ServiceImpl业务逻辑层处理各类看板数据统计和转换
- 定义IBoard4Service接口规范看板数据服务契约
master
zangch@mesnac.com 2 months ago
parent 649e254df6
commit ec4d0834ad

@ -0,0 +1,103 @@
package com.aucma.report.controller;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.report.service.IBoard4Service;
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;
/**
* Board4Controller
*
*
* @author YinQ
*/
@RestController
@RequestMapping("/board4")
public class Board4Controller extends BaseController {
@Autowired
private IBoard4Service board4Service;
/**
*
*/
@GetMapping("/productionTotal")
public AjaxResult getProductionTotal() {
return AjaxResult.success(board4Service.getProductionTotal());
}
/**
*
*/
@GetMapping("/orderStatistics")
public AjaxResult getOrderStatistics() {
return AjaxResult.success(board4Service.getOrderStatistics());
}
/**
*
*/
@GetMapping("/orderProgressList")
public AjaxResult getOrderProgressList() {
return AjaxResult.success(board4Service.getOrderProgressList());
}
/**
*
*/
@GetMapping("/deviceStatus")
public AjaxResult getDeviceStatus() {
return AjaxResult.success(board4Service.getDeviceStatus());
}
/**
*
*/
@GetMapping("/alarmInfo")
public AjaxResult getAlarmInfo() {
return AjaxResult.success(board4Service.getAlarmInfo());
}
/**
*
*/
@GetMapping("/repairAnalysisList")
public AjaxResult getRepairAnalysisList() {
return AjaxResult.success(board4Service.getRepairAnalysisList());
}
/**
*
*/
@GetMapping("/repairTrendList")
public AjaxResult getRepairTrendList() {
return AjaxResult.success(board4Service.getRepairTrendList());
}
/**
*
*/
@GetMapping("/qualityStatistics")
public AjaxResult getQualityStatistics() {
return AjaxResult.success(board4Service.getQualityStatistics());
}
/**
*
*/
@GetMapping("/qualityTraceList")
public AjaxResult getQualityTraceList() {
return AjaxResult.success(board4Service.getQualityTraceList());
}
/**
* /
*/
@GetMapping("/deviceProductionList")
public AjaxResult getDeviceProductionList() {
return AjaxResult.success(board4Service.getDeviceProductionList());
}
}

@ -0,0 +1,58 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
* DMS_RECORD_ALARM_INFO
*
* @author YinQ
*/
public class Board4AlarmInfoVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 是否有报警 */
private Boolean hasAlarm;
/** 报警设备名称 */
private String deviceName;
/** 报警原因 */
private String alarmReason;
/** 报警时间 */
private String alarmTime;
public Boolean getHasAlarm() {
return hasAlarm;
}
public void setHasAlarm(Boolean hasAlarm) {
this.hasAlarm = hasAlarm;
}
public String getDeviceName() {
return deviceName;
}
public void setDeviceName(String deviceName) {
this.deviceName = deviceName;
}
public String getAlarmReason() {
return alarmReason;
}
public void setAlarmReason(String alarmReason) {
this.alarmReason = alarmReason;
}
public String getAlarmTime() {
return alarmTime;
}
public void setAlarmTime(String alarmTime) {
this.alarmTime = alarmTime;
}
}

@ -0,0 +1,36 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 /VO
*
* BASE_DEVICE_PARAM_VAL + BASE_DEVICELEDGER
*
* @author YinQ
*/
public class Board4DeviceProductionVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 设备名称 */
private String deviceName;
/** 实际产量当天工艺参数PARAM_CODE='19' */
private Long production;
public String getDeviceName() {
return deviceName;
}
public void setDeviceName(String deviceName) {
this.deviceName = deviceName;
}
public Long getProduction() {
return production;
}
public void setProduction(Long production) {
this.production = production;
}
}

@ -0,0 +1,68 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
*
* @author YinQ
*/
public class Board4DeviceStatusVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 设备正常数DEVICE_STATUS='0' */
private Long normalCount;
/** 设备告警数DEVICE_STATUS='1' */
private Long alarmCount;
/** 设备停机数DEVICE_STATUS='2' */
private Long stopCount;
/** 设备总数 */
private Long totalCount;
/** 总维修次数 */
private Long repairCount;
public Long getNormalCount() {
return normalCount;
}
public void setNormalCount(Long normalCount) {
this.normalCount = normalCount;
}
public Long getAlarmCount() {
return alarmCount;
}
public void setAlarmCount(Long alarmCount) {
this.alarmCount = alarmCount;
}
public Long getStopCount() {
return stopCount;
}
public void setStopCount(Long stopCount) {
this.stopCount = stopCount;
}
public Long getTotalCount() {
return totalCount;
}
public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}
public Long getRepairCount() {
return repairCount;
}
public void setRepairCount(Long repairCount) {
this.repairCount = repairCount;
}
}

@ -0,0 +1,68 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
*
* @author YinQ
*/
public class Board4OrderProgressVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 型号/物料名称 */
private String materialName;
/** 计划数 */
private Long planCount;
/** 完成数 */
private Long completeCount;
/** 差异数 */
private Long diffCount;
/** 执行进度(如 90% */
private String progress;
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
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 getDiffCount() {
return diffCount;
}
public void setDiffCount(Long diffCount) {
this.diffCount = diffCount;
}
public String getProgress() {
return progress;
}
public void setProgress(String progress) {
this.progress = progress;
}
}

@ -0,0 +1,57 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
*
* @author YinQ
*/
public class Board4OrderStatisticsVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 今日计划数 */
private Long planCount;
/** 今日完成数 */
private Long completeCount;
/** 今日差异数(计划-完成) */
private Long diffCount;
/** 今日完成率(百分比,不含% */
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 getDiffCount() {
return diffCount;
}
public void setDiffCount(Long diffCount) {
this.diffCount = diffCount;
}
public String getCompleteRate() {
return completeRate;
}
public void setCompleteRate(String completeRate) {
this.completeRate = completeRate;
}
}

@ -0,0 +1,46 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
*
* @author YinQ
*/
public class Board4ProductionTotalVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 年累计产量去年数据来源BASE_ORDERINFO */
private Long yearTotal;
/** 月累计产量当月数据来源BASE_ORDERINFO */
private Long monthTotal;
/** 日累计产量当天数据来源BASE_DEVICE_PARAM_VALPARAM_CODE='19' */
private Long dayTotal;
public Long getYearTotal() {
return yearTotal;
}
public void setYearTotal(Long yearTotal) {
this.yearTotal = yearTotal;
}
public Long getMonthTotal() {
return monthTotal;
}
public void setMonthTotal(Long monthTotal) {
this.monthTotal = monthTotal;
}
public Long getDayTotal() {
return dayTotal;
}
public void setDayTotal(Long dayTotal) {
this.dayTotal = dayTotal;
}
}

@ -0,0 +1,36 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
* REPORT_QUALITY_INSPECTION
*
* @author YinQ
*/
public class Board4QualityStatisticsVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 合格数TREATMENT_MEASURE='3' */
private Long qualifiedCount;
/** 不合格数TREATMENT_MEASURE='1' */
private Long unqualifiedCount;
public Long getQualifiedCount() {
return qualifiedCount;
}
public void setQualifiedCount(Long qualifiedCount) {
this.qualifiedCount = qualifiedCount;
}
public Long getUnqualifiedCount() {
return unqualifiedCount;
}
public void setUnqualifiedCount(Long unqualifiedCount) {
this.unqualifiedCount = unqualifiedCount;
}
}

@ -0,0 +1,47 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
* REPORT_QUALITY_INSPECTION
*
* @author YinQ
*/
public class Board4QualityTraceVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 产品名/物料名称 */
private String materialName;
/** 合格率(百分比数值) */
private Long passRate;
/** 合格上限默认100 */
private Long passLimit;
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public Long getPassRate() {
return passRate;
}
public void setPassRate(Long passRate) {
this.passRate = passRate;
}
public Long getPassLimit() {
return passLimit;
}
public void setPassLimit(Long passLimit) {
this.passLimit = passLimit;
}
}

@ -0,0 +1,47 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
* DMS_BILLS_FAULT_INSTANCE
*
* @author YinQ
*/
public class Board4RepairAnalysisVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 设备名称 */
private String deviceName;
/** 占比(百分比数值) */
private Long percent;
/** 维修次数 */
private Long repairCount;
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 getRepairCount() {
return repairCount;
}
public void setRepairCount(Long repairCount) {
this.repairCount = repairCount;
}
}

@ -0,0 +1,36 @@
package com.aucma.report.domain.vo;
import java.io.Serializable;
/**
* Board4 VO
*
* DMS_BILLS_FAULT_INSTANCE
*
* @author YinQ
*/
public class Board4RepairTrendVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 时间(小时,如 08:00 */
private String timeHour;
/** 报修次数 */
private Long repairCount;
public String getTimeHour() {
return timeHour;
}
public void setTimeHour(String timeHour) {
this.timeHour = timeHour;
}
public Long getRepairCount() {
return repairCount;
}
public void setRepairCount(Long repairCount) {
this.repairCount = repairCount;
}
}

@ -0,0 +1,95 @@
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;
/**
* Board4Mapper
*
*
* @author YinQ
*/
@Mapper
public interface Board4Mapper {
/**
*
* BASE_ORDERINFO
*/
Long selectYearProductionTotal();
/**
*
* BASE_ORDERINFO
*/
Long selectMonthProductionTotal();
/**
*
* BASE_DEVICE_PARAM_VALPARAM_CODE='19'
*/
Long selectDayProductionTotal();
/**
*
* BASE_ORDERINFO
*/
HashMap<String, Object> selectTodayOrderStatistics();
/**
*
* BASE_ORDERINFO
*/
List<Board4OrderProgressVo> selectTodayOrderProgressList();
/**
*
* BASE_DEVICELEDGER
*/
HashMap<String, Object> selectDeviceStatusStatistics();
/**
*
* DMS_BILLS_FAULT_INSTANCE
*/
Long selectTotalRepairCount();
/**
*
* DMS_RECORD_ALARM_INFO
*/
HashMap<String, Object> selectLatestAlarmInfo();
/**
*
* DMS_BILLS_FAULT_INSTANCE
*/
List<Board4RepairAnalysisVo> selectRepairAnalysisByDevice();
/**
*
* DMS_BILLS_FAULT_INSTANCE
*/
List<Board4RepairTrendVo> selectRepairTrendList();
/**
* /
* REPORT_QUALITY_INSPECTION
*/
HashMap<String, Object> selectQualityStatistics();
/**
*
* REPORT_QUALITY_INSPECTION
*/
List<Board4QualityTraceVo> selectQualityTraceList();
/**
*
* BASE_DEVICE_PARAM_VAL + BASE_DEVICELEDGER
*/
List<Board4DeviceProductionVo> selectDeviceProductionAnalysis();
}

@ -0,0 +1,64 @@
package com.aucma.report.service;
import com.aucma.report.domain.vo.*;
import java.util.List;
/**
* Board4Service
*
*
* @author YinQ
*/
public interface IBoard4Service {
/**
*
*/
Board4ProductionTotalVo getProductionTotal();
/**
*
*/
Board4OrderStatisticsVo getOrderStatistics();
/**
*
*/
List<Board4OrderProgressVo> getOrderProgressList();
/**
*
*/
Board4DeviceStatusVo getDeviceStatus();
/**
*
*/
Board4AlarmInfoVo getAlarmInfo();
/**
*
*/
List<Board4RepairAnalysisVo> getRepairAnalysisList();
/**
*
*/
List<Board4RepairTrendVo> getRepairTrendList();
/**
*
*/
Board4QualityStatisticsVo getQualityStatistics();
/**
*
*/
List<Board4QualityTraceVo> getQualityTraceList();
/**
* /
*/
List<Board4DeviceProductionVo> getDeviceProductionList();
}

@ -0,0 +1,199 @@
package com.aucma.report.service.impl;
import com.aucma.report.domain.vo.*;
import com.aucma.report.mapper.Board4Mapper;
import com.aucma.report.service.IBoard4Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Board4Service
*
*
* @author YinQ
*/
@Service
public class Board4ServiceImpl implements IBoard4Service {
@Autowired
private Board4Mapper board4Mapper;
/**
*
*/
@Override
public Board4ProductionTotalVo getProductionTotal() {
Board4ProductionTotalVo vo = new Board4ProductionTotalVo();
Long yearTotal = board4Mapper.selectYearProductionTotal();
Long monthTotal = board4Mapper.selectMonthProductionTotal();
Long dayTotal = board4Mapper.selectDayProductionTotal();
vo.setYearTotal(yearTotal != null ? yearTotal : 0L);
vo.setMonthTotal(monthTotal != null ? monthTotal : 0L);
vo.setDayTotal(dayTotal != null ? dayTotal : 0L);
return vo;
}
/**
*
*/
@Override
public Board4OrderStatisticsVo getOrderStatistics() {
Board4OrderStatisticsVo vo = new Board4OrderStatisticsVo();
HashMap<String, Object> stats = board4Mapper.selectTodayOrderStatistics();
if (stats != null) {
Long planCount = getLongValue(stats.get("PLAN_COUNT"));
Long completeCount = getLongValue(stats.get("COMPLETE_COUNT"));
vo.setPlanCount(planCount);
vo.setCompleteCount(completeCount);
vo.setDiffCount(planCount - completeCount);
if (planCount > 0) {
vo.setCompleteRate(String.valueOf(Math.round(completeCount * 100.0 / planCount)));
} else {
vo.setCompleteRate("0");
}
} else {
vo.setPlanCount(0L);
vo.setCompleteCount(0L);
vo.setDiffCount(0L);
vo.setCompleteRate("0");
}
return vo;
}
/**
*
*/
@Override
public List<Board4OrderProgressVo> getOrderProgressList() {
List<Board4OrderProgressVo> list = board4Mapper.selectTodayOrderProgressList();
return list != null ? list : new ArrayList<>();
}
/**
*
*/
@Override
public Board4DeviceStatusVo getDeviceStatus() {
Board4DeviceStatusVo vo = new Board4DeviceStatusVo();
HashMap<String, Object> stats = board4Mapper.selectDeviceStatusStatistics();
if (stats != null) {
vo.setNormalCount(getLongValue(stats.get("NORMAL_COUNT")));
vo.setAlarmCount(getLongValue(stats.get("ALARM_COUNT")));
vo.setStopCount(getLongValue(stats.get("STOP_COUNT")));
vo.setTotalCount(getLongValue(stats.get("TOTAL_COUNT")));
} else {
vo.setNormalCount(0L);
vo.setAlarmCount(0L);
vo.setStopCount(0L);
vo.setTotalCount(0L);
}
Long repairCount = board4Mapper.selectTotalRepairCount();
vo.setRepairCount(repairCount != null ? repairCount : 0L);
return vo;
}
/**
*
*/
@Override
public Board4AlarmInfoVo getAlarmInfo() {
Board4AlarmInfoVo vo = new Board4AlarmInfoVo();
HashMap<String, Object> info = board4Mapper.selectLatestAlarmInfo();
if (info != null && !info.isEmpty()) {
vo.setHasAlarm(true);
vo.setDeviceName(getStringValue(info.get("DEVICE_NAME")));
vo.setAlarmReason(getStringValue(info.get("ALARM_REASON")));
vo.setAlarmTime(getStringValue(info.get("ALARM_TIME")));
} else {
vo.setHasAlarm(false);
vo.setDeviceName("");
vo.setAlarmReason("");
vo.setAlarmTime("");
}
return vo;
}
/**
*
*/
@Override
public List<Board4RepairAnalysisVo> getRepairAnalysisList() {
List<Board4RepairAnalysisVo> list = board4Mapper.selectRepairAnalysisByDevice();
return list != null ? list : new ArrayList<>();
}
/**
*
*/
@Override
public List<Board4RepairTrendVo> getRepairTrendList() {
List<Board4RepairTrendVo> list = board4Mapper.selectRepairTrendList();
return list != null ? list : new ArrayList<>();
}
/**
*
*/
@Override
public Board4QualityStatisticsVo getQualityStatistics() {
Board4QualityStatisticsVo vo = new Board4QualityStatisticsVo();
HashMap<String, Object> stats = board4Mapper.selectQualityStatistics();
if (stats != null) {
vo.setQualifiedCount(getLongValue(stats.get("QUALIFIED_COUNT")));
vo.setUnqualifiedCount(getLongValue(stats.get("UNQUALIFIED_COUNT")));
} else {
vo.setQualifiedCount(0L);
vo.setUnqualifiedCount(0L);
}
return vo;
}
/**
*
*/
@Override
public List<Board4QualityTraceVo> getQualityTraceList() {
List<Board4QualityTraceVo> list = board4Mapper.selectQualityTraceList();
return list != null ? list : new ArrayList<>();
}
/**
* /
*/
@Override
public List<Board4DeviceProductionVo> getDeviceProductionList() {
List<Board4DeviceProductionVo> list = board4Mapper.selectDeviceProductionAnalysis();
return list != null ? list : new ArrayList<>();
}
/**
* 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 "";
}
return obj.toString();
}
}

@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aucma.report.mapper.Board4Mapper">
<!-- 查询年累计产量(去年数据) -->
<select id="selectYearProductionTotal" resultType="java.lang.Long">
SELECT NVL(SUM(COMPLETE_AMOUNT), 0)
FROM BASE_ORDERINFO
WHERE TO_CHAR(BEGIN_DATE, 'YYYY') = TO_CHAR(ADD_MONTHS(SYSDATE, -12), 'YYYY')
</select>
<!-- 查询月累计产量(当月数据) -->
<select id="selectMonthProductionTotal" resultType="java.lang.Long">
SELECT NVL(SUM(COMPLETE_AMOUNT), 0)
FROM BASE_ORDERINFO
WHERE TO_CHAR(BEGIN_DATE, 'YYYY-MM') = TO_CHAR(SYSDATE, 'YYYY-MM')
</select>
<!-- 查询日累计产量(当天工艺参数) -->
<!-- 使用BASE_DEVICE_PARAM_VAL表PARAM_CODE='19'表示实际产出数量 -->
<!-- 取每台设备当天最新的一条记录的实际产出数量进行汇总 -->
<select id="selectDayProductionTotal" resultType="java.lang.Long">
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_CODE = '19'
AND TO_CHAR(COLLECT_TIME, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
)
WHERE RN = 1
</select>
<!-- 查询今日工单统计(计划数、完成数) -->
<select id="selectTodayOrderStatistics" resultType="java.util.HashMap">
SELECT NVL(SUM(ORDER_AMOUNT), 0) AS PLAN_COUNT,
NVL(SUM(COMPLETE_AMOUNT), 0) AS COMPLETE_COUNT
FROM BASE_ORDERINFO
WHERE TO_CHAR(BEGIN_DATE, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
</select>
<!-- 查询今日工单进度列表 -->
<select id="selectTodayOrderProgressList" resultType="com.aucma.report.domain.vo.Board4OrderProgressVo">
SELECT MATERIAL_NAME AS materialName,
ORDER_AMOUNT AS planCount,
COMPLETE_AMOUNT AS completeCount,
(ORDER_AMOUNT - COMPLETE_AMOUNT) AS diffCount,
CASE WHEN ORDER_AMOUNT > 0
THEN ROUND(COMPLETE_AMOUNT / ORDER_AMOUNT * 100, 0) || '%'
ELSE '0%' END AS progress
FROM BASE_ORDERINFO
WHERE TO_CHAR(BEGIN_DATE, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
ORDER BY BEGIN_DATE DESC
</select>
<!-- 查询设备状态统计 -->
<!-- DEVICE_STATUS: 0-使用/正常, 1-停用/告警, 2-报废/停机 -->
<select id="selectDeviceStatusStatistics" resultType="java.util.HashMap">
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 ALARM_COUNT,
SUM(CASE WHEN DEVICE_STATUS = '2' THEN 1 ELSE 0 END) AS STOP_COUNT
FROM BASE_DEVICELEDGER
WHERE IS_FLAG = '0'
</select>
<!-- 查询总维修次数 -->
<select id="selectTotalRepairCount" resultType="java.lang.Long">
SELECT COUNT(*)
FROM DMS_BILLS_FAULT_INSTANCE
WHERE IS_FLAG = '1'
</select>
<!-- 查询最新报警信息 -->
<select id="selectLatestAlarmInfo" resultType="java.util.HashMap">
SELECT * FROM (
SELECT d.DEVICE_NAME AS DEVICE_NAME,
a.ALARM_CONTENT AS ALARM_REASON,
TO_CHAR(a.ALARM_TIME, 'HH24:MI:SS') AS ALARM_TIME
FROM DMS_RECORD_ALARM_INFO a
LEFT JOIN DMS_BASE_DEVICE_LEDGER d ON a.DEVICE_ID = d.DEVICE_ID
ORDER BY a.ALARM_TIME DESC
) WHERE ROWNUM = 1
</select>
<!-- 查询维修分析列表(按设备聚合) -->
<select id="selectRepairAnalysisByDevice" resultType="com.aucma.report.domain.vo.Board4RepairAnalysisVo">
SELECT * FROM (
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 DMS_BASE_DEVICE_LEDGER d ON f.DEVICE_ID = d.DEVICE_ID
WHERE f.IS_FLAG = '1'
AND f.DEVICE_ID IS NOT NULL
GROUP BY d.DEVICE_ID, d.DEVICE_NAME
ORDER BY repairCount DESC
) WHERE ROWNUM &lt;= 10
</select>
<!-- 查询报修趋势(按小时段统计,当天数据) -->
<select id="selectRepairTrendList" resultType="com.aucma.report.domain.vo.Board4RepairTrendVo">
SELECT TO_CHAR(APPLY_TIME, 'HH24') || ':00' AS timeHour,
COUNT(*) AS repairCount
FROM DMS_BILLS_FAULT_INSTANCE
WHERE TO_CHAR(APPLY_TIME, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
AND IS_FLAG = '1'
GROUP BY TO_CHAR(APPLY_TIME, 'HH24')
ORDER BY timeHour
</select>
<!-- 查询质量统计(合格数/不合格数) -->
<!-- TREATMENT_MEASURE: 3=合格, 1=返修 -->
<select id="selectQualityStatistics" resultType="java.util.HashMap">
SELECT NVL(SUM(CASE WHEN TREATMENT_MEASURE = '3' THEN 1 ELSE 0 END), 0) AS QUALIFIED_COUNT,
NVL(SUM(CASE WHEN TREATMENT_MEASURE = '1' THEN 1 ELSE 0 END), 0) AS UNQUALIFIED_COUNT
FROM REPORT_QUALITY_INSPECTION
WHERE TO_CHAR(INSPECTOR_TIME, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
</select>
<!-- 查询质量追溯列表(按产品统计合格率) -->
<select id="selectQualityTraceList" resultType="com.aucma.report.domain.vo.Board4QualityTraceVo">
SELECT * FROM (
SELECT MATERIAL_NAME AS materialName,
ROUND(SUM(CASE WHEN TREATMENT_MEASURE = '3' THEN 1 ELSE 0 END) * 100.0 / NULLIF(COUNT(*), 0), 0) AS passRate,
100 AS passLimit
FROM REPORT_QUALITY_INSPECTION
WHERE MATERIAL_NAME IS NOT NULL
AND TO_CHAR(INSPECTOR_TIME, 'YYYY-MM-DD') >= TO_CHAR(SYSDATE - 7, 'YYYY-MM-DD')
GROUP BY MATERIAL_NAME
ORDER BY passRate DESC
) WHERE ROWNUM &lt;= 10
</select>
<!-- 查询设备分析列表(各设备机台实际产量) -->
<!-- 从BASE_DEVICE_PARAM_VAL获取当天每台设备的最新实际产出数量 -->
<select id="selectDeviceProductionAnalysis" resultType="com.aucma.report.domain.vo.Board4DeviceProductionVo">
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_CODE = '19'
AND TO_CHAR(COLLECT_TIME, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
)
WHERE RN = 1
) p ON d.DEVICE_CODE = p.DEVICE_CODE
WHERE d.IS_FLAG = '0'
AND d.DEVICE_TYPE = '1'
ORDER BY production DESC
</select>
</mapper>
Loading…
Cancel
Save