From a625e025f77e2c1fd9424b9da1444e5a75c522db Mon Sep 17 00:00:00 2001
From: lius <Lius2225@163.com>
Date: 星期四, 03 八月 2023 16:37:20 +0800
Subject: [PATCH] 设备利用率分段分析

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java |  248 +++++++++++++++++++++++++++++++++++++++++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java    |   10 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayUtilizationRateContrastQueryVo.java        |   14 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java          |    9 +
 4 files changed, 277 insertions(+), 4 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 62a2f94..b253713 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
@@ -100,4 +100,14 @@
         return Result.OK(result);
     }
 
+    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垎娈靛垎鏋愬垪琛�")
+    @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垎娈靛垎鏋愬垪琛�", notes = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垎娈靛垎鏋愬垪琛�")
+    @GetMapping("/utilizationRateSectionAnalyze")
+    public Result utilizationRateSectionAnalyze(DayUtilizationRateContrastQueryVo vo) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        MdcEfficiencyVo result = mdcEfficiencyReportService.utilizationRateSectionAnalyze(userId, vo);
+        return Result.OK(result);
+    }
+
 }
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 abfd3f9..c384e09 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
@@ -72,4 +72,13 @@
      * @return
      */
     DayUtilizationRateDto dayUtilizationRateContrast(String userId, DayUtilizationRateContrastQueryVo vo);
