From 632a346f1fd07ab659bfc68e70bd6e254b0e8c51 Mon Sep 17 00:00:00 2001
From: lius <Lius2225@163.com>
Date: 星期三, 19 七月 2023 16:10:55 +0800
Subject: [PATCH] 统计分析接口

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/StatisticalAnalysisVo.java                    |   54 ++++++++++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java |   80 +++++++++++++++++++++++++-
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java    |   15 +++-
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java               |    4 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml         |    4 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java          |   15 +++-
 6 files changed, 158 insertions(+), 14 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
index 874b959..b597903 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
@@ -8,10 +8,7 @@
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyShiftVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyVo;
+import org.jeecg.modules.mdc.vo.*;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -61,4 +58,14 @@
         return Result.OK(result);
     }
 
+    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-缁熻鍒嗘瀽鍒楄〃")
+    @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-缁熻鍒嗘瀽鍒楄〃", notes = "璁惧鏁堢巼鎶ヨ〃-缁熻鍒嗘瀽鍒楄〃")
+    @GetMapping("/dayStatisticalRate")
+    public Result dayStatisticalRate(MdcEfficiencyReportQueryVo vo) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        StatisticalAnalysisVo result = mdcEfficiencyReportService.dayStatisticalRate(userId, vo);
+        return Result.OK(result);
+    }
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
index f930d30..d5d3516 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
@@ -8,7 +8,7 @@
             t2.equipment_id equipmentId,
             t2.equipment_name equipmentName,
             t2.equipment_type equipmentType,
-            t1.the_date,
+            t1.the_date theDate,
             t1.process_long processLong,
             t1.process_long / 86400 utilizationRate,
             CASE
@@ -40,7 +40,7 @@
             t2.equipment_id equipmentId,
             t2.equipment_name equipmentName,
             t2.equipment_type equipmentType,
-            t1.the_date,
+            t1.the_date theDate,
             t1.process_long processLong,
             CASE
                 WHEN t1.open_long > 0 THEN
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
index 068b6f5..3c3f982 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
@@ -1,9 +1,6 @@
 package org.jeecg.modules.mdc.service;
 
-import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyShiftVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyVo;
+import org.jeecg.modules.mdc.vo.*;
 
 /**
  * @author: LiuS
@@ -37,4 +34,14 @@
      * @return
      */
     MdcEfficiencyShiftVo efficiencyShiftList(String userId, MdcEfficiencyReportShiftQueryVo vo);
+
+    /**
+     * 缁熻鍒嗘瀽鍒楄〃
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    StatisticalAnalysisVo dayStatisticalRate(String userId, MdcEfficiencyReportQueryVo vo);
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
index 2e732c1..f7c0b2d 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.mdc.dto.*;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.entity.MdcUtilizationRate;
@@ -11,10 +12,7 @@
 import org.jeecg.modules.mdc.service.IMdcUtilizationRateService;
 import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
 import org.jeecg.modules.mdc.util.DateUtils;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyShiftVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyVo;
+import org.jeecg.modules.mdc.vo.*;
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.service.IMdcProductionService;
@@ -458,6 +456,80 @@
         return result;
     }
 
+    /**
+     * 缁熻鍒嗘瀽鍒楄〃
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public StatisticalAnalysisVo dayStatisticalRate(String userId, MdcEfficiencyReportQueryVo vo) {
+        StatisticalAnalysisVo result = new StatisticalAnalysisVo();
+        List<String> equipmentIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
+            }
+        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
+            // 鍗曞彴璁惧淇℃伅
+            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
+        } else {
+            // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+        }
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            vo.setEquipmentIdList(equipmentIds);
+        }
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            return result;
+        }
+
+        if (!StringUtils.isNotEmpty(vo.getDateTime())) {
+            throw new JeecgBootException("璇疯緭鍏ユ煡璇㈡潯浠舵椂闂�");
+        }
+        vo.setStartTime(vo.getDateTime());
+        vo.setEndTime(vo.getDateTime());
+        List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
+        if (efficiencyList == null || efficiencyList.isEmpty()) {
+            return result;
+        }
+        result = this.efficiencyStatisticalRate(efficiencyList);
+        if (result.getOpenRate().compareTo(new BigDecimal("0")) > 0) {
+            result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
+        }
+        if (result.getUtilizationRate().compareTo(new BigDecimal("0")) > 0) {
+            result.setUtilizationRate(result.getUtilizationRate().multiply(new BigDecimal(100)).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
+        }
+        if (result.getOpenLong().compareTo(new BigDecimal(0)) > 0 && result.getProcessLong().compareTo(new BigDecimal(0)) > 0) {
+            result.setUsedOpenRate(result.getProcessLong().divide(result.getOpenLong(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
+        }
+        return result;
+    }
+
+    private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) {
+        StatisticalAnalysisVo vo = new StatisticalAnalysisVo();
+        for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) {
+            vo.setUtilizationRate(vo.getUtilizationRate().add(mdcEfficiencyDto.getUtilizationRate()));
+            vo.setOpenRate(vo.getOpenRate().add(mdcEfficiencyDto.getOpenRate()));
+            vo.setOpenLong(vo.getOpenLong().add(mdcEfficiencyDto.getOpenLong()));
+            vo.setProcessLong(vo.getProcessLong().add(mdcEfficiencyDto.getProcessLong()));
+            vo.setWaitLong(vo.getWaitLong().add(mdcEfficiencyDto.getWaitLong()));
+            vo.setCloseLong(vo.getCloseLong().add(mdcEfficiencyDto.getCloseLong()));
+        }
+        return vo;
+    }
+
     private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) {
         MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
         if (efficiencyList != null && !efficiencyList.isEmpty()) {
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java
index 6af5883..0a0cc3f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java
@@ -12,6 +12,10 @@
 public class MdcEfficiencyReportQueryVo {
 
     /**
+     * 鏃ユ湡
+     */
+    private String dateTime;
+    /**
      * 寮�濮嬫椂闂�  ->  20220101
      */
     private String startTime;
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/StatisticalAnalysisVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/StatisticalAnalysisVo.java
new file mode 100644
index 0000000..caad82b
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/StatisticalAnalysisVo.java
@@ -0,0 +1,54 @@
+package org.jeecg.modules.mdc.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author: LiuS
+ * @create: 2023-07-19 14:33
+ */
+@Data
+public class StatisticalAnalysisVo {
+
+    /**
+     * 寮�鏈烘椂闀� UPT
+     */
+    private BigDecimal openLong = new BigDecimal("0");
+    /**
+     * 寰呮満鏃堕暱
+     */
+    private BigDecimal waitLong = new BigDecimal("0");
+    /**
+     * 鍔犲伐鏃堕暱 EMT
+     */
+    private BigDecimal processLong = new BigDecimal("0");
+    /**
+     * 鎶ヨ
+     */
+    private BigDecimal errorLong = new BigDecimal("0");
+    /**
+     * 鍏虫満鏃堕暱
+     */
+    private BigDecimal closeLong = new BigDecimal("0");
+    /**
+     * 鏃ユ湡
+     */
+    private String theDate;
+    /**
+     * 鎬绘椂闀� MT
+     */
+    private BigDecimal totalLong = new BigDecimal("0");
+    /**
+     * 寮�鏈虹巼
+     */
+    private BigDecimal openRate = new BigDecimal("0");
+    /**
+     * 鍒╃敤鐜�
+     */
+    private BigDecimal utilizationRate = new BigDecimal("0");
+    /**
+     * 杩愯鐜�
+     */
+    private BigDecimal usedOpenRate = new BigDecimal("0");
+}

--
Gitblit v1.9.3