From d0f024586f38a11662787c42b84e037a1c1be6cd Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 17 六月 2025 09:06:30 +0800
Subject: [PATCH] 设备故障率、设备去除故障时间利用率算法

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentFaultInfoMapper.java                  |   19 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java       |  324 +++++++++++++++++++++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquFaultRecord.java                                   |   32 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java  |    6 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java |   28 --
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java                                |   13 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentFaultInfoMapper.xml               |   22 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java                   |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java                          |   17 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java         |   48 ++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentFaultInfoService.java               |   19 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentFaultInfo.java                        |   87 +++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml                 |    6 
 13 files changed, 585 insertions(+), 41 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
index f6fc360..38d74e0 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
@@ -1,22 +1,17 @@
 package org.jeecg.modules.board.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import liquibase.pro.packaged.I;
-import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.board.mapper.DtBoardMapper;
 import org.jeecg.modules.board.service.IDtBoardService;
 import org.jeecg.modules.board.vo.*;
-import org.jeecg.modules.eam.service.IEamRepairOrderService;
-import org.jeecg.modules.mdc.constant.MdcConstant;
 import org.jeecg.modules.mdc.entity.*;
 import org.jeecg.modules.mdc.service.*;
 import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.jeecg.modules.system.service.ISysDictService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java
index d868159..1e6d764 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java
@@ -55,6 +55,17 @@
      * 鍏虫満鏃堕暱
      */
     private BigDecimal closeLong;
-
+    /**
+     * 鏁呴殰鏃堕暱
+     */
+    private BigDecimal faultLong;
+    /**
+     * 鏁呴殰鐜�
+     */
+    private BigDecimal faultRate;
+    /**
+     * 杩愯鏃堕暱(鍘婚櫎鏁呴殰鏃堕棿)
+     */
+    private BigDecimal removeFaultRunLong;
 
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java
index 6ce2977..2086182 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java
@@ -43,11 +43,23 @@
      */
     private BigDecimal closeLong = BigDecimal.ZERO;
     /**
+     * 鏁呴殰鏃堕暱
+     */
+    private BigDecimal faultLong = BigDecimal.ZERO;
+    /**
+     * 鏁呴殰鐜�
+     */
+    private BigDecimal faultRate = BigDecimal.ZERO;
+    /**
+     * 杩愯鏃堕暱(鍘婚櫎鏁呴殰鏃堕棿)
+     */
+    private BigDecimal removeFaultRunLong = BigDecimal.ZERO;
+    /**
      * 棰滆壊
      */
     private String color;
 
