From 4545af9041b432cbe79214d52be599e4ce8659aa Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 14 八月 2025 15:55:39 +0800
Subject: [PATCH] 二保结构树代码 维修工单添加 领取按钮 领取后 生成维修开始时间  提交后 生成维修结束时间 计算 维修时长  故障时长  添加导出

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java         |    7 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java |  153 +++++++++++++++
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java                      |   12 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java    |   19 +
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EamRepairOrderExport.java                   |  188 ++++++++++++++++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamRepairOrderController.java               |   48 ++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java               |    6 
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java                |    8 
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java                        |   12 +
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java             |   15 +
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java     |   88 ++++++++
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml             |    7 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml            |   10 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamSecondMaintenanceOrderMapper.java            |    4 
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java                        |   11 +
 15 files changed, 572 insertions(+), 16 deletions(-)

diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EamRepairOrderExport.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EamRepairOrderExport.java
new file mode 100644
index 0000000..177e94c
--- /dev/null
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EamRepairOrderExport.java
@@ -0,0 +1,188 @@
+package org.jeecg.modules.eam.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+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.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 缁翠慨宸ュ崟
+ * @Author: Lius
+ * @Date: 2025-04-03
+ */
+@Data
+@TableName("eam_repair_order")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "eam_repair_order瀵硅薄", description = "缁翠慨宸ュ崟瀵煎嚭")
+public class EamRepairOrderExport {
+
+    /**涓婚敭*/
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+
+    /** 鎶ヤ慨ID*/
+    @ApiModelProperty(value = "鎶ヤ慨ID")
+    private String reportId;
+    /**璁惧鍚嶇О*/
+    @ApiModelProperty(value = "璁惧ID")
+    @Dict(dictTable = "eam_equipment", dicCode = "id", dicText = "equipment_name")
+    private String equipmentId;
+    /**
+     * 璁惧缂栫爜
+     */
+    @Excel(name = "缁熶竴缂栫爜", width = 15)
+    @TableField(exist = false)
+    @ApiModelProperty(value = "缁熶竴缂栫爜")
+    private String equipmentCode;
+    /**
+     * 璁惧鍚嶇О
+     */
+    @Excel(name = "璁惧鍚嶇О", width = 15)
+    @TableField(exist = false)
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    private String equipmentName;
+    /**
+     * 璁惧鍨嬪彿
+     */
+    @Excel(name = "璁惧鍨嬪彿", width = 15)
+    @TableField(exist = false)
+    @ApiModelProperty(value = "璁惧鍨嬪彿")
+    private String equipmentModel;
+
+    /**缁翠慨鐘舵��*/
+    @Excel(name = "缁翠慨鐘舵��", width = 15,dicCode = "repair_status")
+    @ApiModelProperty(name = "缁翠慨鐘舵��",notes = "寰呯淮淇�佺淮淇腑銆佸緟纭銆佺淮淇畬鎴�")
+    @Dict(dicCode = "repair_status")
+    private String repairStatus;
+
+    /**棰嗗彇鐘舵��*/
+    @Excel(name = "棰嗗彇鐘舵��", width = 15,dicCode = "claim_status")
+    @ApiModelProperty(name = "棰嗗彇鐘舵��",notes = "鏈鍙栥�佸凡棰嗗彇")
+    @Dict(dicCode = "claim_status")
+    private String claimStatus;
+
+    /**
+     * 宸ュ崟缂栧彿
+     */
+    @Excel(name = "宸ュ崟缂栧彿", width = 15)
+    @ApiModelProperty(value = "宸ュ崟缂栧彿")
+    private String repairCode;
+
+    /**鏁呴殰绫诲瀷*/
+    @Excel(name = "鏁呴殰绫诲瀷", width = 15,dicCode = "fault_type")
+    @ApiModelProperty(value = "鏁呴殰绫诲瀷")
+    @Dict(dicCode = "fault_type")
+    private String faultType;
+
+    /**鎶ヤ慨浜�*/
+    @Excel(name = "鎶ヤ慨浜�", width = 15,dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    @ApiModelProperty(value = "鎶ヤ慨浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String reportPerson;
+
+    /** 缁翠慨寮�濮嬫椂闂� */
+    @Excel(name = "缁翠慨寮�濮嬫椂闂�", width = 15,format = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(name = "缁翠慨寮�濮嬫椂闂�",notes = "")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date actualStartTime;
+
+    /** 缁翠慨缁撴潫鏃堕棿 */
+    @Excel(name = "缁翠慨缁撴潫鏃堕棿", width = 15,format = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(name = "缁翠慨缁撴潫鏃堕棿",notes = "")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date actualEndTime;
+
+    /** 缁翠慨鏃堕暱*/
+    @Excel(name = "缁翠慨鏃堕暱", width = 15)
+    @ApiModelProperty(name = "缁翠慨鏃堕暱",notes = "")
+    private String repairDuration;
+
+    /**鏁呴殰鏃堕暱*/
+    @Excel(name = "鏁呴殰鏃堕暱", width = 15)
+    @ApiModelProperty(name = "鏁呴殰鏃堕暱",notes = "")
+    private String faultDuration;
+
+    /** 缁翠慨纭 */
+    @Excel(name = "缁翠慨纭", width = 15,dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    @ApiModelProperty(name = "缁翠慨纭",notes = "")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String repairConfirm;
+
+    /** 缁翠慨纭鎰忚 */
+    @Excel(name = "缁翠慨纭鎰忚", width = 15)
+    @ApiModelProperty(name = "缁翠慨纭鎰忚",notes = "")
+    private String repairConfirmComment;
+
+    /** 缁翠慨纭鏃堕棿 */
+    @Excel(name = "缁翠慨纭鏃堕棿", width = 15,format = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(name = "缁翠慨纭鏃堕棿",notes = "")
+    private Date repairConfirmTime;
+
+    /**鏁呴殰鐜拌薄*/
+    @Excel(name = "鏁呴殰鐜拌薄", width = 15)
+    @ApiModelProperty(value = "鏁呴殰鐜拌薄")
+    private String faultPhenomenon;
+
+    /** 鏁呴殰鍘熷洜 */
+    @Excel(name = "鏁呴殰鍘熷洜", width = 15)
+    @ApiModelProperty(name = "鏁呴殰鍘熷洜",notes = "")
+    private String faultReason;
+
+    /** 鏁呴殰鍒嗘瀽 */
+    @Excel(name = "鏁呴殰鍒嗘瀽", width = 15)
+    @ApiModelProperty(name = "鏁呴殰鍒嗘瀽",notes = "")
+    private String faultAnalysis;
+
+    /** 鎺掓晠杩囩▼ */
+    @Excel(name = "鎺掓晠杩囩▼", width = 15)
+    @ApiModelProperty(name = "鎺掓晠杩囩▼",notes = "")
+    private String faultProcess;
+
+    /** 棰勯槻鎺柦 */
+    @Excel(name = "棰勯槻鎺柦", width = 15)
+    @ApiModelProperty(name = "棰勯槻鎺柦",notes = "")
+    private String faultPrevent;
+
+    /** 鎿嶄綔宸� */
+    @Excel(name = "鎿嶄綔宸�", width = 15,dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    @ApiModelProperty(name = "鎿嶄綔宸�",notes = "")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String confirmer;
+
+    /** 鎿嶄綔宸ョ‘璁ょ粨鏋�*/
+    @Excel(name = "鎿嶄綔宸ョ‘璁ょ粨鏋�", width = 15)
+    @ApiModelProperty(name = "鎿嶄綔宸ョ‘璁ょ粨鏋�",notes = "")
+    private String confirmResult;
+
+    /** 鎿嶄綔宸ョ‘璁ゆ剰瑙� */
+    @Excel(name = "鎿嶄綔宸ョ‘璁ゆ剰瑙�", width = 15)
+    @ApiModelProperty(name = "鎿嶄綔宸ョ‘璁ゆ剰瑙�",notes = "")
+    private String confirmComment;
+
+    /** 鎿嶄綔宸ョ‘璁ゆ椂闂�*/
+    @Excel(name = "鎿嶄綔宸ョ‘璁ゆ椂闂�", width = 15,format = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鎿嶄綔宸ョ‘璁ゆ椂闂�")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date confirmTime;
+
+    @TableField(exist = false)
+    private String installationPosition;
+}
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
index e35853c..198f15f 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
@@ -470,6 +470,18 @@
     @TableField(exist = false)
     private String thirdMaintenanceGenerateFlag;
 
+    /**
+     * 淇濆吇瑙勮寖鍚嶇О
+     */
+    @TableField(exist = false)
+    private String maintenanceStandardName;
+
+    /**
+     * 淇濆吇瑙勮寖Id
+     */
+    @TableField(exist = false)
+    private String maintenanceStandardId;
+
 
     public void setFactoryOrgCode(String factoryOrgCode){
         this.factoryOrgCode = factoryOrgCode;
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java
index 04db245..655ca3f 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java
@@ -72,10 +72,14 @@
     @ApiModelProperty(value = "璁惧ID")
     @Dict(dictTable = "eam_equipment", dicCode = "id", dicText = "equipment_name")
     private String equipmentId;
-    /** 缁翠慨鐘舵��*/
+    /**缁翠慨鐘舵��*/
     @ApiModelProperty(name = "缁翠慨鐘舵��",notes = "寰呯淮淇�佺淮淇腑銆佸緟纭銆佺淮淇畬鎴�")
     @Dict(dicCode = "repair_status")
     private String repairStatus;
+    /**棰嗗彇鐘舵��*/
+    @ApiModelProperty(name = "棰嗗彇鐘舵��",notes = "鏈鍙栥�佸凡棰嗗彇")
+    @Dict(dicCode = "claim_status")
+    private String claimStatus;
     /**鏁呴殰绫诲瀷*/
     @Excel(name = "鏁呴殰绫诲瀷", width = 15)
     @ApiModelProperty(value = "鏁呴殰绫诲瀷")
@@ -100,6 +104,12 @@
     @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date actualEndTime;
+    /** 缁翠慨鏃堕暱*/
+    @ApiModelProperty(name = "缁翠慨鏃堕暱",notes = "")
+    private String repairDuration;
+    /**鏁呴殰鏃堕暱*/
+    @ApiModelProperty(name = "鏁呴殰鏃堕暱",notes = "")
+    private String faultDuration;
     /** 缁翠慨纭 */
     @ApiModelProperty(name = "缁翠慨纭",notes = "")
     @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java
index 5213ff2..3c2fe99 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.dto.EamRepairOrderExport;
 import org.jeecg.modules.eam.entity.EamRepairOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.jeecg.modules.eam.request.EamRepairOrderQuery;
@@ -36,4 +37,11 @@
      * @return
      */
     IPage<EamRepairOrder> queryPageList(Page<EamRepairOrder> page, @Param(Constants.WRAPPER) QueryWrapper<EamRepairOrder> queryWrapper);
+
+    /**
+     * 瀵煎嚭鍒楄〃鏌ヨ
+     * @param queryWrapper
+     * @return
+     */
+    List<EamRepairOrderExport> queryExportList(@Param(Constants.WRAPPER) QueryWrapper<EamRepairOrderExport> queryWrapper);
 }
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml
index 3a92e7d..b92d089 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml
@@ -52,4 +52,11 @@
         on wmo.equipment_id = e.id
         ${ew.customSqlSegment}
     </select>
+    <select id="queryExportList" resultType="org.jeecg.modules.eam.dto.EamRepairOrderExport">
+        select wmo.*, e.equipment_code, e.equipment_name,e.equipment_model, e.installation_position
+        from eam_repair_order wmo
+                 inner join eam_equipment e
+                            on wmo.equipment_id = e.id
+            ${ew.customSqlSegment}
+    </select>
 </mapper>
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
index a3417c6..604c72c 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
@@ -4,12 +4,11 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import liquibase.pro.packaged.S;
 import org.jeecg.modules.eam.dto.EamRepairOrderDto;
+import org.jeecg.modules.eam.dto.EamRepairOrderExport;
+import org.jeecg.modules.eam.entity.EamEquipment;
 import org.jeecg.modules.eam.entity.EamRepairOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.eam.request.EamRepairOrderQuery;
-import org.jeecg.modules.eam.request.EamRepairOrderRequest;
-import org.jeecg.modules.eam.request.EamRepairOrderResponse;
-import org.jeecg.modules.eam.request.EamReportRepairQuery;
+import org.jeecg.modules.eam.request.*;
 
 import java.util.List;
 
@@ -54,4 +53,12 @@
     EamRepairOrder perform(EamRepairOrderRequest request);
 
     EamRepairOrderResponse findById(String id);
+
+
+    /**
+     * 缁翠慨宸ュ崟瀵煎嚭
+     * @param eamRepairOrderQuery
+     * @return
+     */
+    List<EamRepairOrderExport> exportList(EamRepairOrderQuery eamRepairOrderQuery);
 }
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
index 15ca1f2..1f74848 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -19,6 +19,7 @@
 import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
 import org.jeecg.modules.eam.constant.*;
 import org.jeecg.modules.eam.dto.EamRepairOrderDto;
+import org.jeecg.modules.eam.dto.EamRepairOrderExport;
 import org.jeecg.modules.eam.entity.EamEquipment;
 import org.jeecg.modules.eam.entity.EamRepairOrder;
 import org.jeecg.modules.eam.entity.EamRepairPerson;
@@ -36,6 +37,7 @@
 import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
 import org.jeecg.modules.flowable.service.IFlowDefinitionService;
 import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.jeecg.modules.flowable.util.TimeUtil;
 import org.jeecg.modules.system.entity.BaseFactory;
 import org.jeecg.modules.system.entity.BaseFactoryUser;
 import org.jeecg.modules.system.service.IBaseFactoryService;
@@ -205,6 +207,18 @@
         }
         BeanUtils.copyProperties(eamRepairOrderDto,eamRepairOrder);
         eamRepairOrder.setRepairStatus(EamRepairOrderRepairStatusEnum.UNDER_MAINTENANCE.name());
+        eamRepairOrder.setActualEndTime(new Date());
+        //璁$畻缁翠慨鏃堕棿涓庢晠闅滄椂闂�
+        Date startTime;
+        Date endTime;
+        //缁翠慨缁撴潫鏃堕棿-缁翠慨寮�濮嬫椂闂�=缁翠慨鏃堕暱
+        startTime=eamRepairOrder.getActualStartTime();
+        endTime=eamRepairOrder.getActualEndTime();
+        eamRepairOrder.setRepairDuration(TimeUtil.howLong(startTime,endTime,2));
+        //缁翠慨缁撴潫鏃堕棿-鏁呴殰鎶ヤ慨鏃堕棿=鏁呴殰鏃堕暱
+        startTime=eamRepairOrder.getCreateTime();
+        endTime=eamRepairOrder.getActualEndTime();
+        eamRepairOrder.setFaultDuration(TimeUtil.howLong(startTime,endTime,2));
         this.updateById(eamRepairOrder);
         EamReportRepair eamReportRepair=eamReportRepairService.getById(eamRepairOrder.getReportId());
         if (eamReportRepair==null){
@@ -237,12 +251,6 @@
         }
         if (StrUtil.isEmpty(eamRepairOrder.getRepairCode())) {
             throw new RuntimeException("宸ュ崟缂栧彿涓虹┖");
-        }
-        if (eamRepairOrder.getActualStartTime()==null){
-            throw new RuntimeException("缁翠慨寮�濮嬫椂闂翠负绌�");
-        }
-        if (eamRepairOrder.getActualEndTime()==null){
-            throw new RuntimeException("缁翠慨缁撴潫鏃堕棿涓虹┖");
         }
         if (StrUtil.isEmpty(eamRepairOrder.getFaultReason())){
             throw new RuntimeException("鏁呴殰鍘熷洜涓虹┖");
@@ -371,6 +379,74 @@
         return eamRepairOrderResponse;
     }
 
+    /**
+     * 缁翠慨宸ュ崟瀵煎嚭
+     * @param eamRepairOrderQuery
+     * @return
+     */
+    @Override
+    public List<EamRepairOrderExport> exportList(EamRepairOrderQuery eamRepairOrderQuery){
+        QueryWrapper<EamRepairOrderExport> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.del_flag", CommonConstant.DEL_FLAG_0);
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return new ArrayList<>();
+        }
+        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶�
+            List<BaseFactoryUser> baseFactoryUserList = baseFactoryUserService.
+                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId, sysUser.getId()));
+            if (!CollectionUtils.isEmpty(baseFactoryUserList)) {
+                Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
+                Set<String> factoryCode = baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
+                queryWrapper.in("e.factory_org_code", factoryCode);
+            } else {
+                return new ArrayList<>();
+            }
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (eamRepairOrderQuery != null) {
+            if (StringUtils.isNotBlank(eamRepairOrderQuery.getEquipmentId())) {
+                queryWrapper.eq("wmo.equipment_id", eamRepairOrderQuery.getEquipmentId());
+            }
+            if (StringUtils.isNotBlank(eamRepairOrderQuery.getEquipmentCode())) {
+                queryWrapper.like("e.equipment_code", eamRepairOrderQuery.getEquipmentCode());
+            }
+            if (StringUtils.isNotBlank(eamRepairOrderQuery.getEquipmentName())) {
+                queryWrapper.like("e.equipment_name", eamRepairOrderQuery.getEquipmentName());
+            }
+            if (StringUtils.isNotBlank(eamRepairOrderQuery.getRepairStatus())) {
+                queryWrapper.eq("wmo.repair_status", eamRepairOrderQuery.getRepairStatus());
+            }
+            if (StringUtils.isNotBlank(eamRepairOrderQuery.getRepairCode())) {
+                queryWrapper.like("wmo.repair_code", eamRepairOrderQuery.getRepairCode());
+            }
+            //鎺掑簭
+            if (StringUtils.isNotBlank(eamRepairOrderQuery.getColumn()) && StringUtils.isNotBlank(eamRepairOrderQuery.getOrder())) {
+                String column = eamRepairOrderQuery.getColumn();
+                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
+                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
+                }
+                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(eamRepairOrderQuery.getOrder())) {
+                    queryWrapper.orderByAsc("wmo." + oConvertUtils.camelToUnderline(column));
+                } else {
+                    queryWrapper.orderByDesc("wmo." + oConvertUtils.camelToUnderline(column));
+                }
+            } else {
+                queryWrapper.orderByDesc("wmo.create_time");
+            }
+        } else {
+            queryWrapper.orderByDesc("wmo.create_time");
+        }
+        return this.baseMapper.queryExportList(queryWrapper);
+
+    }
+
     private boolean claimTask(String taskId, LoginUser user) {
         Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
         if (task == null) {
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java
index 222d290..8ee85cc 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java
@@ -72,6 +72,15 @@
      */
     private String orgType;
 
+    /**
+     * 淇濆吇瑙勮寖鍚嶇О
+     */
+    private String maintenanceStandardName;
+
+    /**
+     * 淇濆吇瑙勮寖Id
+     */
+    private String maintenanceStandardId;
 
     private List<EamEquipmentTree> children = new ArrayList<>();
 
@@ -87,6 +96,8 @@
         this.title = mdcEquipment.getEquipmentCode() + "/" + mdcEquipment.getEquipmentName();
         this.equipmentId = mdcEquipment.getEquipmentCode();
         this.equipmentName = mdcEquipment.getEquipmentName();
+        this.maintenanceStandardId=mdcEquipment.getMaintenanceStandardId();
+        this.maintenanceStandardName=mdcEquipment.getMaintenanceStandardName();
         this.isLeaf = true;
         return this;
     }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamRepairOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamRepairOrderController.java
index f840478..30e0f98 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamRepairOrderController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamRepairOrderController.java
@@ -15,6 +15,7 @@
 import org.jeecg.common.util.TranslateDictTextUtils;
 import org.jeecg.modules.eam.constant.BusinessCodeConst;
 import org.jeecg.modules.eam.dto.EamRepairOrderDto;
+import org.jeecg.modules.eam.dto.EamRepairOrderExport;
 import org.jeecg.modules.eam.entity.EamRepairOrder;
 import org.jeecg.modules.eam.request.EamRepairOrderQuery;
 import org.jeecg.modules.eam.request.EamRepairOrderRequest;
@@ -27,10 +28,16 @@
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * @Description: 缁翠慨宸ュ崟
@@ -75,7 +82,33 @@
 
     /**
      * 棰嗗彇
-     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "缁翠慨宸ュ崟-棰嗗彇")
+    @ApiOperation(value = "缁翠慨宸ュ崟-棰嗗彇", notes = "缁翠慨宸ュ崟-棰嗗彇")
+    @GetMapping(value = "/claim")
+    public Result<?> claim(String id) {
+        // 鏍¢獙棰嗗彇鏉冮檺
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (!BusinessCodeConst.PCR0002.equals(user.getPost())) {
+            return Result.error("棰嗗彇澶辫触,娌℃湁棰嗗彇鏉冮檺锛�,闇�缁翠慨宸ラ鍙�");
+        }
+        EamRepairOrder eamRepairOrder=eamRepairOrderService.getById(id);
+        if (eamRepairOrder==null) {
+            return Result.error("缁翠慨宸ュ崟涓嶅瓨鍦�");
+        }else {
+            if ("1".equals(eamRepairOrder.getClaimStatus())) {
+                return Result.error("璇ョ淮淇伐鍗曞凡琚鍙�");
+            }
+        }
+        eamRepairOrder.setClaimStatus("1");
+        eamRepairOrder.setActualStartTime(new Date());
+        eamRepairOrderService.updateById(eamRepairOrder);
+        return Result.OK("棰嗗彇鎴愬姛");
+    }
+    /**
+     * 鎻愪氦
      * @param id
      * @return
      */
@@ -184,11 +217,18 @@
      * 瀵煎嚭excel
      *
      * @param request
-     * @param eamRepairOrder
+     * @param eamRepairOrderQuery
      */
     @RequestMapping(value = "/exportXls")
-    public ModelAndView exportXls(HttpServletRequest request, EamRepairOrder eamRepairOrder) {
-        return super.exportXls(request, eamRepairOrder, EamRepairOrder.class, "缁翠慨宸ュ崟");
+    public ModelAndView exportXls(HttpServletRequest request, EamRepairOrderQuery eamRepairOrderQuery) {
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        List<EamRepairOrderExport> eamRepairOrderExports=eamRepairOrderService.exportList(eamRepairOrderQuery);
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "缁翠慨宸ュ崟鍙拌处"); //姝ゅ璁剧疆鐨刦ilename鏃犳晥 ,鍓嶇浼氶噸鏇存柊璁剧疆涓�涓�
+        mv.addObject(NormalExcelConstants.CLASS, EamRepairOrderExport.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("缁翠慨宸ュ崟鍙拌处" + "鎶ヨ〃", "瀵煎嚭浜�:" + sysUser.getRealname(), "缁翠慨宸ュ崟鍙拌处"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, eamRepairOrderExports);
+        return mv;
     }
 
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
index 2405991..e5c3882 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
@@ -21,6 +21,7 @@
 import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
 import org.jeecg.modules.eam.request.EamWeekMaintenanceRequest;
 import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService;
+import org.jeecg.modules.eam.vo.EamEquipmentTree;
 import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -70,6 +71,24 @@
     }
 
     /**
+     * 浜屼繚鎵归噺鏍戠粨鏋�
+     *
+     */
+    @ApiOperation(value = "璁惧浜岀骇淇濆吇-浜屼繚鎵归噺鏍戠粨鏋�", notes = "璁惧浜岀骇淇濆吇-浜屼繚鎵归噺鏍戠粨鏋�")
+    @GetMapping(value = "/BatchTreeStructure")
+    public Result<List<EamEquipmentTree>> BatchTreeStructure() {
+        Result<List<EamEquipmentTree>> result = new Result<>();
+        try {
+            List<EamEquipmentTree> mdcEquipmentTreeList =eamSecondMaintenanceOrderService.getTree();
+            result.setSuccess(true);
+            result.setResult(mdcEquipmentTreeList);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return result;
+    }
+
+    /**
      * 娣诲姞
      *
      * @param request
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java
index 2c0fd59..eb513c9 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.entity.EamEquipment;
 import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
 
 import java.util.List;
@@ -24,4 +25,9 @@
      * @return
      */
     IPage<EamMaintenanceStandard> queryPageList(IPage<EamMaintenanceStandard> page, @Param(Constants.WRAPPER) Wrapper<EamMaintenanceStandard> queryWrapper);
+
+    /**
+     * 鍒楄〃鏌ヨ
+     */
+    List<EamEquipment> queryList(@Param(Constants.WRAPPER) Wrapper<EamMaintenanceStandard> queryWrapper);
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamSecondMaintenanceOrderMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamSecondMaintenanceOrderMapper.java
index f153d95..52eb99a 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamSecondMaintenanceOrderMapper.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamSecondMaintenanceOrderMapper.java
@@ -6,8 +6,12 @@
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
 import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrder;
 
+import java.util.List;
+
 /**
  * @Description: 璁惧浜岀骇淇濆吇
  * @Author: jeecg-boot
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
index ff47337..1bc0828 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
@@ -11,4 +11,14 @@
             on f.data_id=ems.id
             ${ew.customSqlSegment}
     </select>
+    <select id="queryList" resultType="org.jeecg.modules.eam.entity.EamEquipment">
+        SELECT
+            e.*,
+            ems.id as 'maintenanceStandardId',
+            ems.standard_name as 'maintenanceStandardName'
+        FROM
+            eam_equipment e
+                INNER JOIN eam_maintenance_standard ems ON ems.equipment_id = e.id
+            ${ew.customSqlSegment}
+    </select>
 </mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java
index 4d0ac15..6501ae8 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java
@@ -6,6 +6,9 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceQuery;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
+import org.jeecg.modules.eam.vo.EamEquipmentTree;
+
+import java.util.List;
 
 /**
  * @Description: 璁惧浜岀骇淇濆吇
@@ -24,6 +27,10 @@
     IPage<EamSecondMaintenanceOrder> queryPageList(Page<EamSecondMaintenanceOrder> page, EamSecondMaintenanceQuery query);
 
     /**
+     * 鎵归噺鏂板鏍戠粨鏋�
+     */
+    List<EamEquipmentTree> getTree();
+    /**
      * 娣诲姞
      * @param request
      * @return
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
index 429a12f..2b9c57c 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
@@ -9,11 +9,11 @@
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import liquibase.pro.packaged.Q;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.engine.TaskService;
 import org.flowable.task.api.Task;
-import org.jeecg.common.api.vo.FileUploadResult;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.DataBaseConstant;
@@ -23,10 +23,14 @@
 import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
 import org.jeecg.modules.eam.constant.*;
 import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.mapper.EamEquipmentMapper;
+import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper;
 import org.jeecg.modules.eam.mapper.EamSecondMaintenanceOrderMapper;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceQuery;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
 import org.jeecg.modules.eam.service.*;
+import org.jeecg.modules.eam.tree.FindsEquipmentEamCenterUtil;
+import org.jeecg.modules.eam.vo.EamEquipmentTree;
 import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
 import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
 import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
@@ -35,6 +39,7 @@
 import org.jeecg.modules.flowable.service.IFlowTaskService;
 import org.jeecg.modules.system.entity.BaseFactory;
 import org.jeecg.modules.system.entity.BaseFactoryUser;
+import org.jeecg.modules.system.mapper.BaseFactoryMapper;
 import org.jeecg.modules.system.service.IBaseFactoryService;
 import org.jeecg.modules.system.service.IBaseFactoryUserService;
 import org.jeecg.modules.system.service.ISysUserService;
@@ -46,6 +51,7 @@
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -85,10 +91,15 @@
     private IEamBaseHFCodeService hfCodeService;
     @Autowired
     private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
+    @Resource
+    private BaseFactoryMapper baseFactoryMapper;
 
     @Override
     public IPage<EamSecondMaintenanceOrder> queryPageList(Page<EamSecondMaintenanceOrder> page, EamSecondMaintenanceQuery query) {
         QueryWrapper<EamSecondMaintenanceOrder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.del_flag",CommonConstant.DEL_FLAG_0.toString());
         //鐢ㄦ埛鏁版嵁鏉冮檺
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         if (sysUser == null) {
@@ -148,6 +159,146 @@
         return eamSecondMaintenanceOrderMapper.queryPageList(page, queryWrapper);
     }
 
+    /**
+     * 鎵归噺鏂板鏍戠粨鏋�
+     */
+    @Override
+    public List<EamEquipmentTree> getTree(){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) return Collections.emptyList();
+
+        // 鏋勫缓閫氱敤鏌ヨ鏉′欢
+        QueryWrapper<EamMaintenanceStandard> baseQuery = new QueryWrapper<EamMaintenanceStandard>()
+                .eq("ems.maintenance_category", "SECOND_MAINTENANCE")
+                .eq("ems.standard_status", MaintenanceStandardStatusEnum.START.name())
+                .eq("ems.del_flag", CommonConstant.DEL_FLAG_0.toString());
+
+        // 搴旂敤鏁版嵁鏉冮檺杩囨护
+        applyDataPermissionFilter(sysUser, baseQuery);
+
+        // 鍗曟鏌ヨ璁惧鍒楄〃
+        List<EamEquipment> equipmentList = eamMaintenanceStandardMapper.queryList(baseQuery);
+        if (CollectionUtils.isEmpty(equipmentList)) {
+            return Collections.emptyList();
+        }
+
+        // 鑾峰彇鍏宠仈鐨勫伐鍘備唬鐮�
+        Set<String> factoryOrgCodes = equipmentList.stream()
+                .map(EamEquipment::getFactoryOrgCode)
+                .collect(Collectors.toSet());
+
+        // 鍗曟鏌ヨ鎵�鏈夊伐鍘傛暟鎹紙鍖呭惈瀹屾暣鏍戠粨鏋勶級
+        List<BaseFactory> allFactories = baseFactoryService.list(
+                new LambdaQueryWrapper<BaseFactory>()
+                        .eq(BaseFactory::getDelFlag, CommonConstant.DEL_FLAG_0.toString())
+                        .orderByAsc(BaseFactory::getSorter));
+
+        // 鎻愬彇鏉冮檺鍏宠仈鐨勫伐鍘傝妭鐐笽D锛堝寘鍚墍鏈夌埗鑺傜偣锛�
+        Set<String> authorizedFactoryIds = extractAuthorizedFactoryIds(
+                allFactories, factoryOrgCodes);
+
+        // 杩囨护鍑烘湁鏁堝伐鍘傜粨鏋�
+        List<BaseFactory> validFactories = allFactories.stream()
+                .filter(f -> authorizedFactoryIds.contains(f.getId()))
+                .collect(Collectors.toList());
+
+        // ===鏋勫缓璁惧鏍� ===
+        Map<String, List<EamEquipment>> equipmentMap = equipmentList.stream()
+                .collect(Collectors.groupingBy(EamEquipment::getFactoryOrgCode));
+
+        // 鏋勫缓鍩虹鏍�
+        List<EamEquipmentTree> treeList = FindsEquipmentEamCenterUtil.wrapEquipmentBaseFactoryTreeList(validFactories);
+
+        // 濉厖璁惧鏁版嵁
+        populateEquipmentNodes(treeList, equipmentMap);
+        return treeList;
+    }
+
+    // 搴旂敤鏁版嵁鏉冮檺鏉′欢锛堝叡鐢ㄦ柟娉曪級
+    private void applyDataPermissionFilter(LoginUser user, QueryWrapper<EamMaintenanceStandard> query) {
+        if (StringUtils.isNotBlank(user.getEamEquipmentIds())) {
+            List<String> equipmentIds = Arrays.asList(user.getEamEquipmentIds().split(","));
+            query.in("e.equipment_code", equipmentIds);
+        } else {
+            List<BaseFactoryUser> factoryUsers = baseFactoryUserService.list(
+                    new LambdaQueryWrapper<BaseFactoryUser>()
+                            .eq(BaseFactoryUser::getUserId, user.getId()));
+
+            if (CollectionUtils.isNotEmpty(factoryUsers)) {
+                Set<String> factoryIds = factoryUsers.stream()
+                        .map(BaseFactoryUser::getFactoryId)
+                        .collect(Collectors.toSet());
+
+                Set<String> factoryCodes = baseFactoryService.listByIds(factoryIds).stream()
+                        .map(BaseFactory::getOrgCode)
+                        .collect(Collectors.toSet());
+
+                query.in("e.factory_org_code", factoryCodes);
+            }
+        }
+    }
+
+    // 鎻愬彇鎺堟潈宸ュ巶ID
+    private Set<String> extractAuthorizedFactoryIds(List<BaseFactory> allFactories, Set<String> authOrgCodes) {
+        Set<String> result = new HashSet<>();
+        // 鏋勫缓ID->宸ュ巶鐨勬槧灏�
+        Map<String, BaseFactory> factoryMap = allFactories.stream()
+                .collect(Collectors.toMap(BaseFactory::getId, Function.identity()));
+
+        // 閫嗗悜鏌ユ壘鐖惰妭鐐归摼
+        for (BaseFactory factory : allFactories) {
+            if (authOrgCodes.contains(factory.getOrgCode())) {
+                collectParentIds(factoryMap, factory.getId(), result);
+            }
+        }
+        return result;
+    }
+
+    // 閫掑綊鏀堕泦鐖惰妭鐐笽D
+    private void collectParentIds(Map<String, BaseFactory> factoryMap, String currentId, Set<String> idSet) {
+        if (StringUtils.isEmpty(currentId) || idSet.contains(currentId)) return;
+
+        idSet.add(currentId);
+        BaseFactory factory = factoryMap.get(currentId);
+        if (factory != null && StringUtils.isNotBlank(factory.getParentId())) {
+            collectParentIds(factoryMap, factory.getParentId(), idSet);
+        }
+    }
+
+    // 濉厖璁惧鑺傜偣锛堥潪閫掑綊锛�
+    private void populateEquipmentNodes(List<EamEquipmentTree> treeList,
+                                        Map<String, List<EamEquipment>> equipmentMap) {
+        for (EamEquipmentTree node : treeList) {
+
+            String orgCode = resolveOrgCodeFromTree(node); // 闇�瀹炵幇璇ラ�昏緫
+
+            // 鍏宠仈璁惧鏁版嵁
+            List<EamEquipment> devices = equipmentMap.getOrDefault(orgCode, Collections.emptyList());
+            if (!CollectionUtils.isEmpty(devices)) {
+                for (EamEquipment device : devices) {
+                    EamEquipmentTree deviceNode = new EamEquipmentTree().convert(device);
+                    deviceNode.setParentId(node.getKey());
+                    deviceNode.setType(2);
+                    deviceNode.setLeaf(true);  // 鏄庣‘鏍囪涓哄彾瀛愯妭鐐�
+                    node.getChildren().add(deviceNode);
+                }
+                // 鍙湁褰撳瓨鍦ㄨ澶囨椂鎵嶆爣璁颁负闈炲彾瀛�
+                node.setLeaf(false);
+            }
+
+            // 缁х画澶勭悊瀛愯妭鐐癸紙宸ュ巶灞傜骇锛�
+            if (!CollectionUtils.isEmpty(node.getChildren())) {
+                populateEquipmentNodes(node.getChildren(), equipmentMap);
+            }
+        }
+    }
+
+    // 瑙f瀽鏂规硶
+    private String resolveOrgCodeFromTree(EamEquipmentTree node) {
+        BaseFactory factory =baseFactoryMapper.selectById(node.getKey());
+        return factory != null ? factory.getOrgCode() : null;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean addMaintenance(EamSecondMaintenanceRequest request) {

--
Gitblit v1.9.3