From 93042b5fc739ee2cf38fb5be3380107c9a3f001a Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期一, 15 四月 2024 15:41:45 +0800
Subject: [PATCH] 设备级效率接口

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcHomeEquipmentVo.java            |   34 +++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcHomeMapper.xml          |    1 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/IMdcHomeServiceImpl.java |   75 +++++++++++++++++++++++-
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java     |   14 ++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcHomeService.java          |   11 +++
 5 files changed, 131 insertions(+), 4 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java
index 2b64c30..0c52d3c 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java
@@ -19,6 +19,7 @@
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
@@ -210,5 +211,18 @@
         return Result.OK(result);
     }
 
+    @ApiOperation(value = "MDC棣栭〉鎺ュ彛-璁惧绾ц澶囨晥鐜囩粺璁�", notes = "MDC棣栭〉鎺ュ彛-璁惧绾ц澶囨晥鐜囩粺璁�")
+    @GetMapping("/equipmentLevelEfficiencyStatistics")
+    public Result<?> equipmentLevelEfficiencyStatistics(@RequestParam(name = "equipmentId", required = true) String equipmentId) {
+        MdcHomeEfficiencyVo result = mdcHomeService.getEquipmentLevelEfficiencyStatistics(equipmentId);
+        return Result.OK(result);
+    }
+
+    @ApiOperation(value = "MDC棣栭〉鎺ュ彛-璁惧绾ф暣骞村害鍒╃敤鐜�", notes = "MDC棣栭〉鎺ュ彛-璁惧绾ф暣骞村害鍒╃敤鐜�")
+    @GetMapping("/equipmentAnnualEfficiencyStatistics")
+    public Result<?> equipmentAnnualEfficiencyStatistics(@RequestParam(name = "equipmentId", required = true) String equipmentId) {
+        Map<String, Object> result = mdcHomeService.getEquipmentAnnualEfficiencyStatistics(equipmentId);
+        return Result.OK(result);
+    }
 
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcHomeMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcHomeMapper.xml
index 25e3308..6dd9f0c 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcHomeMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcHomeMapper.xml
@@ -47,6 +47,7 @@
     <select id="getUtilizationByMonth" resultType="java.util.Map">
         SELECT
             SUM(process_long) processLong,
+            SUM(open_long) openLong,
             COUNT(*) processDay
         FROM
             mdc_equipment_statistical_info
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcHomeService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcHomeService.java
index 9b52a4c..236c42c 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcHomeService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcHomeService.java
@@ -47,4 +47,15 @@
      * 宸ユ绾ц澶囨晥鐜�
      */
     MdcHomeEfficiencyVo getEquipmentEfficiencyStatistics(String userId, String key);
+
+    /**
+     * 璁惧绾ф晥鐜囩粺璁�
+     */
+    MdcHomeEfficiencyVo getEquipmentLevelEfficiencyStatistics(String equipmentId);
+
+    /**
+     * 璁惧绾ф暣骞村害鍒╃敤鐜囧拰OEE
+     */
+    Map<String, Object> getEquipmentAnnualEfficiencyStatistics(String equipmentId);
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/IMdcHomeServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/IMdcHomeServiceImpl.java
index ac51b0e..e859470 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/IMdcHomeServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/IMdcHomeServiceImpl.java
@@ -9,10 +9,7 @@
 import org.jeecg.modules.mdc.service.IMdcEquipmentService;
 import org.jeecg.modules.mdc.service.IMdcHomeService;
 import org.jeecg.modules.mdc.util.DateUtils;
-import org.jeecg.modules.mdc.vo.EquipmentDayUtilizationVo;
-import org.jeecg.modules.mdc.vo.MdcCommonVo;
-import org.jeecg.modules.mdc.vo.MdcEquipmentStatusVo;
-import org.jeecg.modules.mdc.vo.MdcHomeEfficiencyVo;
+import org.jeecg.modules.mdc.vo.*;
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.springframework.stereotype.Service;
@@ -362,4 +359,74 @@
         }
         return result;
     }
