From 943d055689b2df81fa5c60bed5f40dae6135f713 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期一, 31 三月 2025 10:28:01 +0800
Subject: [PATCH] 中心综合利用率趋势接口

---
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml         |   14 +++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java         |   10 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java                                      |   18 ++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java                                 |   18 ++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java                 |  106 +++++++++++++++++++++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java |   10 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java                    |   24 +++--
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java            |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java                          |    6 +
 9 files changed, 193 insertions(+), 15 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 5b0b596..ab8fb5e 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
@@ -120,26 +120,30 @@
 //        return Result.OK(result);
 //    }
 
-//    @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-鐝粍缁煎悎鍒╃敤鐜囩粺璁″垎鏋�", notes = "璁惧鏁堢巼鎶ヨ〃-缁煎悎鍒╃敤鐜囩粺璁″垎鏋�")
-//    @GetMapping("/teamComprehensiveRateAnalyze")
-//    public Result teamComprehensiveRateAnalyze(DayUtilizationRateContrastQueryVo vo) {
-//        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-//        String userId = user.getId();
-//        MdcUtilizationRateDto result = mdcEfficiencyReportService.teamComprehensiveRateAnalyze(userId, vo);
-//        return Result.OK(result);Equipment utilization distribution of each team
-//    }
+    @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-鐝粍缁煎悎鍒╃敤鐜囩粺璁″垎鏋�", notes = "璁惧鏁堢巼鎶ヨ〃-缁煎悎鍒╃敤鐜囩粺璁″垎鏋�")
+    @GetMapping("/teamEfficiencyAnalyzeByMonth")
+    public Result<?> teamEfficiencyAnalyzeByMonth(EquEffVo equEffVo) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        Map<String, Object> result = mdcEfficiencyReportService.teamEfficiencyAnalyzeByMonth(userId, equEffVo);
+        return Result.OK(result);
+    }
 
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-閰嶉�佸皬缁勭淮搴﹀悇鐝粍鏈堣澶囧埄鐢ㄥ垎甯�", notes = "璁惧鏁堢巼鎶ヨ〃-閰嶉�佸皬缁勭淮搴﹀悇鐝粍鏈堣澶囧埄鐢ㄥ垎甯�")
     @GetMapping("/teamEquipmentEfficiencyAnalyze")
     public Result<?> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) {
-        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(equEffVo);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(userId, equEffVo);
         return Result.OK(result);
     }
 
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-璁惧缁村害鍚勭彮缁勬湀璁惧鍒╃敤鍒嗗竷", notes = "璁惧鏁堢巼鎶ヨ〃-璁惧缁村害鍚勭彮缁勬湀璁惧鍒╃敤鍒嗗竷")
     @GetMapping("/equipmentEfficiencyAnalyze")
     public Result<?> equipmentEfficiencyAnalyze(EquEffVo equEffVo) {
-        Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(equEffVo);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(userId, equEffVo);
         return Result.OK(result);
     }
 
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java
new file mode 100644
index 0000000..94f996b
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.mdc.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-03-28
+ * @Description:
+ */
+@Data
+public class TeamEquEffMonthChildDto {
+
+    private String month;
+
+    private BigDecimal utilizationRate = BigDecimal.ZERO;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java
new file mode 100644
index 0000000..5c1f322
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.mdc.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-03-28
+ * @Description:
+ */
+@Data
+public class TeamEquEffMonthDto {
+
+    private String productionName;
+
+    private List<TeamEquEffMonthChildDto> dataList;
+}
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 30b2f0c..cf688c3 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
@@ -104,7 +104,9 @@
      */
     List<BigDecimal> getEfficiencyRate(String equipmentId, String date);
 
-    Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo);
+    Map<String, Object> equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo);
 
-    Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo);
+    Map<String, Object> teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo);
+
+    Map<String, Object> teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo);
 }
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 0d7ebe1..8733675 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
@@ -17,6 +17,7 @@
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.jeecg.modules.system.service.ISysDepartService;
 import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.system.vo.MdcProOptionsVo;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -1749,7 +1750,7 @@
      * @return
      */
     @Override
-    public Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo) {
+    public Map<String, Object> equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) {
         Map<String, Object> result = new HashMap<>();
         List<String> mdcProductionIds = new ArrayList<>();
         if (StringUtils.isBlank(equEffVo.getProductionIds())) {
@@ -1758,6 +1759,8 @@
             mdcProductionIds.addAll(Arrays.asList(equEffVo.getProductionIds().split(",")));
         }
         List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds);