+
+    /**
+     * 璁惧鍒╃敤鐜囧垎娈靛垎鏋�
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    MdcEfficiencyVo utilizationRateSectionAnalyze(String userId, DayUtilizationRateContrastQueryVo 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 f57f0b5..49346ae 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
@@ -656,6 +656,20 @@
                             mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                         }
                     }
+                } else {
+                    mdcEfficiencyShiftResultDto.setTheDate(date);
+                    mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0"));
+                    mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0"));
+                    mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0"));
+                    mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0"));
+                    mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0"));
+                    mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0"));
+                    mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0"));
+                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+                        if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
+                            mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
+                        }
+                    }
                 }
             }
         } else {
@@ -1008,6 +1022,226 @@
         return result;
     }
 
+    /**
+     * 璁惧鍒╃敤鐜囧垎娈靛垎鏋�
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public MdcEfficiencyVo utilizationRateSectionAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) {
+        MdcEfficiencyVo result = new MdcEfficiencyVo();
+        List<MdcEfficiencyListDto> listDtos = new ArrayList<>();
+        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);
+        }
+
+        List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
+        List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
+        result.setDates(dates);
+        String startString = vo.getStartTime();
+        String endString = vo.getEndTime();
+
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            result.setMdcEfficiencyList(listDtos);
+        } else {
+            // 鍒╃敤鐜囩瓑绾�
+            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
+
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
+                // 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭�
+                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+
+                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
+                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+                    switch (mdcEquDepDto.getOrgType()) {
+                        case "1":
+                            mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
+                            break;
+                        case "2":
+                            mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName());
+                            break;
+                        case "3":
+                            mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName());
+                            break;
+                        default:
+                    }
+
+                    SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null);
+                    if (sysDepart != null) {
+                        switch (sysDepart.getOrgType()) {
+                            case "1":
+                                mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName());
+                                break;
+                            case "2":
+                                mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName());
+                                break;
+                            case "3":
+                                mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName());
+                                break;
+                            default:
+                        }
+                        if (StringUtils.isNotEmpty(sysDepart.getParentId())) {
+                            departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> {
+                                switch (depart1.getOrgType()) {
+                                    case "1":
+                                        mdcEfficiencyListDto.setLevel1(depart1.getDepartName());
+                                        break;
+                                    case "2":
+                                        mdcEfficiencyListDto.setLevel2(depart1.getDepartName());
+                                        break;
+                                    case "3":
+                                        mdcEfficiencyListDto.setLevel3(depart1.getDepartName());
+                                        break;
+                                    default:
+                                }
+                            });
+                        }
+                    }
+                    //
+                    List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    for (String date : dateList) {
+                        Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), startTime, endTime, date, mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+
+            } else {
+                // 浜х嚎灞傜骇
+                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
+                // 鏌ヨ鎵�鏈変骇绾夸俊鎭�
+                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+
+                for (MdcEquProDto mdcEquProDto : equipmentList) {
+                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    switch (mdcEquProDto.getOrgType()) {
+                        case "1":
+                            mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
+                            break;
+                        case "2":
+                            mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName());
+                            break;
+                        case "3":
+                            mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName());
+                            break;
+                        default:
+                    }
+                    MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null);
+                    if (mdcProduction != null) {
+                        switch (mdcProduction.getOrgType()) {
+                            case "1":
+                                mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName());
+                                break;
+                            case "2":
+                                mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName());
+                                break;
+                            case "3":
+                                mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName());
+                                break;
+                            default:
+                        }
+                        if (StringUtils.isNotEmpty(mdcProduction.getParentId())) {
+                            productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> {
+                                switch (production1.getOrgType()) {
+                                    case "1":
+                                        mdcEfficiencyListDto.setLevel1(production1.getProductionName());
+                                        break;
+                                    case "2":
+                                        mdcEfficiencyListDto.setLevel2(production1.getProductionName());
+                                        break;
+                                    case "3":
+                                        mdcEfficiencyListDto.setLevel3(production1.getProductionName());
+                                        break;
+                                    default:
+                                }
+                            });
+                        }
+                    }
+                    //
+                    List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    for (String date : dateList) {
+                        Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), startTime, endTime, date, mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+            }
+            result.setMdcEfficiencyList(listDtos);
+        }
+        return result;
+    }
+
+    private MdcEfficiencyResultDto utilizationRate(String equipmentId, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        MdcEfficiencyResultDto dto = new MdcEfficiencyResultDto();
+        dto.setTheDate(DateUtils.format(DateUtils.toDate(date, DateUtils.STR_DATE), DateUtils.STRDATE));
+        List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(equipmentId, startTime.getTime(), endTime.getTime());
+        if (runningSections != null && !runningSections.isEmpty()) {
+            // 鏃堕棿淇
+            runningSections.get(0).setStartTime(startTime);
+            if (runningSections.size() > 1) {
+                runningSections.get(runningSections.size() - 1).setEndTime(endTime);
+            } else {
+                runningSections.get(0).setEndTime(endTime);
+            }
+            // 鍒╃敤鐜囪绠�
+            BigDecimal processLong = new BigDecimal("0");
+            for (MdcEquipmentRunningSection runningSection : runningSections) {
+                if (runningSection.getStatus() == 3) {
+                    long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime());
+                    processLong = processLong.add(new BigDecimal(duration));
+                }
+            }
+            BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime));
+            BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
+            dto.setUtilizationRate(utilizationRate);
+        } else {
+            dto.setUtilizationRate(new BigDecimal("0"));
+        }
+        long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
+        for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+            if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
+                dto.setColor(mdcUtilizationRate.getRateParameterColor());
+            }
+        }
+        return dto;
+    }
+
     private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) {
         StatisticalAnalysisVo vo = new StatisticalAnalysisVo();
         for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) {
@@ -1040,6 +1274,20 @@
                             mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                         }
                     }
+                } else {
+                    mdcEfficiencyResultDto.setTheDate(date);
+                    mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0"));
+                    mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0"));
+                    mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
+                    mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0"));
+                    mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
+                    mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
+                    mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
+                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+                        if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
+                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
+                        }
+                    }
                 }
             }
         } else {
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayUtilizationRateContrastQueryVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayUtilizationRateContrastQueryVo.java
index 9611749..a84b779 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayUtilizationRateContrastQueryVo.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayUtilizationRateContrastQueryVo.java
@@ -2,6 +2,8 @@
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @author: LiuS
  * @create: 2023-08-02 13:50
@@ -23,10 +25,6 @@
      */
     private String equipmentId;
     /**
-     * 璁惧鍚嶇О
-     */
-    private String equipmentName;
-    /**
      * 鏍戠被鍨�    ->  1:杞﹂棿灞傜骇   2:閮ㄩ棬灞傜骇
      */
     private String typeTree;
@@ -38,5 +36,13 @@
      * 鏃堕棿娈�
      */
     private String endTime;
+    /**
+     * 灞傜骇ID
+     */
+    private String parentId;
+    /**
+     * 璁惧ids
+     */
+    private List<String> equipmentIdList;
 
 }

--
Gitblit v1.9.3