+
+    /**
+     * 璁惧绾ф晥鐜囩粺璁�
+     */
+    @Override
+    public MdcHomeEfficiencyVo getEquipmentLevelEfficiencyStatistics(String equipmentId) {
+        MdcHomeEfficiencyVo result = new MdcHomeEfficiencyVo();
+        String date = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-1).toString(), DateUtils.STR_DATE), DateUtils.STRDATE);
+        MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcHomeMapper.getUtilizationByDay(Arrays.asList(equipmentId.split(",")), date);
+        if (mdcEquipmentStatisticalInfo != null) {
+            result.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP));
+            if (BigDecimal.ZERO.compareTo(mdcEquipmentStatisticalInfo.getOpenLong()) == -1) {
+                result.setOpenRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+                result.setStartRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP));
+            }
+        }
+        //鑾峰彇OEE鏁版嵁
+        String month = DateUtils.format(DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE), DateUtils.STR_YEAR_MONTH);
+        BigDecimal oee = mdcHomeMapper.getOeeByDate(Arrays.asList(equipmentId.split(",")), month);
+        if (oee == null || oee.compareTo(BigDecimal.ZERO) == 0) {
+            result.setOverallEquipmentEfficiency(BigDecimal.ZERO);
+        } else {
+            result.setOverallEquipmentEfficiency(oee.multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+        }
+        return result;
+    }
+
+    /**
+     * 璁惧绾ф暣骞村害鍒╃敤鐜�
+     */
+    @Override
+    public Map<String, Object> getEquipmentAnnualEfficiencyStatistics(String equipmentId) {
+        Map<String, Object> result = new HashMap<>();
+        Date end = DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE);
+        Date start = DateUtils.toDate(LocalDate.now().plusMonths(-12).toString(), DateUtils.STR_DATE);
+        List<String> monthBetween = DateUtils.getMonthBetween(start, end);
+        List<String> dateList = new ArrayList<>();
+        List<MdcHomeEquipmentVo> dataList = new ArrayList<>();
+        for (String month : monthBetween) {
+            String name = month.substring(month.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "鏈�";
+            dateList.add(name);
+            //鍒╃敤鐜囧拰oee
+            MdcHomeEquipmentVo mdcHomeEquipmentVo = new MdcHomeEquipmentVo();
+            mdcHomeEquipmentVo.setMonth(name);
+            //鍒╃敤鐜�
+            Map<String, Object> resultMap = mdcHomeMapper.getUtilizationByMonth(Arrays.asList(equipmentId.split(",")), month.replace("-", ""));
+            if (resultMap != null && resultMap.get("processLong") != null) {
+                BigDecimal processLong = BigDecimal.valueOf((Double) resultMap.get("processLong"));
+                BigDecimal openLong = BigDecimal.valueOf((Double) resultMap.get("openLong"));
+                BigDecimal processDay = new BigDecimal((Integer) resultMap.get("processDay"));
+                if (BigDecimal.ZERO.compareTo(processLong) == -1) {
+                    mdcHomeEquipmentVo.setUtilizationRate(processLong.divide(processDay.multiply(new BigDecimal("86400")), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+                    if (BigDecimal.ZERO.compareTo(openLong) == -1) {
+                        mdcHomeEquipmentVo.setStartRate(openLong.divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP));
+                        mdcHomeEquipmentVo.setOpenRate(processDay.divide(openLong, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+                    }
+                }
+            }
+
+            //OEE
+            BigDecimal oee = mdcHomeMapper.getOeeByDate(Arrays.asList(equipmentId.split(",")), month);
+            if (oee != null && !(oee.compareTo(BigDecimal.ZERO) == 0)) {
+                mdcHomeEquipmentVo.setOverallEquipmentEfficiency(oee.multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+            }
+            dataList.add(mdcHomeEquipmentVo);
+        }
+        result.put("dateList", dateList);
+        result.put("dataList", dataList);
+        return result;
+    }
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcHomeEquipmentVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcHomeEquipmentVo.java
new file mode 100644
index 0000000..d4e7250
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcHomeEquipmentVo.java
@@ -0,0 +1,34 @@
+package org.jeecg.modules.mdc.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author Lius
+ * @date 2024/4/15 14:24
+ */
+@Data
+public class MdcHomeEquipmentVo {
+    /**
+     * 鏈堜唤
+     */
+    private String month;
+    /**
+     * 鍒╃敤鐜�
+     */
+    private BigDecimal utilizationRate = BigDecimal.ZERO;
+    /**
+     * 寮�鍔ㄧ巼
+     */
+    private BigDecimal startRate = BigDecimal.ZERO;
+    /**
+     * 寮�鏈虹巼
+     */
+    private BigDecimal openRate = BigDecimal.ZERO;
+    /**
+     * OEE
+     */
+    private BigDecimal overallEquipmentEfficiency = BigDecimal.ZERO;
+
+}

--
Gitblit v1.9.3