-    public MdcEfficiencyResultDto(String theDate, BigDecimal processLong, BigDecimal utilizationRate, BigDecimal startRate, BigDecimal openRate, BigDecimal openLong, BigDecimal waitLong, BigDecimal closeLong) {
+    public MdcEfficiencyResultDto(String theDate, BigDecimal processLong, BigDecimal utilizationRate, BigDecimal startRate, BigDecimal openRate, BigDecimal openLong, BigDecimal waitLong, BigDecimal closeLong, BigDecimal faultLong, BigDecimal faultRate, BigDecimal removeFaultRunLong) {
         this.theDate = theDate;
         this.processLong = processLong;
         this.utilizationRate = utilizationRate;
@@ -56,6 +68,9 @@
         this.openLong = openLong;
         this.waitLong = waitLong;
         this.closeLong = closeLong;
+        this.faultLong = faultLong;
+        this.faultRate = faultRate;
+        this.removeFaultRunLong = removeFaultRunLong;
     }
 
     public MdcEfficiencyResultDto() {
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentFaultInfo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentFaultInfo.java
new file mode 100644
index 0000000..575a8c7
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentFaultInfo.java
@@ -0,0 +1,87 @@
+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-06-16
+ * @Version: V1.0
+ */
+@Data
+@TableName("mdc_equipment_fault_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "mdc_equipment_fault_info瀵硅薄", description = "鏁呴殰鐜囪〃")
+public class MdcEquipmentFaultInfo implements Serializable {
+
+	private static final long serialVersionUID = 7825739575204258911L;
+
+    /**
+     * 涓婚敭
+     */
+    @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 Integer faultLong = 0;
+    /**
+     * 鏁呴殰鐜�
+     */
+    @Excel(name = "鏁呴殰鐜�", width = 15)
+    @ApiModelProperty(value = "鏁呴殰鐜�")
+    private BigDecimal faultRate = BigDecimal.ZERO;
+    /**
+     * 鍘婚櫎鏁呴殰鏃堕棿鐨勮繍琛屾椂闂�
+     */
+    @Excel(name = "鍘婚櫎鏁呴殰鏃堕棿鐨勮繍琛屾椂闂�", width = 15)
+    @ApiModelProperty(value = "鍘婚櫎鏁呴殰鏃堕棿鐨勮繍琛屾椂闂�")
+    private Integer removeFaultRunLong = 0;
+    /**
+     * 鍘婚櫎鏁呴殰鏃堕棿鍒╃敤鐜�
+     */
+    @Excel(name = "鍘婚櫎鏁呴殰鏃堕棿鍒╃敤鐜�", width = 15)
+    @ApiModelProperty(value = "鍘婚櫎鏁呴殰鏃堕棿鍒╃敤鐜�")
+    private BigDecimal removeFaultRate = BigDecimal.ZERO;
+    /**
+     * 鏈夋晥鏃ユ湡
+     */
+    @Excel(name = "鏈夋晥鏃ユ湡", width = 15)
+    @ApiModelProperty(value = "鏈夋晥鏃ユ湡")
+    private String theDate;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    public MdcEquipmentFaultInfo() {
+    }
+
+    public MdcEquipmentFaultInfo(String equipmentId, String theDate) {
+        this.equipmentId = equipmentId;
+        this.theDate = theDate;
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentFaultInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentFaultInfoMapper.java
new file mode 100644
index 0000000..11cc065
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentFaultInfoMapper.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.mdc.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.mdc.entity.MdcEquipmentFaultInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.mdc.vo.EquFaultRecord;
+
+import java.util.List;
+
+/**
+ * @Description: 鏁呴殰鐜囪〃
+ * @Author: jeecg-boot
+ * @Date:   2025-06-16
+ * @Version: V1.0
+ */
+public interface MdcEquipmentFaultInfoMapper extends BaseMapper<MdcEquipmentFaultInfo> {
+
+    List<EquFaultRecord> findFaultRecord(@Param("equipmentIdList") List<String> equipmentIdList, @Param("startTime") String startTime, @Param("endTime") String endTime);
+}
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 b249fad..b5d68c6 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
@@ -18,10 +18,14 @@
             t1.open_long / 86400 openRate,
             t1.open_long openLong,
             t1.wait_long waitLong,
-            t1.close_long closeLong
+            t1.close_long closeLong,
+            COALESCE(t3.fault_long, 0) faultLong,
+            COALESCE(t3.fault_rate, 0) faultRate,
+            COALESCE(t3.remove_fault_run_long, 0) removeFaultRunLong
         FROM
             mdc_equipment t2
             LEFT JOIN mdc_equipment_statistical_info t1 ON t1.equipment_id = t2.equipment_id
+            LEFT JOIN mdc_equipment_fault_info t3 ON t2.equipment_id = t3.equipment_id AND t1.the_date = t3.the_date
         WHERE
             t1.the_date &lt;= #{ vo.endTime }
             AND t1.the_date &gt;= #{ vo.startTime }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentFaultInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentFaultInfoMapper.xml
new file mode 100644
index 0000000..6bf12b9
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentFaultInfoMapper.xml
@@ -0,0 +1,22 @@
+<?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.MdcEquipmentFaultInfoMapper">
+
+    <select id="findFaultRecord" resultType="org.jeecg.modules.mdc.vo.EquFaultRecord">
+        SELECT
+            t3.equipment_code equipmentId,
+            t1.fault_start_time startTime,
+            t2.actual_end_time endTime
+        FROM
+            eam_report_repair t1
+            LEFT JOIN eam_repair_order t2 ON t2.report_id = t1.id
+            LEFT JOIN eam_equipment t3 ON t1.equipment_id = t3.id
+        WHERE
+            ( ( t1.fault_start_time BETWEEN #{startTime} AND #{endTime} ) OR ( t2.actual_end_time BETWEEN #{startTime} AND #{endTime} ) )
+          AND t3.equipment_code IN
+            <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
+                #{ id }
+            </foreach>
+          AND t1.report_status != 'ABOLISH'
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentFaultInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentFaultInfoService.java
new file mode 100644
index 0000000..ce9e4db
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentFaultInfoService.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.mdc.service;
+
+import org.jeecg.modules.mdc.entity.MdcEquipmentFaultInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 鏁呴殰鐜囪〃
+ * @Author: Lius
+ * @Date: 2025-06-16
+ * @Version: V1.0
+ */
+public interface IMdcEquipmentFaultInfoService extends IService<MdcEquipmentFaultInfo> {
+
+    /**
+     * 缁熻鏁呴殰鏃堕暱锛岃绠楁晠闅滅巼
+     * @param parameter
+     */
+    void runningAllEquFaultStatistical(String parameter);
+}
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 631c938..55ea7fd 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
@@ -196,6 +196,12 @@
                     mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                     mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong());
                     mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong());
+                    mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate());
+                    mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong());
+                    mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                     long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                     for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                         if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
@@ -284,6 +290,12 @@
                     mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                     mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong());
                     mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong());
+                    mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate());
+                    mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong());
+                    mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                     long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                     for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                         if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
@@ -349,7 +361,10 @@
                             a.getOpenRate().add(b.getOpenRate()),
                             a.getOpenLong().add(b.getOpenLong()),
                             a.getWaitLong().add(b.getWaitLong()),