+        //鏁版嵁鏉冮檺杩囨护
+        allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds);
         List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds);
         if (equipmentList != null && !equipmentList.isEmpty()) {
             List<String> equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList());
@@ -1770,7 +1773,7 @@
     }
 
     @Override
-    public Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) {
+    public Map<String, Object> teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) {
         Map<String, Object> result = new HashMap<>();
         // 1. 澶勭悊鐢熶骇ID
         List<String> mdcProductionIds = StringUtils.isBlank(equEffVo.getProductionIds())
@@ -1781,7 +1784,8 @@
         if (allProductionIds.isEmpty()) {
             return result; // 鎻愬墠杩斿洖绌虹粨鏋�
         }
-
+        //鏁版嵁鏉冮檺杩囨护
+        allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds);
         // 2. 鑾峰彇璁惧鍒楄〃
         List<MdcEquipment> equipmentList = StringUtils.isNotBlank(equEffVo.getTeamCodes())
                 ? mdcEquipmentService.findByProIdsAndTeamCode(allProductionIds, Arrays.asList(equEffVo.getTeamCodes().split(",")))
@@ -1831,6 +1835,102 @@
 
     }
 
+    @Override
+    public Map<String, Object> teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo) {
+        Map<String, Object> result = new HashMap<>();
+
+        // 1. 鏃ユ湡澶勭悊
+        LocalDate now = LocalDate.now();
+        Date start = DateUtils.toDate(now.plusMonths(-6).toString(), DateUtils.STR_DATE);
+        Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE);
+
+        List<String> monthBetween = DateUtils.getMonthBetween(start, end);
+        List<String> dateList = monthBetween.stream()
+                .map(date -> date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "鏈�")
+                .collect(Collectors.toList());
+        result.put("dateList", dateList);
+
+        // 2. 鑾峰彇浜х嚎鏁版嵁
+        List<MdcProduction> mdcProductions = mdcProductionService.findMdcPros(userId, equEffVo.getProductionId());
+
+        // 3. 鍒濆鍖栫粨鏋滈泦
+        List<TeamEquEffMonthDto> utilizationRateList = new ArrayList<>();
+        List<TeamEquEffMonthDto> shiftUtilizationRateList = new ArrayList<>();
+        List<TeamEquEffMonthDto> amendUtilizationRateList = new ArrayList<>();
+
+        // 4. 澶勭悊姣忎釜浜х嚎
+        mdcProductions.forEach(mdcProduction -> {
+            // 4.1 鑾峰彇涓嬬骇浜х嚎骞惰繃婊�
+            List<String> allProductionIds = mdcProductionService.recursionChildren(mdcProduction.getId());
+            // 鏁版嵁鏉冮檺杩囨护
+            allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds);
+            // 4.2 鑾峰彇璁惧鍒楄〃
+            List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds);
+            if (equipmentList == null || equipmentList.isEmpty()) {
+                return;
+            }
+            //鎻愬彇id闆嗗悎
+            List<String> equipmentIdList = equipmentList.stream()
+                    .map(MdcEquipment::getEquipmentId)
+                    .collect(Collectors.toList());
+
+            TeamEquEffMonthDto urDto = new TeamEquEffMonthDto();
+            TeamEquEffMonthDto surDto = new TeamEquEffMonthDto();
+            TeamEquEffMonthDto aurDto = new TeamEquEffMonthDto();
+            urDto.setProductionName(mdcProduction.getProductionName());
+            surDto.setProductionName(mdcProduction.getProductionName());
+            aurDto.setProductionName(mdcProduction.getProductionName());
+            List<TeamEquEffMonthChildDto> urDataList = new ArrayList<>();
+            List<TeamEquEffMonthChildDto> surDataList = new ArrayList<>();
+            List<TeamEquEffMonthChildDto> aurDataList = new ArrayList<>();
+
+            monthBetween.forEach(date -> {
+                TeamEquEffMonthChildDto urCDto = new TeamEquEffMonthChildDto();
+                TeamEquEffMonthChildDto surCDto = new TeamEquEffMonthChildDto();
+                TeamEquEffMonthChildDto aurCDto = new TeamEquEffMonthChildDto();
+                String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "鏈�";
+                urCDto.setMonth(month);
+                surCDto.setMonth(month);
+                aurCDto.setMonth(month);
+                List<TeamEquEffDto> dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, date.replaceAll("-", ""));
+                if (dataList != null && !dataList.isEmpty()) {
+                    // 璁$畻骞冲潎鍊�
+                    BigDecimal ur = dataList.stream()
+                            .map(TeamEquEffDto::getUtilizationRate)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add)
+                            .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP);
+                    //鍒╃敤鐜�
+                    urCDto.setUtilizationRate(ur);
+                    //鐝鍒╃敤鐜�
+                    BigDecimal sur = dataList.stream()
+                            .map(TeamEquEffDto::getShiftUtilizationRate)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add)
+                            .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP);
+                    surCDto.setUtilizationRate(sur);
+                    //鍘婚櫎鏁呴殰24灏忔椂鍒╃敤鐜�
+                    BigDecimal aur = dataList.stream()
+                            .map(TeamEquEffDto::getAmendUtilizationRate)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add)
+                            .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP);
+                    aurCDto.setUtilizationRate(aur);
+                }
+                urDataList.add(urCDto);
+                surDataList.add(surCDto);
+                aurDataList.add(aurCDto);
+            });
+            urDto.setDataList(urDataList);
+            surDto.setDataList(surDataList);
+            aurDto.setDataList(aurDataList);
+            utilizationRateList.add(urDto);
+            shiftUtilizationRateList.add(surDto);
+            amendUtilizationRateList.add(aurDto);
+        });
+        result.put("utilizationRateList", utilizationRateList);
+        result.put("shiftUtilizationRateList", shiftUtilizationRateList);
+        result.put("amendUtilizationRateList", amendUtilizationRateList);
+        return result;
+    }
+
     // 鎻愬彇鐨勫钩鍧囧�艰绠楁柟娉�
     private TeamEquEffDto calculateAverages(List<TeamEquEffDto> items) {
         BigDecimal size = new BigDecimal(items.size());
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java
index 95c60bc..f53d482 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java
@@ -59,4 +59,6 @@
     List<MdcProduction> loadProductionOptions(@Param("userId") String userId, @Param("productionId") String productionId);
 
     List<String> findTeamValue(@Param("userId") String userId, @Param("productionList") List<String> productionList);
+
+    List<String> findProIdsByUId(@Param("userId") String userId, @Param("allProductionIds") List<String> allProductionIds);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml
index f84308c..7d0b8f2 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml
@@ -111,6 +111,7 @@
                 AND t1.org_type = '2'
             </otherwise>
         </choose>
+        ORDER BY t1.production_order
     </select>
 
     <select id="findTeamValue" resultType="java.lang.String">
@@ -124,4 +125,17 @@
             #{productionId}
         </foreach>
     </select>
+
+    <select id="findProIdsByUId" resultType="java.lang.String">
+        SELECT
+            pro_id
+        FROM
+            mdc_user_production
+        WHERE
+            pro_id IN
+            <foreach collection="allProductionIds" item = "productionId" index = "index" open = "(" close= ")" separator = ",">
+                #{productionId}
+            </foreach>
+          AND user_id = #{userId}
+    </select>
 </mapper>
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java
index 9b94f22..104a9db 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java
@@ -158,6 +158,8 @@
      */
     List<MdcProOptionsVo> loadProductionOptions(String userId, String productionId);
 
+    List<MdcProduction> findMdcPros(String userId, String productionId);
+
     /**
      *
      * @param userId
@@ -165,4 +167,12 @@
      * @return
      */
     List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId);
+
+    /**
+     *
+     * @param userId
+     * @param allProductionIds
+     * @return
+     */
+    List<String> findProIdsByUId(String userId, List<String> allProductionIds);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
index bc363c2..c502486 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -567,6 +567,11 @@
     }
 
     @Override
+    public List<MdcProduction> findMdcPros(String userId, String productionId) {
+        return this.baseMapper.loadProductionOptions(userId, productionId);
+    }
+
+    @Override
     public List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId) {
         List<MdcProOptionsVo> result = new ArrayList<>();
         List<String> productionList = this.findChildren(Arrays.asList(productionId.split(",")));
@@ -590,6 +595,11 @@
         return result;
     }
 
+    @Override
+    public List<String> findProIdsByUId(String userId, List<String> allProductionIds) {
+        return this.baseMapper.findProIdsByUId(userId, allProductionIds);
+    }
+
     /**
      * 鎵撳紑 鐖惰妭鐐� 鍙� 浠ヤ笂鐨刴dc鏍囪
      * @param parentId

--
Gitblit v1.9.3