From b0f56573ea27a8798764314c72cf39e9eb0651dc Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期四, 27 三月 2025 16:04:31 +0800
Subject: [PATCH] 综合利用率图表接口

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml                   |   14 
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml                           |   12 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java           |    6 
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java                                    |    4 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoMonthServiceImpl.java |   19 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoMonthServiceImpl.java      |   19 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java                              |  147 ++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java                            |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java                                |   43 ++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java           |   24 +
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java                   |   10 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java                      |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoMonthService.java              |   14 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java                   |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/TeamEquEffVo.java                                               |   27 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml              |   14 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java              |    6 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java                              |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java                 |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMonthMapper.xml              |    5 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml           |   56 +++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMonthMapper.java                 |   14 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMonthMapper.xml         |    5 
 lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java                                        |    7 
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java                              |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfoMonth.java                  |  107 ++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java                             |    1 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/MdcProductionController.java      |   33 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquipmentEfficiencyAnalyzeDto.java                         |   29 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java      |    8 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoMonthService.java         |   14 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/vo/MdcProOptionsVo.java                      |   38 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java              |    2 
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java                           |    7 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java                   |   29 +
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java   |   54 +++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java                      |   43 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMonthMapper.java            |   14 
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java                                         |    1 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalInfoMonth.java                       |  106 ++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml                           |   20 +
 41 files changed, 957 insertions(+), 12 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
index 83f6f51..b53209e 100644
--- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
+++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -593,6 +593,11 @@
     String DICT_EQUIPMENT_RATE_NORMAL = "equipment_rate_normal";
 
     /**
+     * 閰嶉�佸皬缁勫瓧鍏哥紪鍙�
+     */
+    String DICT_MDC_STAFF_TEAM = "mdc_staff_team";
+
+    /**
      * 鍔犵彮鏁版嵁 鑷姩璁$畻鏍囪瘑 1(鏄�) 2(鍚�)
      */
     Integer AUTO_FLAG_Y = 1;
@@ -608,4 +613,6 @@
     String CLOSE_TYPE_0 = "0";
     String CLOSE_TYPE_1 = "1";
 
+    String ORG_TYPE = "3";
+
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
index c80f35d..543ad28 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
@@ -182,4 +182,8 @@
 
     /**閫夋嫨绯荤粺绫诲瀷*/
     private transient String systemValue;
+
+    @Dict(dicCode = "mdc_staff_team")
+    @ApiModelProperty(value = "閰嶉�佸皬缁�")
+    private String teamCode;
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
index 8e65dd4..6bde87b 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -129,4 +129,6 @@
      * @return
      */
     MdcEquipmentDetailedDto findById(@Param("id") String id);
+
+    List<MdcEquipment> findByProductionIds(@Param("mdcProductionIds") List<String> mdcProductionIds);
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
index 3029e7d..2fbec81 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -296,4 +296,16 @@
         ORDER BY me.equipment_id
     </select>
 
+    <select id="findByProductionIds" resultType="org.jeecg.modules.mdc.entity.MdcEquipment">
+        SELECT
+            t1.*
+        FROM
+            mdc_equipment t1
+                LEFT JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id
+        WHERE t2.production_id IN
+        <foreach collection="mdcProductionIds" item = "productionId" index = "index" open = "(" close= ")" separator = ",">
+            #{productionId}
+        </foreach>
+    </select>
+
 </mapper>
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
index a8e4cde..51ddf0d 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -216,4 +216,11 @@
      * @param productionId
      */
     void addNewEquipmentFromEam(MdcEquipment mdcEquipment, String productionId);
+
+    /**
+     * 鏍规嵁浜х嚎id闆嗗悎鏌ヨ璁惧鍒楄〃
+     * @param mdcProductionIds
+     * @return
+     */
+    List<MdcEquipment> findByProductionIds(List<String> mdcProductionIds);
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
index 90a8f84..f59bcfa 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -1010,4 +1010,14 @@
         this.saveMdcEquipment(mdcEquipment, null, productionId);
     }
 
+    /**
+     * 鏍规嵁浜х嚎id闆嗗悎鏌ヨ璁惧鍒楄〃
+     * @param mdcProductionIds
+     * @return
+     */
+    @Override
+    public List<MdcEquipment> findByProductionIds(List<String> mdcProductionIds) {
+        return this.baseMapper.findByProductionIds(mdcProductionIds);
+    }
+
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java
index 2086fe5..1a41d3e 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java
@@ -164,6 +164,7 @@
     public static final String STR_DATE = "yyyy-MM-dd";
     public static final String STRDATE = "yyyyMMdd";
     public static final String STR_YEAR_MONTH = "yyyy-MM";