-                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                            a.getCloseLong().add(b.getCloseLong()),
+                            a.getFaultLong().add(b.getFaultLong()),
+                            a.getFaultRate().add(b.getFaultRate()),
+                            a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add);
                 });
         for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
             mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
@@ -392,7 +407,10 @@
                             a.getOpenRate().add(b.getOpenRate()),
                             a.getOpenLong().add(b.getOpenLong()),
                             a.getWaitLong().add(b.getWaitLong()),
-                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                            a.getCloseLong().add(b.getCloseLong()),
+                            a.getFaultLong().add(b.getFaultLong()),
+                            a.getFaultRate().add(b.getFaultRate()),
+                            a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add);
                 });
         for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
             mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
@@ -696,7 +714,10 @@
                             a.getOpenRate().add(b.getOpenRate()),
                             a.getOpenLong().add(b.getOpenLong()),
                             a.getWaitLong().add(b.getWaitLong()),
-                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                            a.getCloseLong().add(b.getCloseLong()),
+                            a.getFaultLong().add(b.getFaultLong()),
+                            a.getFaultRate().add(b.getFaultRate()),
+                            a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add);
                 });
         for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
             mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
@@ -706,6 +727,9 @@
             mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
             mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
             mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
+            mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
+            mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
+            mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
             long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue();
             for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                 if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
@@ -740,12 +764,16 @@
                             a.getOpenRate().add(b.getOpenRate()),
                             a.getOpenLong().add(b.getOpenLong()),
                             a.getWaitLong().add(b.getWaitLong()),
-                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                            a.getCloseLong().add(b.getCloseLong()),
+                            a.getFaultLong().add(b.getFaultLong()),
+                            a.getFaultRate().add(b.getFaultRate()),
+                            a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add);
                 });
         for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
             mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
             mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
             mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
+            mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
             long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue();
             for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                 if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
@@ -2146,6 +2174,9 @@
                     mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
                     mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
                     mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
+                    mdcEfficiencyResultDto.setFaultLong(efficiencyDto.getFaultLong());
+                    mdcEfficiencyResultDto.setFaultRate(efficiencyDto.getFaultRate());
+                    mdcEfficiencyResultDto.setRemoveFaultRunLong(efficiencyDto.getRemoveFaultRunLong());
                     long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                     for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                         if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
@@ -2163,6 +2194,9 @@
             mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
             mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
             mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0"));
             for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                 if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                     mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
