From 75d26035001d85c12dc3ca93455b0fee477c3f77 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期一, 03 三月 2025 16:47:58 +0800
Subject: [PATCH] 看板设备状态概况及月利用路趋势接口

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java |  119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 115 insertions(+), 4 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java
index 5bb85fa..b33f90f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java
@@ -1,16 +1,25 @@
 package org.jeecg.modules.screen.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.mdc.entity.MdcEquipmentMonitor;
 import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoService;
+import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.screen.dto.EquipmentStatusOverview;
+import org.jeecg.modules.screen.dto.UtilizationMonth;
+import org.jeecg.modules.screen.dto.UtilizationMonthDto;
 import org.jeecg.modules.screen.service.MdcLargeScreenService;
+import org.jeecg.modules.system.entity.MdcProduction;
+import org.jeecg.modules.system.service.IMdcProductionService;
 import org.jeecg.modules.system.service.ISysDictService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Author: Lius
@@ -26,16 +35,22 @@
     @Resource
     private ISysDictService sysDictService;
 
+    @Resource
+    private IMdcProductionService mdcProductionService;
+
+    @Resource
+    private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService;
+
     /**
      * 璁惧鐘舵�佹儏鍐�
      *
-     * @param workshopId
+     * @param productionId
      * @return
      */
     @Override
-    public EquipmentStatusOverview equipmentStatusOverview(String workshopId) {
+    public EquipmentStatusOverview equipmentStatusOverview(String productionId) {
         EquipmentStatusOverview equipmentStatusOverview = new EquipmentStatusOverview();
-        List<MdcEquipmentMonitor> equipmentMonitorList = mdcEquipmentService.getEquipmentMonitorList(workshopId);
+        List<MdcEquipmentMonitor> equipmentMonitorList = mdcEquipmentService.getEquipmentMonitorList(productionId);
         if (equipmentMonitorList != null && !equipmentMonitorList.isEmpty()) {
             equipmentStatusOverview.setEquipmentCount(equipmentMonitorList.size());
             for (MdcEquipmentMonitor mdcEquipmentMonitor : equipmentMonitorList) {
@@ -72,4 +87,100 @@
         }
         return equipmentStatusOverview;
     }
+
+    /**
+     * 璁惧鏈堝埄鐢ㄧ巼瓒嬪娍
+     *
+     * @param productionId
+     * @return
+     */
+    @Override
+    public Map<String, Object> monthUtilizationTendency(String productionId) {
+        Map<String, Object> result = new HashMap<>();
+
+        // 鑾峰彇瀛愮敓浜у垪琛�
+        List<MdcProduction> mdcProductionList = mdcProductionService.list(
+                new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, productionId)
+        );
+
+        if (mdcProductionList == null || mdcProductionList.isEmpty()) {
+            return result;
+        }
+
+        // 鐢熸垚鏈堝害鏃ユ湡鑼冨洿
+        List<String[]> dateLists = DateUtils.generateMonthlyDateRanges(DateUtils.format(new Date(), DateUtils.STRDATE));
+        List<String> dateList = dateLists.stream()
+                .map(array -> array[2]) // 鎻愬彇鏈堜唤鍚嶇О
+                .collect(Collectors.toList());
+        result.put("dateList", dateList);
+
+        // 璁$畻姣忎釜瀛愮敓浜х殑鏈堝害鍒╃敤鐜�
+        List<UtilizationMonthDto> utilizationMonthDtoList = mdcProductionList.stream()
+                .map(mdcProduction -> createUtilizationMonthDto(mdcProduction, dateLists))
+                .collect(Collectors.toList());
+
+        // 璁$畻鎬诲巶鐨勬湀搴﹀埄鐢ㄧ巼
+        UtilizationMonthDto totalUtilizationMonthDto = createTotalUtilizationMonthDto(productionId, dateLists);
+        utilizationMonthDtoList.add(totalUtilizationMonthDto);
+
+        result.put("dataList", utilizationMonthDtoList);
+        return result;
+    }
+
+    /**
+     * 鍒涘缓瀛愮敓浜х殑鏈堝害鍒╃敤鐜� DTO
+     */
+    private UtilizationMonthDto createUtilizationMonthDto(MdcProduction mdcProduction, List<String[]> dateLists) {
+        UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto();
+        utilizationMonthDto.setProductionId(mdcProduction.getId());
+        utilizationMonthDto.setProductionName(mdcProduction.getProductionName());
+
+        List<UtilizationMonth> utilizationMonthList = calculateUtilizationRates(mdcProduction.getId(), dateLists);
+        utilizationMonthDto.setUtilizationMonthList(utilizationMonthList);
+
+        return utilizationMonthDto;
+    }
+
+    /**
+     * 鍒涘缓鎬诲巶鐨勬湀搴﹀埄鐢ㄧ巼 DTO
+     */
+    private UtilizationMonthDto createTotalUtilizationMonthDto(String productionId, List<String[]> dateLists) {
+        UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto();
+        utilizationMonthDto.setProductionName("鎬诲巶");
+
+        List<UtilizationMonth> utilizationMonthList = calculateUtilizationRatesTotal(productionId, dateLists);
+        utilizationMonthDto.setUtilizationMonthList(utilizationMonthList);
+
+        return utilizationMonthDto;
+    }
+
+    /**
+     * 璁$畻瀛愮敓浜х殑鏈堝害鍒╃敤鐜�
+     */
+    private List<UtilizationMonth> calculateUtilizationRates(String productionId, List<String[]> dateLists) {
+        return dateLists.stream()
+                .map(dates -> {
+                    UtilizationMonth utilizationMonth = new UtilizationMonth();
+                    utilizationMonth.setMonth(dates[2]);
+                    BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonth(productionId, dates[0], dates[1]);
+                    utilizationMonth.setUtilizationRate(utilizationRate);
+                    return utilizationMonth;
+                })
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 璁$畻鎬诲巶鐨勬湀搴﹀埄鐢ㄧ巼
+     */
+    private List<UtilizationMonth> calculateUtilizationRatesTotal(String productionId, List<String[]> dateLists) {
+        return dateLists.stream()
+                .map(dates -> {
+                    UtilizationMonth utilizationMonth = new UtilizationMonth();
+                    utilizationMonth.setMonth(dates[2]);
+                    BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonthTotal(productionId, dates[0], dates[1]);
+                    utilizationMonth.setUtilizationRate(utilizationRate);
+                    return utilizationMonth;
+                })
+                .collect(Collectors.toList());
+    }
 }

--
Gitblit v1.9.3