+    public static final String STRYEARMONTH = "yyyyMM";
     public static final String STR_DATE_TIME = "yyyy-MM-dd HH:mm:ss.SSS";
     public static final String STR_DATE_TIME_SMALL = "yyyy-MM-dd HH:mm:ss";
     public static final String STR_DATE_TIME_MIN = "yyyy-MM-dd HH:mm";
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 96ef9b8..1e1fa15 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
@@ -13,9 +13,11 @@
 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.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.Map;
 
 /**
  * @author: LiuS
@@ -30,7 +32,6 @@
     @Resource
     private MdcEfficiencyReportService mdcEfficiencyReportService;
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垪琛ㄦ煡璇�")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垪琛ㄦ煡璇�", notes = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垪琛ㄦ煡璇�")
     @GetMapping("/efficiencyList")
     public Result efficiencyList(MdcEfficiencyReportQueryVo vo) {
@@ -40,7 +41,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-寮�鍔ㄧ巼鍒楄〃鏌ヨ")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-寮�鍔ㄧ巼鍒楄〃鏌ヨ", notes = "璁惧鏁堢巼鎶ヨ〃-寮�鍔ㄧ巼鍒楄〃鏌ヨ")
     @GetMapping("/efficiencyPOList")
     public Result efficiencyPOList(MdcEfficiencyReportQueryVo vo) {
@@ -50,7 +50,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-鐝鍒╃敤鐜囧垪琛ㄦ煡璇�")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-鐝鍒╃敤鐜囧垪琛ㄦ煡璇�", notes = "璁惧鏁堢巼鎶ヨ〃-鐝鍒╃敤鐜囧垪琛ㄦ煡璇�")
     @GetMapping("/efficiencyShiftList")
     public Result efficiencyShiftList(MdcEfficiencyReportShiftQueryVo vo) {
@@ -60,7 +59,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-缁熻鍒嗘瀽鍒楄〃")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-缁熻鍒嗘瀽鍒楄〃", notes = "璁惧鏁堢巼鎶ヨ〃-缁熻鍒嗘瀽鍒楄〃")
     @GetMapping("/dayStatisticalRate")
     public Result dayStatisticalRate(MdcEfficiencyReportQueryVo vo) {
@@ -70,7 +68,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-瀵规瘮鍒嗘瀽")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-瀵规瘮鍒嗘瀽", notes = "璁惧鏁堢巼鎶ヨ〃-瀵规瘮鍒嗘瀽")
     @GetMapping("/comparativeAnalysis")
     public Result comparativeAnalysis(ComparativeAnalysisQueryVo vo) {
@@ -80,7 +77,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-璁惧鏃ュ埄鐢ㄧ巼")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-璁惧鏃ュ埄鐢ㄧ巼", notes = "璁惧鏁堢巼鎶ヨ〃-璁惧鏃ュ埄鐢ㄧ巼")
     @GetMapping("/dayUtilizationRate")
     public Result dayUtilizationRate(DayUtilizationRateQueryVo vo) {
@@ -90,7 +86,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-璁惧鏃ュ埄鐢ㄧ巼瀵规瘮")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-璁惧鏃ュ埄鐢ㄧ巼瀵规瘮", notes = "璁惧鏁堢巼鎶ヨ〃-璁惧鏃ュ埄鐢ㄧ巼瀵规瘮")
     @GetMapping("/dayUtilizationRateContrast")
     public Result dayUtilizationRateContrast(DayUtilizationRateContrastQueryVo vo) {
@@ -100,7 +95,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囪蛋鍔垮垎鏋愬垪琛�")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囪蛋鍔垮垎鏋愬垪琛�", notes = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囪蛋鍔垮垎鏋愬垪琛�")
     @GetMapping("/utilizationRateTrendAnalyze")
     public Result utilizationRateTrendAnalyze(DayUtilizationRateContrastQueryVo vo) {
@@ -110,7 +104,6 @@
         return Result.OK(result);
     }
 
-    @AutoLog(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垎娈靛垎鏋愬垪琛�")
     @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垎娈靛垎鏋愬垪琛�", notes = "璁惧鏁堢巼鎶ヨ〃-鍒╃敤鐜囧垎娈靛垎鏋愬垪琛�")
     @GetMapping("/utilizationRateSectionAnalyze")
     public Result utilizationRateSectionAnalyze(DayUtilizationRateContrastQueryVo vo) {
@@ -120,4 +113,36 @@
         return Result.OK(result);
     }
 
+//    @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-缁煎悎鍒╃敤鐜囩粺璁″垎鏋�", notes = "璁惧鏁堢巼鎶ヨ〃-缁煎悎鍒╃敤鐜囩粺璁″垎鏋�")
+//    @GetMapping("/comprehensiveRayeAnalyze")
+//    public Result comprehensiveRayeAnalyze(DayUtilizationRateContrastQueryVo vo) {
+//        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        String userId = user.getId();
+//        MdcUtilizationRateDto result = mdcEfficiencyReportService.comprehensiveRayeAnalyze(userId, vo);
+//        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("/teamEquipmentEfficiencyAnalyze")
+//    public Result teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) {
+//        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(teamEquEffVo);
+//        return Result.OK(result);
+//    }
+
+    @ApiOperation(value = "璁惧鏁堢巼鎶ヨ〃-璁惧缁村害鍚勭彮缁勬湀璁惧鍒╃敤鍒嗗竷", notes = "璁惧鏁堢巼鎶ヨ〃-璁惧缁村害鍚勭彮缁勬湀璁惧鍒╃敤鍒嗗竷")
+    @GetMapping("/equipmentEfficiencyAnalyze")
+    public Result<?> equipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) {
+        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(teamEquEffVo);
+        return Result.OK(result);
+    }
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
index 816cc92..69a1a9f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
@@ -13,7 +13,6 @@
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.entity.MdcEquipmentMonitor;
 import org.jeecg.modules.mdc.model.MdcEquipmentTree;
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java
new file mode 100644
index 0000000..189a667
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java
@@ -0,0 +1,43 @@
+package org.jeecg.modules.mdc.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-03-25
+ * @Description:
+ */
+@Data
+public class MdcEquipmentStatisticalDto {
+
+    /**
+     * 寮�鏈烘椂闀�
+     */
+    private BigDecimal openLong = new BigDecimal("0");
+    /**
+     * 寰呮満鏃堕暱
+     */
+    private BigDecimal waitLong = new BigDecimal("0");
+    /**
+     * 鍔犲伐鏃堕暱
+     */
+    private BigDecimal processLong = new BigDecimal("0");
+    /**
+     * 鎶ヨ
+     */
+    private BigDecimal errorLong = new BigDecimal("0");
+    /**
+     * 鍏虫満鏃堕暱
+     */
+    private BigDecimal closeLong = new BigDecimal("0");
+    /**
+     * 鎬绘椂闀�
+     */
+    private BigDecimal totalLong = new BigDecimal("0");
+    /**
+     * 澶╂暟
+     */
+    private BigDecimal dayNum;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquipmentEfficiencyAnalyzeDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquipmentEfficiencyAnalyzeDto.java
new file mode 100644
index 0000000..9b1376d
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquipmentEfficiencyAnalyzeDto.java
@@ -0,0 +1,29 @@
+package org.jeecg.modules.mdc.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-03-26
+ * @Description:
+ */
+@Data
+public class TeamEquipmentEfficiencyAnalyzeDto {
+
+    private String equipmentName;
+
+    /**
+     * 鍒╃敤鐜�
+     */
+    private BigDecimal utilizationRate = BigDecimal.ZERO;
+    /**
+     * 鐝鍒╃敤鐜�
+     */
+    private BigDecimal shiftUtilizationRate = BigDecimal.ZERO;
+    /**
+     * 淇鍒╃敤鐜�
+     */
+    private BigDecimal amendUtilizationRate = BigDecimal.ZERO;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalInfoMonth.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalInfoMonth.java
new file mode 100644
index 0000000..c987011
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalInfoMonth.java
@@ -0,0 +1,106 @@
+package org.jeecg.modules.mdc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 鏈堣澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("mdc_equipment_statistical_info_month")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "mdc_equipment_statistical_info_month瀵硅薄", description = "鏈堣澶囪繍琛屾暟鎹〃")
+public class MdcEquipmentStatisticalInfoMonth implements Serializable {
+
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**
+     * 璁惧id
+     */
+    @Excel(name = "璁惧id", width = 15)
+    @ApiModelProperty(value = "璁惧id")
+    private String equipmentId;
+    /**
+     * 鏈夋晥鏈堜唤
+     */
+    @Excel(name = "鏈夋晥鏈堜唤", width = 15)
+    @ApiModelProperty(value = "鏈夋晥鏈堜唤")
+    private String theMonth;
+    /**
+     * 寮�鏈烘椂闀�
+     */
+    @Excel(name = "寮�鏈烘椂闀�", width = 15)
+    @ApiModelProperty(value = "寮�鏈烘椂闀�")
+    private Integer openLong;
+    /**
+     * 鍏虫満鏃堕暱
+     */
+    @Excel(name = "鍏虫満鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鍏虫満鏃堕暱")
+    private Integer closeLong;
+    /**
+     * 寰呮満鏃堕暱
+     */
+    @Excel(name = "寰呮満鏃堕暱", width = 15)
+    @ApiModelProperty(value = "寰呮満鏃堕暱")
+    private Integer waitLong;
+    /**
+     * 鍔犲伐鏃堕暱
+     */
+    @Excel(name = "鍔犲伐鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鍔犲伐鏃堕暱")
+    private Integer processLong;
+    /**
+     * 鎶ヨ鏃堕暱
+     */
+    @Excel(name = "鎶ヨ鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鎶ヨ鏃堕暱")
+    private Integer errorLong;
+    /**
+     * 鍒╃敤鐜�
+     */
+    @Excel(name = "鍒╃敤鐜�", width = 15)
+    @ApiModelProperty(value = "鍒╃敤鐜�")
+    private BigDecimal utilizationRate;
+    /**
+     * 寮�鍔ㄧ巼
+     */
+    @Excel(name = "寮�鍔ㄧ巼", width = 15)
+    @ApiModelProperty(value = "寮�鍔ㄧ巼")
+    private BigDecimal startRate;
+    /**
+     * 寮�鏈虹巼
+     */
+    @Excel(name = "寮�鏈虹巼", width = 15)
+    @ApiModelProperty(value = "寮�鏈虹巼")
+    private BigDecimal openRate;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @Excel(name = "鍒涘缓鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfoMonth.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfoMonth.java
new file mode 100644
index 0000000..8d63563
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfoMonth.java
@@ -0,0 +1,107 @@
+package org.jeecg.modules.mdc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 鏈堢彮娆¤澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("mdc_equipment_statistical_shift_info_month")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "mdc_equipment_statistical_shift_info_month瀵硅薄", description = "鏈堢彮娆¤澶囪繍琛屾暟鎹〃")
+public class MdcEquipmentStatisticalShiftInfoMonth implements Serializable {
+
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**
+     * 璁惧id
+     */
+    @Excel(name = "璁惧id", width = 15)
+    @ApiModelProperty(value = "璁惧id")
+    private String equipmentId;
+    /**
+     * 鏈夋晥鏈堜唤
+     */
+    @Excel(name = "鏈夋晥鏈堜唤", width = 15)
+    @ApiModelProperty(value = "鏈夋晥鏈堜唤")
+    private String theMonth;
+    /**
+     * 鍏虫満鏃堕暱
+     */
+    @Excel(name = "鍏虫満鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鍏虫満鏃堕暱")
+    private Integer closeLong;
+    /**
+     * 寮�鏈烘椂闀�
+     */
+    @Excel(name = "寮�鏈烘椂闀�", width = 15)
+    @ApiModelProperty(value = "寮�鏈烘椂闀�")
+    private Integer openLong;
+    /**
+     * 鎶ヨ鏃堕暱
+     */
+    @Excel(name = "鎶ヨ鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鎶ヨ鏃堕暱")
+    private Integer errorLong;
+    /**
+     * 寰呮満鏃堕暱
+     */
+    @Excel(name = "寰呮満鏃堕暱", width = 15)
+    @ApiModelProperty(value = "寰呮満鏃堕暱")
+    private Integer waitLong;
+    /**
+     * 鍔犲伐鏃堕暱
+     */
+    @Excel(name = "鍔犲伐鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鍔犲伐鏃堕暱")
+    private Integer processLong;
+    /**
+     * 鏈夋晥鏃堕暱
+     */
+    @Excel(name = "鏈夋晥鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鏈夋晥鏃堕暱")
+    private Integer totalLong;
+    /**
+     * 鍒╃敤鐜�
+     */
+    @Excel(name = "鍒╃敤鐜�", width = 15)
+    @ApiModelProperty(value = "鍒╃敤鐜�")
+    private BigDecimal utilizationRate;
+    /**
+     * 寮�鍔ㄧ巼
+     */
+    @Excel(name = "寮�鍔ㄧ巼", width = 15)
+    @ApiModelProperty(value = "寮�鍔ㄧ巼")
+    private BigDecimal startRate;
+    /**
+     * 寮�鏈虹巼
+     */
+    @Excel(name = "寮�鏈虹巼", width = 15)
+    @ApiModelProperty(value = "寮�鏈虹巼")
+    private BigDecimal openRate;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java
new file mode 100644
index 0000000..2749b4a
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java
@@ -0,0 +1,147 @@
+package org.jeecg.modules.mdc.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto;
+import org.jeecg.modules.mdc.entity.MdcEquipment;
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfoMonth;
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfoMonth;
+import org.jeecg.modules.mdc.service.*;
+import org.jeecg.modules.mdc.util.DateUtils;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-03-24
+ * @Description: 缁熻鏈堟眹鎬绘暟鎹�
+ */
+@Slf4j
+public class CollectEquipmentDataMonthJob implements Job {
+
+    /**
+     * 鑻ュ弬鏁板彉閲忓悕淇敼 QuartzJobController涓篃闇�瀵瑰簲淇敼  鏃堕棿锛� yyyyMMdd 渚嬶細 20230414
+     */
+    private String parameter;
+
+    public void setParameter(String parameter) {
+        this.parameter = parameter;
+    }
+
+    @Resource
+    private IQuartzJobService quartzJobService;
+
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
+    @Resource
+    private ISysQuartzLogService sysQuartzLogService;
+
+    @Resource
+    private IMdcEquipmentStatisticalInfoMonthService mdcEquipmentStatisticalInfoMonthService;
+
+    @Resource
+    private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService;
+
+    @Resource
+    private IMdcEquipmentStatisticalShiftInfoMonthService mdcEquipmentStatisticalShiftInfoMonthService;
+
+    @Resource
+    private IMdcEquipmentStatisticalShiftInfoService mdcEquipmentStatisticalShiftInfoService;
+
+    @Resource
+    private IMdcEquipmentService mdcEquipmentService;
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        quartzLog.setParams(this.parameter);
+        log.info(String.format("缁熻鏈堟眹鎬绘暟鎹� param: %s CollectEquipmentDataMonthJob start!  鏃堕棿:" + DateUtils.getNow(), this.parameter));
+        long startTime = System.currentTimeMillis();
+        try {
+            String date = "";
+            if (StringUtils.isNotBlank(this.parameter)) {
+                date = DateUtils.format(DateUtils.toDate(this.parameter, DateUtils.STRYEARMONTH), DateUtils.STRYEARMONTH);
+            } else {
+                date = DateUtils.format(DateUtils.getNow(), DateUtils.STRYEARMONTH);
+            }
+            mdcEquipmentStatisticalInfoMonthService.remove(new LambdaQueryWrapper<MdcEquipmentStatisticalInfoMonth>().eq(MdcEquipmentStatisticalInfoMonth::getTheMonth, date));
+            mdcEquipmentStatisticalShiftInfoMonthService.remove(new LambdaQueryWrapper<MdcEquipmentStatisticalShiftInfoMonth>().eq(MdcEquipmentStatisticalShiftInfoMonth::getTheMonth, date));
+
+            // step.1 鑾峰彇璁惧鍒楄〃
+            List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list();
+            List<MdcEquipmentStatisticalInfoMonth> mdcEquipmentStatisticalInfoMonthList = new ArrayList<>();
+            List<MdcEquipmentStatisticalShiftInfoMonth> mdcEquipmentStatisticalShiftInfoMonthList = new ArrayList<>();
+            if (mdcEquipmentList != null && !mdcEquipmentList.isEmpty()) {
+                for (MdcEquipment mdcEquipment : mdcEquipmentList) {
+                    // step.2 姹囨��24灏忔椂鍒╃敤鐜囨暟鎹�
+                    MdcEquipmentStatisticalDto mdcEquipmentStatisticalDto = mdcEquipmentStatisticalInfoService.findByEquipmentAndMonth(mdcEquipment.getEquipmentId(), date);
+                    MdcEquipmentStatisticalInfoMonth mdcEquipmentStatisticalInfoMonth = new MdcEquipmentStatisticalInfoMonth();
+                    mdcEquipmentStatisticalInfoMonth.setEquipmentId(mdcEquipment.getEquipmentId());
+                    mdcEquipmentStatisticalInfoMonth.setTheMonth(date);
+                    mdcEquipmentStatisticalInfoMonth.setCloseLong(mdcEquipmentStatisticalDto.getCloseLong().intValue());
+                    mdcEquipmentStatisticalInfoMonth.setErrorLong(mdcEquipmentStatisticalDto.getErrorLong().intValue());
+                    mdcEquipmentStatisticalInfoMonth.setOpenLong(mdcEquipmentStatisticalDto.getOpenLong().intValue());
+                    mdcEquipmentStatisticalInfoMonth.setProcessLong(mdcEquipmentStatisticalDto.getProcessLong().intValue());
+                    mdcEquipmentStatisticalInfoMonth.setWaitLong(mdcEquipmentStatisticalDto.getWaitLong().intValue());
+                    mdcEquipmentStatisticalInfoMonth.setOpenRate(mdcEquipmentStatisticalDto.getOpenLong().divide((new BigDecimal("86400").multiply(mdcEquipmentStatisticalDto.getDayNum())), 4, RoundingMode.HALF_UP));
+                    mdcEquipmentStatisticalInfoMonth.setStartRate(mdcEquipmentStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentStatisticalDto.getProcessLong().divide(mdcEquipmentStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO);
+                    mdcEquipmentStatisticalInfoMonth.setUtilizationRate(mdcEquipmentStatisticalDto.getProcessLong().divide((new BigDecimal("86400").multiply(mdcEquipmentStatisticalDto.getDayNum())), 4, RoundingMode.HALF_UP));
+                    mdcEquipmentStatisticalInfoMonthList.add(mdcEquipmentStatisticalInfoMonth);
+                    // step.3 姹囨�荤彮娆″埄鐢ㄧ巼鏁版嵁
+                    MdcEquipmentStatisticalDto mdcEquipmentShiftStatisticalDto = mdcEquipmentStatisticalShiftInfoService.findByEquipmentAndMonth(mdcEquipment.getEquipmentId(), date);
+                    MdcEquipmentStatisticalShiftInfoMonth mdcEquipmentShiftInfoMonth = new MdcEquipmentStatisticalShiftInfoMonth();
+                    mdcEquipmentShiftInfoMonth.setEquipmentId(mdcEquipment.getEquipmentId());
+                    mdcEquipmentShiftInfoMonth.setTheMonth(date);
+                    mdcEquipmentShiftInfoMonth.setCloseLong(mdcEquipmentShiftStatisticalDto.getCloseLong().intValue());
+                    mdcEquipmentShiftInfoMonth.setTotalLong(mdcEquipmentShiftStatisticalDto.getTotalLong().intValue());
+                    mdcEquipmentShiftInfoMonth.setOpenLong(mdcEquipmentShiftStatisticalDto.getOpenLong().intValue());
+                    mdcEquipmentShiftInfoMonth.setErrorLong(mdcEquipmentShiftStatisticalDto.getErrorLong().intValue());
+                    mdcEquipmentShiftInfoMonth.setWaitLong(mdcEquipmentShiftStatisticalDto.getWaitLong().intValue());
+                    mdcEquipmentShiftInfoMonth.setProcessLong(mdcEquipmentShiftStatisticalDto.getProcessLong().intValue());
+                    mdcEquipmentShiftInfoMonth.setUtilizationRate(mdcEquipmentShiftStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getProcessLong().divide(mdcEquipmentShiftStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO);
+                    mdcEquipmentShiftInfoMonth.setStartRate(mdcEquipmentShiftStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getProcessLong().divide(mdcEquipmentShiftStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO);
+                    mdcEquipmentShiftInfoMonth.setOpenRate(mdcEquipmentShiftStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getOpenLong().divide(mdcEquipmentShiftStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO);
+                    mdcEquipmentStatisticalShiftInfoMonthList.add(mdcEquipmentShiftInfoMonth);
+                }
+            }
+            if (!mdcEquipmentStatisticalInfoMonthList.isEmpty()) {
+                mdcEquipmentStatisticalInfoMonthService.saveBatch(mdcEquipmentStatisticalInfoMonthList);
+            }
+            if (!mdcEquipmentStatisticalShiftInfoMonthList.isEmpty()) {
+                mdcEquipmentStatisticalShiftInfoMonthService.saveBatch(mdcEquipmentStatisticalShiftInfoMonthList);
+            }
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("缁熻鏈堟眹鎬绘暟鎹�", quartzLog.getExceptionDetail());
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
+
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
index 8d71bfd..24a5cc0 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
@@ -7,6 +7,7 @@
 import org.jeecg.modules.mdc.vo.ComparativeAnalysisQueryVo;
 import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
 import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo;
+import org.jeecg.modules.mdc.dto.TeamEquipmentEfficiencyAnalyzeDto;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -50,4 +51,6 @@
     List<MdcComAnaDto> comparativeAnalysis(@Param("vo") ComparativeAnalysisQueryVo vo);
 
     List<BigDecimal> getEfficiencyRate(@Param("equipmentId") String equipmentId, @Param("date") String date);
+
+    List<TeamEquipmentEfficiencyAnalyzeDto> teamEquipmentEfficiencyAnalyze(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java
index 3815783..03bb2bd 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto;
 import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo;
 
 /**
@@ -25,4 +26,6 @@
      * @return
      */
     Integer selectProcessLong(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
+
+    MdcEquipmentStatisticalDto findByEquipmentAndMonth(@Param("equipmentId") String equipmentId, @Param("date") String date);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMonthMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMonthMapper.java
new file mode 100644
index 0000000..4b9d25d
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMonthMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.mdc.mapper;
+
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfoMonth;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 鏈堣澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+public interface MdcEquipmentStatisticalInfoMonthMapper extends BaseMapper<MdcEquipmentStatisticalInfoMonth> {
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java
index 2bdddbe..f4443d6 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto;
 import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo;
 
 import java.math.BigDecimal;
@@ -21,4 +22,6 @@
     MdcEquipmentStatisticalShiftInfo getMaxStaticsData(@Param("equipmentId") String equipmentid);
 
     BigDecimal findSpindleRunDuration(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
+
+    MdcEquipmentStatisticalDto findByEquipmentAndMonth(@Param("equipmentId") String equipmentId, @Param("date") String date);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMonthMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMonthMapper.java
new file mode 100644
index 0000000..cdf207e
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMonthMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.mdc.mapper;
+
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfoMonth;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 鏈堢彮娆¤澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+public interface MdcEquipmentStatisticalShiftInfoMonthMapper extends BaseMapper<MdcEquipmentStatisticalShiftInfoMonth> {
+
+}
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 73d3381..4458f0d 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
@@ -186,4 +186,24 @@
             equipment_id = #{ equipmentId } AND the_date &gt;= #{ date }
         ORDER BY the_date ASC
     </select>
+
+    <select id="teamEquipmentEfficiencyAnalyze" resultType="org.jeecg.modules.mdc.dto.TeamEquipmentEfficiencyAnalyzeDto">
+        SELECT
+            t3.equipment_name,
+            t1.utilization_rate AS utilizationRate,
+            t2.utilization_rate AS shiftUtilizationRate
+        FROM
+            mdc_equipment_statistical_info_month t1
+                LEFT JOIN mdc_equipment_statistical_shift_info_month t2 ON t1.the_month = t2.the_month
+                AND t1.equipment_id = t2.equipment_id
+                LEFT JOIN mdc_equipment t3 ON t3.equipment_id = t1.equipment_id
+        WHERE
+            t1.equipment_id IN
+            <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+          AND t1.the_month = #{month}
+        ORDER BY
+            t1.utilization_rate DESC
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml
index e5d1c6b..2d4f020 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml
@@ -12,4 +12,18 @@
     <select id="selectProcessLong" resultType="java.lang.Integer">
         SELECT TOP 1 process_long FROM mdc_equipment_statistical_info WHERE equipment_id = #{equipmentId} AND the_date = #{validDate}
     </select>
+
+    <select id="findByEquipmentAndMonth" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto">
+        SELECT
+            SUM(open_long) openLong,
+            SUM(close_long) closeLong,
+            SUM(wait_long) waitLong,
+            SUM(process_long) processLong,
+            SUM(error_long) errorLong,
+            COUNT(*) dayNum
+        FROM
+            mdc_equipment_statistical_info
+        WHERE
+            equipment_id = #{equipmentId} AND the_date LIKE CONCAT(#{date}, '%')
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMonthMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMonthMapper.xml
new file mode 100644
index 0000000..87294ee
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMonthMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalInfoMonthMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml
index 97acaba..b12976f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml
@@ -17,4 +17,18 @@
             equipment_id = #{ equipmentId }
             AND the_date LIKE CONCAT(#{ validDate },'%')
     </select>
+
+    <select id="findByEquipmentAndMonth" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto">
+        SELECT
+            SUM(open_long) openLong,
+            SUM(close_long) closeLong,
+            SUM(wait_long) waitLong,
+            SUM(process_long) processLong,
+            SUM(error_long) errorLong,
+            SUM ( total_long ) totalLong
+        FROM
+            mdc_equipment_statistical_shift_info
+        WHERE
+            equipment_id = #{equipmentId} AND the_date LIKE CONCAT(#{date}, '%')
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMonthMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMonthMapper.xml
new file mode 100644
index 0000000..b5af990
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMonthMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalShiftInfoMonthMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoMonthService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoMonthService.java
new file mode 100644
index 0000000..8ea0b99
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoMonthService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.mdc.service;
+
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfoMonth;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 鏈堣澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+public interface IMdcEquipmentStatisticalInfoMonthService extends IService<MdcEquipmentStatisticalInfoMonth> {
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java
index 51d56e6..4b27b44 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java
@@ -1,5 +1,6 @@
 package org.jeecg.modules.mdc.service;
 
+import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto;
 import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -26,4 +27,6 @@
      * @return
      */
     Integer selectProcessLong(String equipmentId, String validDate);
+
+    MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoMonthService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoMonthService.java
new file mode 100644
index 0000000..227bcf8
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoMonthService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.mdc.service;
+
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfoMonth;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 鏈堢彮娆¤澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+public interface IMdcEquipmentStatisticalShiftInfoMonthService extends IService<MdcEquipmentStatisticalShiftInfoMonth> {
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java
index cc1b424..ff6bde6 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.mdc.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto;
 import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo;
 
 import java.math.BigDecimal;
@@ -28,4 +29,5 @@
      */
     BigDecimal findSpindleRunDuration(String equipmentId, String validDate);
 
+    MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date);
 }
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 d3dccf2..4862710 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
@@ -6,6 +6,7 @@
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author: LiuS
@@ -102,4 +103,6 @@
      * @return
      */
     List<BigDecimal> getEfficiencyRate(String equipmentId, String date);
+
+    Map<String, Object> teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo);
 }
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 c8dd286..fde18f5 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
@@ -448,7 +448,7 @@
         if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
             result.setMdcEfficiencyList(listDtos);
         } else {
-            
+
             List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
             if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
                 vo.setEquipmentIdList(equipmentIdList);
@@ -1736,6 +1736,33 @@
         return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date);
     }
 
+    /**
+     * 鐝粍鍚勮澶囩患鍚堝埄鐢ㄧ巼
+     *
+     * @param teamEquEffVo
+     * @return
+     */
+    @Override
+    public Map<String, Object> teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) {
+        Map<String, Object> result = new HashMap<>();
+        List<String> mdcProductionIds = new ArrayList<>();
+        if (StringUtils.isEmpty(teamEquEffVo.getProductionIds())) {
+            mdcProductionIds.add(teamEquEffVo.getProductionId());
+        } else {
+            mdcProductionIds.addAll(Arrays.asList(teamEquEffVo.getProductionIds().split(",")));
+        }
+        List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds);
+        List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds);
+        if (equipmentList != null && !equipmentList.isEmpty()) {
+            List<String> equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList());
+            List<TeamEquipmentEfficiencyAnalyzeDto> dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, teamEquEffVo.getMonth());
+            result.put("dataList", dataList);
+            List<String> equipmentNameList = dataList.stream().map(TeamEquipmentEfficiencyAnalyzeDto::getEquipmentName).collect(Collectors.toList());
+            result.put("equipmentNameList", equipmentNameList);
+        }
+        return result;
+    }
+
     private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
         MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
         dto.setEquipmentId(equipmentId);
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoMonthServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoMonthServiceImpl.java
new file mode 100644
index 0000000..9557c62
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoMonthServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.mdc.service.impl;
+
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfoMonth;
+import org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalInfoMonthMapper;
+import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoMonthService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 鏈堣澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+@Service
+public class MdcEquipmentStatisticalInfoMonthServiceImpl extends ServiceImpl<MdcEquipmentStatisticalInfoMonthMapper, MdcEquipmentStatisticalInfoMonth> implements IMdcEquipmentStatisticalInfoMonthService {
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java
index 7bbf531..87b92ae 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto;
 import org.jeecg.modules.mdc.entity.*;
 import org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalInfoMapper;
 import org.jeecg.modules.mdc.service.*;
@@ -317,4 +318,9 @@
             return Integer.parseInt(new BigDecimal(processLong).divide(new BigDecimal("60"), 0, RoundingMode.HALF_UP).toString());
         }
     }
+
+    @Override
+    public MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date) {
+        return this.baseMapper.findByEquipmentAndMonth(equipmentId, date);
+    }
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoMonthServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoMonthServiceImpl.java
new file mode 100644
index 0000000..54fcdd6
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoMonthServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.mdc.service.impl;
+
+import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfoMonth;
+import org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalShiftInfoMonthMapper;
+import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalShiftInfoMonthService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 鏈堢彮娆¤澶囪繍琛屾暟鎹〃
+ * @Author: Lius
+ * @Date: 2025-03-25
+ * @Version: V1.0
+ */
+@Service
+public class MdcEquipmentStatisticalShiftInfoMonthServiceImpl extends ServiceImpl<MdcEquipmentStatisticalShiftInfoMonthMapper, MdcEquipmentStatisticalShiftInfoMonth> implements IMdcEquipmentStatisticalShiftInfoMonthService {
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
index 938b7a9..b1051a3 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto;
 import org.jeecg.modules.mdc.entity.Equipment;
 import org.jeecg.modules.mdc.entity.MdcEquipmentRepair;
 import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
@@ -93,8 +94,13 @@
         }
     }
 
+    @Override
+    public MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date) {
+        return this.baseMapper.findByEquipmentAndMonth(equipmentId, date);
+    }
+
     @Transactional(readOnly = true)
-    List<MdcEquipmentStatisticalShiftInfo> equipmentShiftStatisticalProcess(Equipment equipment, String dateTime) {
+    public List<MdcEquipmentStatisticalShiftInfo> equipmentShiftStatisticalProcess(Equipment equipment, String dateTime) {
         Date initDate = null;
         //鍙栨渶鍚庣殑缁熻鏁版嵁
         if (StringUtils.isBlank(dateTime)) {
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/TeamEquEffVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/TeamEquEffVo.java
new file mode 100644
index 0000000..bc51746
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/TeamEquEffVo.java
@@ -0,0 +1,27 @@
+package org.jeecg.modules.mdc.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-03-27
+ * @Description:
+ */
+@Data
+public class TeamEquEffVo {
+
+    /**
+     * 涓績
+     */
+    private String productionId;
+    /**
+     * 鐝粍ids
+     */
+    private String productionIds;
+    /**
+     * 鏈堜唤
+     */
+    private String month;
+
+
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/MdcProductionController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/MdcProductionController.java
index 11a8968..555cd8c 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/MdcProductionController.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/MdcProductionController.java
@@ -19,6 +19,7 @@
 import org.jeecg.modules.system.model.MdcProductionTreeModel;
 import org.jeecg.modules.system.model.ProductionIdModel;
 import org.jeecg.modules.system.service.IMdcProductionService;
+import org.jeecg.modules.system.vo.MdcProOptionsVo;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -321,4 +322,36 @@
         return super.importExcel(request, response, MdcProduction.class);
     }
 
+    @ApiOperation(value = "浜х嚎琛�-鏍规嵁鐢ㄦ埛id鑾峰彇MDC浜х嚎(涓績)鎴栫彮缁勪笅鎷夐�夐」", notes = "浜х嚎琛�-鏍规嵁鐢ㄦ埛id鑾峰彇MDC浜х嚎(涓績)鎴栫彮缁勪笅鎷夐�夐」")
+    @GetMapping(value = "/loadProductionOptions")
+    public Result<?> loadProductionOptions(String productionId) {
+        Result<List<MdcProOptionsVo>> result = new Result<>();
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        try {
+            List<MdcProOptionsVo> list = mdcProductionService.loadProductionOptions(userId, productionId);
+            result.setSuccess(true);
+            result.setResult(list);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return result;
+    }
+
+    @ApiOperation(value = "浜х嚎琛�-鏍规嵁鐝粍id鑾峰彇閰嶉�佺粍涓嬫媺閫夐」", notes = "浜х嚎琛�-鏍规嵁鐝粍id鑾峰彇閰嶉�佺粍涓嬫媺閫夐」")
+    @GetMapping(value = "/loadTeamOptions")
+    public Result<?> loadTeamOptions(@RequestParam(name = "productionId", required = true) String productionId) {
+        Result<List<MdcProOptionsVo>> result = new Result<>();
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        try {
+            List<MdcProOptionsVo> list = mdcProductionService.loadTeamOptions(userId, productionId);
+            result.setSuccess(true);
+            result.setResult(list);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return result;
+    }
+
 }
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 42b9355..95c60bc 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
@@ -53,4 +53,10 @@
      * @return
      */
     List<MdcProduction> findAllProductionId(@Param("userId") String userId);
+
+    List<String> findChildren(@Param("mdcProductionIds") List<String> mdcProductionIds);
+
+    List<MdcProduction> loadProductionOptions(@Param("userId") String userId, @Param("productionId") String productionId);
+
+    List<String> findTeamValue(@Param("userId") String userId, @Param("productionList") List<String> productionList);
 }
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 963f879..f84308c 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
@@ -42,6 +42,7 @@
             t3.id = #{userId}
           AND t1.org_type = '3'
     </select>
+
     <select id="recursionChildrenByList" resultType="java.lang.String">
         WITH temp (id) AS (
             -- 鍒濆鏌ヨ锛岃幏鍙栨寚瀹� id 鐨勮褰�
@@ -68,4 +69,59 @@
         FROM
             temp;
     </select>
+
+    <select id="findChildren" resultType="java.lang.String">
+        WITH temp ( id ) AS (
+            SELECT
+                id
+            FROM
+                mdc_production
+            WHERE
+                id IN
+            <foreach collection="mdcProductionIds" item = "id" index = "index" open = "(" close = ")" separator = ",">
+                #{id}
+            </foreach>
+            AND mdc_flag = '1' UNION ALL
+            SELECT
+                a.id
+            FROM
+                mdc_production a
+                    INNER JOIN temp ON a.parent_id = temp.id
+            WHERE
+                a.mdc_flag = '1'
+        ) SELECT
+            *
+        FROM
+            temp
+    </select>
+
+    <select id="loadProductionOptions" resultType="org.jeecg.modules.system.entity.MdcProduction">
+        SELECT
+            t1.*
+        FROM
+            mdc_production t1
+                LEFT JOIN mdc_user_production t2 ON t1.id = t2.pro_id
+        WHERE
+            t2.user_id = #{userId} AND t1.mdc_flag = '1'
+        <choose>
+            <when test="productionId != null and productionId != ''">
+                AND t1.org_type = '3' AND t1.parent_id = #{productionId}
+            </when>
+            <otherwise>
+                AND t1.org_type = '2'
+            </otherwise>
+        </choose>
+    </select>
+
+    <select id="findTeamValue" resultType="java.lang.String">
+        SELECT DISTINCT
+            t1.team_code deamCode
+        FROM
+            mdc_equipment t1
+            LEFT JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id
+        WHERE t2.production_id IN
+        <foreach collection="productionList" item = "productionId" index = "index" open = "(" close= ")" separator = ",">
+            #{productionId}
+        </foreach>
+    </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 56d25eb..9b94f22 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
@@ -4,6 +4,7 @@
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.model.MdcProductionTreeModel;
 import org.jeecg.modules.system.model.ProductionIdModel;
+import org.jeecg.modules.system.vo.MdcProOptionsVo;
 
 import java.util.List;
 import java.util.Map;
@@ -141,4 +142,27 @@
      * 鏌ヨ鎵�鏈変骇绾夸俊鎭紝骞跺垎鑺傜偣杩涜鏄剧ず
      */
     List<MdcProductionTreeModel> queryTreeListByMdc();
+
+    /**
+     * 鏌ヨ瀛愯妭鐐�
+     * @param mdcProductionIds
+     * @return
+     */
+    List<String> findChildren(List<String> mdcProductionIds);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鑾峰彇浜х嚎(涓績)鎴栫彮缁勪笅鎷夐�夐」
+     * @param userId
+     * @param productionId
+     * @return
+     */
+    List<MdcProOptionsVo> loadProductionOptions(String userId, String productionId);
+
+    /**
+     *
+     * @param userId
+     * @param productionId
+     * @return
+     */
+    List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId);
 }
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 f94adf6..5bfc7ff 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
@@ -11,6 +11,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.FillRuleConstant;
+import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.common.util.FillRuleUtil;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.*;
@@ -21,8 +22,10 @@
 import org.jeecg.modules.system.model.MdcProductionTreeModel;
 import org.jeecg.modules.system.model.ProductionIdModel;
 import org.jeecg.modules.system.service.IMdcProductionService;
+import org.jeecg.modules.system.service.ISysDictService;
 import org.jeecg.modules.system.service.ISysParamsService;
 import org.jeecg.modules.system.util.FindsProductionsChildrenUtil;
+import org.jeecg.modules.system.vo.MdcProOptionsVo;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -51,6 +54,9 @@
 
     @Resource
     private ISysParamsService sysParamsService;
+
+    @Resource
+    private ISysDictService sysDictService;
     /**
      * queryTreeList 瀵瑰簲 queryTreeList 鏌ヨ鎵�鏈夌殑浜х嚎鏁版嵁,浠ユ爲缁撴瀯褰㈠紡鍝嶅簲缁欏墠绔�
      */
@@ -521,6 +527,54 @@
         return FindsProductionsChildrenUtil.wrapTreeDataToTreeList(list);
     }
 
+    @Override
+    public List<String> findChildren(List<String> mdcProductionIds) {
+        return this.baseMapper.findChildren(mdcProductionIds);
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鑾峰彇浜х嚎(涓績)鎴栫彮缁勪笅鎷夐�夐」
+     * @param userId
+     * @param productionId
+     * @return
+     */
+    @Override
+    public List<MdcProOptionsVo> loadProductionOptions(String userId, String productionId) {
+        List<MdcProOptionsVo> result = new ArrayList<>();
+        List<MdcProduction> mdcProductionList = this.baseMapper.loadProductionOptions(userId, productionId);
+        if (mdcProductionList != null && !mdcProductionList.isEmpty()) {
+            for (MdcProduction mdcProduction : mdcProductionList) {
+                MdcProOptionsVo vo = new MdcProOptionsVo().convert(mdcProduction);
+                result.add(vo);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId) {
+        List<MdcProOptionsVo> result = new ArrayList<>();
+        List<String> productionList = this.findChildren(Arrays.asList(productionId.split(",")));
+        if (productionList != null && !productionList.isEmpty()) {
+            List<String> dictValues = this.baseMapper.findTeamValue(userId, productionList);
+            if (dictValues != null && !dictValues.isEmpty()) {
+                List<DictModel> dictModels = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_MDC_STAFF_TEAM);
+                if (dictModels != null && !dictModels.isEmpty()) {
+                    for (DictModel dictModel : dictModels) {
+                        if (dictValues.contains(dictModel.getValue())) {
+                            MdcProOptionsVo vo = new MdcProOptionsVo();
+                            vo.setKey(dictModel.getValue());
+                            vo.setValue(dictModel.getValue());
+                            vo.setTitle(dictModel.getText());
+                            result.add(vo);
+                        }
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
     /**
      * 鎵撳紑 鐖惰妭鐐� 鍙� 浠ヤ笂鐨刴dc鏍囪
      * @param parentId
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/vo/MdcProOptionsVo.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/vo/MdcProOptionsVo.java
new file mode 100644
index 0000000..24b6d97
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/vo/MdcProOptionsVo.java
@@ -0,0 +1,38 @@
+package org.jeecg.modules.system.vo;
+
+import lombok.Data;
+import org.jeecg.modules.system.entity.MdcProduction;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-03-27
+ * @Description:
+ */
+@Data
+public class MdcProOptionsVo {
+    /**
+     * id
+     */
+    private String key;
+    /**
+     * id
+     */
+    private String value;
+    /**
+     * 鍚嶇О
+     */
+    private String title;
+
+    /**
+     *
+     *
+     * @param mdcProduction
+     * @return
+     */
+    public MdcProOptionsVo convert(MdcProduction mdcProduction) {
+        this.key = mdcProduction.getId();
+        this.value = mdcProduction.getId();
+        this.title = mdcProduction.getProductionName();
+        return this;
+    }
+}

--
Gitblit v1.9.3