@@ -2178,6 +2212,9 @@
             mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
             mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
             mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0"));
             for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                 if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                     mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
@@ -2191,6 +2228,9 @@
         efficiencyResultDto.setOpenLong(efficiencyResultDto.getOpenLong().add(mdcEfficiencyResultDto.getOpenLong()));
         efficiencyResultDto.setWaitLong(efficiencyResultDto.getWaitLong().add(mdcEfficiencyResultDto.getWaitLong()));
         efficiencyResultDto.setCloseLong(efficiencyResultDto.getCloseLong().add(mdcEfficiencyResultDto.getCloseLong()));
+        efficiencyResultDto.setFaultLong(efficiencyResultDto.getFaultLong().add(mdcEfficiencyResultDto.getFaultLong()));
+        efficiencyResultDto.setFaultRate(efficiencyResultDto.getFaultRate().add(mdcEfficiencyResultDto.getFaultRate()));
+        efficiencyResultDto.setRemoveFaultRunLong(efficiencyResultDto.getRemoveFaultRunLong().add(mdcEfficiencyResultDto.getRemoveFaultRunLong()));
         return mdcEfficiencyResultDto;
     }
 
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java
new file mode 100644
index 0000000..189a144
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java
@@ -0,0 +1,324 @@
+package org.jeecg.modules.mdc.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.mdc.entity.*;
+import org.jeecg.modules.mdc.mapper.MdcEquipmentFaultInfoMapper;
+import org.jeecg.modules.mdc.service.IEquipmentService;
+import org.jeecg.modules.mdc.service.IMdcEquipmentFaultInfoService;
+import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService;
+import org.jeecg.modules.mdc.service.IMdcSystemParametersService;
+import org.jeecg.modules.mdc.util.DateUtils;
+import org.jeecg.modules.mdc.vo.EquFaultRecord;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 鏁呴殰鐜囪〃
+ * @Author: Lius
+ * @Date: 2025-06-16
+ * @Version: V1.0
+ */
+@Service
+public class MdcEquipmentFaultInfoServiceImpl extends ServiceImpl<MdcEquipmentFaultInfoMapper, MdcEquipmentFaultInfo> implements IMdcEquipmentFaultInfoService {
+
+    @Resource
+    private IEquipmentService equipmentService;
+
+    @Resource
+    private IMdcSystemParametersService mdcSystemParametersService;
+
+    @Resource
+    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void runningAllEquFaultStatistical(String dateTime) {
+        String validDate = LocalDate.now().minusDays(1).toString().replaceAll("-", "");
+        if (StringUtils.isNotBlank(dateTime)) {
+            validDate = DateUtils.format(DateUtils.toDate(dateTime, DateUtils.STRDATE), DateUtils.STRDATE);
+        }
+        try {
+            this.remove(new LambdaQueryWrapper<MdcEquipmentFaultInfo>().eq(MdcEquipmentFaultInfo::getTheDate, validDate));
+        } catch (Exception e) {
+            log.error("鍙傛暟鏍煎紡涓嶅", e);
+        }
+
+        List<Equipment> equipmentList = equipmentService.list();
+        if (equipmentList == null || equipmentList.isEmpty()) {
+            return;
+        }
+
+        Map<String, MdcEquipmentFaultInfo> map = new HashMap<>();
+        String finalValidDate = validDate;
+        equipmentList.forEach(equipment -> {
+            MdcEquipmentFaultInfo mdcEquipmentFaultInfo = new MdcEquipmentFaultInfo(equipment.getEquipmentid(), finalValidDate);
+            map.put(equipment.getEquipmentid(), mdcEquipmentFaultInfo);
+        });
+
+        String planTime = "00:00:00";
+        MdcSystemParameters mdcSystemParameters = mdcSystemParametersService.getOne(new LambdaQueryWrapper<MdcSystemParameters>().eq(MdcSystemParameters::getCode, "equip_log_statis_time"));
+        if (mdcSystemParameters != null) {
+            planTime = mdcSystemParameters.getValue();
+        }
+
+        List<String> equipmentIdList = equipmentList.stream().map(Equipment::getEquipmentid).collect(Collectors.toList());
+        String startTime = DateUtils.format(DateUtils.setTimeForDay(DateUtils.toDate(validDate, DateUtils.STRDATE), planTime), DateUtils.STR_DATE_TIME_SMALL);
+        Date start = DateUtils.toDate(startTime, DateUtils.STR_DATE_TIME_SMALL);
+        String endTime = DateUtils.format(DateUtils.addDays(DateUtils.toDate(startTime, DateUtils.STR_DATE_TIME_SMALL), 1), DateUtils.STR_DATE_TIME_SMALL);
+        Date end = DateUtils.toDate(endTime, DateUtils.STR_DATE_TIME_SMALL);
+        //鏌ヨ鏁呴殰璁板綍
+        List<EquFaultRecord> equFaultRecordList = this.baseMapper.findFaultRecord(equipmentIdList, startTime, endTime);
+        if (equFaultRecordList != null && !equFaultRecordList.isEmpty()) {
+            // 淇暣鏃堕棿
+            Map<String, List<EquFaultRecord>> equFaultRecordMap = equFaultRecordList.stream().collect(Collectors.groupingBy(EquFaultRecord::getEquipmentId));
+            equFaultRecordMap.forEach((key, value) -> {
+                if (map.containsKey(key)) {
+                    MdcEquipmentFaultInfo equFaultRecords = map.get(key);
+                    long faultLong = calculateTotalFaultDuration(value, start, end);
+                    equFaultRecords.setFaultLong((int) faultLong);
+                    if (faultLong != 0) {
+                        equFaultRecords.setFaultRate(new BigDecimal(faultLong).divide(new BigDecimal("86400"), 2, RoundingMode.HALF_UP));
+                    }
+
+                    // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
+                    // step.1 鏌ヨ鍔犲伐鏃堕棿
+                    List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.selectRunningData(key, start, end);
+                    if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) {
+                        // 鏃堕棿淇
+                        if (mdcEquipmentRunningSections.get(0).getStartTime().before(start)) {
+                            mdcEquipmentRunningSections.get(0).setStartTime(start);
+                        }
+                        if (mdcEquipmentRunningSections.size() > 1) {
+                            if (mdcEquipmentRunningSections.get(mdcEquipmentRunningSections.size() - 1).getEndTime().after(end)) {
+                                mdcEquipmentRunningSections.get(mdcEquipmentRunningSections.size() - 1).setEndTime(end);
+                            }
+                        } else {
+                            if (mdcEquipmentRunningSections.get(0).getEndTime().after(end)) {
+                                mdcEquipmentRunningSections.get(0).setEndTime(end);
+                            }
+                        }
+                        // step.2 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
+                        long processingTime = calculateProcessingTimeWithoutFaults(mdcEquipmentRunningSections, value, start, end);
+                        equFaultRecords.setRemoveFaultRunLong((int) processingTime);
+                        if (faultLong != 0) {
+                            // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫埄鐢ㄧ巼
+                            BigDecimal removeFaultRate = new BigDecimal(processingTime).divide(new BigDecimal("86400").subtract(new BigDecimal(faultLong)), 2, RoundingMode.HALF_UP);
+                            equFaultRecords.setRemoveFaultRate(removeFaultRate);
+                        }
+                    }
+                    map.put(key, equFaultRecords);
+                }
+            });
+        }
+        if (!map.isEmpty()) {
+            this.saveBatch(new ArrayList<>(map.values()));
+        }
+    }
+
+    public static long calculateTotalFaultDuration(List<EquFaultRecord> records, Date startTime, Date endTime) {
+        LocalDateTime start = convertToLocalDateTime(startTime);
+        LocalDateTime end = convertToLocalDateTime(endTime);
+
+        // 淇璁板綍鏃堕棿
+        List<EquFaultRecord> correctedRecords = correctRecordTimes(records, start, end);
+
+        // 鎸夊紑濮嬫椂闂存帓搴�
+        correctedRecords.sort(Comparator.comparing(EquFaultRecord::getStartTime));
+
+        // 鍚堝苟閲嶅彔鏃堕棿娈�
+        List<TimeInterval> mergedIntervals = mergeIntervals(correctedRecords);
+
+        // 璁$畻鎬绘椂闀匡紙绉掞級
+        return mergedIntervals.stream()
+                .mapToLong(interval -> ChronoUnit.SECONDS.between(interval.start, interval.end))
+                .sum();
+    }
+
+    private static List<EquFaultRecord> correctRecordTimes(List<EquFaultRecord> records, LocalDateTime startTime, LocalDateTime endTime) {
+        return records.stream()
+                .map(record -> {
+                    LocalDateTime recordStart = convertToLocalDateTime(record.getStartTime());
+                    LocalDateTime recordEnd = record.getEndTime() != null ?
+                            convertToLocalDateTime(record.getEndTime()) : null;
+
+                    // 淇寮�濮嬫椂闂�
+                    LocalDateTime correctedStart = recordStart.isBefore(startTime) ?
+                            startTime : recordStart;
+
+                    // 淇缁撴潫鏃堕棿
+                    LocalDateTime correctedEnd = recordEnd == null || recordEnd.isAfter(endTime) ?
+                            endTime : recordEnd;
+
+                    // 鍒涘缓淇鍚庣殑璁板綍
+                    return new EquFaultRecord(
+                            record.getEquipmentId(),
+                            convertToDate(correctedStart),
+                            convertToDate(correctedEnd)
+                    );
+                })
+                .collect(Collectors.toList());
+    }
+
+    private static List<TimeInterval> mergeIntervals(List<EquFaultRecord> records) {
+        List<TimeInterval> intervals = records.stream()
+                .map(record -> new TimeInterval(
+                        convertToLocalDateTime(record.getStartTime()),
+                        convertToLocalDateTime(record.getEndTime())))
+                .collect(Collectors.toList());
+
+        if (intervals.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        List<TimeInterval> merged = new ArrayList<>();
+        TimeInterval current = intervals.get(0);
+
+        for (int i = 1; i < intervals.size(); i++) {
+            TimeInterval next = intervals.get(i);
+            if (next.start.isBefore(current.end) || next.start.equals(current.end)) {
+                // 鏈夐噸鍙狅紝鍚堝苟鍖洪棿
+                current.end = current.end.isAfter(next.end) ? current.end : next.end;
+            } else {
+                // 鏃犻噸鍙狅紝娣诲姞褰撳墠鍖洪棿骞舵洿鏂板綋鍓嶅尯闂�
+                merged.add(current);
+                current = next;
+            }
+        }
+        merged.add(current); // 娣诲姞鏈�鍚庝竴涓尯闂�
+
+        return merged;
+    }
+
+    // Date涓嶭ocalDateTime浜掔浉杞崲鐨勫伐鍏锋柟娉�
+    private static LocalDateTime convertToLocalDateTime(Date date) {
+        if (date == null) {
+            return null;
+        }
+        return Instant.ofEpochMilli(date.getTime())
+                .atZone(ZoneId.systemDefault())
+                .toLocalDateTime();
+    }
+
+    private static Date convertToDate(LocalDateTime localDateTime) {
+        if (localDateTime == null) {
+            return null;
+        }
+        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    static class TimeInterval {
+        LocalDateTime start;
+        LocalDateTime end;
+
+        public TimeInterval(LocalDateTime start, LocalDateTime end) {
+            this.start = start;
+            this.end = end;
+        }
+    }
+
+    // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鍚庣殑鍔犲伐鏃堕棿
+    private long calculateProcessingTimeWithoutFaults(
+            List<MdcEquipmentRunningSection> runningSections,
+            List<EquFaultRecord> faultRecords,
+            Date startTime,
+            Date endTime) {
+
+        // 杞崲涓篖ocalDateTime杩涜澶勭悊
+        LocalDateTime start = convertToLocalDateTime(startTime);
+        LocalDateTime end = convertToLocalDateTime(endTime);
+
+        // 灏嗘晠闅滆褰曡浆鎹负鏃堕棿鍖洪棿骞跺悎骞堕噸鍙犻儴鍒�
+//        List<TimeInterval> faultIntervals = faultRecords.stream()
+//                .map(record -> new TimeInterval(
+//                        convertToLocalDateTime(record.getStartTime()),
+//                        convertToLocalDateTime(record.getEndTime())))
+//                .collect(Collectors.toList());
+        List<TimeInterval> mergedFaultIntervals = mergeIntervals(faultRecords);
+
+        long totalProcessingTime = 0;
+
+        // 閬嶅巻姣忎釜鍔犲伐鍖洪棿锛屾帓闄ゆ晠闅滄椂闂�
+        for (MdcEquipmentRunningSection section : runningSections) {
+            LocalDateTime sectionStart = convertToLocalDateTime(section.getStartTime());
+            LocalDateTime sectionEnd = convertToLocalDateTime(section.getEndTime());
+
+            // 鎺掗櫎鏁呴殰鏃堕棿鍚庣殑鏈夋晥鍔犲伐鏃堕棿
+            List<TimeInterval> validIntervals = excludeFaultsFromSection(
+                    new TimeInterval(sectionStart, sectionEnd),
+                    mergedFaultIntervals);
+
+            // 绱姞鏈夋晥鍔犲伐鏃堕棿锛堢锛�
+            for (TimeInterval interval : validIntervals) {
+                totalProcessingTime += ChronoUnit.SECONDS.between(interval.start, interval.end);
+            }
+        }
+
+        return totalProcessingTime;
+    }
+
+    // 浠庤繍琛屽尯闂翠腑鎺掗櫎鏁呴殰鏃堕棿
+    private List<TimeInterval> excludeFaultsFromSection(
+            TimeInterval section,
+            List<TimeInterval> faultIntervals) {
+
+        List<TimeInterval> validIntervals = new ArrayList<>();
+        validIntervals.add(section);
+
+        // 閬嶅巻姣忎釜鏁呴殰鍖洪棿锛屼粠鏈夋晥鍖洪棿涓墸闄�
+        for (TimeInterval fault : faultIntervals) {
+            List<TimeInterval> newValidIntervals = new ArrayList<>();
+
+            for (TimeInterval valid : validIntervals) {
+                // 璁$畻鏈夋晥鍖洪棿涓庢晠闅滃尯闂寸殑浜ら泦
+                if (isOverlapping(valid, fault)) {
+                    // 鍒嗗壊鏈夋晥鍖洪棿
+                    splitInterval(valid, fault, newValidIntervals);
+                } else {
+                    // 鏃犱氦闆嗭紝淇濈暀鍘熸湁鏁堝尯闂�
+                    newValidIntervals.add(valid);
+                }
+            }
+
+            validIntervals = newValidIntervals;
+        }
+
+        return validIntervals;
+    }
+
+    // 鍒ゆ柇涓や釜鏃堕棿鍖洪棿鏄惁閲嶅彔
+    private boolean isOverlapping(TimeInterval a, TimeInterval b) {
+        return a.start.isBefore(b.end) && b.start.isBefore(a.end);
+    }
+
+    // 鍒嗗壊鍖洪棿锛堟墸闄ら噸鍙犻儴鍒嗭級
+    private void splitInterval(
+            TimeInterval valid,
+            TimeInterval fault,
+            List<TimeInterval> result) {
+
+        // 閲嶅彔鍓嶇殑閮ㄥ垎
+        if (valid.start.isBefore(fault.start)) {
+            result.add(new TimeInterval(valid.start, fault.start));
+        }
+
+        // 閲嶅彔鍚庣殑閮ㄥ垎
+        if (valid.end.isAfter(fault.end)) {
+            result.add(new TimeInterval(fault.end, valid.end));
+        }
+    }
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
index 47fe41c..d171beb 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -520,9 +520,9 @@
             //鑾峰彇running杩愯鐨勬棩蹇楄褰�
             List<MdcEquipmentRunningSection> list = this.equipmentRunningTracesLog(equipment.getEquipmentid());
             if (list != null && !list.isEmpty()) {
-                List<MdcEquipmentRunningSection> equipList = addSequenceNumber(list); //娣诲姞绋嬪簭鍙�
-                this.ergodicTrim(equipList);
-                super.saveBatch(equipList);
+//                List<MdcEquipmentRunningSection> equipList = addSequenceNumber(list); //娣诲姞绋嬪簭鍙�
+                this.ergodicTrim(list);
+                super.saveBatch(list);
             }
             //鑾峰彇鎶ヨ鐨勬棩蹇楄褰�
             List<MdcEquipmentRunningSection> errorList = this.equipmentRunningTracesErrorLog(equipment.getEquipmentid());
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 c149df2..4e6a883 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
@@ -37,10 +37,7 @@
     private IMdcSystemParametersService mdcSystemParametersService;
 
     @Resource
-    private ISysDictService sysDictService;
-
-    @Resource
-    private IEquipmentStatisticalInfoService equipmentStatisticalInfoService;
+    private IMdcEquipmentFaultInfoService mdcEquipmentFaultInfoService;
 
     /**
      * 璁$畻璁惧鍗曟棩杩愯鏁版嵁
@@ -69,28 +66,8 @@
         }
         if (!result.isEmpty()) {
             this.saveBatch(result);
-            List<DictModel> dictList = sysDictService.queryDictItemsByCode("data_synchronization_flag");
-            if (dictList != null && !dictList.isEmpty() && "0".equals(dictList.get(0).getValue())) {
-                List<EquipmentStatisticalInfo> list = this.dataHandle(result);
-                equipmentStatisticalInfoService.saveBatch(list);
-            }
         }
-    }
-
-    private List<EquipmentStatisticalInfo> dataHandle(List<MdcEquipmentStatisticalInfo> list) {
-        List<EquipmentStatisticalInfo> result = new ArrayList<>();
-        list.forEach(item -> {
-            EquipmentStatisticalInfo equipmentStatisticalInfo = new EquipmentStatisticalInfo();
-            equipmentStatisticalInfo.setEquipment(item.getEquipmentId());
-            equipmentStatisticalInfo.setTheDate(item.getTheDate());
-            equipmentStatisticalInfo.setClosedLong(item.getCloseLong());
-            equipmentStatisticalInfo.setOpeningLong(item.getOpenLong());
-            equipmentStatisticalInfo.setErroringLong(item.getErrorLong());
-            equipmentStatisticalInfo.setProcessingLong(item.getProcessLong());
-            equipmentStatisticalInfo.setWaitingLong(item.getWaitLong());
-            result.add(equipmentStatisticalInfo);
-        });
-        return result;
+        mdcEquipmentFaultInfoService.runningAllEquFaultStatistical(dateTime);
     }
 
     private List<MdcEquipmentStatisticalInfo> equipmentStatisticalProcess(Equipment equipment, String dateTime) {
@@ -141,7 +118,6 @@
                 List<MdcEquipmentRunningSection> equipmentRunningSectionList = mdcEquipmentRunningSectionService.listForEquipmentStatisticalInfo(equipment.getEquipmentid(), startDate, endDate);
                 return this.statisticsData(equipmentRunningSectionList, planTime, startDate, endDate, equipment);
             } else {
-                //寰呴獙璇�
                 Date end = DateUtils.plusTime(initDate, 1);
                 endDate = DateUtils.setTimeForDay(end, planTime);
                 List<MdcEquipmentRunningSection> equipmentRunningSectionList = mdcEquipmentRunningSectionService.listForEquipmentStatisticalInfo(equipment.getEquipmentid(), startDate, endDate);
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquFaultRecord.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquFaultRecord.java
new file mode 100644
index 0000000..beae4c6
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquFaultRecord.java
@@ -0,0 +1,32 @@
+package org.jeecg.modules.mdc.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-06-16
+ * @Description:
+ */
+@Data
+public class EquFaultRecord {
+    /**
+     * 璁惧缂栧彿
+     */
+    private String equipmentId;
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    private Date startTime;
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    private Date endTime;
+
+    public EquFaultRecord(String equipmentId, Date startTime, Date endTime) {
+        this.equipmentId = equipmentId;
+        this.startTime = startTime;
+        this.endTime = endTime;
+    }
+}

--
Gitblit v1.9.3