From 804901bfc31353a5d398a68dd8ef1635b76629fc Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期一, 30 六月 2025 17:59:07 +0800
Subject: [PATCH] art: 设备管理迁移(航宇)

---
 src/main/java/org/jeecg/modules/eam/entity/EamReportRepair.java                                  |  121 
 src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardDetailController.java       |   72 
 src/main/java/org/jeecg/modules/eam/constant/MaintenanceCategoryEnum.java                        |   10 
 src/main/java/org/jeecg/modules/eam/service/IEamEquipmentFaultReasonService.java                 |   14 
 src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentPrecisionParametersMapper.java            |   26 
 src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionCheckDetailServiceImpl.java         |   38 
 src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java                     |  106 
 src/main/java/org/jeecg/modules/eam/entity/EamEquipmentAttachment.java                           |   68 
 src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderService.java                     |   62 
 src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java                           |  141 
 src/main/java/org/jeecg/modules/eam/entity/EamEquipmentExtend.java                               |   64 
 src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderDetailController.java          |   71 
 src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderController.java                |  372 +
 src/main/java/org/jeecg/modules/eam/controller/EamProcessParametersController.java               |  166 
 src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java                      |   28 
 src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java                  |   67 
 src/main/java/org/jeecg/modules/eam/util/DateUtils.java                                          | 1089 +++++
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentExtendMapper.xml                      |    5 
 src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardDetailService.java            |   21 
 src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderDetailMapper.java                   |   14 
 src/main/java/org/jeecg/modules/eam/entity/EamProcessParameters.java                             |   65 
 src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderMapper.java                        |   24 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderDetailMapper.xml               |    5 
 src/main/java/org/jeecg/modules/eam/entity/EamPrecisionCheckDetail.java                          |   79 
 src/main/java/org/jeecg/modules/eam/service/IEamPrecisionCheckDetailService.java                 |   30 
 src/main/java/org/jeecg/modules/eam/controller/EamEquipmentHistoryLogController.java             |   43 
 src/main/java/org/jeecg/modules/eam/service/IEamPrecisionParametersService.java                  |   14 
 src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java                      |   23 
 src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java                       |   21 
 src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java                            |   55 
 src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java                          |   78 
 src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java                               |  143 
 src/main/java/org/jeecg/modules/eam/entity/EamEquipmentPrecisionParameters.java                  |   65 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentAttachmentMapper.xml                  |    5 
 src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentExtendMapper.java                         |   14 
 src/main/java/org/jeecg/modules/eam/service/IEamEquipmentProcessParametersService.java           |   31 
 src/main/java/org/jeecg/modules/eam/controller/EamEquipmentAttachmentController.java             |  157 
 src/main/java/org/jeecg/modules/eam/entity/EamEquipmentFaultReason.java                          |   72 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderMapper.xml                     |   12 
 src/main/java/org/jeecg/modules/eam/request/EamMaintenanceRequest.java                           |   89 
 src/main/java/org/jeecg/modules/eam/service/IEamSysFilesService.java                             |   45 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionCheckDetailMapper.xml                 |    5 
 src/main/java/org/jeecg/modules/eam/vo/EquipmentSearchResult.java                                |   26 
 src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java                            |   28 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentFaultReasonMapper.xml                 |    5 
 src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java                                     |  121 
 src/main/java/org/jeecg/modules/eam/util/ExcelUtils.java                                         |   51 
 src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentFaultReasonMapper.java                    |   14 
 src/main/java/org/jeecg/modules/eam/service/IEamEquipmentPrecisionParametersService.java         |   39 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamSysFilesMapper.xml                             |    5 
 src/main/java/org/jeecg/modules/eam/constant/EquipmentRepairStatus.java                          |   13 
 src/main/java/org/jeecg/modules/eam/controller/EamEquipmentFaultReasonController.java            |  160 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamProcessParametersMapper.xml                    |    5 
 src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java                               |   35 
 src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentAttachmentServiceImpl.java          |   65 
 src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardDetailServiceImpl.java    |   31 
 src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderServiceImpl.java             |  548 ++
 src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionParametersServiceImpl.java          |   18 
 src/main/java/org/jeecg/modules/eam/constant/EquipmentMaintenanceStatus.java                     |   13 
 src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderService.java                      |   96 
 src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java                       |  338 +
 src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java                           |   76 
 src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentPrecisionParametersServiceImpl.java |   51 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardDetailMapper.xml            |    5 
 src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java                            |   44 
 src/main/java/org/jeecg/modules/eam/request/EamMaintenanceBatchApprovalRequest.java              |   41 
 src/main/java/org/jeecg/modules/eam/constant/OrderCreationMethodEnum.java                        |    7 
 src/main/java/org/jeecg/modules/eam/controller/EamSysFilesController.java                        |  212 +
 src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java          |  292 +
 src/main/java/org/jeecg/modules/eam/service/IEamEquipmentHistoryLogService.java                  |   14 
 src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java              |   47 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml                  |   11 
 src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderDetailService.java                |   21 
 src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java                           |   19 
 src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderDetailController.java           |  179 
 src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionCheckDetailMapper.java                    |   14 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml                          |   11 
 src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java                         |   57 
 src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderController.java                 |  608 ++
 src/main/java/org/jeecg/modules/eam/entity/EamEquipmentProcessParameters.java                    |   63 
 src/main/java/org/jeecg/modules/eam/controller/EamPrecisionCheckDetailController.java            |   70 
 src/main/java/org/jeecg/modules/eam/entity/EamEquipmentHistoryLog.java                           |   70 
 src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java                         |   86 
 src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderDetailService.java               |   22 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentProcessParametersMapper.xml           |   12 
 src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java             |  508 ++
 src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrder.java                              |  149 
 src/main/java/org/jeecg/modules/eam/vo/InspectionVo.java                                         |  110 
 src/main/java/org/jeecg/modules/eam/constant/EquipmentOperationTagEnum.java                      |   14 
 src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java              |  556 ++
 src/main/java/org/jeecg/modules/eam/constant/ReportRepairEnum.java                               |   25 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml                            |   12 
 src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java                                     |  361 +
 src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java                    |  278 +
 src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentFaultReasonServiceImpl.java         |   18 
 src/main/java/org/jeecg/modules/eam/constant/AssetStatusEnum.java                                |   12 
 src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java                     |   23 
 src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java                 |  206 +
 src/main/java/org/jeecg/modules/eam/service/impl/EamProcessParametersServiceImpl.java            |   18 
 src/main/java/org/jeecg/modules/eam/tree/FindsEquipmentProductionUtil.java                       |   79 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentHistoryLogMapper.xml                  |    5 
 src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderMapper.java                         |   38 
 src/main/java/org/jeecg/modules/eam/constant/MaintenanceStandardStatusEnum.java                  |    9 
 src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrderDetail.java                        |   76 
 src/main/java/org/jeecg/modules/eam/service/IEamProcessParametersService.java                    |   14 
 src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java                  |  563 ++
 src/main/java/org/jeecg/modules/eam/aspect/annotation/EquipmentHistoryLog.java                   |   26 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml                      |   56 
 src/main/java/org/jeecg/modules/eam/constant/InspectionStatus.java                               |   13 
 src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentHistoryLogMapper.java                     |   14 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentPrecisionParametersMapper.xml         |   12 
 src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentProcessParametersServiceImpl.java   |   42 
 src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentAttachmentMapper.java                     |   14 
 src/main/java/org/jeecg/modules/eam/request/EamInspectionBatchApprovalRequest.java               |   26 
 src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java                     |   25 
 src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderDetailServiceImpl.java       |   28 
 src/main/java/org/jeecg/modules/eam/service/IEamEquipmentAttachmentService.java                  |   30 
 src/main/java/org/jeecg/modules/eam/controller/EamPrecisionParametersController.java             |  165 
 src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardDetailMapper.java               |   14 
 src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderQuery.java                         |   23 
 src/main/java/org/jeecg/modules/eam/service/impl/EamSysFilesServiceImpl.java                     |   71 
 src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java                             |   28 
 src/main/java/org/jeecg/modules/eam/mapper/EamSysFilesMapper.java                                |   14 
 src/main/java/org/jeecg/modules/eam/request/EamEquipmentQuery.java                               |   19 
 src/main/java/org/jeecg/modules/eam/request/EamSysFilesRequest.java                              |   30 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderDetailMapper.xml                |    5 
 src/main/java/org/jeecg/modules/eam/mapper/EamProcessParametersMapper.java                       |   14 
 src/main/java/org/jeecg/modules/eam/request/EamMaintenanceQuery.java                             |   23 
 src/main/java/org/jeecg/modules/eam/constant/MaintenanceStatusEnum.java                          |   23 
 src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderDetailServiceImpl.java        |   28 
 src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentProcessParametersMapper.java              |   26 
 src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java                                   |  194 
 src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java                   |   74 
 src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java                             |   28 
 src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java                          |   47 
 src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java                              |   37 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml                         |   11 
 src/main/java/org/jeecg/modules/eam/controller/EamEquipmentProcessParametersController.java      |  118 
 src/main/java/org/jeecg/modules/eam/controller/EamEquipmentPrecisionParametersController.java    |  157 
 src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java                        |  128 
 src/main/java/org/jeecg/modules/eam/entity/EamPrecisionParameters.java                           |   61 
 src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderRequest.java                       |  116 
 src/main/java/org/jeecg/modules/eam/entity/EamSysFiles.java                                      |   75 
 src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionParametersMapper.java                     |   14 
 src/main/java/org/jeecg/modules/eam/request/EamEquipmentAttachmentRequest.java                   |   33 
 src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentHistoryLogServiceImpl.java          |   18 
 src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderDetailMapper.java                  |   14 
 src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionParametersMapper.xml                  |    5 
 148 files changed, 12,246 insertions(+), 0 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java b/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java
new file mode 100644
index 0000000..7993bf3
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java
@@ -0,0 +1,128 @@
+package org.jeecg.modules.eam.aspect;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+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.service.IEamEquipmentHistoryLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+/**
+ * 璁惧灞ュ巻 鍒囬潰瀹炵幇
+ */
+@Aspect
+@Component
+@Slf4j
+public class EquipmentHistoryLogAspect {
+
+    @Autowired
+    private IEamEquipmentHistoryLogService equipmentHistoryLogService;
+
+    @Pointcut("@annotation(org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog)")
+    public void logPointCut() {
+
+    }
+
+    // 鐜粫閫氱煡锛氳绠楁墽琛屾椂闂�
+    @Around("logPointCut()")
+    public Object logMethodExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
+        long start_time = System.currentTimeMillis();
+        Object result = joinPoint.proceed();
+        long end_time = System.currentTimeMillis();
+        saveLog(joinPoint, result);
+        log.info("[璇锋眰鑰楁椂:{}ms]", end_time - start_time);
+        return result;
+    }
+
+    private void saveLog(JoinPoint joinPoint, Object result) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        EamEquipmentHistoryLog log = new EamEquipmentHistoryLog();
+
+        EquipmentHistoryLog syslog = method.getAnnotation(EquipmentHistoryLog.class);
+
+        if (syslog != null) {
+            log.setBusinessTable(syslog.businessTable());
+            log.setOperationTag(syslog.operationTag().name());
+            convertResult(log, syslog.operationTag(), result);
+            if (StringUtils.isNotBlank(log.getEquipmentId())) {
+                equipmentHistoryLogService.save(log);
+            }
+        }
+    }
+
+
+    private void convertResult(EamEquipmentHistoryLog log, EquipmentOperationTagEnum operationTag, Object result) {
+        switch (operationTag) {
+            case ACCEPTANCE:
+                if (result instanceof EamEquipment) {
+                    EamEquipment equipment = (EamEquipment) result;
+                    log.setEquipmentId(equipment.getId());
+                    log.setBusinessId(equipment.getId());
+                    log.setOperator(equipment.getCreateBy());
+                    log.setDescription(equipment.getRemark());
+                    log.setCreateTime(equipment.getAcceptanceCheckDate());
+                }
+                break;
+            case POINT_INSPECTION:
+                if (result instanceof EamInspectionOrder) {
+                    EamInspectionOrder order = (EamInspectionOrder) result;
+                    if (InspectionStatus.COMPLETE.name().equals(order.getInspectionStatus())) {
+                        log.setEquipmentId(order.getEquipmentId());
+                        log.setBusinessId(order.getId());
+                        log.setOperator(order.getOperator());
+                        log.setDescription(order.getConfirmComment());
+                        log.setCreateTime(order.getOperateTime());
+                    }
+                }
+                break;
+            case MAINTENANCE:
+                if (result instanceof EamMaintenanceOrder) {
+                    EamMaintenanceOrder order = (EamMaintenanceOrder) result;
+                    if (MaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) {
+                        log.setEquipmentId(order.getEquipmentId());
+                        log.setBusinessId(order.getId());
+                        log.setOperator(order.getOperator());
+                        log.setDescription(order.getFinalAcceptanceComment());
+                        log.setCreateTime(order.getActualEndTime());
+                    }
+                }
+                break;
+            case REPORT_REPAIR:
+                if (result instanceof EamReportRepair) {
+                    EamReportRepair repair = (EamReportRepair) result;
+                    log.setEquipmentId(repair.getEquipmentId());
+                    log.setBusinessId(repair.getId());
+                    log.setOperator(repair.getCreateBy());
+                    log.setDescription(repair.getFaultDescription());
+                    log.setCreateTime(repair.getFaultStartTime());
+                }
+                break;
+            case REPAIRED:
+                if (result instanceof EamRepairOrder) {
+                    EamRepairOrder order = (EamRepairOrder) result;
+                    if (ReportRepairEnum.COMPLETE.name().equals(order.getRepairStatus())) {
+                        log.setEquipmentId(order.getEquipmentId());
+                        log.setBusinessId(order.getId());
+                        log.setOperator(order.getRepairer());
+                        log.setDescription(order.getRepairDescription());
+                        log.setCreateTime(order.getActualEndTime());
+                    }
+                }
+                break;
+            default:
+                break;
+        }
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/aspect/annotation/EquipmentHistoryLog.java b/src/main/java/org/jeecg/modules/eam/aspect/annotation/EquipmentHistoryLog.java
new file mode 100644
index 0000000..b0c91d2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/aspect/annotation/EquipmentHistoryLog.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.eam.aspect.annotation;
+
+import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
+
+import java.lang.annotation.*;
+
+/**
+ * 璁惧灞ュ巻娉ㄨВ
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface EquipmentHistoryLog {
+
+    /**
+     * 鎿嶄綔鏍囩 鏋氫妇
+     * @return
+     */
+    EquipmentOperationTagEnum operationTag() default EquipmentOperationTagEnum.OTHER;
+
+    /**
+     * 娑夊強鐨勪笟鍔′富琛�
+     * @return
+     */
+    String businessTable() default "";
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/AssetStatusEnum.java b/src/main/java/org/jeecg/modules/eam/constant/AssetStatusEnum.java
new file mode 100644
index 0000000..9757f93
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/AssetStatusEnum.java
@@ -0,0 +1,12 @@
+package org.jeecg.modules.eam.constant;
+
+/**
+ * 璧勪骇鐘舵��
+ */
+public enum AssetStatusEnum {
+    NORMAL, //姝e父
+    LEAN_OUT, //鍊熷嚭
+    SEAL_UP, //灏佸瓨
+    DEALT, //杞
+    SCRAP; //鎶ュ簾
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java b/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java
new file mode 100644
index 0000000..c03d5e4
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java
@@ -0,0 +1,37 @@
+package org.jeecg.modules.eam.constant;
+
+public interface BusinessCodeConst {
+    //绮惧害鍙傛暟缂栫爜瑙勫垯
+    String PRECISION_PARAMETERS_RULE = "PrecisionParametersRule";
+    //宸ヨ壓鍙傛暟缂栫爜瑙勫垯
+    String PROCESS_PARAMETERS_RULE = "ProcessParametersRule";
+    //璁惧鏁呴殰鍘熷洜缂栫爜瑙勫垯
+    String EQUIPMENT_FAULT_REASON_RULE = "EquipmentFaultReasonRule";
+    //淇濆吇鏍囧噯缂栫爜瑙勫垯
+    String MAINTENANCE_STANDARD_CODE_RULE = "MaintenanceStandardCodeRule";
+    //鐐规宸ュ崟缂栫爜瑙勫垯
+    String INSPECTION_ORDER_CODE_RULE = "EamInspectionOrder";
+    //淇濆吇缂栫爜瑙勫垯
+    String MAINTENANCE_CODE_RULE = "MaintenanceCodeRule";
+    // 缁翠慨宸ュ崟缂栫爜瑙勫垯
+    String REPAIR_ORDER_CODE_RULE = "RepairOrderCodeRule";
+
+    /**
+     * 宀椾綅缂栫爜
+     */
+    //鎿嶄綔宸�
+    String PCR0001 = "PCR0001";
+    //缁翠慨宸�
+    String PCR0002 = "PCR0002";
+    //鐝粍闀�
+    String PCR0003 = "PCR0003";
+    //璁惧绠$悊鍛�
+    String PCR0004 = "PCR0004";
+    //璁惧鑳芥簮閮�
+    String PCR0005 = "PCR0005";
+    //鏈哄姩鍔炵鐞嗗憳
+    String PCR0006 = "PCR0006";
+    //澶囦欢绠$悊鍛�
+    String PCR0007 = "PCR0007";
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/EquipmentMaintenanceStatus.java b/src/main/java/org/jeecg/modules/eam/constant/EquipmentMaintenanceStatus.java
new file mode 100644
index 0000000..e7ad64c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/EquipmentMaintenanceStatus.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.eam.constant;
+
+/**
+ * 淇濆吇鐘舵��
+ */
+public enum EquipmentMaintenanceStatus {
+    NORMAL,
+    UNDER_INSPECTION, //鐐规涓�
+    INSPECTION_CONFIRM, //鐐规纭涓�
+    UNDER_MAINTENANCE, //淇濆吇涓�
+    MAINTENANCE_WAIT_CONFIRM, //淇濆吇纭涓�
+    ;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/EquipmentOperationTagEnum.java b/src/main/java/org/jeecg/modules/eam/constant/EquipmentOperationTagEnum.java
new file mode 100644
index 0000000..07615af
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/EquipmentOperationTagEnum.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.constant;
+
+/**
+ * 璁惧灞ュ巻
+ */
+public enum EquipmentOperationTagEnum {
+    ACCEPTANCE, //楠屾敹
+    POINT_INSPECTION,  //鐐规
+    MAINTENANCE, //淇濆吇
+    REPORT_REPAIR,  //鎶ヤ慨
+    REPAIRED,  //缁翠慨
+    OTHER, //鍏跺畠
+    ;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/EquipmentRepairStatus.java b/src/main/java/org/jeecg/modules/eam/constant/EquipmentRepairStatus.java
new file mode 100644
index 0000000..eb9be4f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/EquipmentRepairStatus.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.eam.constant;
+
+/**
+ * 缁翠慨鐘舵��
+ */
+public enum EquipmentRepairStatus {
+    NORMAL,
+    WAIT_REPAIR,
+    UNDER_REPAIR,
+    WAIT_CONFIRM,
+    MAJOR_REPAIR,
+    PARTIAL_REPAIR,;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/InspectionStatus.java b/src/main/java/org/jeecg/modules/eam/constant/InspectionStatus.java
new file mode 100644
index 0000000..5c8be10
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/InspectionStatus.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.eam.constant;
+
+import lombok.Getter;
+
+@Getter
+public enum InspectionStatus {
+    WAIT_INSPECTION, //寰呯偣妫�
+    UNDER_INSPECTION, //鐐规涓�
+    WAIT_CONFIRM, //寰呯‘璁�
+    COMPLETE, //宸插畬鎴�
+    ABOLISH, //宸蹭綔搴�
+    EXPIRED; //宸茶繃鏈�
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/MaintenanceCategoryEnum.java b/src/main/java/org/jeecg/modules/eam/constant/MaintenanceCategoryEnum.java
new file mode 100644
index 0000000..0e7ac28
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/MaintenanceCategoryEnum.java
@@ -0,0 +1,10 @@
+package org.jeecg.modules.eam.constant;
+
+/**
+ * 淇濆吇鍒嗙被
+ */
+public enum MaintenanceCategoryEnum {
+    POINT_INSPECTION, //鐐规
+    WEEK_MAINTENANCE, //淇濆吇
+    ;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStandardStatusEnum.java b/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStandardStatusEnum.java
new file mode 100644
index 0000000..709577c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStandardStatusEnum.java
@@ -0,0 +1,9 @@
+package org.jeecg.modules.eam.constant;
+
+/**
+ * 淇濆吇鏍囧噯鐘舵��
+ */
+public enum MaintenanceStandardStatusEnum {
+    NORMAL,
+    ABOLISH,;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStatusEnum.java b/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStatusEnum.java
new file mode 100644
index 0000000..1aaf85c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStatusEnum.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.constant;
+
+public enum MaintenanceStatusEnum {
+    WAIT_MAINTENANCE, //寰呬繚鍏�
+    UNDER_MAINTENANCE, //淇濆吇涓�
+    WAIT_CONFIRM, //寰呯‘璁�
+    WAIT_INITIAL_ACCEPTANCE, // 寰呭垵楠�
+    WAIT_FINAL_ACCEPTANCE, //寰呯粓楠�
+    COMPLETE,  //宸插畬鎴�
+    ABOLISH, //宸蹭綔搴�
+    EXPIRED, //宸茶繃鏈�
+    ;
+
+    public static MaintenanceStatusEnum getInstance(String code) {
+        MaintenanceStatusEnum[] values = MaintenanceStatusEnum.values();
+        for (MaintenanceStatusEnum value : values) {
+            if (value.name().equals(code)) {
+                return value;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/OrderCreationMethodEnum.java b/src/main/java/org/jeecg/modules/eam/constant/OrderCreationMethodEnum.java
new file mode 100644
index 0000000..8c6fe17
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/OrderCreationMethodEnum.java
@@ -0,0 +1,7 @@
+package org.jeecg.modules.eam.constant;
+
+public enum OrderCreationMethodEnum {
+    AUTO, //鑷姩 绯荤粺鐢熸垚
+    MANUAL, //鎵嬪姩
+    ;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/constant/ReportRepairEnum.java b/src/main/java/org/jeecg/modules/eam/constant/ReportRepairEnum.java
new file mode 100644
index 0000000..38583f3
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/constant/ReportRepairEnum.java
@@ -0,0 +1,25 @@
+package org.jeecg.modules.eam.constant;
+
+public enum ReportRepairEnum {
+    WAIT_REPAIR, // 寰呯淮淇�
+    WAIT_INTERNAL_CONFIRM, // 寰呯淮淇‘璁�
+    UNDER_INTERNAL_REPAIR, // 鍐呴儴缁翠慨涓�
+    WAIT_LEADER_CONFIRM, // 寰呴瀵肩‘璁� 璁惧绠$悊鍛�
+    WAIT_EXTERNAL_CONFIRM, // 寰呮満鍔ㄥ姙纭
+    UNDER_EXTERNAL_REPAIR, // 鏈哄姩鍔炵淮淇腑
+    UNDER_OUTSIDE_REPAIR, // 濮斿缁翠慨涓� 璐d换浜烘槸璋侊紵
+    WAIT_CONFIRM, // 鎿嶄綔宸ュ緟纭
+    COMPLETE, // 宸插畬鎴�
+    ABOLISH, // 宸蹭綔搴�
+    ;
+
+    public static ReportRepairEnum getInstance(String code) {
+        ReportRepairEnum[] values = ReportRepairEnum.values();
+        for (ReportRepairEnum value : values) {
+            if (value.name().equals(code)) {
+                return value;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentAttachmentController.java b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentAttachmentController.java
new file mode 100644
index 0000000..ff07e24
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentAttachmentController.java
@@ -0,0 +1,157 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.eam.entity.EamEquipmentAttachment;
+import org.jeecg.modules.eam.request.EamEquipmentAttachmentRequest;
+import org.jeecg.modules.eam.service.IEamEquipmentAttachmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 璁惧鏂囨。鍙拌处浣跨敤
+ * @Author: jeecg-boot
+ * @Date:   2025-04-16
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="璁惧鏂囨。鍙拌处浣跨敤")
+@RestController
+@RequestMapping("/eam/equipmentAttachment")
+public class EamEquipmentAttachmentController extends JeecgController<EamEquipmentAttachment, IEamEquipmentAttachmentService> {
+	@Autowired
+	private IEamEquipmentAttachmentService eamEquipmentAttachmentService;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param eamEquipmentAttachment
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "璁惧鏂囨。鍙拌处浣跨敤-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="璁惧鏂囨。鍙拌处浣跨敤-鍒嗛〉鍒楄〃鏌ヨ", notes="璁惧鏂囨。鍙拌处浣跨敤-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(EamEquipmentAttachment eamEquipmentAttachment,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		Page<EamEquipmentAttachment> page = new Page<>(pageNo, pageSize);
+		if(StringUtils.isBlank(eamEquipmentAttachment.getEquipmentId())) {
+			return Result.OK(page);
+		}
+		//鍙繚鐣欒澶噄d
+		EamEquipmentAttachment query = new EamEquipmentAttachment();
+		query.setEquipmentId(eamEquipmentAttachment.getEquipmentId());
+		QueryWrapper<EamEquipmentAttachment> queryWrapper = QueryGenerator.initQueryWrapper(eamEquipmentAttachment, req.getParameterMap());
+		queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+		IPage<EamEquipmentAttachment> pageList = eamEquipmentAttachmentService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 * 娣诲姞
+	 *
+	 * @param request
+	 * @return
+	 */
+	@AutoLog(value = "璁惧鏂囨。鍙拌处浣跨敤-娣诲姞")
+	@ApiOperation(value="璁惧鏂囨。鍙拌处浣跨敤-娣诲姞", notes="璁惧鏂囨。鍙拌处浣跨敤-娣诲姞")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody EamEquipmentAttachmentRequest request) {
+		boolean b = eamEquipmentAttachmentService.saveEntity(request);
+		if(!b) {
+			return Result.OK("鎿嶄綔澶辫触锛�");
+		}
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 * 缂栬緫
+	 *
+	 * @param eamEquipmentAttachment
+	 * @return
+	 */
+	@AutoLog(value = "璁惧鏂囨。鍙拌处浣跨敤-缂栬緫")
+	@ApiOperation(value="璁惧鏂囨。鍙拌处浣跨敤-缂栬緫", notes="璁惧鏂囨。鍙拌处浣跨敤-缂栬緫")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<?> edit(@RequestBody EamEquipmentAttachment eamEquipmentAttachment) {
+		eamEquipmentAttachmentService.updateById(eamEquipmentAttachment);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "璁惧鏂囨。鍙拌处浣跨敤-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="璁惧鏂囨。鍙拌处浣跨敤-閫氳繃id鍒犻櫎", notes="璁惧鏂囨。鍙拌处浣跨敤-閫氳繃id鍒犻櫎")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		EamEquipmentAttachment entity = eamEquipmentAttachmentService.getById(id);
+		if(entity != null) {
+			entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+			eamEquipmentAttachmentService.updateById(entity);
+		}
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "璁惧鏂囨。鍙拌处浣跨敤-鎵归噺鍒犻櫎")
+	@ApiOperation(value="璁惧鏂囨。鍙拌处浣跨敤-鎵归噺鍒犻櫎", notes="璁惧鏂囨。鍙拌处浣跨敤-鎵归噺鍒犻櫎")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		List<String> list = Arrays.asList(ids.split(","));
+		list.forEach(id -> {
+			EamEquipmentAttachment entity = eamEquipmentAttachmentService.getById(id);
+			if(entity != null) {
+				entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+				eamEquipmentAttachmentService.updateById(entity);
+			}
+		});
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "璁惧鏂囨。鍙拌处浣跨敤-閫氳繃id鏌ヨ")
+	@ApiOperation(value="璁惧鏂囨。鍙拌处浣跨敤-閫氳繃id鏌ヨ", notes="璁惧鏂囨。鍙拌处浣跨敤-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		EamEquipmentAttachment eamEquipmentAttachment = eamEquipmentAttachmentService.getById(id);
+		return Result.OK(eamEquipmentAttachment);
+	}
+
+	 @GetMapping("/downloadFile")
+	 public void downloadFile(@RequestParam("id") String id, HttpServletResponse response) {
+		 eamEquipmentAttachmentService.downloadFile(response, eamEquipmentAttachmentService.getById(id));
+	 }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java
new file mode 100644
index 0000000..4583f8f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java
@@ -0,0 +1,338 @@
+package org.jeecg.modules.eam.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamEquipmentExtend;
+import org.jeecg.modules.eam.request.EamEquipmentQuery;
+import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.jeecg.modules.eam.vo.EquipmentSearchResult;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 璁惧鍙拌处
+ * @Author: jeecg-boot
+ * @Date: 2025-03-19
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "璁惧鍙拌处")
+@RestController
+@RequestMapping("/eam/equipment")
+public class EamEquipmentController extends JeecgController<EamEquipment, IEamEquipmentService> {
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+
+    @Autowired
+    private IEamEquipmentExtendService eamEquipmentExtendService;
+
+//    @Autowired
+//    private IMdcEquipmentService mdcEquipmentService;
+
+    @Autowired
+    private ObjectMapper objectMapper;
+    @Autowired
+    private TranslateDictTextUtils translateDictTextUtils;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param eamEquipment
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+//    @AutoLog(value = "璁惧鍙拌处-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "璁惧鍙拌处-鍒嗛〉鍒楄〃鏌ヨ", notes = "璁惧鍙拌处-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(EamEquipmentQuery eamEquipment,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+//        QueryWrapper<EamEquipment> queryWrapper = QueryGenerator.initQueryWrapper(eamEquipment, req.getParameterMap());
+        IPage<EamEquipment> page = new Page<>(pageNo, pageSize);
+        IPage<EamEquipment> pageList = eamEquipmentService.queryPageList(page, eamEquipment);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param eamEquipment
+     * @return
+     */
+//    @AutoLog(value = "璁惧鍙拌处-娣诲姞")
+    @ApiOperation(value = "璁惧鍙拌处-娣诲姞", notes = "璁惧鍙拌处-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody EamEquipment eamEquipment) {
+        EamEquipment entity = eamEquipmentService.saveEquipment(eamEquipment);
+        if (entity == null) {
+            return Result.OK("娣诲姞澶辫触锛�");
+        }
+        //璋冪敤mdcEquipment鎻掑叆MDC璁惧
+//        if (CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) {
+//            //鎻掑叆MDC璁惧
+//            MdcEquipment mdcEquipment = new MdcEquipment();
+//            mdcEquipment.setEquipmentId(entity.getEquipmentCode());
+//            mdcEquipment.setEquipmentType(entity.getDeviceType());
+//            mdcEquipment.setEquipmentName(entity.getEquipmentName());
+//            mdcEquipmentService.addNewEquipmentFromEam(mdcEquipment, eamEquipment.getOrgId());
+//        }
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param eamEquipment
+     * @return
+     */
+    @ApiOperation(value = "璁惧鍙拌处-缂栬緫", notes = "璁惧鍙拌处-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody EamEquipment eamEquipment) {
+        eamEquipmentService.updateById(eamEquipment);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "璁惧鍙拌处-閫氳繃id鍒犻櫎", notes = "璁惧鍙拌处-閫氳繃id鍒犻櫎")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        EamEquipment entity = eamEquipmentService.getById(id);
+        if (entity != null) {
+            entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+            eamEquipmentService.updateById(entity);
+        }
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "璁惧鍙拌处-鎵归噺鍒犻櫎", notes = "璁惧鍙拌处-鎵归噺鍒犻櫎")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        List<String> list = Arrays.asList(ids.split(","));
+        list.forEach(id -> {
+            EamEquipment entity = eamEquipmentService.getById(id);
+            if (entity != null) {
+                entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+                eamEquipmentService.updateById(entity);
+            }
+        });
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "璁惧鍙拌处-閫氳繃id鏌ヨ", notes = "璁惧鍙拌处-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        EamEquipment eamEquipment = eamEquipmentService.getById(id);
+        if (eamEquipment == null) {
+            return Result.error("鏈壘鍒板搴旀暟鎹�");
+        }
+        EamEquipmentExtend extend = eamEquipmentExtendService.getById(id);
+        if(extend != null){
+            eamEquipment.setRepairStatus(extend.getRepairStatus());
+            eamEquipment.setMaintenanceStatus(extend.getMaintenanceStatus());
+        }
+        try {
+            String json = objectMapper.writeValueAsString(eamEquipment);
+            JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
+            translateDictTextUtils.translateField("createBy", eamEquipment.getCreateBy(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("updateBy", eamEquipment.getUpdateBy(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("technologyStatus", eamEquipment.getTechnologyStatus(), item, "technology_status");
+            translateDictTextUtils.translateField("orgId", eamEquipment.getOrgId(), item, "mdc_production,production_name,id");
+            translateDictTextUtils.translateField("equipmentManager", eamEquipment.getEquipmentManager(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("equipmentCategory", eamEquipment.getEquipmentCategory(), item, "equipment_category");
+            translateDictTextUtils.translateField("assetStatus", eamEquipment.getAssetStatus(), item, "asset_status");
+            translateDictTextUtils.translateField("repairStatus", eamEquipment.getRepairStatus(), item, "equipment_repair_status");
+            translateDictTextUtils.translateField("maintenanceStatus", eamEquipment.getMaintenanceStatus(), item, "equipment_maintenance_status");
+            return Result.OK(item);
+        } catch (JsonProcessingException e) {
+            return Result.error("鏁版嵁杞瘧澶辫触锛�");
+        }
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param eamEquipment
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EamEquipment eamEquipment) {
+        return super.exportXls(request, eamEquipment, EamEquipment.class, "璁惧鍙拌处");
+    }
+
+    /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 鑾峰彇涓婁紶鏂囦欢瀵硅薄
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(0);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            params.setStartSheetIndex(0);
+            params.setSheetNum(1);
+            try {
+                List<EamEquipment> list = ExcelImportUtil.importExcel(file.getInputStream(), EamEquipment.class, params);
+                //update-begin-author:taoyan date:20190528 for:鎵归噺鎻掑叆鏁版嵁
+                long start = System.currentTimeMillis();
+//                service.saveBatch(list);
+                StringBuilder sb = new StringBuilder();
+                for (EamEquipment eamEquipment : list) {
+                    //蹇呭~瀛楁鏍¢獙
+                    if (StringUtils.isBlank(eamEquipment.getEquipmentCode()) || StringUtils.isBlank(eamEquipment.getEquipmentName())) {
+                        sb.append(String.format("璁惧缂栫爜[%s]鎴栬澶囧悕绉癧%s]涓虹┖锛屾棤娉曞鍏n\n", eamEquipment.getEquipmentCode(), eamEquipment.getEquipmentName()));
+                        continue;
+                    }
+                    if (StringUtils.isBlank(eamEquipment.getEquipmentCategory())) {
+                        sb.append(String.format("璁惧缂栫爜[%s]璁惧鍒嗙被涓虹┖锛屾棤娉曞鍏n\n", eamEquipment.getEquipmentCode()));
+                        continue;
+                    }
+                    if (StringUtils.isBlank(eamEquipment.getOrgId()) || StringUtils.isBlank(eamEquipment.getEquipmentManager())) {
+                        sb.append(String.format("璁惧缂栫爜[%s]浣跨敤杞﹂棿鎴栬澶囩鐞嗗憳涓虹┖锛屾棤娉曞鍏n\n", eamEquipment.getEquipmentCode()));
+                        continue;
+                    }
+//                    if (eamEquipment.getAcceptanceCheckDate() == null) {
+//                        sb.append(String.format("璁惧缂栫爜[%s]楠屾敹涓虹┖锛屾棤娉曞鍏n\r", eamEquipment.getEquipmentCode()));
+//                        continue;
+//                    }
+//                    if (StringUtils.isBlank(eamEquipment.getTechnologyStatus())) {
+//                        sb.append(String.format("璁惧缂栫爜[%s]鎶�鏈姸鎬佷负绌猴紝鏃犳硶瀵煎叆\n\r", eamEquipment.getEquipmentCode()));
+//                        continue;
+//                    }
+                    EamEquipment one = eamEquipmentService.getOne(new LambdaQueryWrapper<EamEquipment>().eq(EamEquipment::getEquipmentCode, eamEquipment.getEquipmentCode()).eq(EamEquipment::getDelFlag, CommonConstant.DEL_FLAG_0));
+                    if (one != null) {
+                        sb.append(String.format("璁惧缂栫爜[%s]宸插瓨鍦紝鏃犳硶閲嶅瀵煎叆\n\r", eamEquipment.getEquipmentCode()));
+                        continue;
+                    }
+                    if (!CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) {
+                        eamEquipment.setMdcFlag(CommonConstant.DEFAULT_0);
+                    }
+                    EamEquipment equipment = eamEquipmentService.saveEquipment(eamEquipment);
+                    if (equipment == null) {
+                        //淇濆瓨澶辫触锛岃烦杩囨湰娆″惊鐜�
+                        sb.append(String.format("璁惧缂栫爜[%s]淇濆瓨澶辫触锛屾棤娉曞鍏n\r", eamEquipment.getEquipmentCode()));
+                        continue;
+                    }
+                    //璋冪敤mdcEquipment鎻掑叆MDC璁惧
+//                    if (CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) {
+//                        //鎻掑叆MDC璁惧
+//                        MdcEquipment mdcEquipment = new MdcEquipment();
+//                        mdcEquipment.setEquipmentId(eamEquipment.getEquipmentCode());
+//                        mdcEquipment.setEquipmentType(eamEquipment.getDeviceType());
+//                        mdcEquipment.setEquipmentName(eamEquipment.getEquipmentName());
+//                        mdcEquipmentService.addNewEquipmentFromEam(mdcEquipment, eamEquipment.getOrgId());
+//                    }
+                }
+                //400鏉� saveBatch娑堣�楁椂闂�1592姣  寰幆鎻掑叆娑堣�楁椂闂�1947姣
+                //1200鏉�  saveBatch娑堣�楁椂闂�3687姣 寰幆鎻掑叆娑堣�楁椂闂�5212姣
+                log.info("娑堣�楁椂闂�" + (System.currentTimeMillis() - start) + "姣");
+                //update-end-author:taoyan date:20190528 for:鎵归噺鎻掑叆鏁版嵁
+                if (sb.length() > 0) {
+                    return Result.ok(sb.toString());
+                }
+                return Result.ok("鏂囦欢瀵煎叆鎴愬姛锛佹暟鎹鏁帮細" + list.size());
+            } catch (Exception e) {
+                //update-begin-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず
+                String msg = e.getMessage();
+                log.error(msg, e);
+                if (msg != null && msg.indexOf("Duplicate entry") >= 0) {
+                    return Result.error("鏂囦欢瀵煎叆澶辫触:鏈夐噸澶嶆暟鎹紒");
+                } else {
+                    return Result.error("鏂囦欢瀵煎叆澶辫触:" + e.getMessage());
+                }
+                //update-end-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.error("鏂囦欢瀵煎叆澶辫触锛�");
+    }
+
+//    @ApiOperation(value = "璁惧琛�-閫氳繃杞﹂棿ids鑾峰彇璁惧鏍�", notes = "璁惧琛�-閫氳繃杞﹂棿ids鑾峰彇璁惧鏍�")
+//    @GetMapping(value = "/loadTreeListByProductionIds")
+//    public Result<List<EamEquipmentTree>> loadTreeListByProductionIds(@RequestParam(name = "ids", required = true) String ids) {
+//        Result<List<EamEquipmentTree>> result = new Result<>();
+//        try {
+//            List<EamEquipmentTree> mdcEquipmentTreeList = eamEquipmentService.loadTreeListByProductionIds(ids);
+//            result.setSuccess(true);
+//            result.setResult(mdcEquipmentTreeList);
+//        } catch (Exception e) {
+//            log.error(e.getMessage(), e);
+//        }
+//        return result;
+//    }
+
+    /**
+     * 妫�绱㈣澶�
+     * @param keyword 鏌ヨ鍏抽敭璇� 璁惧缂栧彿锛岃澶囧悕绉版ā绯婂尮閰�
+     * @param pageSize 涓�娆¤繑鍥炲灏戣褰�
+     * @param id 璁惧涓婚敭
+     * @return
+     */
+    @ApiOperation(value = "璁惧琛�-寮傛鍔犺浇璁惧鍒楄〃", notes = "璁惧琛�-寮傛鍔犺浇璁惧鍒楄〃")
+    @GetMapping(value = "/asyncLoadEquipment")
+    public Result<?> asyncLoadEquipment(@RequestParam(name="keyword",required = false) String keyword,
+                                        @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize,
+                                        @RequestParam(name="id",required = false) String id) {
+        List<EquipmentSearchResult> resultList = eamEquipmentService.asyncLoadEquipment(keyword, pageSize, id);
+        return Result.ok(resultList);
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentFaultReasonController.java b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentFaultReasonController.java
new file mode 100644
index 0000000..40435d0
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentFaultReasonController.java
@@ -0,0 +1,160 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.entity.EamEquipmentFaultReason;
+import org.jeecg.modules.eam.service.IEamEquipmentFaultReasonService;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 璁惧鏁呴殰鍘熷洜缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="璁惧鏁呴殰鍘熷洜缁存姢")
+@RestController
+@RequestMapping("/eam/equipmentFaultReason")
+public class EamEquipmentFaultReasonController extends JeecgController<EamEquipmentFaultReason, IEamEquipmentFaultReasonService> {
+	@Autowired
+	private IEamEquipmentFaultReasonService eamEquipmentFaultReasonService;
+
+	@Autowired
+	private ISysBusinessCodeRuleService businessCodeRuleService;
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param eamEquipmentFaultReason
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@ApiOperation(value="璁惧鏁呴殰鍘熷洜缁存姢-鍒嗛〉鍒楄〃鏌ヨ", notes="璁惧鏁呴殰鍘熷洜缁存姢-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(EamEquipmentFaultReason eamEquipmentFaultReason,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<EamEquipmentFaultReason> queryWrapper = QueryGenerator.initQueryWrapper(eamEquipmentFaultReason, req.getParameterMap());
+		queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+		Page<EamEquipmentFaultReason> page = new Page<EamEquipmentFaultReason>(pageNo, pageSize);
+		IPage<EamEquipmentFaultReason> pageList = eamEquipmentFaultReasonService.page(page, queryWrapper);
+		List<EamEquipmentFaultReason> records = pageList.getRecords();
+		records.forEach(r ->{
+			r.setText(r.getFaultName());
+			r.setValue(r.getId());
+		});
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 * 娣诲姞
+	 *
+	 * @param eamEquipmentFaultReason
+	 * @return
+	 */
+	@ApiOperation(value="璁惧鏁呴殰鍘熷洜缁存姢-娣诲姞", notes="璁惧鏁呴殰鍘熷洜缁存姢-娣诲姞")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody EamEquipmentFaultReason eamEquipmentFaultReason) {
+		String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.EQUIPMENT_FAULT_REASON_RULE);
+		eamEquipmentFaultReason.setFaultCode(codeSeq);
+		eamEquipmentFaultReason.setDelFlag(CommonConstant.DEL_FLAG_0);
+		eamEquipmentFaultReasonService.save(eamEquipmentFaultReason);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 * 缂栬緫
+	 *
+	 * @param eamEquipmentFaultReason
+	 * @return
+	 */
+	@ApiOperation(value="璁惧鏁呴殰鍘熷洜缁存姢-缂栬緫", notes="璁惧鏁呴殰鍘熷洜缁存姢-缂栬緫")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<?> edit(@RequestBody EamEquipmentFaultReason eamEquipmentFaultReason) {
+		eamEquipmentFaultReasonService.updateById(eamEquipmentFaultReason);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="璁惧鏁呴殰鍘熷洜缁存姢-閫氳繃id鍒犻櫎", notes="璁惧鏁呴殰鍘熷洜缁存姢-閫氳繃id鍒犻櫎")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		eamEquipmentFaultReasonService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value="璁惧鏁呴殰鍘熷洜缁存姢-鎵归噺鍒犻櫎", notes="璁惧鏁呴殰鍘熷洜缁存姢-鎵归噺鍒犻櫎")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.eamEquipmentFaultReasonService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="璁惧鏁呴殰鍘熷洜缁存姢-閫氳繃id鏌ヨ", notes="璁惧鏁呴殰鍘熷洜缁存姢-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		EamEquipmentFaultReason eamEquipmentFaultReason = eamEquipmentFaultReasonService.getById(id);
+		return Result.OK(eamEquipmentFaultReason);
+	}
+
+  /**
+   * 瀵煎嚭excel
+   *
+   * @param request
+   * @param eamEquipmentFaultReason
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, EamEquipmentFaultReason eamEquipmentFaultReason) {
+      return super.exportXls(request, eamEquipmentFaultReason, EamEquipmentFaultReason.class, "璁惧鏁呴殰鍘熷洜缁存姢");
+  }
+
+  /**
+   * 閫氳繃excel瀵煎叆鏁版嵁
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      return super.importExcel(request, response, EamEquipmentFaultReason.class);
+  }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentHistoryLogController.java b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentHistoryLogController.java
new file mode 100644
index 0000000..80e00f6
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentHistoryLogController.java
@@ -0,0 +1,43 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.eam.entity.EamEquipmentHistoryLog;
+import org.jeecg.modules.eam.service.IEamEquipmentHistoryLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+/**
+ * @Description: 璁惧灞ュ巻
+ * @Author: jeecg-boot
+ * @Date: 2025-03-19
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "璁惧灞ュ巻")
+@RestController
+@RequestMapping("/eam/equipmentHistoryLog")
+public class EamEquipmentHistoryLogController extends JeecgController<EamEquipmentHistoryLog, IEamEquipmentHistoryLogService> {
+    @Autowired
+    private IEamEquipmentHistoryLogService eamEquipmentHistoryLogService;
+
+    @ApiOperation(value = "璁惧灞ュ巻-鑾峰彇璁惧鏈�鏂板饱鍘嗕俊鎭�", notes = "璁惧灞ュ巻-鑾峰彇璁惧鏈�鏂板饱鍘嗕俊鎭�")
+    @GetMapping(value = "/list")
+    public Result<?> selectEquipmentHistoryLog(@RequestParam("equipmentId") String equipmentId, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+		Page<EamEquipmentHistoryLog> page = new Page<>(pageNo, pageSize);
+		LambdaQueryWrapper<EamEquipmentHistoryLog> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(EamEquipmentHistoryLog::getEquipmentId, equipmentId);
+		queryWrapper.orderByDesc(EamEquipmentHistoryLog::getCreateTime);
+		Page<EamEquipmentHistoryLog> resultPage = eamEquipmentHistoryLogService.page(page, queryWrapper);
+		return Result.ok(resultPage);
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentPrecisionParametersController.java b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentPrecisionParametersController.java
new file mode 100644
index 0000000..b879e2f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentPrecisionParametersController.java
@@ -0,0 +1,157 @@
+package org.jeecg.modules.eam.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.eam.entity.EamEquipmentPrecisionParameters;
+import org.jeecg.modules.eam.service.IEamEquipmentPrecisionParametersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @Description: 璁惧绮惧害鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="璁惧绮惧害鍙傛暟")
+@RestController
+@RequestMapping("/eam/equipmentPrecisionParameters")
+public class EamEquipmentPrecisionParametersController extends JeecgController<EamEquipmentPrecisionParameters, IEamEquipmentPrecisionParametersService> {
+	@Autowired
+	private IEamEquipmentPrecisionParametersService eamEquipmentPrecisionParametersService;
+	@Autowired
+	private ObjectMapper objectMapper;
+	@Autowired
+	private TranslateDictTextUtils translateDictTextUtils;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "璁惧绮惧害鍙傛暟-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="璁惧绮惧害鍙傛暟-鍒嗛〉鍒楄〃鏌ヨ", notes="璁惧绮惧害鍙傛暟-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(String equipmentId,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		Page<EamEquipmentPrecisionParameters> page = new Page<EamEquipmentPrecisionParameters>(pageNo, pageSize);
+		IPage<EamEquipmentPrecisionParameters> pageList = eamEquipmentPrecisionParametersService.queryPageList(equipmentId, page);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 * 娣诲姞
+	 *
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "璁惧绮惧害鍙傛暟-娣诲姞")
+	@ApiOperation(value="璁惧绮惧害鍙傛暟-娣诲姞", notes="璁惧绮惧害鍙傛暟-娣诲姞")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody EamEquipmentPrecisionParameters req) {
+		EamEquipmentPrecisionParameters entity = eamEquipmentPrecisionParametersService.queryByEquipmentIdAndParameterId(req.getEquipmentId(), req.getParameterId());
+		if(entity != null){
+			return Result.error("鍙傛暟宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�");
+		}
+		eamEquipmentPrecisionParametersService.save(req);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 * 缂栬緫
+	 *
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "璁惧绮惧害鍙傛暟-缂栬緫")
+	@ApiOperation(value="璁惧绮惧害鍙傛暟-缂栬緫", notes="璁惧绮惧害鍙傛暟-缂栬緫")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<?> edit(@RequestBody EamEquipmentPrecisionParameters req) {
+		EamEquipmentPrecisionParameters entity = eamEquipmentPrecisionParametersService.getById(req.getId());
+		if(entity == null){
+			return Result.error("瑕佺紪杈戠殑鍙傛暟涓嶅瓨鍦紝璇峰埛鏂伴噸璇�!");
+		}
+		eamEquipmentPrecisionParametersService.updateById(req);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "璁惧绮惧害鍙傛暟-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="璁惧绮惧害鍙傛暟-閫氳繃id鍒犻櫎", notes="璁惧绮惧害鍙傛暟-閫氳繃id鍒犻櫎")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		eamEquipmentPrecisionParametersService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "璁惧绮惧害鍙傛暟-鎵归噺鍒犻櫎")
+	@ApiOperation(value="璁惧绮惧害鍙傛暟-鎵归噺鍒犻櫎", notes="璁惧绮惧害鍙傛暟-鎵归噺鍒犻櫎")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.eamEquipmentPrecisionParametersService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+	}
+
+
+	 /**
+	  * 鍒楄〃鏌ヨ
+	  *
+	  * @param equipmentId 璁惧ID
+	  * @return
+	  */
+	 @ApiOperation(value="璁惧绮惧害鍙傛暟-鍒楄〃鏌ヨ", notes="璁惧绮惧害鍙傛暟-鍒楄〃鏌ヨ")
+	 @GetMapping(value = "/queryList")
+	 public Result<?> queryList(@RequestParam(name="equipmentId") String equipmentId) {
+		 List<EamEquipmentPrecisionParameters> list = eamEquipmentPrecisionParametersService.queryList(equipmentId);
+		 if(CollectionUtil.isEmpty(list)) {
+			 return Result.OK(Collections.emptyList());
+		 }
+		 List<JSONObject> items = new ArrayList<>();
+		 try {
+			 for(EamEquipmentPrecisionParameters vo : list) {
+				 String json = objectMapper.writeValueAsString(vo);
+				 JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
+				 translateDictTextUtils.translateField("parameterId", vo.getParameterId(), item, "eam_precision_parameters,parameter_name,id");
+				 translateDictTextUtils.translateField("parameterCode", vo.getParameterId(), item, "eam_precision_parameters,parameter_code,id");
+				 items.add(item);
+			 }
+			 return Result.OK(items);
+		 }catch (Exception e) {
+			 return Result.error("鏁版嵁杞瘧澶辫触锛�");
+		 }
+	 }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentProcessParametersController.java b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentProcessParametersController.java
new file mode 100644
index 0000000..a2688aa
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentProcessParametersController.java
@@ -0,0 +1,118 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.eam.entity.EamEquipmentProcessParameters;
+import org.jeecg.modules.eam.service.IEamEquipmentProcessParametersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+ /**
+ * @Description: 璁惧宸ヨ壓鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="璁惧宸ヨ壓鍙傛暟")
+@RestController
+@RequestMapping("/eam/equipmentProcessParameters")
+public class EamEquipmentProcessParametersController extends JeecgController<EamEquipmentProcessParameters, IEamEquipmentProcessParametersService> {
+	@Autowired
+	private IEamEquipmentProcessParametersService eamEquipmentProcessParametersService;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param equipmentId
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "璁惧宸ヨ壓鍙傛暟-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="璁惧宸ヨ壓鍙傛暟-鍒嗛〉鍒楄〃鏌ヨ", notes="璁惧宸ヨ壓鍙傛暟-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(String equipmentId,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		Page<EamEquipmentProcessParameters> page = new Page<>(pageNo, pageSize);
+		IPage<EamEquipmentProcessParameters> pageList = eamEquipmentProcessParametersService.queryPageList(equipmentId, page);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 * 娣诲姞
+	 *
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "璁惧宸ヨ壓鍙傛暟-娣诲姞")
+	@ApiOperation(value="璁惧宸ヨ壓鍙傛暟-娣诲姞", notes="璁惧宸ヨ壓鍙傛暟-娣诲姞")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody EamEquipmentProcessParameters req) {
+		EamEquipmentProcessParameters entity = eamEquipmentProcessParametersService.queryByEquipmentIdAndParameterId(req.getEquipmentId(), req.getParameterId());
+		if(entity != null){
+			return Result.error("鍙傛暟宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�");
+		}
+		eamEquipmentProcessParametersService.save(req);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 * 缂栬緫
+	 *
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "璁惧宸ヨ壓鍙傛暟-缂栬緫")
+	@ApiOperation(value="璁惧宸ヨ壓鍙傛暟-缂栬緫", notes="璁惧宸ヨ壓鍙傛暟-缂栬緫")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<?> edit(@RequestBody EamEquipmentProcessParameters req) {
+		EamEquipmentProcessParameters entity = eamEquipmentProcessParametersService.getById(req.getId());
+		if(entity == null){
+			return Result.error("瑕佺紪杈戠殑鍙傛暟涓嶅瓨鍦紝璇峰埛鏂伴噸璇�!");
+		}
+		eamEquipmentProcessParametersService.updateById(req);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "璁惧宸ヨ壓鍙傛暟-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="璁惧宸ヨ壓鍙傛暟-閫氳繃id鍒犻櫎", notes="璁惧宸ヨ壓鍙傛暟-閫氳繃id鍒犻櫎")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		eamEquipmentProcessParametersService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "璁惧宸ヨ壓鍙傛暟-鎵归噺鍒犻櫎")
+	@ApiOperation(value="璁惧宸ヨ壓鍙傛暟-鎵归噺鍒犻櫎", notes="璁惧宸ヨ壓鍙傛暟-鎵归噺鍒犻櫎")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.eamEquipmentProcessParametersService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+	}
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderController.java b/src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderController.java
new file mode 100644
index 0000000..c5a3769
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderController.java
@@ -0,0 +1,608 @@
+package org.jeecg.modules.eam.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.InspectionStatus;
+import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
+import org.jeecg.modules.eam.entity.EamInspectionOrder;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.request.EamInspectionBatchApprovalRequest;
+import org.jeecg.modules.eam.request.EamInspectionOrderQuery;
+import org.jeecg.modules.eam.request.EamInspectionOrderRequest;
+import org.jeecg.modules.eam.service.IEamInspectionOrderDetailService;
+import org.jeecg.modules.eam.service.IEamInspectionOrderService;
+import org.jeecg.modules.eam.vo.InspectionVo;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 鐐规宸ュ崟
+ * @Author: jeecg-boot
+ * @Date: 2025-04-02
+ * @Version: V1.0
+ */
+@Api(tags = "鐐规宸ュ崟")
+@RestController
+@RequestMapping("/eam/eamInspectionOrder")
+@Slf4j
+public class EamInspectionOrderController extends JeecgController<EamInspectionOrder, IEamInspectionOrderService> {
+    @Autowired
+    private IEamInspectionOrderService eamInspectionOrderService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+    @Autowired
+    private ObjectMapper objectMapper;
+    @Autowired
+    private TranslateDictTextUtils translateDictTextUtils;
+    @Autowired
+    private IEamInspectionOrderDetailService eamInspectionOrderDetailService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param query
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "鐐规宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "鐐规宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ", notes = "鐐规宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<IPage<EamInspectionOrder>> queryPageList(EamInspectionOrderQuery query,
+                                                           @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                           HttpServletRequest req) {
+//		QueryWrapper<EamInspectionOrder> queryWrapper = QueryGenerator.initQueryWrapper(eamInspectionOrder, req.getParameterMap());
+        Page<EamInspectionOrder> page = new Page<EamInspectionOrder>(pageNo, pageSize);
+        IPage<EamInspectionOrder> pageList = eamInspectionOrderService.queryPageList(page, query);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 鏌ヨ鐐规宸ュ崟鍩烘湰淇℃伅
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐐规宸ュ崟鍩烘湰淇℃伅", notes = "鏌ヨ鐐规宸ュ崟鍩烘湰淇℃伅")
+    @GetMapping(value = "/selectVoById")
+    public Result<?> selectVoById(@RequestParam(name = "id") String id) {
+        return eamInspectionOrderService.selectVoById(id);
+    }
+
+
+    /**
+     * 娣诲姞
+     *
+     * @param eamInspectionOrderRequest
+     * @return
+     */
+    @AutoLog(value = "鐐规宸ュ崟-娣诲姞")
+    @ApiOperation(value = "鐐规宸ュ崟-娣诲姞", notes = "鐐规宸ュ崟-娣诲姞")
+    //@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody EamInspectionOrderRequest eamInspectionOrderRequest) {
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.INSPECTION_ORDER_CODE_RULE);
+        eamInspectionOrderRequest.setOrderNum(codeSeq);
+        eamInspectionOrderRequest.setCreationMethod(String.valueOf(OrderCreationMethodEnum.MANUAL));
+        eamInspectionOrderService.addInspectionOrder(eamInspectionOrderRequest);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param eamInspectionOrderRequest
+     * @return
+     */
+    @AutoLog(value = "鐐规宸ュ崟-缂栬緫")
+    @ApiOperation(value = "鐐规宸ュ崟-缂栬緫", notes = "鐐规宸ュ崟-缂栬緫")
+    //@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody EamInspectionOrderRequest eamInspectionOrderRequest) {
+        eamInspectionOrderService.editInspectionOrder(eamInspectionOrderRequest);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 棰嗗彇鐐规宸ュ崟
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "鐐规宸ュ崟-棰嗗彇鐐规宸ュ崟")
+    @ApiOperation(value = "鐐规宸ュ崟-棰嗗彇鐐规宸ュ崟", notes = "鐐规宸ュ崟-棰嗗彇鐐规宸ュ崟")
+    @GetMapping(value = "/receiveInspectionOrder")
+    public Result<String> receiveInspectionOrder(@RequestParam(name = "id") String id) {
+        eamInspectionOrderService.takeInspectionOrder(id);
+        return Result.OK("棰嗗彇鎴愬姛");
+    }
+
+    /**
+     * 浣滃簾鐐规宸ュ崟
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "鐐规宸ュ崟-浣滃簾鐐规宸ュ崟")
+    @ApiOperation(value = "鐐规宸ュ崟-浣滃簾鐐规宸ュ崟", notes = "鐐规宸ュ崟-浣滃簾鐐规宸ュ崟")
+    @GetMapping(value = "/cancelInspectionOrder")
+    public Result<String> cancelInspectionOrder(@RequestParam(name = "id") String id) {
+        eamInspectionOrderService.cancelInspectionOrder(id);
+        return Result.OK("浣滃簾鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺浣滃簾涓庨鍙�
+     *
+     * @param ids
+     * @param type
+     * @return
+     */
+    @AutoLog(value = "鐐规宸ュ崟-鎵归噺浣滃簾涓庨鍙�")
+    @ApiOperation(value = "鐐规宸ュ崟-鎵归噺浣滃簾涓庨鍙�", notes = "鐐规宸ュ崟-鎵归噺浣滃簾涓庨鍙�")
+    @GetMapping(value = "/cancelOrReceive")
+    public Result<?> cancelOrReceive(@RequestParam(name = "ids") String ids, @RequestParam(name = "type") String type) {
+        return eamInspectionOrderService.batchCancelOrTakeInspectionOrder(ids, type);
+    }
+
+    /**
+     * 鐐规娴佺▼
+     *
+     * @param eamInspectionOrderRequest
+     * @return
+     */
+    @AutoLog(value = "鐐规娴佺▼")
+    @ApiOperation(value = "鐐规宸ュ崟-鐐规娴佺▼", notes = "鐐规宸ュ崟-鐐规娴佺▼")
+    @PostMapping("/approval")
+    public Result<?> approval(@RequestBody EamInspectionOrderRequest eamInspectionOrderRequest) {
+        eamInspectionOrderService.inspectionProcess(eamInspectionOrderRequest);
+        return Result.OK("鎿嶄綔鎴愬姛");
+    }
+
+    @ApiOperation(value = "鐐规宸ュ崟-鎵归噺瀹℃壒娴佺▼", notes = "鐐规宸ュ崟-鎵归噺瀹℃壒娴佺▼")
+    @PostMapping("/batchApproval")
+    public Result<?> batchApproval(@RequestBody EamInspectionBatchApprovalRequest request) {
+        if(request == null || CollectionUtil.isEmpty(request.getTaskList())) {
+            return Result.error("娌℃湁闇�瑕佸鎵圭殑鏁版嵁锛�");
+        }
+        int n = 0;
+        StringBuilder errorMsg = new StringBuilder();
+        List<WorkTaskDataVo> tastList = request.getTaskList();
+        for(WorkTaskDataVo workTaskDataVo : tastList) {
+            EamInspectionOrderRequest orderRequest = new EamInspectionOrderRequest();
+            EamInspectionOrder order = eamInspectionOrderService.getById(workTaskDataVo.getDataId());
+            if(order == null) {
+                errorMsg.append("宸ュ崟ID锛�");
+                errorMsg.append(workTaskDataVo.getDataId());
+                errorMsg.append(",涓嶅瓨鍦ㄦ垨宸茶鍒犻櫎!\n");
+                continue;
+            }
+            if(!InspectionStatus.WAIT_CONFIRM.name().equals(order.getInspectionStatus())) {
+                errorMsg.append("宸ュ崟鍙凤細");
+                errorMsg.append(order.getOrderNum());
+                errorMsg.append(",鐘舵�佹棤娉曟壒閲忓鎵�!\n");
+                continue;
+            }
+            List<EamInspectionOrderDetail> tableDetailList = eamInspectionOrderDetailService.queryListByOrderId(order.getId());
+            try {
+                orderRequest.setId(order.getId());
+                orderRequest.setEquipmentId(order.getEquipmentId());
+                //瀹℃壒淇℃伅
+                orderRequest.setConfirmComment(request.getConfirmComment());
+                orderRequest.setConfirmDealType(request.getConfirmDealType());
+                //浠诲姟淇℃伅
+                orderRequest.setDataId(workTaskDataVo.getDataId());
+                orderRequest.setTaskId(workTaskDataVo.getId());
+                orderRequest.setUserId(workTaskDataVo.getAssignee());
+                orderRequest.setInstanceId(workTaskDataVo.getProcInstId());
+                orderRequest.setValues(workTaskDataVo.getVariables());
+                orderRequest.setTableDetailList(tableDetailList);
+                EamInspectionOrder result = eamInspectionOrderService.inspectionProcess(orderRequest);
+                if(result == null) {
+                    errorMsg.append("宸ュ崟鍙凤細");
+                    errorMsg.append(order.getOrderNum());
+                    errorMsg.append(",瀹℃壒澶辫触!\n");
+                    continue;
+                }
+                n++;
+
+            } catch (Exception e) {
+                errorMsg.append("宸ュ崟鍙凤細");
+                errorMsg.append(order.getOrderNum());
+                errorMsg.append(",瀹℃壒澶辫触,閿欒鍘熷洜:");
+                errorMsg.append(e.getMessage() + "\n");
+            }
+
+        }
+        if(n > 0) {
+            String message = "鎴愬姛瀹℃壒閫氳繃" + n + "鏉¤褰曪紒\n" + errorMsg;
+            return Result.OK(message);
+        }
+        return Result.error(errorMsg.toString());
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "鐐规宸ュ崟-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "鐐规宸ュ崟-閫氳繃id鍒犻櫎", notes = "鐐规宸ュ崟-閫氳繃id鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        eamInspectionOrderService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "鐐规宸ュ崟-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "鐐规宸ュ崟-鎵归噺鍒犻櫎", notes = "鐐规宸ュ崟-鎵归噺鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.eamInspectionOrderService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "鐐规宸ュ崟-閫氳繃id鏌ヨ")
+    @ApiOperation(value = "鐐规宸ュ崟-閫氳繃id鏌ヨ", notes = "鐐规宸ュ崟-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        EamInspectionOrder eamInspectionOrder = eamInspectionOrderService.getById(id);
+        if (eamInspectionOrder == null) {
+            return Result.error("鏈壘鍒板搴旀暟鎹�");
+        }
+        try {
+            String json = objectMapper.writeValueAsString(eamInspectionOrder);
+            JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
+            translateDictTextUtils.translateField("createBy", eamInspectionOrder.getCreateBy(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("standardId", eamInspectionOrder.getStandardId(), item, "eam_maintenance_standard,standard_name,id");
+            translateDictTextUtils.translateField("operator", eamInspectionOrder.getOperator(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("creationMethod", eamInspectionOrder.getCreationMethod(), item, "order_creation_method");
+            translateDictTextUtils.translateField("inspectionStatus", eamInspectionOrder.getInspectionStatus(), item, "inspection_status");
+            translateDictTextUtils.translateField("confirmUser", eamInspectionOrder.getConfirmUser(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("confirmDealType", eamInspectionOrder.getConfirmDealType(), item, "approved_rejected");
+            return Result.OK(item);
+        } catch (JsonProcessingException e) {
+            return Result.error("鏁版嵁杞瘧澶辫触锛�");
+        }
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param eamInspectionOrder
+     */
+    //@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EamInspectionOrder eamInspectionOrder) {
+        return super.exportXls(request, eamInspectionOrder, EamInspectionOrder.class, "鐐规宸ュ崟");
+    }
+
+    /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("鐐规宸ュ崟:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EamInspectionOrder.class);
+    }
+
+    /**
+     * 鎶ヨ〃浣跨敤 qsw
+     * 2025-6-19
+     */
+    @GetMapping("/findInspectionResult")
+    public JSONObject findInspectionResult(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                          @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize,
+                                          @RequestParam Map<String, Object> params) {
+
+        String equipmentId = (String)params.get("equipmentId");
+        String inspectionDate = (String)params.get("inspectionDate");
+
+        List<InspectionVo> inspectionVos = new ArrayList<>();
+        List<Map<String, Object>> inspectionStandard = eamInspectionOrderService.findInspectionStandard(equipmentId);
+        for (Map<String, Object> map : inspectionStandard) {
+            List<InspectionVo> dayInspectionResult = eamInspectionOrderService.findInspectionResult(equipmentId,(String)map.get("itemDemand"),inspectionDate);
+            InspectionVo inspectionVo = new InspectionVo();
+            inspectionVo.setInspectionContent((String)map.get("itemDemand"));
+            Object seq = map.get("seq");
+            inspectionVo.setSeq(seq.toString());
+            for (InspectionVo vo : dayInspectionResult) {
+                if("1".equals(vo.getDayTime())){
+                    inspectionVo.setDay1(vo.getInspectionResult());
+                    continue;
+                }else if("2".equals(vo.getDayTime())){
+                    inspectionVo.setDay2(vo.getInspectionResult());
+                    continue;
+                }else if("3".equals(vo.getDayTime())){
+                    inspectionVo.setDay3(vo.getInspectionResult());
+                    continue;
+                }else if("4".equals(vo.getDayTime())){
+                    inspectionVo.setDay4(vo.getInspectionResult());
+                    continue;
+                }else if("5".equals(vo.getDayTime())){
+                    inspectionVo.setDay5(vo.getInspectionResult());
+                    continue;
+                }else if("6".equals(vo.getDayTime())){
+                    inspectionVo.setDay6(vo.getInspectionResult());
+                    continue;
+                }else if("7".equals(vo.getDayTime())){
+                    inspectionVo.setDay7(vo.getInspectionResult());
+                    continue;
+                }else if("8".equals(vo.getDayTime())){
+                    inspectionVo.setDay8(vo.getInspectionResult());
+                    continue;
+                }else if("9".equals(vo.getDayTime())){
+                    inspectionVo.setDay9(vo.getInspectionResult());
+                    continue;
+                }else if("10".equals(vo.getDayTime())){
+                    inspectionVo.setDay10(vo.getInspectionResult());
+                    continue;
+                }else if("11".equals(vo.getDayTime())){
+                    inspectionVo.setDay11(vo.getInspectionResult());
+                    continue;
+                }else if("12".equals(vo.getDayTime())){
+                    inspectionVo.setDay12(vo.getInspectionResult());
+                    continue;
+                }else if("13".equals(vo.getDayTime())){
+                    inspectionVo.setDay13(vo.getInspectionResult());
+                    continue;
+                }else if("14".equals(vo.getDayTime())){
+                    inspectionVo.setDay14(vo.getInspectionResult());
+                    continue;
+                }else if("15".equals(vo.getDayTime())){
+                    inspectionVo.setDay15(vo.getInspectionResult());
+                    continue;
+                }else if("16".equals(vo.getDayTime())){
+                    inspectionVo.setDay16(vo.getInspectionResult());
+                    continue;
+                }else if("17".equals(vo.getDayTime())){
+                    inspectionVo.setDay17(vo.getInspectionResult());
+                    continue;
+                }else if("18".equals(vo.getDayTime())){
+                    inspectionVo.setDay18(vo.getInspectionResult());
+                    continue;
+                }else if("19".equals(vo.getDayTime())){
+                    inspectionVo.setDay19(vo.getInspectionResult());
+                    continue;
+                }else if("20".equals(vo.getDayTime())){
+                    inspectionVo.setDay20(vo.getInspectionResult());
+                    continue;
+                }else if("21".equals(vo.getDayTime())){
+                    inspectionVo.setDay21(vo.getInspectionResult());
+                    continue;
+                }else if("22".equals(vo.getDayTime())){
+                    inspectionVo.setDay22(vo.getInspectionResult());
+                    continue;
+                }else if("23".equals(vo.getDayTime())){
+                    inspectionVo.setDay23(vo.getInspectionResult());
+                    continue;
+                }else if("24".equals(vo.getDayTime())){
+                    inspectionVo.setDay24(vo.getInspectionResult());
+                    continue;
+                }else if("25".equals(vo.getDayTime())){
+                    inspectionVo.setDay25(vo.getInspectionResult());
+                    continue;
+                }else if("26".equals(vo.getDayTime())){
+                    inspectionVo.setDay26(vo.getInspectionResult());
+                    continue;
+                }else if("27".equals(vo.getDayTime())){
+                    inspectionVo.setDay27(vo.getInspectionResult());
+                    continue;
+                }else if("28".equals(vo.getDayTime())){
+                    inspectionVo.setDay28(vo.getInspectionResult());
+                    continue;
+                }else if("29".equals(vo.getDayTime())){
+                    inspectionVo.setDay29(vo.getInspectionResult());
+                    continue;
+                }else if("30".equals(vo.getDayTime())){
+                    inspectionVo.setDay30(vo.getInspectionResult());
+                    continue;
+                }else if("31".equals(vo.getDayTime())){
+                    inspectionVo.setDay31(vo.getInspectionResult());
+                    continue;
+                }
+            }
+            inspectionVos.add(inspectionVo);
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("data",inspectionVos);
+        return jsonObject;
+    }
+
+    /**
+     * 鎶ヨ〃浣跨敤 qsw
+     * 2025-6-19
+     */
+    @GetMapping("/findInspectionUser")
+    public JSONObject findInspectionUser(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                           @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize,
+                                           @RequestParam Map<String, Object> params) {
+
+        String equipmentId = (String)params.get("equipmentId");
+        String inspectionDate = (String)params.get("inspectionDate");
+
+        List<InspectionVo> inspectionVos = new ArrayList<>();
+            List<InspectionVo> inspectionUser = eamInspectionOrderService.findInspectionUser(equipmentId,inspectionDate);
+            InspectionVo inspectionVo = new InspectionVo();
+            for (InspectionVo vo : inspectionUser) {
+                if("1".equals(vo.getDayTime())){
+                    inspectionVo.setOperator1(vo.getOperator());
+                    inspectionVo.setConfirmUser1(vo.getConfirmUser());
+                    continue;
+                }else if("2".equals(vo.getDayTime())){
+                    inspectionVo.setOperator2(vo.getOperator());
+                    inspectionVo.setConfirmUser2(vo.getConfirmUser());
+                    continue;
+                }else if("3".equals(vo.getDayTime())){
+                    inspectionVo.setOperator3(vo.getOperator());
+                    inspectionVo.setConfirmUser3(vo.getConfirmUser());
+                    continue;
+                }else if("4".equals(vo.getDayTime())){
+                    inspectionVo.setOperator4(vo.getOperator());
+                    inspectionVo.setConfirmUser4(vo.getConfirmUser());
+                    continue;
+                }else if("5".equals(vo.getDayTime())){
+                    inspectionVo.setOperator5(vo.getOperator());
+                    inspectionVo.setConfirmUser5(vo.getConfirmUser());
+                    continue;
+                }else if("6".equals(vo.getDayTime())){
+                    inspectionVo.setOperator6(vo.getOperator());
+                    inspectionVo.setConfirmUser6(vo.getConfirmUser());
+                    continue;
+                }else if("7".equals(vo.getDayTime())){
+                    inspectionVo.setOperator7(vo.getOperator());
+                    inspectionVo.setConfirmUser7(vo.getConfirmUser());
+                    continue;
+                }else if("8".equals(vo.getDayTime())){
+                    inspectionVo.setOperator8(vo.getOperator());
+                    inspectionVo.setConfirmUser8(vo.getConfirmUser());
+                    continue;
+                }else if("9".equals(vo.getDayTime())){
+                    inspectionVo.setOperator9(vo.getOperator());
+                    inspectionVo.setConfirmUser9(vo.getConfirmUser());
+                    continue;
+                }else if("10".equals(vo.getDayTime())){
+                    inspectionVo.setOperator10(vo.getOperator());
+                    inspectionVo.setConfirmUser10(vo.getConfirmUser());
+                    continue;
+                }else if("11".equals(vo.getDayTime())){
+                    inspectionVo.setOperator11(vo.getOperator());
+                    inspectionVo.setConfirmUser11(vo.getConfirmUser());
+                    continue;
+                }else if("12".equals(vo.getDayTime())){
+                    inspectionVo.setOperator12(vo.getOperator());
+                    inspectionVo.setConfirmUser12(vo.getConfirmUser());
+                    continue;
+                }else if("13".equals(vo.getDayTime())){
+                    inspectionVo.setOperator13(vo.getOperator());
+                    inspectionVo.setConfirmUser13(vo.getConfirmUser());
+                    continue;
+                }else if("14".equals(vo.getDayTime())){
+                    inspectionVo.setOperator14(vo.getOperator());
+                    inspectionVo.setConfirmUser14(vo.getConfirmUser());
+                    continue;
+                }else if("15".equals(vo.getDayTime())){
+                    inspectionVo.setOperator15(vo.getOperator());
+                    inspectionVo.setConfirmUser15(vo.getConfirmUser());
+                    continue;
+                }else if("16".equals(vo.getDayTime())){
+                    inspectionVo.setOperator16(vo.getOperator());
+                    inspectionVo.setConfirmUser16(vo.getConfirmUser());
+                    continue;
+                }else if("17".equals(vo.getDayTime())){
+                    inspectionVo.setOperator17(vo.getOperator());
+                    inspectionVo.setConfirmUser17(vo.getConfirmUser());
+                    continue;
+                }else if("18".equals(vo.getDayTime())){
+                    inspectionVo.setOperator18(vo.getOperator());
+                    inspectionVo.setConfirmUser18(vo.getConfirmUser());
+                    continue;
+                }else if("19".equals(vo.getDayTime())){
+                    inspectionVo.setOperator19(vo.getOperator());
+                    inspectionVo.setConfirmUser19(vo.getConfirmUser());
+                    continue;
+                }else if("20".equals(vo.getDayTime())){
+                    inspectionVo.setOperator20(vo.getOperator());
+                    inspectionVo.setConfirmUser20(vo.getConfirmUser());
+                    continue;
+                }else if("21".equals(vo.getDayTime())){
+                    inspectionVo.setOperator21(vo.getOperator());
+                    inspectionVo.setConfirmUser21(vo.getConfirmUser());
+                    continue;
+                }else if("22".equals(vo.getDayTime())){
+                    inspectionVo.setOperator22(vo.getOperator());
+                    inspectionVo.setConfirmUser22(vo.getConfirmUser());
+                    continue;
+                }else if("23".equals(vo.getDayTime())){
+                    inspectionVo.setOperator23(vo.getOperator());
+                    inspectionVo.setConfirmUser23(vo.getConfirmUser());
+                    continue;
+                }else if("24".equals(vo.getDayTime())){
+                    inspectionVo.setOperator24(vo.getOperator());
+                    inspectionVo.setConfirmUser24(vo.getConfirmUser());
+                    continue;
+                }else if("25".equals(vo.getDayTime())){
+                    inspectionVo.setOperator25(vo.getOperator());
+                    inspectionVo.setConfirmUser25(vo.getConfirmUser());
+                    continue;
+                }else if("26".equals(vo.getDayTime())){
+                    inspectionVo.setOperator26(vo.getOperator());
+                    inspectionVo.setConfirmUser26(vo.getConfirmUser());
+                    continue;
+                }else if("27".equals(vo.getDayTime())){
+                    inspectionVo.setOperator27(vo.getOperator());
+                    inspectionVo.setConfirmUser27(vo.getConfirmUser());
+                    continue;
+                }else if("28".equals(vo.getDayTime())){
+                    inspectionVo.setOperator28(vo.getOperator());
+                    inspectionVo.setConfirmUser28(vo.getConfirmUser());
+                    continue;
+                }else if("29".equals(vo.getDayTime())){
+                    inspectionVo.setOperator29(vo.getOperator());
+                    inspectionVo.setConfirmUser29(vo.getConfirmUser());
+                    continue;
+                }else if("30".equals(vo.getDayTime())){
+                    inspectionVo.setOperator30(vo.getOperator());
+                    inspectionVo.setConfirmUser30(vo.getConfirmUser());
+                    continue;
+                }else if("31".equals(vo.getDayTime())){
+                    inspectionVo.setOperator31(vo.getOperator());
+                    inspectionVo.setConfirmUser31(vo.getConfirmUser());
+                    continue;
+                }
+            }
+            inspectionVos.add(inspectionVo);
+//        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("data",inspectionVos);
+        return jsonObject;
+    }
+
+
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderDetailController.java b/src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderDetailController.java
new file mode 100644
index 0000000..931aa4a
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderDetailController.java
@@ -0,0 +1,179 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.service.IEamInspectionOrderDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 鐐规宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Api(tags="鐐规宸ュ崟鏄庣粏")
+@RestController
+@RequestMapping("/eam/eamInspectionOrderDetail")
+@Slf4j
+public class EamInspectionOrderDetailController extends JeecgController<EamInspectionOrderDetail, IEamInspectionOrderDetailService> {
+	@Autowired
+	private IEamInspectionOrderDetailService eamInspectionOrderDetailService;
+
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param eamInspectionOrderDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "鐐规宸ュ崟鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="鐐规宸ュ崟鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ", notes="鐐规宸ュ崟鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<EamInspectionOrderDetail>> queryPageList(EamInspectionOrderDetail eamInspectionOrderDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<EamInspectionOrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(eamInspectionOrderDetail, req.getParameterMap());
+		Page<EamInspectionOrderDetail> page = new Page<EamInspectionOrderDetail>(pageNo, pageSize);
+		IPage<EamInspectionOrderDetail> pageList = eamInspectionOrderDetailService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   娣诲姞
+	 *
+	 * @param eamInspectionOrderDetail
+	 * @return
+	 */
+	@AutoLog(value = "鐐规宸ュ崟鏄庣粏-娣诲姞")
+	@ApiOperation(value="鐐规宸ュ崟鏄庣粏-娣诲姞", notes="鐐规宸ュ崟鏄庣粏-娣诲姞")
+	//@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟鏄庣粏:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody EamInspectionOrderDetail eamInspectionOrderDetail) {
+		eamInspectionOrderDetailService.save(eamInspectionOrderDetail);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+
+	/**
+	 *  缂栬緫
+	 *
+	 * @param eamInspectionOrderDetail
+	 * @return
+	 */
+	@AutoLog(value = "鐐规宸ュ崟鏄庣粏-缂栬緫")
+	@ApiOperation(value="鐐规宸ュ崟鏄庣粏-缂栬緫", notes="鐐规宸ュ崟鏄庣粏-缂栬緫")
+	//@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟鏄庣粏:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody EamInspectionOrderDetail eamInspectionOrderDetail) {
+		eamInspectionOrderDetailService.updateById(eamInspectionOrderDetail);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "鐐规宸ュ崟鏄庣粏-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="鐐规宸ュ崟鏄庣粏-閫氳繃id鍒犻櫎", notes="鐐规宸ュ崟鏄庣粏-閫氳繃id鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟鏄庣粏:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		eamInspectionOrderDetailService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "鐐规宸ュ崟鏄庣粏-鎵归噺鍒犻櫎")
+	@ApiOperation(value="鐐规宸ュ崟鏄庣粏-鎵归噺鍒犻櫎", notes="鐐规宸ュ崟鏄庣粏-鎵归噺鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟鏄庣粏:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.eamInspectionOrderDetailService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "鐐规宸ュ崟鏄庣粏-閫氳繃id鏌ヨ")
+	@ApiOperation(value="鐐规宸ュ崟鏄庣粏-閫氳繃id鏌ヨ", notes="鐐规宸ュ崟鏄庣粏-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<EamInspectionOrderDetail> queryById(@RequestParam(name="id",required=true) String id) {
+		EamInspectionOrderDetail eamInspectionOrderDetail = eamInspectionOrderDetailService.getById(id);
+		if(eamInspectionOrderDetail==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(eamInspectionOrderDetail);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param eamInspectionOrderDetail
+    */
+    //@RequiresPermissions("org.jeecg.modules:鐐规宸ュ崟鏄庣粏:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EamInspectionOrderDetail eamInspectionOrderDetail) {
+        return super.exportXls(request, eamInspectionOrderDetail, EamInspectionOrderDetail.class, "鐐规宸ュ崟鏄庣粏");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("鐐规宸ュ崟鏄庣粏:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EamInspectionOrderDetail.class);
+    }
+
+	/**
+	 * 涓�娆″姞杞�
+	 *
+	 * @param orderId
+	 * @return
+	 */
+	@ApiOperation(value = "淇濆吇鏍囧噯鏄庣粏-涓嶅垎椤靛垪琛ㄦ煡璇�", notes = "淇濆吇鏍囧噯鏄庣粏-涓嶅垎椤靛垪琛ㄦ煡璇�")
+	@GetMapping(value = "/queryList")
+	public Result<?> queryList(@RequestParam("orderId") String orderId) {
+		LambdaQueryWrapper<EamInspectionOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(EamInspectionOrderDetail::getOrderId, orderId);
+		queryWrapper.orderByAsc(EamInspectionOrderDetail::getItemCode);
+		List<EamInspectionOrderDetail> list = eamInspectionOrderDetailService.list(queryWrapper);
+		return Result.OK(list);
+	}
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderController.java b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderController.java
new file mode 100644
index 0000000..8cf4b46
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderController.java
@@ -0,0 +1,372 @@
+package org.jeecg.modules.eam.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
+import org.jeecg.modules.eam.constant.MaintenanceStatusEnum;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrder;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+import org.jeecg.modules.eam.request.EamMaintenanceBatchApprovalRequest;
+import org.jeecg.modules.eam.request.EamMaintenanceQuery;
+import org.jeecg.modules.eam.request.EamMaintenanceRequest;
+import org.jeecg.modules.eam.service.IEamMaintenanceOrderDetailService;
+import org.jeecg.modules.eam.service.IEamMaintenanceOrderService;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @Description: 淇濆吇宸ュ崟
+ * @Author: jeecg-boot
+ * @Date: 2025-04-02
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "淇濆吇宸ュ崟")
+@RestController
+@RequestMapping("/eam/maintenanceOrder")
+public class EamMaintenanceOrderController extends JeecgController<EamMaintenanceOrder, IEamMaintenanceOrderService> {
+    @Autowired
+    private IEamMaintenanceOrderService eamMaintenanceOrderService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+    @Autowired
+    private ObjectMapper objectMapper;
+    @Autowired
+    private TranslateDictTextUtils translateDictTextUtils;
+    @Autowired
+    private IEamMaintenanceOrderDetailService MaintenanceOrderDetailService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param query
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "淇濆吇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ", notes = "淇濆吇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(EamMaintenanceQuery query,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+//        QueryWrapper<EamMaintenanceOrder> queryWrapper = QueryGenerator.initQueryWrapper(eamMaintenanceOrder, req.getParameterMap());
+        Page<EamMaintenanceOrder> page = new Page<>(pageNo, pageSize);
+        IPage<EamMaintenanceOrder> pageList = eamMaintenanceOrderService.queryPageList(page, query);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param request
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-娣诲姞")
+    @ApiOperation(value = "淇濆吇宸ュ崟-娣诲姞", notes = "淇濆吇宸ュ崟-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody EamMaintenanceRequest request) {
+        if (request == null) {
+            return Result.error("娣诲姞鐨勫璞′笉鑳戒负绌猴紒");
+        }
+        if (CollectionUtil.isEmpty(request.getTableDetailList())) {
+            return Result.error("淇濆吇椤逛笉鑳戒负绌猴紒");
+        }
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_CODE_RULE);
+        request.setOrderNum(codeSeq);
+        request.setCreationMethod(OrderCreationMethodEnum.MANUAL.name());
+        boolean b = eamMaintenanceOrderService.addMaintenance(request);
+        if (!b) {
+            return Result.error("娣诲姞澶辫触锛�");
+        }
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param request
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-缂栬緫")
+    @ApiOperation(value = "淇濆吇宸ュ崟-缂栬緫", notes = "淇濆吇宸ュ崟-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody EamMaintenanceRequest request) {
+        if (request == null) {
+            return Result.error("娣诲姞鐨勫璞′笉鑳戒负绌猴紒");
+        }
+        if (CollectionUtil.isEmpty(request.getTableDetailList())) {
+            return Result.error("淇濆吇椤逛笉鑳戒负绌猴紒");
+        }
+        boolean b = eamMaintenanceOrderService.editMaintenance(request);
+        if (!b) {
+            return Result.error("缂栬緫澶辫触锛�");
+        }
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "淇濆吇宸ュ崟-閫氳繃id鍒犻櫎", notes = "淇濆吇宸ュ崟-閫氳繃id鍒犻櫎")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        eamMaintenanceOrderService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id浣滃簾
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-浣滃簾")
+    @ApiOperation(value = "淇濆吇宸ュ崟-浣滃簾", notes = "淇濆吇宸ュ崟-浣滃簾")
+    @DeleteMapping(value = "/abolish")
+    public Result<?> abolish(@RequestParam(name = "id", required = true) String id) {
+        EamMaintenanceOrder entity = eamMaintenanceOrderService.getById(id);
+        if (entity == null) {
+            return Result.error("瑕佷綔搴熺殑鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        if (!MaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+            return Result.error("璇ョ姸鎬佺殑鏁版嵁涓嶅厑璁歌繘琛屼綔搴燂紒");
+        }
+        entity.setMaintenanceStatus(MaintenanceStatusEnum.ABOLISH.name());
+        eamMaintenanceOrderService.updateById(entity);
+        return Result.OK("浣滃簾鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id棰嗗彇
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-棰嗗彇")
+    @ApiOperation(value = "淇濆吇宸ュ崟-棰嗗彇", notes = "淇濆吇宸ュ崟-棰嗗彇")
+    @GetMapping(value = "/collect")
+    public Result<?> collect(@RequestParam(name = "id", required = true) String id) {
+        boolean b = eamMaintenanceOrderService.collect(id);
+        if (!b) {
+            Result.OK("棰嗗彇澶辫触!");
+        }
+        return Result.OK("棰嗗彇鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "淇濆吇宸ュ崟-鎵归噺鍒犻櫎", notes = "淇濆吇宸ュ崟-鎵归噺鍒犻櫎")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.eamMaintenanceOrderService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 閫氳繃id鎵归噺浣滃簾
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-鎵归噺浣滃簾")
+    @ApiOperation(value = "淇濆吇宸ュ崟-鎵归噺浣滃簾", notes = "淇濆吇宸ュ崟-鎵归噺浣滃簾")
+    @DeleteMapping(value = "/abolishBatch")
+    public Result<?> abolishBatch(@RequestParam(name = "ids", required = true) String ids) {
+        List<String> list = Arrays.asList(ids.split(","));
+        AtomicInteger i = new AtomicInteger();
+        list.forEach(id -> {
+            EamMaintenanceOrder entity = eamMaintenanceOrderService.getById(id);
+            if (entity != null && MaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+                entity.setMaintenanceStatus(MaintenanceStatusEnum.ABOLISH.name());
+                eamMaintenanceOrderService.updateById(entity);
+                i.getAndIncrement();
+            }
+        });
+        return Result.OK("鎵归噺浣滃簾鎴愬姛 " + i.get() + " 鏉″伐鍗曪紒");
+    }
+
+    /**
+     * 閫氳繃id鎵归噺棰嗗彇
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "淇濆吇宸ュ崟-鎵归噺棰嗗彇")
+    @ApiOperation(value = "淇濆吇宸ュ崟-鎵归噺棰嗗彇", notes = "淇濆吇宸ュ崟-鎵归噺棰嗗彇")
+    @DeleteMapping(value = "/collectBatch")
+    public Result<?> collectBatch(@RequestParam(name = "ids", required = true) String ids) {
+        List<String> list = Arrays.asList(ids.split(","));
+        AtomicInteger i = new AtomicInteger();
+        list.forEach(id -> {
+            EamMaintenanceOrder entity = eamMaintenanceOrderService.getById(id);
+            if (entity != null && MaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+                boolean b = eamMaintenanceOrderService.collect(id);
+                if (b) {
+                    i.getAndIncrement();
+                }
+            }
+        });
+        return Result.OK("鎵归噺棰嗗彇鎴愬姛 " + i.get() + " 鏉″伐鍗曪紒");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "淇濆吇宸ュ崟-閫氳繃id鏌ヨ", notes = "淇濆吇宸ュ崟-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        EamMaintenanceOrder eamMaintenanceOrder = eamMaintenanceOrderService.getById(id);
+        if (eamMaintenanceOrder == null) {
+            return Result.error("鏈壘鍒板搴旀暟鎹�");
+        }
+        try {
+            String json = objectMapper.writeValueAsString(eamMaintenanceOrder);
+            JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
+            translateDictTextUtils.translateField("equipmentId", eamMaintenanceOrder.getEquipmentId(), item, "eam_equipment,equipment_code,id");
+            translateDictTextUtils.translateField("standardId", eamMaintenanceOrder.getStandardId(), item, "eam_maintenance_standard,standard_name,id");
+            translateDictTextUtils.translateField("operator", eamMaintenanceOrder.getOperator(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("creationMethod", eamMaintenanceOrder.getCreationMethod(), item, "order_creation_method");
+            translateDictTextUtils.translateField("maintenanceStatus", eamMaintenanceOrder.getMaintenanceStatus(), item, "_maintenance_status");
+            translateDictTextUtils.translateField("confirmUser", eamMaintenanceOrder.getConfirmUser(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("confirmDealType", eamMaintenanceOrder.getConfirmDealType(), item, "approved_rejected");
+            translateDictTextUtils.translateField("initialAcceptanceUser", eamMaintenanceOrder.getInitialAcceptanceUser(), item, "sys_user,realname,username");
+            translateDictTextUtils.translateField("finalAcceptanceUser", eamMaintenanceOrder.getFinalAcceptanceUser(), item, "sys_user,realname,username");
+            return Result.OK(item);
+        } catch (JsonProcessingException e) {
+            return Result.error("鏁版嵁杞瘧澶辫触锛�");
+        }
+    }
+
+    /**
+     * 鎴戠殑寰呭姙锛屽鎵瑰姩浣�
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "淇濆吇宸ュ崟-鎵ц鎿嶄綔", notes = "淇濆吇宸ュ崟-鎵ц鎿嶄綔")
+    @PutMapping(value = "/approval")
+    public Result<?> approval(@RequestBody EamMaintenanceRequest request) {
+        if (request == null) {
+            return Result.error("瀹℃壒鐨勫璞′笉鑳戒负绌猴紒");
+        }
+        if (CollectionUtil.isEmpty(request.getTableDetailList())) {
+            return Result.error("淇濆吇椤逛笉鑳戒负绌猴紒");
+        }
+        // 妫�鏌ヨ姹傚弬鏁�
+        if (StrUtil.isBlank(request.getTaskId()) || StrUtil.isBlank(request.getDataId()) || StrUtil.isBlank(request.getInstanceId())) {
+            return Result.error("瀹℃壒浠诲姟閿欒鎴栦笉瀛樺湪锛�");
+        }
+        EamMaintenanceOrder b = eamMaintenanceOrderService.approval(request);
+        if (b == null) {
+            return Result.error("鎿嶄綔澶辫触锛�");
+        }
+        return Result.ok("鎿嶄綔鎴愬姛锛�");
+    }
+
+    @ApiOperation(value = "淇濆吇宸ュ崟-鎵归噺瀹℃壒娴佺▼", notes = "淇濆吇宸ュ崟-鎵归噺瀹℃壒娴佺▼")
+    @PostMapping("/batchApproval")
+    public Result<?> batchApproval(@RequestBody EamMaintenanceBatchApprovalRequest request) {
+        if (request == null || CollectionUtil.isEmpty(request.getTaskList())) {
+            return Result.error("娌℃湁闇�瑕佸鎵圭殑鏁版嵁锛�");
+        }
+        int n = 0;
+        StringBuilder errorMsg = new StringBuilder();
+        List<WorkTaskDataVo> tastList = request.getTaskList();
+        for (WorkTaskDataVo workTaskDataVo : tastList) {
+            EamMaintenanceRequest orderRequest = new EamMaintenanceRequest();
+            EamMaintenanceOrder order = eamMaintenanceOrderService.getById(workTaskDataVo.getDataId());
+            if (order == null) {
+                errorMsg.append("宸ュ崟ID锛�");
+                errorMsg.append(workTaskDataVo.getDataId());
+                errorMsg.append(",涓嶅瓨鍦ㄦ垨宸茶鍒犻櫎!\n");
+                continue;
+            }
+            if (!(MaintenanceStatusEnum.WAIT_CONFIRM.name().equals(order.getMaintenanceStatus())
+                    || MaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(order.getMaintenanceStatus())
+                    || MaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(order.getMaintenanceStatus()))) {
+                errorMsg.append("宸ュ崟鍙凤細");
+                errorMsg.append(order.getOrderNum());
+                errorMsg.append(",鐘舵�佹棤娉曟壒閲忓鎵�!\n");
+                continue;
+            }
+            List<EamMaintenanceOrderDetail> tableDetailList = MaintenanceOrderDetailService.queryListByOrderId(order.getId());
+            try {
+                orderRequest.setId(order.getId());
+                orderRequest.setEquipmentId(order.getEquipmentId());
+                //瀹℃壒淇℃伅
+                if (MaintenanceStatusEnum.WAIT_CONFIRM.name().equals(order.getMaintenanceStatus())) {
+                    orderRequest.setConfirmComment(request.getConfirmComment());
+                    orderRequest.setConfirmDealType(request.getConfirmDealType());
+                } else if (MaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(order.getMaintenanceStatus())) {
+                    orderRequest.setInitialAcceptanceComment(request.getInitialAcceptanceComment());
+                    orderRequest.setInitialAcceptanceFilesResult(request.getInitialAcceptanceFilesResult());
+                } else if (MaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(order.getMaintenanceStatus())) {
+                    orderRequest.setFinalAcceptanceComment(request.getFinalAcceptanceComment());
+                    orderRequest.setFinalAcceptanceFilesResult(request.getFinalAcceptanceFilesResult());
+                }
+                //浠诲姟淇℃伅
+                orderRequest.setDataId(workTaskDataVo.getDataId());
+                orderRequest.setTaskId(workTaskDataVo.getId());
+                orderRequest.setUserId(workTaskDataVo.getAssignee());
+                orderRequest.setInstanceId(workTaskDataVo.getProcInstId());
+                orderRequest.setValues(workTaskDataVo.getVariables());
+                orderRequest.setTableDetailList(tableDetailList);
+                EamMaintenanceOrder result = eamMaintenanceOrderService.approval(orderRequest);
+                if (result == null) {
+                    errorMsg.append("宸ュ崟鍙凤細");
+                    errorMsg.append(order.getOrderNum());
+                    errorMsg.append(",瀹℃壒澶辫触!\n");
+                    continue;
+                }
+                n++;
+
+            } catch (Exception e) {
+                errorMsg.append("宸ュ崟鍙凤細");
+                errorMsg.append(order.getOrderNum());
+                errorMsg.append(",瀹℃壒澶辫触,閿欒鍘熷洜:");
+                errorMsg.append(e.getMessage() + "\n");
+            }
+
+        }
+        if (n > 0) {
+            String message = "鎴愬姛瀹℃壒閫氳繃" + n + "鏉¤褰曪紒\n" + errorMsg;
+            return Result.OK(message);
+        }
+        return Result.error(errorMsg.toString());
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderDetailController.java b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderDetailController.java
new file mode 100644
index 0000000..3fe7077
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceOrderDetailController.java
@@ -0,0 +1,71 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+import org.jeecg.modules.eam.service.IEamMaintenanceOrderDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+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 java.util.List;
+
+/**
+ * @Description: 淇濆吇宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="淇濆吇宸ュ崟鏄庣粏")
+@RestController
+@RequestMapping("/eam/maintenanceOrderDetail")
+public class EamMaintenanceOrderDetailController extends JeecgController<EamMaintenanceOrderDetail, IEamMaintenanceOrderDetailService> {
+	@Autowired
+	private IEamMaintenanceOrderDetailService eamMaintenanceOrderDetailService;
+
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param orderId
+	 * @param pageNo
+	 * @param pageSize
+	 * @return
+	 */
+	@ApiOperation(value = "淇濆吇宸ュ崟鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ", notes = "淇濆吇宸ュ崟鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(@RequestParam("orderId") String orderId,
+								   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+								   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+		LambdaQueryWrapper<EamMaintenanceOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(EamMaintenanceOrderDetail::getOrderId, orderId);
+		queryWrapper.orderByAsc(EamMaintenanceOrderDetail::getItemCode);
+		Page<EamMaintenanceOrderDetail> page = new Page<>(pageNo, pageSize);
+		IPage<EamMaintenanceOrderDetail> pageList = eamMaintenanceOrderDetailService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 * 涓�娆″姞杞�
+	 *
+	 * @param orderId
+	 * @return
+	 */
+	@ApiOperation(value = "淇濆吇宸ュ崟鏄庣粏-涓嶅垎椤靛垪琛ㄦ煡璇�", notes = "淇濆吇宸ュ崟鏄庣粏-涓嶅垎椤靛垪琛ㄦ煡璇�")
+	@GetMapping(value = "/queryList")
+	public Result<?> queryList(@RequestParam("orderId") String orderId) {
+		LambdaQueryWrapper<EamMaintenanceOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(EamMaintenanceOrderDetail::getOrderId, orderId);
+		queryWrapper.orderByAsc(EamMaintenanceOrderDetail::getItemCode);
+		List<EamMaintenanceOrderDetail> list = eamMaintenanceOrderDetailService.list(queryWrapper);
+		return Result.OK(list);
+	}
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
new file mode 100644
index 0000000..2fe4564
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -0,0 +1,508 @@
+package org.jeecg.modules.eam.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.util.FileUtil;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum;
+import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum;
+import org.jeecg.modules.eam.dto.MaintenanceStandardImport;
+import org.jeecg.modules.eam.dto.WeekMaintenanceStandardImport;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.util.PoiPublicUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 淇濆吇鏍囧噯
+ * @Author: jeecg-boot
+ * @Date: 2025-03-26
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "淇濆吇鏍囧噯")
+@RestController
+@RequestMapping("/eam/maintenanceStandard")
+public class EamMaintenanceStandardController extends JeecgController<EamMaintenanceStandard, IEamMaintenanceStandardService> {
+    @Autowired
+    private IEamMaintenanceStandardService eamMaintenanceStandardService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param eamMaintenanceStandard
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "淇濆吇鏍囧噯-鍒嗛〉鍒楄〃鏌ヨ", notes = "淇濆吇鏍囧噯-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(EamMaintenanceStandard eamMaintenanceStandard,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+//        QueryWrapper<EamMaintenanceStandard> queryWrapper = QueryGenerator.initQueryWrapper(eamMaintenanceStandard, req.getParameterMap());
+        Page<EamMaintenanceStandard> page = new Page<EamMaintenanceStandard>(pageNo, pageSize);
+        IPage<EamMaintenanceStandard> pageList = eamMaintenanceStandardService.queryPageList(page, eamMaintenanceStandard);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param standardRequest
+     * @return
+     */
+    @AutoLog(value = "淇濆吇鏍囧噯-娣诲姞")
+    @ApiOperation(value = "淇濆吇鏍囧噯-娣诲姞", notes = "淇濆吇鏍囧噯-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody EamMaintenanceStandardRequest standardRequest) {
+        if (standardRequest == null) {
+            return Result.error("娣诲姞鐨勫璞′笉鑳戒负绌猴紒");
+        }
+        if (CollectionUtil.isEmpty(standardRequest.getTableDetailList())) {
+            return Result.error("淇濆吇椤逛笉鑳戒负绌猴紒");
+        }
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE);
+        standardRequest.setStandardCode(codeSeq);
+        boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest);
+        if (!b) {
+            return Result.error("娣诲姞澶辫触锛�");
+        }
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param standardRequest
+     * @return
+     */
+    @AutoLog(value = "淇濆吇鏍囧噯-缂栬緫")
+    @ApiOperation(value = "淇濆吇鏍囧噯-缂栬緫", notes = "淇濆吇鏍囧噯-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody EamMaintenanceStandardRequest standardRequest) {
+        if (standardRequest == null) {
+            return Result.error("娣诲姞鐨勫璞′笉鑳戒负绌猴紒");
+        }
+        if (CollectionUtil.isEmpty(standardRequest.getTableDetailList())) {
+            return Result.error("淇濆吇椤逛笉鑳戒负绌猴紒");
+        }
+        boolean b = eamMaintenanceStandardService.editMaintenanceStandard(standardRequest);
+        if (!b) {
+            return Result.error("缂栬緫澶辫触锛�");
+        }
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 鍗囩増
+     *
+     * @param standardRequest
+     * @return
+     */
+    @AutoLog(value = "淇濆吇鏍囧噯-鍗囩増")
+    @ApiOperation(value = "淇濆吇鏍囧噯-鍗囩増", notes = "淇濆吇鏍囧噯-鍗囩増")
+    @RequestMapping(value = "/upgrade", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> upgrade(@RequestBody EamMaintenanceStandardRequest standardRequest) {
+        if (standardRequest == null) {
+            return Result.error("娣诲姞鐨勫璞′笉鑳戒负绌猴紒");
+        }
+        if (CollectionUtil.isEmpty(standardRequest.getTableDetailList())) {
+            return Result.error("淇濆吇椤逛笉鑳戒负绌猴紒");
+        }
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE);
+        standardRequest.setStandardCode(codeSeq);
+        boolean b = eamMaintenanceStandardService.upgradeMaintenanceStandard(standardRequest);
+        if (!b) {
+            return Result.error("鍗囩増澶辫触锛�");
+        }
+        return Result.OK("鍗囩増鎴愬姛!");
+    }
+
+    /**
+     * 鏌ヨ鏍囧噯鍒楄〃-鍓嶇灞曠ず璇ョ敤鎴锋嫢鏈夌殑鏍囧噯
+     * @param keyword 璁惧缂栧彿
+     * @param maintenanceCategory 淇濆吇绫诲瀷
+     * @return
+     */
+    @AutoLog(value = "淇濆吇鏍囧噯-鏌ヨ鏍囧噯鍒楄〃-鍓嶇灞曠ず璇ョ敤鎴锋嫢鏈夌殑鏍囧噯")
+    @ApiOperation(value = "淇濆吇鏍囧噯-鏌ヨ鏍囧噯鍒楄〃-鍓嶇灞曠ず璇ョ敤鎴锋嫢鏈夌殑鏍囧噯", notes = "淇濆吇鏍囧噯-鏌ヨ鏍囧噯鍒楄〃-鍓嶇灞曠ず璇ョ敤鎴锋嫢鏈夌殑鏍囧噯")
+    @GetMapping(value = "/listByUser")
+    public Result<?> listByUser(@RequestParam(name = "keyword", required = false) String keyword,
+                                @RequestParam(name = "equipmentId", required = false) String equipmentId,
+                                @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize,
+                                @RequestParam(name = "maintenanceCategory", required = false) String maintenanceCategory) {
+        List<EamMaintenanceStandard> list = eamMaintenanceStandardService.queryListByKeywordAndCategory(keyword, equipmentId, pageSize, maintenanceCategory);
+        return Result.OK(list);
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "淇濆吇鏍囧噯-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "淇濆吇鏍囧噯-閫氳繃id鍒犻櫎", notes = "淇濆吇鏍囧噯-閫氳繃id鍒犻櫎")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        EamMaintenanceStandard entity = eamMaintenanceStandardService.getById(id);
+        if (entity != null) {
+            entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+            eamMaintenanceStandardService.updateById(entity);
+        }
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id浣滃簾
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "淇濆吇鏍囧噯-浣滃簾")
+    @ApiOperation(value = "淇濆吇鏍囧噯-浣滃簾", notes = "淇濆吇鏍囧噯-浣滃簾")
+    @DeleteMapping(value = "/abolish")
+    public Result<?> abolish(@RequestParam(name = "id", required = true) String id) {
+        EamMaintenanceStandard entity = eamMaintenanceStandardService.getById(id);
+        if (entity != null) {
+            entity.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
+            eamMaintenanceStandardService.updateById(entity);
+        }
+        return Result.OK("浣滃簾鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "淇濆吇鏍囧噯-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "淇濆吇鏍囧噯-鎵归噺鍒犻櫎", notes = "淇濆吇鏍囧噯-鎵归噺鍒犻櫎")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        List<String> list = Arrays.asList(ids.split(","));
+        list.forEach(id -> {
+            EamMaintenanceStandard entity = eamMaintenanceStandardService.getById(id);
+            if (entity != null) {
+                entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+                eamMaintenanceStandardService.updateById(entity);
+            }
+        });
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "淇濆吇鏍囧噯-閫氳繃id鏌ヨ", notes = "淇濆吇鏍囧噯-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        EamMaintenanceStandard eamMaintenanceStandard = eamMaintenanceStandardService.getById(id);
+        return Result.OK(eamMaintenanceStandard);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param eamMaintenanceStandard
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EamMaintenanceStandard eamMaintenanceStandard) {
+        return super.exportXls(request, eamMaintenanceStandard, EamMaintenanceStandard.class, "淇濆吇鏍囧噯");
+    }
+
+    /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/inspectionImportExcel", method = RequestMethod.POST)
+    public Result<?> inspectionImportExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 鑾峰彇涓婁紶鏂囦欢瀵硅薄
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setSheetNum(1);
+            params.setNeedSave(true);
+            EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest();
+            try {
+                //璇诲彇璁惧缂栧彿锛屽浘鐗囩瓑
+                readExcel(file, standardRequest);
+                EamEquipment equipment = eamEquipmentService.selectByEquipmentCode(standardRequest.getEquipmentCode());
+                if(equipment == null) {
+                    log.error("璁惧涓嶅瓨鍦細{}", standardRequest.getEquipmentCode());
+                    continue;
+                }
+                standardRequest.setStandardName(standardRequest.getEquipmentName() + "鐐规鏍囧噯");
+                standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.POINT_INSPECTION.name());
+                standardRequest.setEquipmentId(equipment.getId());
+                //璇诲彇淇濆吇鏄庣粏鍐呭
+                List<MaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), MaintenanceStandardImport.class, params);
+                //鏄庣粏椤�
+                List<EamMaintenanceStandardDetail> tableList = list.stream().map(EamMaintenanceStandardDetail::new).collect(Collectors.toList());
+                standardRequest.setTableDetailList(tableList);
+                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE);
+                standardRequest.setStandardCode(codeSeq);
+                boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest);
+                if (!b) {
+                    log.error("淇濆瓨澶辫触锛� {}", standardRequest.getEquipmentCode());
+                }
+            } catch (Exception e) {
+                //update-begin-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず
+                String msg = e.getMessage();
+                log.error("鏂囦欢 {} 澶勭悊寮傚父锛� {}", file.getOriginalFilename(), msg, e);
+                //update-end-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    log.error(e.getMessage(), e);
+                }
+            }
+        }
+        return Result.ok("鏂囦欢瀵煎叆瀹屾垚锛�");
+    }
+
+    /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/maintenanceImportExcel", method = RequestMethod.POST)
+    public Result<?> maintenanceImportExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 鑾峰彇涓婁紶鏂囦欢瀵硅薄
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setSheetNum(1);
+            params.setNeedSave(true);
+            EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest();
+            try {
+                //璇诲彇璁惧缂栧彿锛屽浘鐗囩瓑
+                readWeekExcel(file, standardRequest);
+                EamEquipment equipment = eamEquipmentService.selectByEquipmentCode(standardRequest.getEquipmentCode());
+                if(equipment == null) {
+                    log.error("璁惧涓嶅瓨鍦細{}", standardRequest.getEquipmentCode());
+                    continue;
+                }
+                standardRequest.setStandardName(standardRequest.getEquipmentName() + "淇濆吇鏍囧噯");
+                standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.WEEK_MAINTENANCE.name());
+                standardRequest.setEquipmentId(equipment.getId());
+                //璇诲彇淇濆吇鏄庣粏鍐呭
+                List<WeekMaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), WeekMaintenanceStandardImport.class, params);
+                //鏄庣粏椤�
+                List<EamMaintenanceStandardDetail> tableList = list.stream().map(EamMaintenanceStandardDetail::new).collect(Collectors.toList());
+                standardRequest.setTableDetailList(tableList);
+                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE);
+                standardRequest.setStandardCode(codeSeq);
+                boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest);
+                if (!b) {
+                    log.error("淇濆瓨澶辫触锛� {}", standardRequest.getEquipmentCode());
+                }
+            } catch (Exception e) {
+                //update-begin-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず
+                String msg = e.getMessage();
+                log.error("鏂囦欢 {} 澶勭悊寮傚父锛� {}", file.getOriginalFilename(), msg, e);
+                //update-end-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    log.error(e.getMessage(), e);
+                }
+            }
+        }
+        return Result.ok("鏂囦欢瀵煎叆瀹屾垚锛�");
+    }
+
+    /**
+     * 璇诲彇Excel 绗竴琛岋紝 绗簩琛岀殑淇℃伅锛屽寘鎷浘鐗囦俊鎭�
+     * @param file
+     * @param request
+     */
+    private void readExcel(MultipartFile file, EamMaintenanceStandardRequest request) {
+        Workbook book = null;
+        boolean isXSSFWorkbook = false;
+        try {
+            book = WorkbookFactory.create(file.getInputStream());
+            if (book instanceof XSSFWorkbook) {
+                isXSSFWorkbook = true;
+            }
+
+            Sheet sheet = book.getSheetAt(0);
+            //绗竴琛岃鍙�
+            Row row = sheet.getRow(0);
+            //璁惧缂栫爜
+            Cell equipmentCode = row.getCell(15);
+            if(CellType.NUMERIC.equals(equipmentCode.getCellType())) {
+                request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue()));
+            }else if(CellType.STRING.equals(equipmentCode.getCellType())) {
+                request.setEquipmentCode(equipmentCode.getStringCellValue());
+            }
+            if (StringUtils.isBlank(request.getEquipmentCode())) {
+                throw new JeecgBootException("Excel銆� " + file.getOriginalFilename() + "銆戞病鏈夎鍙栧埌璁惧缂栧彿锛屽鍏ュけ璐ワ紒");
+            }
+            //鍒濆鏃ユ湡
+            Cell initialDate = row.getCell(11);
+            if (DateUtil.isCellDateFormatted(initialDate)) {
+                request.setInitialDate(initialDate.getDateCellValue());
+            } else {
+                request.setInitialDate(new Date());
+            }
+            //璁惧鍚嶇О
+            Cell equipmentName = row.getCell(13);
+            request.setEquipmentName(equipmentName.getStringCellValue());
+
+            //绗簩琛岃鍙�
+            row = sheet.getRow(1);
+            //淇濆吇鍛ㄦ湡
+            Cell period = row.getCell(11);
+            if (CellType.NUMERIC.equals(period.getCellType())) {
+                request.setMaintenancePeriod((int) period.getNumericCellValue());
+            } else {
+                //榛樿鐐规鍛ㄦ湡 1
+                request.setMaintenancePeriod(1);
+            }
+            //鏂囦欢缂栫爜
+            Cell fileCode = row.getCell(13);
+            request.setFileCode(fileCode.getStringCellValue());
+
+            Map<String, PictureData> pictures;
+            if (isXSSFWorkbook) {
+                pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(0), (XSSFWorkbook) book);
+            } else {
+                pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(0), (HSSFWorkbook) book);
+            }
+
+            if (CollectionUtil.isNotEmpty(pictures)) {
+                //鍙細瀛樺湪涓�寮犲浘鐗�
+                PictureData pictureData = pictures.get(pictures.keySet().iterator().next());
+                byte[] data = pictureData.getData();
+                String fileName = request.getEquipmentCode() + "[" + request.getFileCode() + "]" + "." + pictureData.suggestFileExtension();
+                FileUploadResult fileUploadResult = FileUtil.uploadFile(data, fileName);
+                if(fileUploadResult != null) {
+                    List<FileUploadResult> fileList = request.getFileList();
+                    if(fileList == null) {
+                        fileList = new ArrayList<FileUploadResult>();
+                    }
+                    fileList.add(fileUploadResult);
+                    request.setFileList(fileList);
+                }
+            }
+        } catch (Exception e) {
+            log.error("璇诲彇Excel淇℃伅澶辫触锛歿}", e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 璇诲彇Excel 绗竴琛岋紝 绗簩琛岀殑淇℃伅
+     * @param file
+     * @param request
+     */
+    public void readWeekExcel(MultipartFile file, EamMaintenanceStandardRequest request) {
+        Workbook book = null;
+        boolean isXSSFWorkbook = false;
+        try {
+            book = WorkbookFactory.create(file.getInputStream());
+            if (book instanceof XSSFWorkbook) {
+                isXSSFWorkbook = true;
+            }
+
+            Sheet sheet = book.getSheetAt(0);
+            //绗竴琛岃鍙�
+            Row row = sheet.getRow(0);
+            //璁惧缂栫爜
+            Cell equipmentCode = row.getCell(10);
+            if(CellType.NUMERIC.equals(equipmentCode.getCellType())) {
+                request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue()));
+            }else if(CellType.STRING.equals(equipmentCode.getCellType())) {
+                request.setEquipmentCode(equipmentCode.getStringCellValue());
+            }
+            if (StringUtils.isBlank(request.getEquipmentCode())) {
+                throw new JeecgBootException("Excel銆� " + file.getOriginalFilename() + "銆戞病鏈夎鍙栧埌璁惧缂栧彿锛屽鍏ュけ璐ワ紒");
+            }
+            //鍒濆鏃ユ湡
+            Cell initialDate = row.getCell(6);
+            if (DateUtil.isCellDateFormatted(initialDate)) {
+                request.setInitialDate(initialDate.getDateCellValue());
+            } else {
+                request.setInitialDate(new Date());
+            }
+            //璁惧鍚嶇О
+            Cell equipmentName = row.getCell(8);
+            request.setEquipmentName(equipmentName.getStringCellValue());
+
+            //绗簩琛岃鍙�
+            row = sheet.getRow(1);
+            //淇濆吇鍛ㄦ湡
+            Cell period = row.getCell(6);
+            if (CellType.NUMERIC.equals(period.getCellType())) {
+                request.setMaintenancePeriod((int) period.getNumericCellValue());
+            } else {
+                request.setMaintenancePeriod(null);
+            }
+            //鏂囦欢缂栫爜
+            Cell fileCode = row.getCell(8);
+            request.setFileCode(fileCode.getStringCellValue());
+        } catch (Exception e) {
+            log.error("璇诲彇Excel淇℃伅澶辫触锛歿}", e.getMessage(), e);
+        }
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardDetailController.java b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardDetailController.java
new file mode 100644
index 0000000..39769f7
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardDetailController.java
@@ -0,0 +1,72 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+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 java.util.List;
+
+/**
+ * @Description: 淇濆吇鏍囧噯鏄庣粏
+ * @Author: jeecg-boot
+ * @Date: 2025-03-26
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "淇濆吇鏍囧噯鏄庣粏")
+@RestController
+@RequestMapping("/eam/eamMaintenanceStandardDetail")
+public class EamMaintenanceStandardDetailController extends JeecgController<EamMaintenanceStandardDetail, IEamMaintenanceStandardDetailService> {
+    @Autowired
+    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param standardId
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "淇濆吇鏍囧噯鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ", notes = "淇濆吇鏍囧噯鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(@RequestParam("standardId") String standardId,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        LambdaQueryWrapper<EamMaintenanceStandardDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamMaintenanceStandardDetail::getStandardId, standardId);
+        queryWrapper.orderByAsc(EamMaintenanceStandardDetail::getItemCode);
+        Page<EamMaintenanceStandardDetail> page = new Page<>(pageNo, pageSize);
+        IPage<EamMaintenanceStandardDetail> pageList = eamMaintenanceStandardDetailService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 涓�娆″姞杞�
+     *
+     * @param standardId
+     * @return
+     */
+    @ApiOperation(value = "淇濆吇鏍囧噯鏄庣粏-涓嶅垎椤靛垪琛ㄦ煡璇�", notes = "淇濆吇鏍囧噯鏄庣粏-涓嶅垎椤靛垪琛ㄦ煡璇�")
+    @GetMapping(value = "/queryList")
+    public Result<?> queryList(@RequestParam("standardId") String standardId) {
+        LambdaQueryWrapper<EamMaintenanceStandardDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamMaintenanceStandardDetail::getStandardId, standardId);
+        queryWrapper.orderByAsc(EamMaintenanceStandardDetail::getItemCode);
+        List<EamMaintenanceStandardDetail> list = eamMaintenanceStandardDetailService.list(queryWrapper);
+        return Result.OK(list);
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamPrecisionCheckDetailController.java b/src/main/java/org/jeecg/modules/eam/controller/EamPrecisionCheckDetailController.java
new file mode 100644
index 0000000..a9c2c41
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamPrecisionCheckDetailController.java
@@ -0,0 +1,70 @@
+package org.jeecg.modules.eam.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.eam.entity.EamPrecisionCheckDetail;
+import org.jeecg.modules.eam.service.IEamPrecisionCheckDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+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 java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @Description: 璁惧绮惧害妫�娴嬫槑缁�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-13
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="璁惧绮惧害妫�娴嬫槑缁�")
+@RestController
+@RequestMapping("/eam/precisionCheckDetail")
+public class EamPrecisionCheckDetailController extends JeecgController<EamPrecisionCheckDetail, IEamPrecisionCheckDetailService> {
+	@Autowired
+	private IEamPrecisionCheckDetailService eamPrecisionCheckDetailService;
+	@Autowired
+	private ObjectMapper objectMapper;
+	@Autowired
+	private TranslateDictTextUtils translateDictTextUtils;
+
+	/**
+	 * 鍒楄〃鏌ヨ
+	 *
+	 * @param orderId 宸ュ崟ID
+	 * @return
+	 */
+	@ApiOperation(value="璁惧绮惧害鍙傛暟-鍒楄〃鏌ヨ", notes="璁惧绮惧害鍙傛暟-鍒楄〃鏌ヨ")
+	@GetMapping(value = "/queryList")
+	public Result<?> queryList(@RequestParam(name="orderId") String orderId) {
+		List<EamPrecisionCheckDetail> list = eamPrecisionCheckDetailService.getByOrderId(orderId);
+		if(CollectionUtil.isEmpty(list)) {
+			return Result.OK(Collections.emptyList());
+		}
+		List<JSONObject> items = new ArrayList<>();
+		try {
+			for(EamPrecisionCheckDetail vo : list) {
+				String json = objectMapper.writeValueAsString(vo);
+				JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
+				translateDictTextUtils.translateField("parameterId", vo.getParameterId(), item, "eam_precision_parameters,parameter_name,id");
+				translateDictTextUtils.translateField("parameterCode", vo.getParameterId(), item, "eam_precision_parameters,parameter_code,id");
+				items.add(item);
+			}
+			return Result.OK(items);
+		}catch (Exception e) {
+			return Result.error("鏁版嵁杞瘧澶辫触锛�");
+		}
+	}
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamPrecisionParametersController.java b/src/main/java/org/jeecg/modules/eam/controller/EamPrecisionParametersController.java
new file mode 100644
index 0000000..df78745
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamPrecisionParametersController.java
@@ -0,0 +1,165 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.entity.EamPrecisionParameters;
+import org.jeecg.modules.eam.service.IEamPrecisionParametersService;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 绮惧害鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date: 2025-03-17
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "绮惧害鍙傛暟缁存姢")
+@RestController
+@RequestMapping("/eam/precisionParameters")
+public class EamPrecisionParametersController extends JeecgController<EamPrecisionParameters, IEamPrecisionParametersService> {
+    @Autowired
+    private IEamPrecisionParametersService eamPrecisionParametersService;
+
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param eamPrecisionParameters
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "绮惧害鍙傛暟缁存姢-鍒嗛〉鍒楄〃鏌ヨ", notes = "绮惧害鍙傛暟缁存姢-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(EamPrecisionParameters eamPrecisionParameters,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+        QueryWrapper<EamPrecisionParameters> queryWrapper = QueryGenerator.initQueryWrapper(eamPrecisionParameters, req.getParameterMap());
+        Page<EamPrecisionParameters> page = new Page<EamPrecisionParameters>(pageNo, pageSize);
+        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+        IPage<EamPrecisionParameters> pageList = eamPrecisionParametersService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param eamPrecisionParameters
+     * @return
+     */
+    @ApiOperation(value = "绮惧害鍙傛暟缁存姢-娣诲姞", notes = "绮惧害鍙傛暟缁存姢-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody EamPrecisionParameters eamPrecisionParameters) {
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.PRECISION_PARAMETERS_RULE);
+        eamPrecisionParameters.setParameterCode(codeSeq);
+        eamPrecisionParameters.setDelFlag(CommonConstant.DEL_FLAG_0);
+        eamPrecisionParametersService.save(eamPrecisionParameters);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param eamPrecisionParameters
+     * @return
+     */
+    @ApiOperation(value = "绮惧害鍙傛暟缁存姢-缂栬緫", notes = "绮惧害鍙傛暟缁存姢-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody EamPrecisionParameters eamPrecisionParameters) {
+        eamPrecisionParametersService.updateById(eamPrecisionParameters);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "绮惧害鍙傛暟缁存姢-閫氳繃id鍒犻櫎", notes = "绮惧害鍙傛暟缁存姢-閫氳繃id鍒犻櫎")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        eamPrecisionParametersService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "绮惧害鍙傛暟缁存姢-鎵归噺鍒犻櫎", notes = "绮惧害鍙傛暟缁存姢-鎵归噺鍒犻櫎")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.eamPrecisionParametersService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "绮惧害鍙傛暟缁存姢-閫氳繃id鏌ヨ", notes = "绮惧害鍙傛暟缁存姢-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        EamPrecisionParameters eamPrecisionParameters = eamPrecisionParametersService.getById(id);
+        return Result.OK(eamPrecisionParameters);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param eamPrecisionParameters
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EamPrecisionParameters eamPrecisionParameters) {
+        return super.exportXls(request, eamPrecisionParameters, EamPrecisionParameters.class, "绮惧害鍙傛暟缁存姢");
+    }
+
+    /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EamPrecisionParameters.class);
+    }
+
+    @ApiOperation(value = "绮惧害鍙傛暟缁存姢-鏌ヨ鎵�鏈�", notes = "绮惧害鍙傛暟缁存姢-鏌ヨ鎵�鏈�")
+    @GetMapping(value = "/listAll")
+    public Result<?> listAll() {
+        QueryWrapper<EamPrecisionParameters> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+        List<EamPrecisionParameters> list = eamPrecisionParametersService.list(queryWrapper);
+        return Result.OK(list);
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamProcessParametersController.java b/src/main/java/org/jeecg/modules/eam/controller/EamProcessParametersController.java
new file mode 100644
index 0000000..5156cc4
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamProcessParametersController.java
@@ -0,0 +1,166 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.entity.EamProcessParameters;
+import org.jeecg.modules.eam.service.IEamProcessParametersService;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 宸ュ簭鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date: 2025-03-17
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "宸ュ簭鍙傛暟缁存姢")
+@RestController
+@RequestMapping("/eam/processParameters")
+public class EamProcessParametersController extends JeecgController<EamProcessParameters, IEamProcessParametersService> {
+    @Autowired
+    private IEamProcessParametersService eamProcessParametersService;
+
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param eamProcessParameters
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "宸ュ簭鍙傛暟缁存姢-鍒嗛〉鍒楄〃鏌ヨ", notes = "宸ュ簭鍙傛暟缁存姢-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(EamProcessParameters eamProcessParameters,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+        QueryWrapper<EamProcessParameters> queryWrapper = QueryGenerator.initQueryWrapper(eamProcessParameters, req.getParameterMap());
+        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+        Page<EamProcessParameters> page = new Page<EamProcessParameters>(pageNo, pageSize);
+        IPage<EamProcessParameters> pageList = eamProcessParametersService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param eamProcessParameters
+     * @return
+     */
+    @ApiOperation(value = "宸ュ簭鍙傛暟缁存姢-娣诲姞", notes = "宸ュ簭鍙傛暟缁存姢-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody EamProcessParameters eamProcessParameters) {
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.PROCESS_PARAMETERS_RULE);
+        eamProcessParameters.setParameterCode(codeSeq);
+        eamProcessParameters.setDelFlag(CommonConstant.DEL_FLAG_0);
+        eamProcessParametersService.save(eamProcessParameters);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param eamProcessParameters
+     * @return
+     */
+    @ApiOperation(value = "宸ュ簭鍙傛暟缁存姢-缂栬緫", notes = "宸ュ簭鍙傛暟缁存姢-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody EamProcessParameters eamProcessParameters) {
+        eamProcessParametersService.updateById(eamProcessParameters);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "宸ュ簭鍙傛暟缁存姢-閫氳繃id鍒犻櫎", notes = "宸ュ簭鍙傛暟缁存姢-閫氳繃id鍒犻櫎")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        eamProcessParametersService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "宸ュ簭鍙傛暟缁存姢-鎵归噺鍒犻櫎", notes = "宸ュ簭鍙傛暟缁存姢-鎵归噺鍒犻櫎")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.eamProcessParametersService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "宸ュ簭鍙傛暟缁存姢-閫氳繃id鏌ヨ", notes = "宸ュ簭鍙傛暟缁存姢-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        EamProcessParameters eamProcessParameters = eamProcessParametersService.getById(id);
+        return Result.OK(eamProcessParameters);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param eamProcessParameters
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EamProcessParameters eamProcessParameters) {
+        return super.exportXls(request, eamProcessParameters, EamProcessParameters.class, "宸ュ簭鍙傛暟缁存姢");
+    }
+
+    /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EamProcessParameters.class);
+    }
+
+
+    @ApiOperation(value = "宸ュ簭鍙傛暟缁存姢-鏌ヨ鎵�鏈�", notes = "宸ュ簭鍙傛暟缁存姢-鏌ヨ鎵�鏈�")
+    @GetMapping(value = "/listAll")
+    public Result<?> listAll() {
+        QueryWrapper<EamProcessParameters> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+        List<EamProcessParameters> list = eamProcessParametersService.list(queryWrapper);
+        return Result.OK(list);
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamSysFilesController.java b/src/main/java/org/jeecg/modules/eam/controller/EamSysFilesController.java
new file mode 100644
index 0000000..09c142b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/controller/EamSysFilesController.java
@@ -0,0 +1,212 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.eam.entity.EamSysFiles;
+import org.jeecg.modules.eam.request.EamSysFilesRequest;
+import org.jeecg.modules.eam.service.IEamSysFilesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 璁惧闄勪欢绠$悊
+ * @Author: jeecg-boot
+ * @Date: 2025-03-17
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "璁惧闄勪欢绠$悊")
+@RestController
+@RequestMapping("/eam/sysFiles")
+public class EamSysFilesController extends JeecgController<EamSysFiles, IEamSysFilesService> {
+    @Autowired
+    private IEamSysFilesService eamSysFilesService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param eamSysFiles
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-鍒嗛〉鍒楄〃鏌ヨ", notes = "璁惧闄勪欢绠$悊-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(EamSysFiles eamSysFiles,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+        QueryWrapper<EamSysFiles> queryWrapper = QueryGenerator.initQueryWrapper(eamSysFiles, req.getParameterMap());
+        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+        Page<EamSysFiles> page = new Page<EamSysFiles>(pageNo, pageSize);
+        IPage<EamSysFiles> pageList = eamSysFilesService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-娣诲姞", notes = "璁惧闄勪欢绠$悊-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody EamSysFilesRequest request) {
+        boolean b = eamSysFilesService.saveEamSysFiles(request);
+        if(!b) {
+            return Result.OK("鎿嶄綔澶辫触锛�");
+        }
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param eamSysFiles
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-缂栬緫", notes = "璁惧闄勪欢绠$悊-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody EamSysFiles eamSysFiles) {
+        eamSysFilesService.updateById(eamSysFiles);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-閫氳繃id鍒犻櫎", notes = "璁惧闄勪欢绠$悊-閫氳繃id鍒犻櫎")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        EamSysFiles entity = eamSysFilesService.getById(id);
+        if(entity != null) {
+            entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+            eamSysFilesService.updateById(entity);
+        }
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-鎵归噺鍒犻櫎", notes = "璁惧闄勪欢绠$悊-鎵归噺鍒犻櫎")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        List<String> list = Arrays.asList(ids.split(","));
+        list.forEach(id -> {
+            EamSysFiles entity = eamSysFilesService.getById(id);
+            if(entity != null) {
+                entity.setDelFlag(CommonConstant.DEL_FLAG_1);
+                eamSysFilesService.updateById(entity);
+            }
+        });
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-閫氳繃id鏌ヨ", notes = "璁惧闄勪欢绠$悊-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        EamSysFiles eamSysFiles = eamSysFilesService.getById(id);
+        return Result.OK(eamSysFiles);
+    }
+
+    /**
+     * 鍗曚釜鏂囦欢涓婁紶
+     * @param request
+     * @param response
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-鍗曚釜鏂囦欢涓婁紶", notes = "璁惧闄勪欢绠$悊-鍗曚釜鏂囦欢涓婁紶")
+    @PostMapping("/upload")
+    public Result<?> uploadFile(HttpServletRequest request, HttpServletResponse response) {
+        // 杞崲鎴愬閮ㄥ垎request
+        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
+        MultipartFile files = multiRequest.getFile("file");
+        try {
+            FileUploadResult sysUpload = eamSysFilesService.uploadFile(files);
+            if(sysUpload == null) {
+                return Result.error("鎿嶄綔澶辫触: 涓婁紶缁撴灉涓虹┖锛�");
+            }
+            EamSysFiles sysFiles = new EamSysFiles();
+            sysFiles.setFileEncodeName(sysUpload.getFileEncodeName());
+            sysFiles.setFileName(sysUpload.getFileName());
+            sysFiles.setFileSize(sysUpload.getFileSize());
+            sysFiles.setFilePath(sysUpload.getFilePath());
+            sysFiles.setFileSuffix(sysUpload.getFileSuffix());
+            sysFiles.setDelFlag(CommonConstant.DEL_FLAG_0);
+            eamSysFilesService.save(sysFiles);
+            return Result.ok(sysUpload);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            return Result.error("鎿嶄綔澶辫触:" + e.getMessage());
+        }
+
+    }
+
+    /**
+     * 鎵归噺涓婁紶鎺ュ彛
+     * @param request
+     * @param response
+     * @return
+     */
+    @ApiOperation(value = "璁惧闄勪欢绠$悊-澶氫釜鏂囦欢涓婁紶", notes = "璁惧闄勪欢绠$悊-澶氫釜鏂囦欢涓婁紶")
+    @PostMapping("/batch_upload")
+    public Result<?> batchUploadFile(HttpServletRequest request, HttpServletResponse response) {
+        // 杞崲鎴愬閮ㄥ垎request
+        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multiRequest.getFileMap();
+        List<FileUploadResult> resultList = new ArrayList<>();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            FileUploadResult sysUpload = eamSysFilesService.uploadFile(entity.getValue());
+            if(sysUpload == null) {
+                continue;
+            }
+            EamSysFiles sysFiles = new EamSysFiles();
+            sysFiles.setFileEncodeName(sysUpload.getFileEncodeName());
+            sysFiles.setFileName(sysUpload.getFileName());
+            sysFiles.setFileSize(sysUpload.getFileSize());
+            sysFiles.setFilePath(sysUpload.getFilePath());
+            sysFiles.setFileSuffix(sysUpload.getFileSuffix());
+            sysFiles.setDelFlag(CommonConstant.DEL_FLAG_0);
+            eamSysFilesService.save(sysFiles);
+            resultList.add(sysUpload);
+        }
+        return Result.ok(resultList);
+    }
+
+    @GetMapping("/downloadFile")
+    public void downloadFile(@RequestParam("id") String id, HttpServletResponse response) {
+        eamSysFilesService.downloadFile(response, eamSysFilesService.getById(id));
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java b/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java
new file mode 100644
index 0000000..451d990
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.eam.dto;
+
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+@Data
+public class MaintenanceStandardImport implements Serializable {
+
+    @Excel(name = "鍥惧彿", width = 15)
+    private Integer itemCode;
+    @Excel(name = "鐐规椤圭洰", width = 15)
+    private String itemName;
+    @Excel(name = "鐐规閮ㄤ綅", width = 15)
+    private String itemPart;
+    @Excel(name = "鐐规瑕佹眰", width = 15)
+    private String itemDemand;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java b/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java
new file mode 100644
index 0000000..c69135d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.dto;
+
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+@Data
+public class SecondMaintenanceStandardImport implements Serializable {
+
+    @Excel(name = "搴忓彿", width = 15)
+    private Integer itemCode;
+    @Excel(name = "閮ㄤ綅", width = 15)
+    private String itemPart;
+    @Excel(name = "淇濆吇鍐呭", width = 15)
+    private String itemName;
+    @Excel(name = "妫�鏌ユ爣鍑嗘垨瑕佹眰", width = 15)
+    private String itemDemand;
+    @Excel(name = "淇濆吇瑕佹眰", width = 15)
+    private String itemDemandAlias;
+    @Excel(name = "妫�鏌ユ柟娉�", width = 15)
+    private String checkMethod;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java b/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java
new file mode 100644
index 0000000..f33a088
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.dto;
+
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+@Data
+public class ThirdMaintenanceStandardImport implements Serializable {
+
+    @Excel(name = "搴忓彿", width = 15)
+    private Integer itemCode;
+    @Excel(name = "閮ㄤ綅", width = 15)
+    private String itemPart;
+    @Excel(name = "淇濆吇鍐呭", width = 15)
+    private String itemName;
+    @Excel(name = "妫�鏌ユ爣鍑嗘垨瑕佹眰", width = 15)
+    private String itemDemand;
+    @Excel(name = "淇濆吇瑕佹眰", width = 15)
+    private String itemDemandAlias;
+    @Excel(name = "妫�鏌ユ柟娉�", width = 15)
+    private String checkMethod;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java b/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java
new file mode 100644
index 0000000..b7a6140
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.eam.dto;
+
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+@Data
+public class WeekMaintenanceStandardImport implements Serializable {
+
+    @Excel(name = "搴忓彿", width = 15)
+    private Integer itemCode;
+    @Excel(name = "淇濆吇澶ч」鐩�", width = 15)
+    private String itemName;
+    @Excel(name = "瀛愰」鐩�", width = 15)
+    private String subItemName;
+    @Excel(name = "閮ㄤ綅/绫诲瀷", width = 15)
+    private String itemPart;
+    @Excel(name = "淇濆吇瑕佹眰", width = 15)
+    private String itemDemand;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java b/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
new file mode 100644
index 0000000..9ce89d0
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
@@ -0,0 +1,361 @@
+package org.jeecg.modules.eam.entity;
+
+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.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: jeecg-boot
+ * @Date: 2025-03-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_equipment")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "eam_equipment瀵硅薄", description = "璁惧鍙拌处")
+public class EamEquipment implements Serializable {
+
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**
+     * 鍒涘缓浜�
+     */
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @Dict(dicCode = "sys_user, realname, username")
+    private String createBy;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss ")
+    private Date createTime;
+    /**
+     * 鏇存柊浜�
+     */
+    @ApiModelProperty(value = "鏇存柊浜�")
+    @Dict(dicCode = "sys_user, realname, username")
+    private String updateBy;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss ")
+    private Date updateTime;
+    /**
+     * 鍒犻櫎鏍囪
+     */
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    private Integer delFlag;
+    /**
+     * 璁惧缁熶竴缂栧彿
+     */
+    @Excel(name = "璁惧缂栧彿", width = 15, orderNum = "1")
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    private String equipmentCode;
+    /**
+     * 璁惧鍚嶇О
+     */
+    @Excel(name = "璁惧鍚嶇О", width = 15, orderNum = "2")
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    private String equipmentName;
+    /**
+     * 浣跨敤閮ㄩ棬
+     */
+    @Excel(name = "浣跨敤杞﹂棿", width = 25, dictTable = "mdc_production", dicText = "production_name", dicCode = "id", orderNum = "9")
+    @ApiModelProperty(value = "浣跨敤閮ㄩ棬")
+    @Dict(dicCode = "mdc_production, production_name, id")
+    private String orgId;
+    /**
+     * 璁惧绠$悊鍛�
+     */
+    @Excel(name = "璁惧绠$悊鍛�", width = 35, dictTable = "sys_user", dicText = "realname", dicCode = "username", orderNum = "10")
+    @ApiModelProperty(value = "璁惧绠$悊鍛�")
+    @Dict(dicCode = "sys_user, realname, username")
+    private String equipmentManager;
+    /**
+     * 璁惧绫诲埆
+     */
+    @Excel(name = "璁惧绫诲埆", width = 15, dicCode = "equipment_category", orderNum = "5")
+    @ApiModelProperty(value = "璁惧绫诲埆")
+    @Dict(dicCode = "equipment_category")
+    private String equipmentCategory;
+    /**
+     * 璁惧鍨嬪彿
+     */
+    @Excel(name = "璁惧鍨嬪彿", width = 15, orderNum = "3")
+    @ApiModelProperty(value = "璁惧鍨嬪彿")
+    private String equipmentModel;
+    /**
+     * 璁惧瑙勬牸
+     */
+    @Excel(name = "璁惧瑙勬牸", width = 15, orderNum = "4")
+    @ApiModelProperty(value = "璁惧瑙勬牸")
+    private String equipmentSpecification;
+
+    /**
+     * 瀹夎浣嶇疆
+     */
+    @Excel(name = "瀹夎浣嶇疆", width = 15, orderNum = "11")
+    @ApiModelProperty(value = "瀹夎浣嶇疆")
+    private String installationPosition;
+    /**
+     * 璧勪骇浣跨敤鐘舵��
+     */
+    @Excel(name = "璧勪骇浣跨敤鐘舵��", width = 15, dicCode = "asset_status", orderNum = "7")
+    @ApiModelProperty(value = "璧勪骇鐘舵��")
+    @Dict(dicCode = "asset_status")
+    private String assetStatus;
+    /**
+     * 鍑哄巶缂栧彿
+     */
+    @Excel(name = "鍑哄巶缂栧彿", width = 15, orderNum = "12")
+    @ApiModelProperty(value = "鍑哄巶缂栧彿")
+    private String factoryNumber;
+    /**
+     * 鏈哄簥鍘傚
+     */
+    @Excel(name = "鏈哄簥鍘傚", width = 15, orderNum = "13")
+    @ApiModelProperty(value = "鏈哄簥鍘傚")
+    private String manufacturingEnterprise;
+    /**
+     * 鏉ユ簮鍥藉
+     */
+    @Excel(name = "鏉ユ簮鍥藉", width = 25, orderNum = "14")
+    @ApiModelProperty(value = "鏉ユ簮鍥藉")
+    private String originCountry;
+    /**
+     * 璁惧渚涘簲鍟�
+     */
+    @Excel(name = "璁惧渚涘簲鍟�", width = 25, orderNum = "15")
+    @ApiModelProperty(value = "璁惧渚涘簲鍟�")
+    private String supplier;
+    /**
+     * 鍑哄巶鏃ユ湡
+     */
+    @Excel(name = "鍑哄巶鏃ユ湡", width = 25, format = "yyyy/MM/dd", orderNum = "16")
+    @ApiModelProperty(value = "鍑哄巶鏃ユ湡")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date leaveFactoryDate;
+    /**
+     * 楠屾敹鏃ユ湡
+     */
+    @Excel(name = "鎶曠敤鏃ユ湡", width = 25, format = "yyyy/MM/dd", orderNum = "17")
+    @ApiModelProperty(value = "楠屾敹鏃ユ湡")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date acceptanceCheckDate;
+    /**
+     * 璁惧鍥剧墖
+     */
+    @ApiModelProperty(value = "璁惧鍥剧墖")
+    private String equipmentImage;
+    /**
+     * 鐢垫満鍙版暟
+     */
+    @Excel(name = "鐢垫満鍙版暟", width = 15, orderNum = "18")
+    @ApiModelProperty(value = "鐢垫満鍙版暟")
+    private Integer motorsNumber;
+    /**
+     * 鎬诲姛鐜�(KW)
+     */
+    @Excel(name = "鎬诲姛鐜�(KW)", width = 15, orderNum = "19")
+    @ApiModelProperty(value = "鎬诲姛鐜�")
+    private String equipmentPower;
+    /**
+     * 閲嶉噺(鍚�)
+     */
+    @Excel(name = "閲嶉噺(鍚�)", width = 15, orderNum = "20")
+    @ApiModelProperty(value = "閲嶉噺(鍚�)")
+    private String equipmentWeight;
+    /**
+     * 鏄惁鏈夊伐鑹哄弬鏁�
+     */
+    @Excel(name = "鏈夋棤宸ヨ壓鍙傛暟", width = 15, dicCode = "has_no", orderNum = "21")
+    @ApiModelProperty(value = "鏄惁鏈夊伐鑹哄弬鏁�")
+    private String processParametersFlag;
+    /**
+     * 鏄惁鏈夌簿搴﹀弬鏁�
+     */
+    @Excel(name = "鏈夋棤绮惧害鍙傛暟", width = 15, dicCode = "has_no", orderNum = "22")
+    @ApiModelProperty(value = "鏄惁鏈夌簿搴﹀弬鏁�")
+    private String precisionParametersFlag;
+
+    /**
+     * 澶囨敞
+     */
+    @Excel(name = "澶囨敞", width = 50, orderNum = "99")
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+    /**
+     * 澶栧舰灏哄
+     */
+    @Excel(name = "澶栧舰灏哄", width = 15, orderNum = "24")
+    @ApiModelProperty(value = "澶栧舰灏哄")
+    private String overallDimensions;
+    /**
+     * 璁惧绉嶇被
+     */
+    @Excel(name = "璁惧绉嶇被", width = 15, orderNum = "6", dictTable = "sys_category", dicCode = "code", dicText = "name")
+    @ApiModelProperty(value = "璁惧绉嶇被")
+    @Dict(dictTable = "sys_category", dicCode = "code", dicText = "name")
+    private String equipmentType;
+    /**
+     * 鍘熷浠峰��
+     */
+    @Excel(name = "鍘熷��(鍏�)", width = 15, orderNum = "25")
+    @ApiModelProperty(value = "鍘熷浠峰��")
+    private BigDecimal originalValue;
+    /**
+     * 璧勯噾鏉ユ簮
+     */
+    @Excel(name = "璧勯噾鏉ユ簮", width = 15, orderNum = "26")
+    @ApiModelProperty(value = "璧勯噾鏉ユ簮")
+    private String fundingSource;
+
+    /**
+     * 鍔熻兘鐢ㄩ��
+     */
+    @Excel(name = "鍔熻兘鐢ㄩ��", width = 15, orderNum = "27")
+    @ApiModelProperty(value = "鍔熻兘鐢ㄩ��")
+    private String functionUse;
+    /**
+     * 鎬ц兘鎸囨爣
+     */
+    @Excel(name = "鎬ц兘鎸囨爣", width = 15, orderNum = "28")
+    @ApiModelProperty(value = "鎬ц兘鎸囨爣")
+    private String performanceIndicators;
+
+    /**
+     * 鍏ュ笎鏃堕棿
+     */
+    @Excel(name = "鍏ュ笎鏃堕棿", width = 15, format = "yyyy/MM/dd", orderNum = "29")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鍏ュ笎鏃堕棿")
+    private Date bookingTime;
+
+    /**
+     * 绠$悊鍒嗙被锛圓\B\C锛�
+     */
+    @Excel(name = "绠$悊鍒嗙被", width = 15, dicCode = "equipment_abc_flag", orderNum = "8")
+    @ApiModelProperty(value = "绠$悊鍒嗙被")
+    @Dict(dicCode = "equipment_abc_flag")
+    private String equipmentImportance;
+
+    /**
+     * 鎶�鏈姸鎬�
+     */
+    @Excel(name = "鎶�鏈姸鎬�", width = 15, dicCode = "technology_status", orderNum = "7")
+    @ApiModelProperty(value = "鎶�鏈姸鎬�")
+    @Dict(dicCode = "technology_status")
+    private String technologyStatus;
+
+
+
+    /** =================== 鑸畤鏁戠敓 鏈敤鐨勫瓧娈�  寮�濮�  ==========================**/
+
+    /**
+     * 鎿嶄綔绯荤粺
+     */
+    @ApiModelProperty(value = "鎿嶄綔绯荤粺")
+    private String operationSystem;
+    /**
+     * 涓昏酱杩炴帴灏哄
+     */
+    @ApiModelProperty(value = "涓昏酱杩炴帴灏哄")
+    private String spindleConnectDimension;
+    /**
+     * 绔嬮」鍗″彿
+     */
+    @ApiModelProperty(value = "绔嬮」鍗″彿")
+    private String cardNumber;
+    /**
+     * 鏄惁瀹炴柦MDC
+     */
+    @ApiModelProperty(value = "鏄惁瀹炴柦MDC")
+    private String mdcFlag;
+
+    @ApiModelProperty(value = "MDC璁惧绫诲瀷")
+    private String deviceType;
+    /**
+     * 璁惧绔彛
+     */
+    @ApiModelProperty(value = "璁惧绔彛")
+    private String equipmentPort;
+    /**
+     * 鍧愭爣鏁伴噺
+     */
+    @ApiModelProperty(value = "鍧愭爣鏁伴噺")
+    private Integer coordinateNum;
+    /**
+     * 鐗圭璁惧;鏄惁涓虹壒绉嶈澶�
+     */
+    @ApiModelProperty(value = "鏄惁鐗圭璁惧")
+    private String specialEquipment;
+
+
+
+    /**
+     * 璐ㄤ繚寮�濮嬫棩鏈�
+     */
+    @ApiModelProperty(value = "璐ㄤ繚寮�濮嬫棩鏈�")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date warrantyStartDate;
+    /**
+     * 璐ㄤ繚缁撴潫鏃ユ湡
+     */
+    @ApiModelProperty(value = "璐ㄤ繚缁撴潫鏃ユ湡")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date warrantyEndDate;
+
+    /** =================== 鑸畤鏁戠敓 鏈敤鐨勫瓧娈�  缁撴潫  ==========================**/
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "缁翠慨鐘舵��")
+    @Dict(dicCode = "equipment_repair_status")
+    private String repairStatus;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "淇濆吇鐘舵��")
+    @Dict(dicCode = "equipment_maintenance_status")
+    private String maintenanceStatus;
+
+    // 璁惧埆绠$悊 鎵嬫寔绔帴鍙d娇鐢�
+    @TableField(exist = false)
+    private String value;
+    @TableField(exist = false)
+    private String text;
+
+    public String getValue() {
+        return this.id;
+    }
+
+    public String getText() {
+        return this.equipmentCode + "[" + this.equipmentName + "]";
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentAttachment.java b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentAttachment.java
new file mode 100644
index 0000000..9adb082
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentAttachment.java
@@ -0,0 +1,68 @@
+package org.jeecg.modules.eam.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 java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 璁惧鏂囨。鍙拌处浣跨敤
+ * @Author: jeecg-boot
+ * @Date:   2025-04-16
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_equipment_attachment")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_equipment_attachment瀵硅薄", description="璁惧鏂囨。鍙拌处浣跨敤")
+public class EamEquipmentAttachment implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+	private Integer delFlag;
+	/**鏂囦欢鍔犲瘑鍚�*/
+	@ApiModelProperty(value = "璁惧ID")
+	private String equipmentId;
+	/**鏂囦欢鍔犲瘑鍚�*/
+    @ApiModelProperty(value = "鏂囦欢鍔犲瘑鍚�")
+	private String fileEncodeName;
+	/**鏂囦欢鍚嶇О*/
+    @ApiModelProperty(value = "鏂囦欢鍚嶇О")
+	private String fileName;
+	/**鏂囦欢淇濆瓨璺緞*/
+    @ApiModelProperty(value = "鏂囦欢淇濆瓨璺緞")
+	private String filePath;
+	/**鏂囦欢鍚庣紑鍚�*/
+    @ApiModelProperty(value = "鏂囦欢鍚庣紑鍚�")
+	private String fileSuffix;
+	/**鏂囦欢澶у皬*/
+    @ApiModelProperty(value = "鏂囦欢澶у皬")
+	private Long fileSize;
+	/**鎻忚堪*/
+    @ApiModelProperty(value = "鎻忚堪")
+	private String description;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentExtend.java b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentExtend.java
new file mode 100644
index 0000000..a2b06c8
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentExtend.java
@@ -0,0 +1,64 @@
+package org.jeecg.modules.eam.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;
+
+/**
+ * @Description: 璁惧鍙拌处鎵╁睍琛�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_equipment_extend")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_equipment_extend瀵硅薄", description="璁惧鍙拌处鎵╁睍琛�")
+public class EamEquipmentExtend implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private java.util.Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private java.util.Date updateTime;
+	/**淇濆吇鐘舵��*/
+	@Excel(name = "淇濆吇鐘舵��", width = 15)
+    @ApiModelProperty(value = "淇濆吇鐘舵��")
+	private String maintenanceStatus;
+	/**缁翠慨鐘舵��*/
+	@Excel(name = "缁翠慨鐘舵��", width = 15)
+    @ApiModelProperty(value = "缁翠慨鐘舵��")
+	private String repairStatus;
+	/**鏈�鏂颁簩淇濇棩鏈�*/
+    @ApiModelProperty(value = "鏈�鏂颁簩淇濇棩鏈�")
+	private java.util.Date latestSecondMaintenance;
+	/**涓嬫浜屼繚鏃ユ湡*/
+    @ApiModelProperty(value = "涓嬫浜屼繚鏃ユ湡")
+	private java.util.Date nextSecondMaintenance;
+	/**鏈�鏂颁笁淇濇棩鏈�*/
+    @ApiModelProperty(value = "鏈�鏂颁笁淇濇棩鏈�")
+	private java.util.Date latestThirdMaintenance;
+	/**涓嬫涓変繚鏃ユ湡*/
+    @ApiModelProperty(value = "涓嬫涓変繚鏃ユ湡")
+	private java.util.Date nextThirdMaintenance;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentFaultReason.java b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentFaultReason.java
new file mode 100644
index 0000000..dabe79a
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentFaultReason.java
@@ -0,0 +1,72 @@
+package org.jeecg.modules.eam.entity;
+
+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 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.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 璁惧鏁呴殰鍘熷洜缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_equipment_fault_reason")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_equipment_fault_reason瀵硅薄", description="璁惧鏁呴殰鍘熷洜缁存姢")
+public class EamEquipmentFaultReason implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+	private Integer delFlag;
+	/**鏁呴殰缂栫爜*/
+	@Excel(name = "鏁呴殰缂栫爜", width = 25)
+    @ApiModelProperty(value = "鏁呴殰缂栫爜")
+	private String faultCode;
+	/**鏁呴殰绠�绉�*/
+	@Excel(name = "鏁呴殰绠�绉�", width = 25)
+    @ApiModelProperty(value = "鏁呴殰绠�绉�")
+	private String faultName;
+	/**鏁呴殰鎻忚堪*/
+	@Excel(name = "鏁呴殰鎻忚堪", width = 50)
+    @ApiModelProperty(value = "鏁呴殰鎻忚堪")
+	private String faultDescription;
+	/**鏁呴殰鍒嗙被*/
+	@Excel(name = "鏁呴殰鍒嗙被", width = 15, dicCode = "fault_reason_category")
+    @ApiModelProperty(value = "鏁呴殰鍒嗙被")
+	@Dict(dicCode = "fault_reason_category")
+	private String faultCategory;
+
+	@TableField(exist = false)
+	private String text;
+	@TableField(exist = false)
+	private String value;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentHistoryLog.java b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentHistoryLog.java
new file mode 100644
index 0000000..814d3ad
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentHistoryLog.java
@@ -0,0 +1,70 @@
+package org.jeecg.modules.eam.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.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 璁惧灞ュ巻
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_equipment_history_log")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_equipment_history_log瀵硅薄", description="璁惧灞ュ巻")
+public class EamEquipmentHistoryLog implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+	@Excel(name = "鍒涘缓浜�", width = 15)
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private java.util.Date createTime;
+	/**璁惧ID*/
+	@Excel(name = "璁惧ID", width = 15)
+    @ApiModelProperty(value = "璁惧ID")
+	private String equipmentId;
+	/**鎿嶄綔鏍囩*/
+	@Excel(name = "鎿嶄綔鏍囩", width = 15)
+    @ApiModelProperty(value = "鎿嶄綔鏍囩")
+	@Dict(dicCode = "equipment_operation_tag")
+	private String operationTag;
+	/**鎿嶄綔浜�*/
+	@Excel(name = "鎿嶄綔浜�", width = 15)
+    @ApiModelProperty(value = "鎿嶄綔浜�")
+	@Dict(dicCode = "sys_user, realname, username")
+	private String operator;
+	/**鎿嶄綔鎻忚堪*/
+	@Excel(name = "鎿嶄綔鎻忚堪", width = 15)
+    @ApiModelProperty(value = "鎿嶄綔鎻忚堪")
+	private String description;
+	/**涓氬姟涓昏〃*/
+	@Excel(name = "涓氬姟涓昏〃", width = 15)
+    @ApiModelProperty(value = "涓氬姟涓昏〃")
+	private String businessTable;
+	/**涓氬姟id*/
+	@Excel(name = "涓氬姟id", width = 15)
+    @ApiModelProperty(value = "涓氬姟id")
+	private String businessId;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentPrecisionParameters.java b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentPrecisionParameters.java
new file mode 100644
index 0000000..481d6c7
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentPrecisionParameters.java
@@ -0,0 +1,65 @@
+package org.jeecg.modules.eam.entity;
+
+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 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.util.Date;
+/**
+ * @Description: 璁惧绮惧害鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_equipment_precision_parameters")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_equipment_precision_parameters瀵硅薄", description="璁惧绮惧害鍙傛暟")
+public class EamEquipmentPrecisionParameters implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+	@Excel(name = "鍒涘缓浜�", width = 15)
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+	@Excel(name = "鏇存柊浜�", width = 15)
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**璁惧id*/
+	@Excel(name = "璁惧id", width = 15)
+    @ApiModelProperty(value = "璁惧id")
+	private String equipmentId;
+	/**鍙傛暟id*/
+	@Excel(name = "鍙傛暟id", width = 15)
+    @ApiModelProperty(value = "鍙傛暟id")
+	private String parameterId;
+	/**鍏佸樊鍊�(mm)*/
+	@Excel(name = "鍏佸樊鍊�(mm)", width = 15)
+    @ApiModelProperty(value = "鍏佸樊鍊�(mm)")
+	private String parameterValue;
+	/**瀹為檯鍊�(mm)*/
+	@Excel(name = "瀹為檯鍊�(mm)", width = 15)
+    @ApiModelProperty(value = "瀹為檯鍊�(mm)")
+	private java.math.BigDecimal actualValue;
+	@TableField(exist = false)
+	private String parameterCode;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentProcessParameters.java b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentProcessParameters.java
new file mode 100644
index 0000000..19ecfc1
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamEquipmentProcessParameters.java
@@ -0,0 +1,63 @@
+package org.jeecg.modules.eam.entity;
+
+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 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.util.Date;
+/**
+ * @Description: 璁惧宸ヨ壓鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_equipment_process_parameters")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_equipment_process_parameters瀵硅薄", description="璁惧宸ヨ壓鍙傛暟")
+public class EamEquipmentProcessParameters implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+	@Excel(name = "鍒涘缓浜�", width = 15)
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+	@Excel(name = "鏇存柊浜�", width = 15)
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**璁惧id*/
+	@Excel(name = "璁惧id", width = 15)
+    @ApiModelProperty(value = "璁惧id")
+	private String equipmentId;
+	/**鍙傛暟id*/
+	@Excel(name = "鍙傛暟id", width = 15)
+    @ApiModelProperty(value = "鍙傛暟id")
+	private String parameterId;
+	/**鍙傛暟鑼冨洿*/
+	@Excel(name = "鍙傛暟鑼冨洿", width = 15)
+    @ApiModelProperty(value = "鍙傛暟鑼冨洿")
+	private String parameterPeriod;
+	@TableField(exist = false)
+	private String parameterCode;
+	@TableField(exist = false)
+	private String parameterUnit;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java b/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java
new file mode 100644
index 0000000..863aa72
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java
@@ -0,0 +1,143 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+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.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 鐐规宸ュ崟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_inspection_order")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="eam_inspection_order瀵硅薄", description="鐐规宸ュ崟")
+public class EamInspectionOrder implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String createBy;
+	/**鍒涘缓鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+	@Excel(name = "鍒犻櫎鏍囪", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    @TableLogic
+    private Integer delFlag;
+	/**宸ュ崟鍙�*/
+	@Excel(name = "宸ュ崟鍙�", width = 15)
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    private String orderNum;
+	/**璁惧ID*/
+	@Excel(name = "璁惧ID", width = 15)
+    @ApiModelProperty(value = "璁惧ID")
+    private String equipmentId;
+	/**鏍囧噯ID*/
+	@Excel(name = "淇濆吇鏍囧噯ID", width = 15)
+    @ApiModelProperty(value = "淇濆吇鏍囧噯ID")
+    @Dict(dictTable = "eam_maintenance_standard", dicCode = "id", dicText = "standard_name")
+    private String standardId;
+	/**鐐规鏃ユ湡*/
+	@Excel(name = "鐐规鏃ユ湡锛堣鍒掞級", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鐐规鏃ユ湡")
+    private Date inspectionDate;
+    /**鐐规杩囨湡鏃堕棿*/
+    @Excel(name = "鐐规杩囨湡鏃堕棿", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鐐规杩囨湡鏃堕棿")
+    private Date expirationTime;
+	/**鐐规鏃堕棿*/
+	@Excel(name = "鐐规鏃堕棿锛堝疄闄咃級", width = 15, 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 operateTime;
+	/**鐐规浜�*/
+	@Excel(name = "鐐规浜�", width = 15)
+    @ApiModelProperty(value = "鐐规浜�-鏄鍙栦汉")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String operator;
+	/**鍒涘缓鏂瑰紡*/
+	@Excel(name = "鍒涘缓鏂瑰紡", width = 15)
+    @ApiModelProperty(value = "鍒涘缓鏂瑰紡")
+    @Dict(dicCode = "order_creation_method")
+    private String creationMethod;
+	/**鐐规鐘舵��*/
+	@Excel(name = "鐐规鐘舵��", width = 15)
+    @ApiModelProperty(value = "鐐规鐘舵��   寰呯偣妫�-鐐规涓�-寰呯‘璁�-宸插畬鎴�-浣滃簾")
+    @Dict(dicCode = "inspection_status")
+    private String inspectionStatus;
+	/**鐝粍闀跨‘璁�*/
+	@Excel(name = "鐝粍闀跨‘璁�", width = 15)
+    @ApiModelProperty(value = "鐝粍闀跨‘璁�--棰嗗彇鍚庝骇鐢�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String confirmUser;
+	/**纭鏃堕棿*/
+	@Excel(name = "纭鏃堕棿", width = 15, 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 confirmTime;
+    /**纭鎰忚*/
+    @ApiModelProperty(value = "纭鎰忚")
+    private String confirmComment;
+    /** 纭绫诲瀷 1 閫氳繃  2 椹冲洖 */
+    @ApiModelProperty(value = "纭绫诲瀷")
+    @Dict(dicCode = "approved_rejected")
+    private String confirmDealType;
+	/**澶囨敞*/
+	@Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞-鐐规宸ュ崟鍒涘缓澶囨敞")
+    private String remark;
+	/**鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧*/
+	@Excel(name = "鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧-鎵ц鏃�", width = 15)
+    @ApiModelProperty(value = "鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧")
+    private String imageFiles;
+
+    /**鏍囧噯鍚嶇О*/
+    @ApiModelProperty(value = "鏍囧噯鍚嶇О")
+    private transient String standardName;
+    /**淇濆吇鍛ㄦ湡;鍗曚綅:澶�*/
+    @ApiModelProperty(value = "淇濆吇鍛ㄦ湡;鍗曚綅:澶�")
+    private transient Integer maintenancePeriod;
+    /**璁惧缂栧彿*/
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    private transient String equipmentCode;
+
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    @TableField(exist = false)
+    private String equipmentName;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java b/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java
new file mode 100644
index 0000000..00962c2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java
@@ -0,0 +1,86 @@
+package org.jeecg.modules.eam.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.util.Date;
+
+/**
+ * @Description: 鐐规宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_inspection_order_detail")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="eam_inspection_order_detail瀵硅薄", description="鐐规宸ュ崟鏄庣粏")
+public class EamInspectionOrderDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+	/**宸ュ崟ID*/
+	@Excel(name = "宸ュ崟ID", width = 15)
+    @ApiModelProperty(value = "宸ュ崟ID")
+    private String orderId;
+	/**鐐规缁撴灉*/
+	@Excel(name = "鐐规缁撴灉", width = 15)
+    @ApiModelProperty(value = "鐐规缁撴灉-姝e父-寮傚父")
+    private String inspectionResult;
+	/**寮傚父鎻忚堪*/
+	@Excel(name = "寮傚父鎻忚堪", width = 15)
+    @ApiModelProperty(value = "寮傚父鎻忚堪")
+    private String exceptionDescription;
+    /**寮傚父鏄惁淇濅慨*/
+    @Excel(name = "寮傚父鏄惁鎶ヤ慨", width = 15)
+    @ApiModelProperty(value = "寮傚父鏄惁鎶ヤ慨")
+    private String reportFlag;
+    /**淇濆吇椤瑰簭鍙�*/
+    @ApiModelProperty(value = "淇濆吇椤瑰簭鍙�")
+    private Integer itemCode;
+    /**淇濆吇椤�*/
+    @ApiModelProperty(value = "淇濆吇椤�")
+    private String itemName;
+    /**淇濆吇瑕佹眰*/
+    @ApiModelProperty(value = "淇濆吇瑕佹眰")
+    private String  itemDemand;
+
+    public EamInspectionOrderDetail(){}
+
+    public EamInspectionOrderDetail(EamMaintenanceStandardDetail detail) {
+        this.itemCode = detail.getItemCode();
+        this.itemName = detail.getItemName();
+        this.itemDemand = detail.getItemDemand();
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrder.java b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrder.java
new file mode 100644
index 0000000..a69862d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrder.java
@@ -0,0 +1,149 @@
+package org.jeecg.modules.eam.entity;
+
+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.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+/**
+ * @Description: 淇濆吇宸ュ崟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_maintenance_order")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_maintenance_order", description="淇濆吇宸ュ崟")
+public class EamMaintenanceOrder implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+	private Integer delFlag;
+	/**宸ュ崟鍙�*/
+	@Excel(name = "宸ュ崟鍙�", width = 15)
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+	private String orderNum;
+	/**璁惧ID*/
+    @ApiModelProperty(value = "璁惧ID")
+//	@Dict(dicCode = "eam_equipment, equipment_code, id")
+	private String equipmentId;
+	/**鏍囧噯ID*/
+    @ApiModelProperty(value = "鏍囧噯ID")
+	@Dict(dicCode = "eam_maintenance_standard, standard_name, id")
+	private String standardId;
+	/**璁″垝淇濆吇鏃ユ湡*/
+    @ApiModelProperty(value = "璁″垝淇濆吇鏃ユ湡")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date maintenanceDate;
+	/**瀹為檯寮�濮嬫椂闂�*/
+    @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date actualStartTime;
+	/**瀹為檯缁撴潫鏃堕棿*/
+    @ApiModelProperty(value = "瀹為檯缁撴潫鏃堕棿")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date actualEndTime;
+	/**淇濆吇浜�*/
+    @ApiModelProperty(value = "淇濆吇浜�")
+	@Dict(dicCode = "sys_user, realname, username")
+	private String operator;
+	/**淇濆吇鐘舵��*/
+    @ApiModelProperty(value = "淇濆吇鐘舵��")
+	@Dict(dicCode = "week_maintenance_status")
+	private String maintenanceStatus;
+	/**鍒涘缓鏂瑰紡*/
+    @ApiModelProperty(value = "鍒涘缓鏂瑰紡")
+	@Dict(dicCode = "order_creation_method")
+	private String creationMethod;
+	/**纭浜�*/
+    @ApiModelProperty(value = "纭浜�")
+	@Dict(dicCode = "sys_user, realname, username")
+	private String confirmUser;
+	/**纭鏃堕棿*/
+    @ApiModelProperty(value = "纭鏃堕棿")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date confirmTime;
+	/** 纭绫诲瀷 1 閫氳繃  2 椹冲洖 */
+	@ApiModelProperty(value = "纭绫诲瀷")
+	@Dict(dicCode = "approved_rejected")
+	private String confirmDealType;
+	/**淇濆吇鎵ц鍥剧墖;id浠ラ�楀彿鍒嗛殧*/
+    @ApiModelProperty(value = "淇濆吇鎵ц鍥剧墖;id浠ラ�楀彿鍒嗛殧")
+	private String imageFiles;
+	/**澶囨敞*/
+    @ApiModelProperty(value = "澶囨敞")
+	private String remark;
+	/**纭鎰忚*/
+	@ApiModelProperty(value = "纭鎰忚")
+	private String confirmComment;
+	/**鍒濋獙鏀朵汉*/
+	@ApiModelProperty(value = "鍒濋獙鏀朵汉")
+	@Dict(dicCode = "sys_user, realname, username")
+	private String initialAcceptanceUser;
+	/**鍒濋獙鏀舵椂闂�*/
+	@ApiModelProperty(value = "鍒濋獙鏀舵椂闂�")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date initialAcceptanceTime;
+	/**鍒濋獙鏀舵剰瑙�*/
+	@ApiModelProperty(value = "鍒濋獙鏀舵剰瑙�")
+	private String initialAcceptanceComment;
+	/**鍒濋獙鏀堕檮浠�*/
+	@ApiModelProperty(value = "鍒濋獙鏀堕檮浠�")
+	private String initialAcceptanceFiles;
+	/**缁堥獙鏀朵汉*/
+	@ApiModelProperty(value = "缁堥獙鏀朵汉")
+	@Dict(dicCode = "sys_user, realname, username")
+	private String finalAcceptanceUser;
+	/**缁堥獙鏀舵椂闂�*/
+	@ApiModelProperty(value = "缁堥獙鏀舵椂闂�")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date finalAcceptanceTime;
+	/**缁堥獙鏀舵剰瑙�*/
+	@ApiModelProperty(value = "缁堥獙鏀舵剰瑙�")
+	private String finalAcceptanceComment;
+	/**缁堥獙鏀堕檮浠�*/
+	@ApiModelProperty(value = "缁堥獙鏀堕檮浠�")
+	private String finalAcceptanceFiles;
+
+
+	//鍒楄〃灞曠ず
+	@TableField(exist = false)
+	private String equipmentCode;
+	@TableField(exist = false)
+	private String equipmentName;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrderDetail.java b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrderDetail.java
new file mode 100644
index 0000000..aa018f2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceOrderDetail.java
@@ -0,0 +1,76 @@
+package org.jeecg.modules.eam.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 java.io.Serializable;
+import java.util.Date;
+/**
+ * @Description: 淇濆吇宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_maintenance_order_detail")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_maintenance_order_detail", description="淇濆吇宸ュ崟鏄庣粏")
+public class EamMaintenanceOrderDetail implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**宸ュ崟ID*/
+    @ApiModelProperty(value = "宸ュ崟ID")
+	private String orderId;
+	/**淇濆吇椤瑰簭鍙�*/
+	@ApiModelProperty(value = "淇濆吇椤瑰簭鍙�")
+	private Integer itemCode;
+	/**淇濆吇椤�*/
+	@ApiModelProperty(value = "淇濆吇椤�")
+	private String itemName;
+	/**瀛愪繚鍏婚」*/
+	@ApiModelProperty(value = "瀛愪繚鍏婚」")
+	private String subItemName;
+	/**淇濆吇瑕佹眰*/
+	@ApiModelProperty(value = "淇濆吇瑕佹眰")
+	private String itemDemand;
+	/**淇濆吇缁撴灉*/
+    @ApiModelProperty(value = "淇濆吇缁撴灉")
+	private String maintenanceResult;
+	/**寮傚父鎻忚堪*/
+    @ApiModelProperty(value = "寮傚父鎻忚堪")
+	private String exceptionDescription;
+	/**鎶ヤ慨鏍囪*/
+    @ApiModelProperty(value = "鎶ヤ慨鏍囪")
+	private String reportFlag;
+
+	public EamMaintenanceOrderDetail(){}
+
+	public EamMaintenanceOrderDetail(EamMaintenanceStandardDetail detail) {
+		this.itemCode = detail.getItemCode();
+		this.itemName = detail.getItemName();
+		this.subItemName = detail.getSubItemName();
+		this.itemDemand = detail.getItemDemand();
+	}
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
new file mode 100644
index 0000000..5dabd18
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
@@ -0,0 +1,141 @@
+package org.jeecg.modules.eam.entity;
+
+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.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 淇濆吇鏍囧噯
+ * @Author: jeecg-boot
+ * @Date: 2025-03-26
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_maintenance_standard")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "eam_maintenance_standard瀵硅薄", description = "淇濆吇鏍囧噯")
+public class EamMaintenanceStandard implements Serializable {
+
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**
+     * 鍒涘缓浜�
+     */
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+    /**
+     * 鏇存柊浜�
+     */
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+    /**
+     * 鍒犻櫎鏍囪
+     */
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    private Integer delFlag;
+    /**
+     * 鏍囧噯缂栫爜
+     */
+    @ApiModelProperty(value = "鏍囧噯缂栫爜")
+    private String standardCode;
+    /**
+     * 鏍囧噯鍚嶇О
+     */
+    @ApiModelProperty(value = "鏍囧噯鍚嶇О")
+    private String standardName;
+    /**
+     * 淇濆吇鍛ㄦ湡;鍗曚綅:澶�
+     */
+    @ApiModelProperty(value = "淇濆吇鍛ㄦ湡;鍗曚綅:澶�")
+    private Integer maintenancePeriod;
+    /**
+     * 鍒濆鏃ユ湡 浠庡摢涓�澶╁紑濮嬭绠椾笅娆′繚鍏绘棩鏈�
+     */
+    @ApiModelProperty(value = "鍒濆鏃ユ湡")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date initialDate;
+    /**
+     * 淇濆吇鍒嗙被
+     */
+    @ApiModelProperty(value = "淇濆吇鍒嗙被")
+    @Dict(dicCode = "maintenance_category")
+    private String maintenanceCategory;
+    /**
+     * 璁惧缂栧彿
+     */
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    @Dict(dicCode = "eam_equipment, equipment_code, id")
+    private String equipmentId;
+    /**
+     * 鏍囧噯鐘舵��
+     */
+    @ApiModelProperty(value = "鏍囧噯鐘舵��")
+    @Dict(dicCode = "maintenance_standard_status")
+    private String standardStatus;
+    /**
+     * 鏍囧噯鐗堟湰
+     */
+    @ApiModelProperty(value = "鏍囧噯鐗堟湰")
+    private Integer standardVersion;
+    /**
+     * 鏂囦欢缂栧彿
+     */
+    @ApiModelProperty(value = "鏂囦欢缂栧彿")
+    private String fileCode;
+    /**
+     * 鍙傝�冩枃浠�
+     */
+    @ApiModelProperty(value = "鍙傝�冩枃浠�")
+    private String referenceFile;
+    /**
+     * 鏈�鏂扮敓鎴愬伐鍗曟椂闂�
+     * 涓嬩竴娆$敓鎴愭椂闂翠负姝ゆ椂闂� + 淇濆吇鍛ㄦ湡
+     */
+    @ApiModelProperty(value = "鏈�鏂扮敓鎴愬伐鍗曟椂闂�")
+    private Date lastGenerateTime;
+
+    //鍒楄〃灞曠ず
+    @TableField(exist = false)
+    private String equipmentCode;
+    @TableField(exist = false)
+    private String equipmentName;
+    @TableField(exist = false)
+    private String keyword;
+    /**
+     * 璁惧缂栧彿鎷兼帴
+     */
+    @TableField(exist = false)
+    private String equipmentText;
+
+    public String getEquipmentText() {
+        return equipmentCode + "[" + equipmentName + "]";
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java
new file mode 100644
index 0000000..efd0f47
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java
@@ -0,0 +1,106 @@
+package org.jeecg.modules.eam.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.jeecg.modules.eam.dto.MaintenanceStandardImport;
+import org.jeecg.modules.eam.dto.SecondMaintenanceStandardImport;
+import org.jeecg.modules.eam.dto.ThirdMaintenanceStandardImport;
+import org.jeecg.modules.eam.dto.WeekMaintenanceStandardImport;
+
+import java.io.Serializable;
+import java.util.Date;
+/**
+ * @Description: 淇濆吇鏍囧噯鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-03-26
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_maintenance_standard_detail")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_maintenance_standard_detail瀵硅薄", description="淇濆吇鏍囧噯鏄庣粏")
+public class EamMaintenanceStandardDetail implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**淇濆吇鏍囧噯ID*/
+	@ApiModelProperty(value = "淇濆吇鏍囧噯ID")
+	private String standardId;
+	/**淇濆吇椤瑰簭鍙�*/
+	@ApiModelProperty(value = "淇濆吇椤瑰簭鍙�")
+	private Integer itemCode;
+	/**閮ㄤ綅*/
+	@ApiModelProperty(value = "閮ㄤ綅")
+	private String itemPart;
+	/**淇濆吇椤�*/
+    @ApiModelProperty(value = "淇濆吇椤�")
+	private String itemName;
+	/**瀛愪繚鍏婚」*/
+	@ApiModelProperty(value = "瀛愪繚鍏婚」")
+	private String subItemName;
+	/**妫�鏌ユ爣鍑嗘垨瑕佹眰*/
+    @ApiModelProperty(value = "妫�鏌ユ爣鍑嗘垨瑕佹眰")
+	private String itemDemand;
+	/**淇濆吇瑕佹眰2*/
+	@ApiModelProperty(value = "淇濆吇瑕佹眰2")
+	private String itemDemandAlias;
+	/**妫�鏌ユ柟娉�*/
+	@ApiModelProperty(value = "妫�鏌ユ柟娉�")
+	private String checkMethod;
+
+
+	public EamMaintenanceStandardDetail(){}
+
+	public EamMaintenanceStandardDetail(MaintenanceStandardImport dto) {
+		this.itemCode = dto.getItemCode();
+		this.itemPart = dto.getItemPart();
+		this.itemName = dto.getItemName();
+		this.itemDemand = dto.getItemDemand();
+	}
+
+	public EamMaintenanceStandardDetail(WeekMaintenanceStandardImport dto) {
+		this.itemCode = dto.getItemCode();
+		this.itemName = dto.getItemName();
+		this.subItemName = dto.getSubItemName() + " " + (dto.getItemPart() == null ? "" : dto.getItemPart());
+		this.itemDemand = dto.getItemDemand();
+	}
+
+	public EamMaintenanceStandardDetail(SecondMaintenanceStandardImport dto) {
+		this.itemCode = dto.getItemCode();
+		this.itemName = dto.getItemName();
+		this.itemPart = dto.getItemPart();
+		this.itemDemand = dto.getItemDemand();
+		this.itemDemandAlias = dto.getItemDemandAlias();
+		this.checkMethod = dto.getCheckMethod();
+	}
+
+	public EamMaintenanceStandardDetail(ThirdMaintenanceStandardImport dto) {
+		this.itemCode = dto.getItemCode();
+		this.itemName = dto.getItemName();
+		this.itemPart = dto.getItemPart();
+		this.itemDemand = dto.getItemDemand();
+		this.itemDemandAlias = dto.getItemDemandAlias();
+		this.checkMethod = dto.getCheckMethod();
+	}
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamPrecisionCheckDetail.java b/src/main/java/org/jeecg/modules/eam/entity/EamPrecisionCheckDetail.java
new file mode 100644
index 0000000..fcf65a8
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamPrecisionCheckDetail.java
@@ -0,0 +1,79 @@
+package org.jeecg.modules.eam.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 java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 璁惧绮惧害妫�娴嬫槑缁�
+ * @Author: jeecg-boot
+ * @Date: 2025-05-13
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_precision_check_detail")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "eam_precision_check_detail瀵硅薄", description = "璁惧绮惧害妫�娴嬫槑缁�")
+public class EamPrecisionCheckDetail implements Serializable {
+
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**
+     * 鍒涘缓浜�
+     */
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+    /**
+     * 鏇存柊浜�
+     */
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+    /**
+     * 宸ュ崟ID
+     */
+    @ApiModelProperty(value = "宸ュ崟ID")
+    private String orderId;
+    /**
+     * 璁惧ID
+     */
+    @ApiModelProperty(value = "璁惧ID")
+    private String equipmentId;
+    /**
+     * 鍙傛暟id
+     */
+    @ApiModelProperty(value = "鍙傛暟id")
+    private String parameterId;
+    /**
+     * 鍏佸樊鍊�(mm)
+     */
+    @ApiModelProperty(value = "鍏佸樊鍊�(mm)")
+    private String parameterValue;
+    /**
+     * 瀹炴祴鍊�
+     */
+    @ApiModelProperty(value = "瀹炴祴鍊�")
+    private java.math.BigDecimal actualValue;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamPrecisionParameters.java b/src/main/java/org/jeecg/modules/eam/entity/EamPrecisionParameters.java
new file mode 100644
index 0000000..4c72d1d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamPrecisionParameters.java
@@ -0,0 +1,61 @@
+package org.jeecg.modules.eam.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.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+/**
+ * @Description: 绮惧害鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_precision_parameters")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_precision_parameters瀵硅薄", description="绮惧害鍙傛暟缁存姢")
+public class EamPrecisionParameters implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+	private Integer delFlag;
+	/**鍙傛暟缂栫爜*/
+	@Excel(name = "鍙傛暟缂栫爜", width = 25)
+    @ApiModelProperty(value = "鍙傛暟缂栫爜")
+	private String parameterCode;
+	/**妫�娴嬮」鐩�*/
+	@Excel(name = "妫�娴嬮」鐩�", width = 25)
+    @ApiModelProperty(value = "妫�娴嬮」鐩�")
+	private String parameterName;
+	/**鍙傛暟鍒嗙被*/
+	@Excel(name = "鍙傛暟鍒嗙被", width = 15, dicCode = "precision_parameters_category")
+	@ApiModelProperty(value = "鍙傛暟鍒嗙被")
+	@Dict(dicCode = "precision_parameters_category")
+	private String parameterCategory;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamProcessParameters.java b/src/main/java/org/jeecg/modules/eam/entity/EamProcessParameters.java
new file mode 100644
index 0000000..f313c9f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamProcessParameters.java
@@ -0,0 +1,65 @@
+package org.jeecg.modules.eam.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.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+/**
+ * @Description: 宸ュ簭鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_process_parameters")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_process_parameters瀵硅薄", description="宸ュ簭鍙傛暟缁存姢")
+public class EamProcessParameters implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+	private Integer delFlag;
+	/**鍙傛暟缂栫爜*/
+	@Excel(name = "鍙傛暟缂栫爜", width = 25)
+    @ApiModelProperty(value = "鍙傛暟缂栫爜")
+	private String parameterCode;
+	/**鍙傛暟鍚嶇О*/
+	@Excel(name = "鍙傛暟鍚嶇О", width = 25)
+    @ApiModelProperty(value = "鍙傛暟鍚嶇О")
+	private String parameterName;
+	/**鍙傛暟鍒嗙被*/
+	@Excel(name = "鍙傛暟鍒嗙被", width = 15, dicCode = "process_parameters_category")
+    @ApiModelProperty(value = "鍙傛暟鍒嗙被")
+	@Dict(dicCode = "process_parameters_category")
+	private String parameterCategory;
+	/**璁¢噺鍗曚綅*/
+	@Excel(name = "璁¢噺鍗曚綅", width = 15)
+    @ApiModelProperty(value = "璁¢噺鍗曚綅")
+	private String parameterUnit;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java b/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java
new file mode 100644
index 0000000..c28502d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamRepairOrder.java
@@ -0,0 +1,194 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+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.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+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 EamRepairOrder extends JeecgEntity implements Serializable {
+
+    private static final long serialVersionUID = -2336763554235629574L;
+
+    /**
+     * 鍒犻櫎鏍囪
+     */
+    @Excel(name = "鍒犻櫎鏍囪", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    private Integer delFlag;
+    /**
+     * 宸ュ崟缂栧彿
+     */
+    @Excel(name = "宸ュ崟缂栧彿", width = 15)
+    @ApiModelProperty(value = "宸ュ崟缂栧彿")
+    private String repairCode;
+    /**
+     * 鎶ヤ慨ID
+     */
+    @Excel(name = "鎶ヤ慨ID", width = 15)
+    @ApiModelProperty(value = "鎶ヤ慨ID")
+    private String reportId;
+    /**
+     * 璁惧ID
+     */
+    @Excel(name = "璁惧ID", width = 15)
+    @ApiModelProperty(value = "璁惧ID")
+//    @Dict(dictTable = "eam_equipment", dicCode = "id", dicText = "equipment_code")
+    private String equipmentId;
+    /**
+     * 缁翠慨鐘舵��
+     */
+    @Excel(name = "缁翠慨鐘舵��", width = 15)
+    @ApiModelProperty(value = "缁翠慨鐘舵��")
+    @Dict(dicCode = "report_repair_status")
+    private String repairStatus;
+    /**
+     * 缁翠慨寮�濮嬫椂闂�
+     */
+    @ApiModelProperty(value = "缁翠慨寮�濮嬫椂闂�")
+    private Date actualStartTime;
+    /**
+     * 缁翠慨缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value = "缁翠慨缁撴潫鏃堕棿")
+    private Date actualEndTime;
+
+    /**
+     * 缁翠慨纭缁撴灉
+     */
+    @ApiModelProperty(value = "缁翠慨纭缁撴灉")
+    @Dict(dicCode = "yn")
+    private String repairConfirm;
+    /**
+     * 缁翠慨纭鎰忚
+     */
+    @ApiModelProperty(value = "缁翠慨纭鎰忚")
+    private String repairConfirmComment;
+    /**
+     * 缁翠慨纭鏃堕棿
+     */
+    @ApiModelProperty(value = "缁翠慨纭鏃堕棿")
+    private Date repairConfirmTime;
+    /**
+     * 鏁呴殰鍘熷洜
+     */
+    @Excel(name = "鏁呴殰鍘熷洜", width = 15)
+    @ApiModelProperty(value = "鏁呴殰鍘熷洜")
+    private String faultReason;
+    /**
+     * 缁翠慨缁撴灉鎻忚堪
+     */
+    @Excel(name = "缁翠慨缁撴灉鎻忚堪", width = 15)
+    @ApiModelProperty(value = "缁翠慨缁撴灉鎻忚堪")
+    private String repairDescription;
+    /**
+     * 缁翠慨璐熻矗浜�
+     */
+    @Excel(name = "缁翠慨璐熻矗浜�", width = 15)
+    @ApiModelProperty(value = "缁翠慨璐熻矗浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String repairer;
+
+    /**
+     * 纭棰嗗
+     */
+    @ApiModelProperty(value = "纭棰嗗")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String leaderUser;
+    /**
+     * 棰嗗纭缁撴灉
+     */
+    @ApiModelProperty(value = "棰嗗纭缁撴灉")
+    @Dict(dicCode = "yn")
+    private String leaderConfirm;
+    /**
+     * 纭鎰忚
+     */
+    @ApiModelProperty(value = "纭鎰忚")
+    private String leaderConfirmComment;
+    /**
+     * 纭鏃堕棿
+     */
+    @ApiModelProperty(value = "纭鏃堕棿")
+    private Date leaderConfirmTime;
+    /**
+     * 鏈哄姩鍔炵淮淇汉
+     */
+    @ApiModelProperty(value = "鏈哄姩鍔炵淮淇汉")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String externalRepairer;
+    /**
+     * 鏈哄姩鍔炵‘璁ょ粨鏋�
+     */
+    @ApiModelProperty(value = "鏈哄姩鍔炵‘璁ょ粨鏋�")
+    @Dict(dicCode = "yn")
+    private String externalConfirm;
+    /**
+     * 鏈哄姩鍔炵‘璁ゆ剰瑙�
+     */
+    @ApiModelProperty(value = "鏈哄姩鍔炵‘璁ゆ剰瑙�")
+    private String externalConfirmComment;
+    /**
+     * 鏈哄姩鍔炵‘璁ゆ椂闂�
+     */
+    @ApiModelProperty(value = "鏈哄姩鍔炵‘璁ゆ椂闂�")
+    private Date externalConfirmTime;
+    /**
+     * 濮斿璐熻矗浜�
+     */
+    @Excel(name = "濮斿璐熻矗浜�", width = 15)
+    @ApiModelProperty(value = "濮斿璐熻矗浜�")
+    private String outsourcedUser;
+    /**
+     * 鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧
+     */
+    @Excel(name = "鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧", width = 15)
+    @ApiModelProperty(value = "鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧")
+    private String imageFiles;
+    /**
+     * 鎿嶄綔宸ョ‘璁�
+     */
+    @ApiModelProperty(value = "鎿嶄綔宸ョ‘璁�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String confirmer;
+    /**
+     * 鎿嶄綔宸ョ‘璁ゆ剰瑙�
+     */
+    @ApiModelProperty(value = "鎿嶄綔宸ョ‘璁ゆ剰瑙�")
+    private String confirmComment;
+    /**
+     * 鎿嶄綔宸ョ‘璁ゆ椂闂�
+     */
+    @ApiModelProperty(value = "鎿嶄綔宸ョ‘璁ゆ椂闂�")
+    private Date confirmTime;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    private String equipmentName;
+    /**
+     * 璁惧缂栫爜
+     */
+    @TableField(exist = false)
+    @ApiModelProperty(value = "璁惧缂栫爜")
+    private String equipmentCode;
+    @TableField(exist = false)
+    private String installationPosition;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamReportRepair.java b/src/main/java/org/jeecg/modules/eam/entity/EamReportRepair.java
new file mode 100644
index 0000000..f0e3429
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamReportRepair.java
@@ -0,0 +1,121 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+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.api.vo.FileUploadResult;
+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;
+import java.util.List;
+
+/**
+ * @Description: 鏁呴殰鎶ヤ慨
+ * @Author: Lius
+ * @Date: 2025-04-01
+ */
+@Data
+@TableName("eam_report_repair")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "eam_report_repair瀵硅薄", description = "鏁呴殰鎶ヤ慨")
+public class EamReportRepair extends JeecgEntity implements Serializable {
+
+	private static final long serialVersionUID = 3966250456529614720L;
+
+    /**
+     * 璁惧ID
+     */
+    @Excel(name = "璁惧ID", width = 15, dictTable = "eam_equipment", dicCode = "id", dicText = "equipment_code")
+    @ApiModelProperty(value = "璁惧ID")
+//    @Dict(dictTable = "eam_equipment", dicCode = "id", dicText = "equipment_code")
+    private String equipmentId;
+    /**
+     * 璁惧鍚嶇О
+     */
+    @Excel(name = "璁惧鍚嶇О", width = 15)
+    @TableField(exist = false)
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    private String equipmentName;
+    /**
+     * 鍒犻櫎鏍囪
+     */
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    @Dict(dicCode = "del_flag")
+    private Integer delFlag;
+    /**
+     * 鏁呴殰寮�濮嬫椂闂�
+     */
+    @ApiModelProperty(value = "鏁呴殰寮�濮嬫椂闂�")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鏁呴殰寮�濮嬫椂闂�", width = 15, format = "yyyy-MM-dd HH:mm:ss")
+    private Date faultStartTime;
+    /**
+     * 鏄惁鍋滄満
+     */
+    @Excel(name = "鏄惁鍋滄満", width = 15, dicCode = "breakdown_flag")
+    @ApiModelProperty(value = "鏄惁鍋滄満")
+    @Dict(dicCode = "breakdown_flag")
+    private String breakdownFlag;
+    /**
+     * 鏁呴殰绠�绉�
+     */
+    @Excel(name = "鏁呴殰绠�绉�", width = 15)
+    @ApiModelProperty(value = "鏁呴殰绠�绉�")
+    private String faultName;
+    /**
+     * 鏁呴殰鍒嗙被
+     */
+    @Excel(name = "鏁呴殰鍒嗙被", width = 15, dicCode = "fault_reason_category")
+    @ApiModelProperty(value = "鏁呴殰鍒嗙被")
+    @Dict(dicCode = "fault_reason_category")
+    private String faultType;
+    /**
+     * 鏁呴殰鎻忚堪
+     */
+    @Excel(name = "鏁呴殰鎻忚堪", width = 15)
+    @ApiModelProperty(value = "鏁呴殰鎻忚堪")
+    private String faultDescription;
+    /**
+     * 鎶ヤ慨鐘舵��
+     */
+    @Excel(name = "鎶ヤ慨鐘舵��", width = 15, dicCode = "report_repair_status")
+    @ApiModelProperty(value = "鎶ヤ慨鐘舵��")
+    @Dict(dicCode = "report_repair_status")
+    private String reportStatus;
+    /**
+     * 鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧
+     */
+    @Excel(name = "鐓х墖", width = 15, type = 2)
+    @ApiModelProperty(value = "鐓х墖")
+    private String imageFiles;
+
+    /**鐓х墖*/
+    @ApiModelProperty(value = "鐓х墖")
+    @TableField(exist = false)
+    private List<FileUploadResult> imageFilesResult;
+
+    /**
+     * 澶囨敞
+     */
+    @Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    //鍒楄〃灞曠ず
+    @TableField(exist = false)
+    private String equipmentCode;
+    @TableField(exist = false)
+    private String installationPosition;
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamSysFiles.java b/src/main/java/org/jeecg/modules/eam/entity/EamSysFiles.java
new file mode 100644
index 0000000..f42f08f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/entity/EamSysFiles.java
@@ -0,0 +1,75 @@
+package org.jeecg.modules.eam.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.util.Date;
+
+/**
+ * @Description: 璁惧闄勪欢绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+@Data
+@TableName("eam_sys_files")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_sys_files瀵硅薄", description="璁惧闄勪欢绠$悊")
+public class EamSysFiles implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+	@Excel(name = "鍒涘缓浜�", width = 15)
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	private Date createTime;
+	/**鏇存柊浜�*/
+	@Excel(name = "鏇存柊浜�", width = 15)
+    @ApiModelProperty(value = "鏇存柊浜�")
+	private String updateBy;
+	/**鏇存柊鏃堕棿*/
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+	private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+	@Excel(name = "鍒犻櫎鏍囪", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+	private Integer delFlag;
+	/**鏂囦欢鍔犲瘑鍚�*/
+	@Excel(name = "鏂囦欢鍔犲瘑鍚�", width = 15)
+    @ApiModelProperty(value = "鏂囦欢鍔犲瘑鍚�")
+	private String fileEncodeName;
+	/**鏂囦欢鍘熷鍚嶇О*/
+	@Excel(name = "鏂囦欢鍘熷鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鏂囦欢鍘熷鍚嶇О")
+	private String fileName;
+	/**鏂囦欢淇濆瓨璺緞*/
+	@Excel(name = "鏂囦欢淇濆瓨璺緞", width = 15)
+    @ApiModelProperty(value = "鏂囦欢淇濆瓨璺緞")
+	private String filePath;
+	/**鏂囦欢鍚庣紑鍚�*/
+	@Excel(name = "鏂囦欢鍚庣紑鍚�", width = 15)
+    @ApiModelProperty(value = "鏂囦欢鍚庣紑鍚�")
+	private String fileSuffix;
+	/**鏂囦欢澶у皬*/
+	@Excel(name = "鏂囦欢澶у皬", width = 15)
+    @ApiModelProperty(value = "鏂囦欢澶у皬")
+	private Long fileSize;
+	/**鎻忚堪*/
+	@Excel(name = "鎻忚堪", width = 15)
+    @ApiModelProperty(value = "鎻忚堪")
+	private String description;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentAttachmentMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentAttachmentMapper.java
new file mode 100644
index 0000000..ca99a69
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentAttachmentMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamEquipmentAttachment;
+
+/**
+ * @Description: 璁惧鏂囨。鍙拌处浣跨敤
+ * @Author: jeecg-boot
+ * @Date:   2025-04-16
+ * @Version: V1.0
+ */
+public interface EamEquipmentAttachmentMapper extends BaseMapper<EamEquipmentAttachment> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentExtendMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentExtendMapper.java
new file mode 100644
index 0000000..47b3123
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentExtendMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import org.jeecg.modules.eam.entity.EamEquipmentExtend;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 璁惧鍙拌处鎵╁睍琛�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface EamEquipmentExtendMapper extends BaseMapper<EamEquipmentExtend> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentFaultReasonMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentFaultReasonMapper.java
new file mode 100644
index 0000000..05c4b9b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentFaultReasonMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamEquipmentFaultReason;
+
+/**
+ * @Description: 璁惧鏁呴殰鍘熷洜缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface EamEquipmentFaultReasonMapper extends BaseMapper<EamEquipmentFaultReason> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentHistoryLogMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentHistoryLogMapper.java
new file mode 100644
index 0000000..bf68bc1
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentHistoryLogMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import org.jeecg.modules.eam.entity.EamEquipmentHistoryLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 璁惧灞ュ巻
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface EamEquipmentHistoryLogMapper extends BaseMapper<EamEquipmentHistoryLog> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java
new file mode 100644
index 0000000..92bffec
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java
@@ -0,0 +1,35 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.eam.entity.EamEquipment;
+
+import java.util.List;
+
+/**
+ * @Description: 璁惧鍙拌处
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface EamEquipmentMapper extends BaseMapper<EamEquipment> {
+    /**
+     * 鏌ヨ浜х嚎涓嬬殑璁惧
+     * @param productionId 浜х嚎id
+     * @return
+     */
+    @Select("select * from eam_equipment where del_flag = 0 and org_id = #{productionId}")
+    List<EamEquipment> queryByProductionId(String productionId);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param queryWrapper
+     * @return
+     */
+    IPage<EamEquipment> queryPageList(IPage<EamEquipment> page, @Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentPrecisionParametersMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentPrecisionParametersMapper.java
new file mode 100644
index 0000000..0f9d295
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentPrecisionParametersMapper.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.EamEquipmentPrecisionParameters;
+
+/**
+ * @Description: 璁惧绮惧害鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+public interface EamEquipmentPrecisionParametersMapper extends BaseMapper<EamEquipmentPrecisionParameters> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param queryWrapper
+     * @return
+     */
+    IPage<EamEquipmentPrecisionParameters> queryPageList(Page<EamEquipmentPrecisionParameters> page, @Param(Constants.WRAPPER) QueryWrapper<EamEquipmentPrecisionParameters> queryWrapper);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentProcessParametersMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentProcessParametersMapper.java
new file mode 100644
index 0000000..d569156
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentProcessParametersMapper.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.EamEquipmentProcessParameters;
+
+/**
+ * @Description: 璁惧宸ヨ壓鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+public interface EamEquipmentProcessParametersMapper extends BaseMapper<EamEquipmentProcessParameters> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param queryWrapper
+     * @param page
+     * @return
+     */
+    IPage<EamEquipmentProcessParameters> queryPageList(Page<EamEquipmentProcessParameters> page, @Param(Constants.WRAPPER) QueryWrapper<EamEquipmentProcessParameters> queryWrapper);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderDetailMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderDetailMapper.java
new file mode 100644
index 0000000..401a05e
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderDetailMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+
+/**
+ * @Description: 鐐规宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+public interface EamInspectionOrderDetailMapper extends BaseMapper<EamInspectionOrderDetail> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderMapper.java
new file mode 100644
index 0000000..8f84cb4
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamInspectionOrderMapper.java
@@ -0,0 +1,38 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.EamInspectionOrder;
+import org.jeecg.modules.eam.vo.InspectionVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 鐐规宸ュ崟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+public interface EamInspectionOrderMapper extends BaseMapper<EamInspectionOrder> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param queryWrapper
+     * @return
+     */
+    IPage<EamInspectionOrder> queryPageList(Page<EamInspectionOrder> page, @Param(Constants.WRAPPER) QueryWrapper<EamInspectionOrder> queryWrapper);
+    /**
+     * 鐐规鎶ヨ〃 new
+     */
+    List<InspectionVo> findInspectionResult(@Param("equipmentId")String equipmentId, @Param("itemDemand")String itemDemand,@Param("yearMonth")String yearMonth);
+
+    List<InspectionVo> findInspectionUser(@Param("equipmentId")String equipmentId,@Param("yearMonth")String yearMonth);
+
+    List<Map<String,Object>> findInspectionStandard(@Param("equipmentId")String equipmentId);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderDetailMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderDetailMapper.java
new file mode 100644
index 0000000..9639e0b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderDetailMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+
+/**
+ * @Description: 淇濆吇宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date: 2025-04-02
+ * @Version: V1.0
+ */
+public interface EamMaintenanceOrderDetailMapper extends BaseMapper<EamMaintenanceOrderDetail> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderMapper.java
new file mode 100644
index 0000000..734a8a5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceOrderMapper.java
@@ -0,0 +1,24 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+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.EamMaintenanceOrder;
+
+/**
+ * @Description: 淇濆吇宸ュ崟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+public interface EamMaintenanceOrderMapper extends BaseMapper<EamMaintenanceOrder> {
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param queryWrapper
+     * @return
+     */
+    IPage<EamMaintenanceOrder> queryPageList(IPage<EamMaintenanceOrder> page, @Param(Constants.WRAPPER) Wrapper<EamMaintenanceOrder> queryWrapper);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardDetailMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardDetailMapper.java
new file mode 100644
index 0000000..d2d1ab8
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardDetailMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+
+/**
+ * @Description: 淇濆吇鏍囧噯鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-03-26
+ * @Version: V1.0
+ */
+public interface EamMaintenanceStandardDetailMapper extends BaseMapper<EamMaintenanceStandardDetail> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java
new file mode 100644
index 0000000..af5ac37
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamMaintenanceStandardMapper.java
@@ -0,0 +1,25 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+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.EamMaintenanceStandard;
+
+/**
+ * @Description: 淇濆吇鏍囧噯
+ * @Author: jeecg-boot
+ * @Date: 2025-03-26
+ * @Version: V1.0
+ */
+public interface EamMaintenanceStandardMapper extends BaseMapper<EamMaintenanceStandard> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param queryWrapper
+     * @return
+     */
+    IPage<EamMaintenanceStandard> queryPageList(IPage<EamMaintenanceStandard> page, @Param(Constants.WRAPPER) Wrapper<EamMaintenanceStandard> queryWrapper);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionCheckDetailMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionCheckDetailMapper.java
new file mode 100644
index 0000000..a0d79ae
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionCheckDetailMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamPrecisionCheckDetail;
+
+/**
+ * @Description: 璁惧绮惧害妫�娴嬫槑缁�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-13
+ * @Version: V1.0
+ */
+public interface EamPrecisionCheckDetailMapper extends BaseMapper<EamPrecisionCheckDetail> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionParametersMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionParametersMapper.java
new file mode 100644
index 0000000..7fd672f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamPrecisionParametersMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamPrecisionParameters;
+
+/**
+ * @Description: 绮惧害鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+public interface EamPrecisionParametersMapper extends BaseMapper<EamPrecisionParameters> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamProcessParametersMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamProcessParametersMapper.java
new file mode 100644
index 0000000..03099bc
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamProcessParametersMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamProcessParameters;
+
+/**
+ * @Description: 宸ュ簭鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+public interface EamProcessParametersMapper extends BaseMapper<EamProcessParameters> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java
new file mode 100644
index 0000000..3fe37ac
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.EamRepairOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.request.EamRepairOrderQuery;
+
+import java.util.List;
+
+/**
+ * @Description: 缁翠慨宸ュ崟
+ * @Author: Lius
+ * @Date: 2025-04-03
+ */
+public interface EamRepairOrderMapper extends BaseMapper<EamRepairOrder> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param queryWrapper
+     * @return
+     */
+    IPage<EamRepairOrder> queryPageList(Page<EamRepairOrder> page, @Param(Constants.WRAPPER) QueryWrapper<EamRepairOrder> queryWrapper);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java
new file mode 100644
index 0000000..ccc642f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.EamReportRepair;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.request.EamReportRepairQuery;
+
+import java.util.List;
+
+/**
+ * @Description: 鏁呴殰鎶ヤ慨
+ * @Author: Lius
+ * @Date: 2025-04-01
+ */
+public interface EamReportRepairMapper extends BaseMapper<EamReportRepair> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param queryWrapper
+     * @return
+     */
+    IPage<EamReportRepair> queryPageList(Page<EamReportRepair> page, @Param(Constants.WRAPPER) QueryWrapper<EamReportRepair> queryWrapper);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/EamSysFilesMapper.java b/src/main/java/org/jeecg/modules/eam/mapper/EamSysFilesMapper.java
new file mode 100644
index 0000000..d199f47
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/EamSysFilesMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.EamSysFiles;
+
+/**
+ * @Description: 璁惧闄勪欢绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+public interface EamSysFilesMapper extends BaseMapper<EamSysFiles> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentAttachmentMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentAttachmentMapper.xml
new file mode 100644
index 0000000..ec5ca50
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentAttachmentMapper.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.eam.mapper.EamEquipmentAttachmentMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentExtendMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentExtendMapper.xml
new file mode 100644
index 0000000..8d5f86d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentExtendMapper.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.eam.mapper.EamEquipmentExtendMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentFaultReasonMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentFaultReasonMapper.xml
new file mode 100644
index 0000000..cc31487
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentFaultReasonMapper.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.eam.mapper.EamEquipmentFaultReasonMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentHistoryLogMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentHistoryLogMapper.xml
new file mode 100644
index 0000000..13e274b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentHistoryLogMapper.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.eam.mapper.EamEquipmentHistoryLogMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml
new file mode 100644
index 0000000..f7e323a
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml
@@ -0,0 +1,12 @@
+<?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.eam.mapper.EamEquipmentMapper">
+
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamEquipment">
+        select e.*, ext.repair_status, ext.maintenance_status
+        from eam_equipment e
+        left join eam_equipment_extend ext
+        on e.id = ext.id
+        ${ew.customSqlSegment}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentPrecisionParametersMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentPrecisionParametersMapper.xml
new file mode 100644
index 0000000..955d277
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentPrecisionParametersMapper.xml
@@ -0,0 +1,12 @@
+<?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.eam.mapper.EamEquipmentPrecisionParametersMapper">
+
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamEquipmentPrecisionParameters">
+        select wmo.*, e.parameter_code
+        from eam_equipment_precision_parameters wmo
+        inner join eam_precision_parameters e
+        on wmo.parameter_id = e.id
+        ${ew.customSqlSegment}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentProcessParametersMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentProcessParametersMapper.xml
new file mode 100644
index 0000000..b8c7f5b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentProcessParametersMapper.xml
@@ -0,0 +1,12 @@
+<?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.eam.mapper.EamEquipmentProcessParametersMapper">
+
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamEquipmentProcessParameters">
+        select wmo.*, e.parameter_code, e.parameter_unit
+        from eam_equipment_process_parameters wmo
+        inner join eam_process_parameters e
+        on wmo.parameter_id = e.id
+        ${ew.customSqlSegment}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderDetailMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderDetailMapper.xml
new file mode 100644
index 0000000..5a55b0f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderDetailMapper.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.eam.mapper.EamInspectionOrderDetailMapper">
+
+</mapper>
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml
new file mode 100644
index 0000000..9461c66
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml
@@ -0,0 +1,56 @@
+<?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.eam.mapper.EamInspectionOrderMapper">
+
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamInspectionOrder">
+        select wmo.*, e.equipment_code, e.equipment_name
+        from eam_inspection_order wmo
+        inner join eam_equipment e
+        on wmo.equipment_id = e.id
+        ${ew.customSqlSegment}
+    </select>
+
+    <select id="findInspectionUser"  parameterType="String" resultType="org.jeecg.modules.eam.vo.InspectionVo">
+
+        SELECT
+            t2.realname operator,
+            t3.realname as confirmUser,
+            CONVERT(VARCHAR, DATEPART(DAY, t1.inspection_date)) as dayTime
+        FROM
+            eam_inspection_order t1
+            left join sys_user t2 on t1.operator = t2.username
+            left join sys_user t3 on t1.confirm_user = t3.username
+        WHERE t1.del_flag = '0'
+          AND t1.equipment_id = #{equipmentId}
+        AND SUBSTRING ( CONVERT ( VARCHAR ( 10 ), t1.inspection_date, 120 ), 1, 7 ) = SUBSTRING(CONVERT(VARCHAR(10),#{yearMonth}, 120 ), 1, 7 )
+    </select>
+
+    <select id="findInspectionResult"  parameterType="String" resultType="org.jeecg.modules.eam.vo.InspectionVo">
+
+        SELECT
+            t1.item_demand as inspectionContent,
+            CONVERT(VARCHAR, DATEPART(DAY, t2.inspection_date)) as dayTime,
+            case t1.inspection_result  when '1' then '鈭�' when '2' then 'x' else '' end as inspectionResult
+        FROM
+            eam_inspection_order_detail t1
+        LEFT JOIN eam_inspection_order t2 ON t1.order_id = t2.id
+        WHERE t1.item_demand = #{itemDemand}
+        and t2.equipment_id = #{equipmentId}
+        AND SUBSTRING ( CONVERT ( VARCHAR ( 10 ), t2.inspection_date, 120 ), 1, 7 ) = SUBSTRING(CONVERT(VARCHAR(10),#{yearMonth}, 120 ), 1, 7 )
+    </select>
+
+    <select id="findInspectionStandard"  parameterType="String" resultType="Map">
+        SELECT
+            ROW_NUMBER() OVER (ORDER BY t1.id) AS seq,
+            t1.item_demand as itemDemand
+        FROM
+            eam_maintenance_standard_detail t1
+            LEFT JOIN eam_maintenance_standard t2 ON t1.standard_id = t2.id
+        WHERE
+          t2.maintenance_category = 'POINT_INSPECTION'
+          AND t2.standard_status = 'NORMAL'
+          and equipment_id =#{equipmentId}
+        ORDER BY
+            item_code ASC
+    </select>
+</mapper>
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderDetailMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderDetailMapper.xml
new file mode 100644
index 0000000..79e6377
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderDetailMapper.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.eam.mapper.EamMaintenanceOrderDetailMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderMapper.xml
new file mode 100644
index 0000000..1c2b7cf
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceOrderMapper.xml
@@ -0,0 +1,12 @@
+<?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.eam.mapper.EamMaintenanceOrderMapper">
+
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamMaintenanceOrder">
+        select wmo.*, e.equipment_code, e.equipment_name
+        from eam_maintenance_order wmo
+        inner join eam_equipment e
+        on wmo.equipment_id = e.id
+        ${ew.customSqlSegment}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardDetailMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardDetailMapper.xml
new file mode 100644
index 0000000..4ca5a19
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardDetailMapper.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.eam.mapper.EamMaintenanceStandardDetailMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
new file mode 100644
index 0000000..68f0ef2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
@@ -0,0 +1,11 @@
+<?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.eam.mapper.EamMaintenanceStandardMapper">
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamMaintenanceStandard">
+        select ems.*, e.equipment_code, e.equipment_name
+        from eam_maintenance_standard ems
+        inner join eam_equipment e
+        on ems.equipment_id = e.id
+            ${ew.customSqlSegment}
+    </select>
+</mapper>
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionCheckDetailMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionCheckDetailMapper.xml
new file mode 100644
index 0000000..37a420c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionCheckDetailMapper.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.eam.mapper.EamPrecisionCheckDetailMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionParametersMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionParametersMapper.xml
new file mode 100644
index 0000000..a1905e7
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamPrecisionParametersMapper.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.eam.mapper.EamPrecisionParametersMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamProcessParametersMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamProcessParametersMapper.xml
new file mode 100644
index 0000000..413ccaf
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamProcessParametersMapper.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.eam.mapper.EamProcessParametersMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml
new file mode 100644
index 0000000..389b192
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml
@@ -0,0 +1,11 @@
+<?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.eam.mapper.EamRepairOrderMapper">
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamRepairOrder">
+        select wmo.*, e.equipment_code, e.equipment_name, e.installation_position
+        from eam_repair_order wmo
+        inner join eam_equipment e
+        on wmo.equipment_id = e.id
+        ${ew.customSqlSegment}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml
new file mode 100644
index 0000000..4ff2d5c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml
@@ -0,0 +1,11 @@
+<?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.eam.mapper.EamReportRepairMapper">
+    <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamReportRepair">
+        select wmo.*, e.equipment_code, e.equipment_name, e.installation_position
+        from eam_report_repair wmo
+        inner join eam_equipment e
+        on wmo.equipment_id = e.id
+        ${ew.customSqlSegment}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/mapper/xml/EamSysFilesMapper.xml b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamSysFilesMapper.xml
new file mode 100644
index 0000000..0e57ce1
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/mapper/xml/EamSysFilesMapper.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.eam.mapper.EamSysFilesMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamEquipmentAttachmentRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamEquipmentAttachmentRequest.java
new file mode 100644
index 0000000..e1552f3
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamEquipmentAttachmentRequest.java
@@ -0,0 +1,33 @@
+package org.jeecg.modules.eam.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.api.vo.FileUploadResult;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 璁惧闄勪欢绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="璇锋眰瀵硅薄", description="璁惧闄勪欢绠$悊")
+public class EamEquipmentAttachmentRequest implements Serializable {
+	/**鎻忚堪*/
+    @ApiModelProperty(value = "鎻忚堪")
+	private String description;
+	/**鎻忚堪*/
+	@ApiModelProperty(value = "璁惧ID")
+	private String equipmentId;
+	/**涓婁紶鏂囦欢瀵圭郴*/
+	@ApiModelProperty(value = "涓婁紶鏂囦欢瀵圭郴")
+	private List<FileUploadResult> fileList;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamEquipmentQuery.java b/src/main/java/org/jeecg/modules/eam/request/EamEquipmentQuery.java
new file mode 100644
index 0000000..40293d6
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamEquipmentQuery.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.eam.request;
+
+import lombok.Data;
+
+@Data
+public class EamEquipmentQuery {
+    private String id;
+    private String equipmentCode;
+    private String equipmentName;
+    private String equipmentImportance;
+    private String assetStatus;
+    private String technologyStatus;
+    private String operationSystem;
+    private String orgId;
+    private String equipmentCategory;
+
+    private String column;
+    private String order;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamInspectionBatchApprovalRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamInspectionBatchApprovalRequest.java
new file mode 100644
index 0000000..36a84e2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamInspectionBatchApprovalRequest.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.eam.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class EamInspectionBatchApprovalRequest implements Serializable {
+
+    /** 纭绫诲瀷 1 閫氳繃  2 椹冲洖 */
+    @ApiModelProperty(value = "纭绫诲瀷")
+    private String confirmDealType;
+    /**纭鎰忚*/
+    @ApiModelProperty(value = "纭鎰忚")
+    private String confirmComment;
+    /**浠诲姟鍒楄〃*/
+    @ApiModelProperty(value = "浠诲姟鍒楄〃")
+    private List<WorkTaskDataVo> taskList;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderQuery.java b/src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderQuery.java
new file mode 100644
index 0000000..b53d8d5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderQuery.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class EamInspectionOrderQuery {
+    private String orderNum;
+    private String equipmentId;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date inspectionDateBegin;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date inspectionDateEnd;
+    private String inspectionStatus;
+
+    private String column;
+    private String order;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderRequest.java
new file mode 100644
index 0000000..dfacb46
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamInspectionOrderRequest.java
@@ -0,0 +1,116 @@
+package org.jeecg.modules.eam.request;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class EamInspectionOrderRequest extends FlowTaskVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**涓婚敭*/
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String createBy;
+    /**鍒涘缓鏃堕棿*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+    /**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+    /**鏇存柊鏃堕棿*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+    /**鍒犻櫎鏍囪*/
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    @TableLogic
+    private Integer delFlag;
+    /**宸ュ崟鍙�*/
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    private String orderNum;
+    /**璁惧ID*/
+    @ApiModelProperty(value = "璁惧ID")
+    @Dict(dictTable = "eam_equipment", dicCode = "equipment_code", dicText = "id")
+    private String equipmentId;
+    /**鏍囧噯ID*/
+    @ApiModelProperty(value = "淇濆吇鏍囧噯ID")
+    @Dict(dictTable = "eam_maintenance_standard", dicCode = "standard_code", dicText = "id")
+    private String standardId;
+    /**鐐规鏃ユ湡*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鐐规鏃ユ湡")
+    private Date inspectionDate;
+    /**鐐规杩囨湡鏃堕棿*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鐐规杩囨湡鏃堕棿")
+    private Date expirationTime;
+    /**鐐规鏃堕棿*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鐐规鏃堕棿")
+    private Date operateTime;
+    /**鐐规浜�*/
+    @ApiModelProperty(value = "鐐规浜�-鏄鍙栦汉")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String operator;
+    /**鍒涘缓鏂瑰紡*/
+    @ApiModelProperty(value = "鍒涘缓鏂瑰紡")
+    private String creationMethod;
+    /**鐐规鐘舵��*/
+    @ApiModelProperty(value = "鐐规鐘舵��   寰呯偣妫�-寰呯‘璁�-宸插畬鎴�")
+    private String inspectionStatus;
+    /**鐝粍闀跨‘璁�*/
+    @ApiModelProperty(value = "鐝粍闀跨‘璁�--棰嗗彇鍚庝骇鐢�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String confirmUser;
+    /**纭鏃堕棿*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "纭鏃堕棿")
+    private Date confirmTime;
+    /**澶囨敞*/
+    @ApiModelProperty(value = "澶囨敞-鐐规宸ュ崟鍒涘缓澶囨敞")
+    private String remark;
+    /**鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧*/
+    @ApiModelProperty(value = "鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧")
+    private String imageFiles;
+
+    /**涓婁紶鏂囦欢瀵圭郴*/
+    @ApiModelProperty(value = "涓婁紶鏂囦欢瀵硅薄")
+    private List<FileUploadResult> fileList;
+
+    /**鍒楄〃 淇濆吇椤规槑缁�*/
+    @ApiModelProperty(value = "鍒楄〃 淇濆吇椤规槑缁�")
+    private List<EamInspectionOrderDetail> tableDetailList;
+
+    /**纭鎰忚*/
+    @ApiModelProperty(value = "纭鎰忚")
+    private String confirmComment;
+    /** 纭绫诲瀷 1 閫氳繃  2 椹冲洖 */
+    @ApiModelProperty(value = "纭绫诲瀷")
+    @Dict(dicCode = "approved_rejected")
+    private String confirmDealType;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceBatchApprovalRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceBatchApprovalRequest.java
new file mode 100644
index 0000000..a461e3d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceBatchApprovalRequest.java
@@ -0,0 +1,41 @@
+package org.jeecg.modules.eam.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class EamMaintenanceBatchApprovalRequest implements Serializable {
+    //纭鎿嶄綔
+    /**纭鎰忚*/
+    @ApiModelProperty(value = "纭鎰忚")
+    private String confirmComment;
+    @ApiModelProperty(value = "纭绫诲瀷")
+    private String confirmDealType;
+    //鍒濋獙鏀舵搷浣�
+    /**鍒濋獙鏀舵剰瑙�*/
+    @ApiModelProperty(value = "鍒濋獙鏀舵剰瑙�")
+    private String initialAcceptanceComment;
+    /**鍒濋獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "鍒濋獙鏀堕檮浠�")
+    private List<FileUploadResult> initialAcceptanceFilesResult;
+    //缁堥獙鏀舵搷浣�
+    /**缁堥獙鏀舵剰瑙�*/
+    @ApiModelProperty(value = "缁堥獙鏀舵剰瑙�")
+    private String finalAcceptanceComment;
+    /**缁堥獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "缁堥獙鏀堕檮浠�")
+    private List<FileUploadResult> finalAcceptanceFilesResult;
+
+    /**浠诲姟鍒楄〃*/
+    @ApiModelProperty(value = "浠诲姟鍒楄〃")
+    private List<WorkTaskDataVo> taskList;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceQuery.java b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceQuery.java
new file mode 100644
index 0000000..9abac89
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceQuery.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class EamMaintenanceQuery {
+    private String orderNum;
+    private String equipmentId;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date maintenanceDateBegin;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date maintenanceDateEnd;
+    private String maintenanceStatus;
+
+    private String column;
+    private String order;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceRequest.java
new file mode 100644
index 0000000..33e0f8b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceRequest.java
@@ -0,0 +1,89 @@
+package org.jeecg.modules.eam.request;
+
+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.api.vo.FileUploadResult;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="淇濆吇瀵硅薄", description="淇濆吇")
+public class EamMaintenanceRequest extends FlowTaskVo implements Serializable {
+
+    /**涓婚敭*/
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**宸ュ崟鍙�*/
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    private String orderNum;
+    /**璁惧ID*/
+    @ApiModelProperty(value = "璁惧ID")
+    private String equipmentId;
+    /**鏍囧噯ID*/
+    @ApiModelProperty(value = "鏍囧噯ID")
+    private String standardId;
+    /**淇濆吇鏃ユ湡*/
+    @ApiModelProperty(value = "淇濆吇鏃ユ湡")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date maintenanceDate;
+    /**淇濆吇浜�*/
+    @ApiModelProperty(value = "淇濆吇浜�")
+    private String operator;
+    /**淇濆吇鍥剧墖*/
+    @ApiModelProperty(value = "淇濆吇鍥剧墖")
+    private String imageFiles;
+    /**淇濆吇鍥剧墖*/
+    @ApiModelProperty(value = "淇濆吇鍥剧墖")
+    private List<FileUploadResult> imageFilesResult;
+    /**澶囨敞*/
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+    /**鍒涘缓鏂瑰紡*/
+    @ApiModelProperty(value = "鍒涘缓鏂瑰紡")
+    private String creationMethod;
+    /**鍒楄〃 淇濆吇椤规槑缁�*/
+    @ApiModelProperty(value = "鍒楄〃 淇濆吇椤规槑缁�")
+    private List<EamMaintenanceOrderDetail> tableDetailList;
+    /**鍒犻櫎 淇濆吇椤规槑缁�*/
+    @ApiModelProperty(value = "鍒犻櫎 淇濆吇椤规槑缁�")
+    private List<EamMaintenanceOrderDetail> removeDetailList;
+
+    //纭鎿嶄綔
+    /**纭鎰忚*/
+    @ApiModelProperty(value = "纭鎰忚")
+    private String confirmComment;
+    @ApiModelProperty(value = "纭绫诲瀷")
+    private String confirmDealType;
+    //鍒濋獙鏀舵搷浣�
+    /**鍒濋獙鏀舵剰瑙�*/
+    @ApiModelProperty(value = "鍒濋獙鏀舵剰瑙�")
+    private String initialAcceptanceComment;
+    /**鍒濋獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "鍒濋獙鏀堕檮浠�")
+    private String initialAcceptanceFiles;
+    /**鍒濋獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "鍒濋獙鏀堕檮浠�")
+    private List<FileUploadResult> initialAcceptanceFilesResult;
+    //缁堥獙鏀舵搷浣�
+    /**缁堥獙鏀舵剰瑙�*/
+    @ApiModelProperty(value = "缁堥獙鏀舵剰瑙�")
+    private String finalAcceptanceComment;
+    /**缁堥獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "缁堥獙鏀堕檮浠�")
+    private String finalAcceptanceFiles;
+    /**缁堥獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "缁堥獙鏀堕檮浠�")
+    private List<FileUploadResult> finalAcceptanceFilesResult;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java
new file mode 100644
index 0000000..d12e2ff
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java
@@ -0,0 +1,74 @@
+package org.jeecg.modules.eam.request;
+
+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.api.vo.FileUploadResult;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="eam_maintenance_standard瀵硅薄", description="淇濆吇鏍囧噯")
+public class EamMaintenanceStandardRequest implements Serializable {
+
+    /**涓婚敭*/
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+    /**鏍囧噯缂栫爜*/
+    @ApiModelProperty(value = "鏍囧噯缂栫爜")
+    private String standardCode;
+    /**鏍囧噯鍚嶇О*/
+    @ApiModelProperty(value = "鏍囧噯鍚嶇О")
+    private String standardName;
+    /**淇濆吇鍛ㄦ湡;鍗曚綅:澶�*/
+    @ApiModelProperty(value = "淇濆吇鍛ㄦ湡;鍗曚綅:澶�")
+    private Integer maintenancePeriod;
+    /**鍒濆鏃ユ湡 浠庡摢涓�澶╁紑濮嬭绠椾笅娆′繚鍏绘棩鏈�*/
+    @ApiModelProperty(value = "鍒濆鏃ユ湡")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date initialDate;
+    /**淇濆吇鍒嗙被*/
+    @ApiModelProperty(value = "淇濆吇鍒嗙被")
+    private String maintenanceCategory;
+    /**璁惧ID*/
+    @ApiModelProperty(value = "璁惧ID")
+    private String equipmentId;
+    /**鏍囧噯鐘舵��*/
+    @ApiModelProperty(value = "鏍囧噯鐘舵��")
+    private String standardStatus;
+    /**鏍囧噯鐗堟湰*/
+    @ApiModelProperty(value = "鏍囧噯鐗堟湰")
+    private Integer standardVersion;
+    /**鏂囦欢缂栧彿*/
+    @ApiModelProperty(value = "鏂囦欢缂栧彿")
+    private String fileCode;
+    /**鍙傝�冩枃浠�*/
+    @ApiModelProperty(value = "鍙傝�冩枃浠�")
+    private String referenceFile;
+    /**涓婁紶鏂囦欢瀵圭郴*/
+    @ApiModelProperty(value = "涓婁紶鏂囦欢瀵硅薄")
+    private List<FileUploadResult> fileList;
+    /**鍒楄〃 淇濆吇椤规槑缁�*/
+    @ApiModelProperty(value = "鍒楄〃 淇濆吇椤规槑缁�")
+    private List<EamMaintenanceStandardDetail> tableDetailList;
+    /**鍒犻櫎 淇濆吇椤规槑缁�*/
+    @ApiModelProperty(value = "鍒犻櫎 淇濆吇椤规槑缁�")
+    private List<EamMaintenanceStandardDetail> removeDetailList;
+
+    /**
+     * Excel瀵煎叆鏃朵娇鐢�
+     */
+    private String equipmentName;
+    private String equipmentCode;
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java b/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java
new file mode 100644
index 0000000..9039ad8
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.eam.request;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.eam.entity.EamRepairOrder;
+
+import java.io.Serializable;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-04-09
+ * @Description:
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="璇锋眰瀵硅薄", description="缁翠慨宸ュ崟")
+public class EamRepairOrderQuery extends EamRepairOrder implements Serializable {
+
+    private static final long serialVersionUID = 7710893031748864058L;
+
+
+
+    private String column;
+    private String order;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java
new file mode 100644
index 0000000..922934e
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java
@@ -0,0 +1,76 @@
+package org.jeecg.modules.eam.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-04-21
+ * @Description:
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class EamRepairOrderRequest extends FlowTaskVo implements Serializable {
+
+    private static final long serialVersionUID = 3844096033304425984L;
+
+    /**涓婚敭*/
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+
+    /**璁惧ID*/
+    @ApiModelProperty(value = "璁惧ID")
+    private String equipmentId;
+
+    /**
+     * 鏁呴殰鍘熷洜
+     */
+    @ApiModelProperty(value = "鏁呴殰鍘熷洜")
+    private String faultReason;
+    /**
+     * 缁翠慨缁撴灉鎻忚堪
+     */
+    @ApiModelProperty(value = "缁翠慨缁撴灉鎻忚堪")
+    private String repairDescription;
+
+    /**
+     * 鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧
+     */
+    @ApiModelProperty(value = "鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧")
+    private String imageFiles;
+
+    /**缁翠慨鍥剧墖*/
+    @ApiModelProperty(value = "缁翠慨鍥剧墖闆嗗悎")
+    private List<FileUploadResult> imageFilesResult;
+
+    /**
+     * 缁翠慨浜虹‘璁�
+     */
+    private String repairConfirm;
+    private String repairConfirmComment;
+
+    /**
+     * 棰嗗纭
+     */
+    private String leaderConfirm;
+    private String leaderConfirmComment;
+
+    /**
+     * 鏈哄姩鍔炵‘璁�
+     */
+    private String externalConfirm;
+    private String externalConfirmComment;
+
+    /**
+     * 鎿嶄綔宸ョ‘璁ゆ剰瑙�
+     */
+    private String confirmComment;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java b/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java
new file mode 100644
index 0000000..2bf13c2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java
@@ -0,0 +1,78 @@
+package org.jeecg.modules.eam.request;
+
+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.modules.eam.entity.EamRepairOrder;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-04-21
+ * @Description:
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="杩斿洖瀵硅薄", description="缁翠慨宸ュ崟璇︾粏")
+public class EamRepairOrderResponse extends EamRepairOrder implements Serializable {
+
+    private static final long serialVersionUID = 367152649525625307L;
+
+    /**
+     * 鏁呴殰寮�濮嬫椂闂�
+     */
+    @ApiModelProperty(value = "鏁呴殰寮�濮嬫椂闂�")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date faultStartTime;
+    /**
+     * 鏄惁鍋滄満
+     */
+    @ApiModelProperty(value = "鏄惁鍋滄満")
+    @Dict(dicCode = "breakdown_flag")
+    private String breakdownFlag;
+    /**
+     * 鏁呴殰绠�绉�
+     */
+    @ApiModelProperty(value = "鏁呴殰绠�绉�")
+    private String faultName;
+    /**
+     * 鏁呴殰鍒嗙被
+     */
+    @ApiModelProperty(value = "鏁呴殰鍒嗙被")
+    @Dict(dicCode = "fault_reason_category")
+    private String faultType;
+    /**
+     * 鏁呴殰鎻忚堪
+     */
+    @ApiModelProperty(value = "鏁呴殰鎻忚堪")
+    private String faultDescription;
+    /**
+     * 鎶ヤ慨鐘舵��
+     */
+    @ApiModelProperty(value = "鎶ヤ慨鐘舵��")
+    @Dict(dicCode = "report_repair_status")
+    private String reportStatus;
+    /**
+     * 鐓х墖鏂囦欢ids;id浠ラ�楀彿鍒嗛殧
+     */
+    @ApiModelProperty(value = "鎶ヤ慨鐓х墖")
+    private String reportImageFiles;
+
+    /**
+     * 澶囨敞
+     */
+    @Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java b/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java
new file mode 100644
index 0000000..8bbc279
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java
@@ -0,0 +1,44 @@
+package org.jeecg.modules.eam.request;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.eam.entity.EamReportRepair;
+
+import java.io.Serializable;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-04-03
+ * @Description:
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="璇锋眰瀵硅薄", description="璁惧鎶ヤ慨")
+public class EamReportRepairQuery extends EamReportRepair implements Serializable {
+
+    private static final long serialVersionUID = -7111580122226167877L;
+
+    /**
+     * 璁惧缂栫爜
+     */
+    private String equipmentCode;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    private String startTime;
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    private String endTime;
+    /**
+     * 鎸囨淳浜猴紙缁翠慨璐熻矗浜猴級
+     */
+    private String repairer;
+
+    private String column;
+    private String order;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/request/EamSysFilesRequest.java b/src/main/java/org/jeecg/modules/eam/request/EamSysFilesRequest.java
new file mode 100644
index 0000000..43f9b21
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/request/EamSysFilesRequest.java
@@ -0,0 +1,30 @@
+package org.jeecg.modules.eam.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.api.vo.FileUploadResult;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 璁惧闄勪欢绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="璇锋眰瀵硅薄", description="璁惧闄勪欢绠$悊")
+public class EamSysFilesRequest implements Serializable {
+	/**鎻忚堪*/
+    @ApiModelProperty(value = "鎻忚堪")
+	private String description;
+	/**涓婁紶鏂囦欢瀵圭郴*/
+	@ApiModelProperty(value = "涓婁紶鏂囦欢瀵圭郴")
+	private List<FileUploadResult> fileList;
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentAttachmentService.java b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentAttachmentService.java
new file mode 100644
index 0000000..c8ac11c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentAttachmentService.java
@@ -0,0 +1,30 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamEquipmentAttachment;
+import org.jeecg.modules.eam.request.EamEquipmentAttachmentRequest;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @Description: 璁惧鏂囨。鍙拌处浣跨敤
+ * @Author: jeecg-boot
+ * @Date:   2025-04-16
+ * @Version: V1.0
+ */
+public interface IEamEquipmentAttachmentService extends IService<EamEquipmentAttachment> {
+
+    /**
+     *
+     * @param response
+     * @param byId
+     */
+    void downloadFile(HttpServletResponse response, EamEquipmentAttachment byId);
+
+    /**
+     * 淇濆瓨瀵硅薄
+     * @param request
+     * @return
+     */
+    boolean saveEntity(EamEquipmentAttachmentRequest request);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java
new file mode 100644
index 0000000..dd78661
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamEquipmentExtend;
+
+/**
+ * @Description: 璁惧鍙拌处鎵╁睍琛�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface IEamEquipmentExtendService extends IService<EamEquipmentExtend> {
+    /**
+     * 鏇存柊璁惧淇濆吇鐘舵��
+     * @param equipmentId 璁惧id
+     * @param status 鐘舵��
+     * @return
+     */
+    boolean updateEquipmentMaintenanceStatus(String equipmentId, String status);
+
+    /**
+     * 鏇存柊璁惧缁翠慨鐘舵��
+     * @param equipmentId 璁惧id
+     * @param status 鐘舵��
+     * @return
+     */
+    boolean updateEquipmentRepairStatus(String equipmentId, String status);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentFaultReasonService.java b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentFaultReasonService.java
new file mode 100644
index 0000000..e0b0290
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentFaultReasonService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamEquipmentFaultReason;
+
+/**
+ * @Description: 璁惧鏁呴殰鍘熷洜缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface IEamEquipmentFaultReasonService extends IService<EamEquipmentFaultReason> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentHistoryLogService.java b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentHistoryLogService.java
new file mode 100644
index 0000000..18fa206
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentHistoryLogService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamEquipmentHistoryLog;
+
+/**
+ * @Description: 璁惧灞ュ巻
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface IEamEquipmentHistoryLogService extends IService<EamEquipmentHistoryLog> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentPrecisionParametersService.java b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentPrecisionParametersService.java
new file mode 100644
index 0000000..bfefaa8
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentPrecisionParametersService.java
@@ -0,0 +1,39 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamEquipmentPrecisionParameters;
+
+import java.util.List;
+
+/**
+ * @Description: 璁惧绮惧害鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+public interface IEamEquipmentPrecisionParametersService extends IService<EamEquipmentPrecisionParameters> {
+    /**
+     * 鏌ヨ璁惧绮惧害鍙傛暟
+     * @param equipmentId 璁惧ID
+     * @param parameterId 鍙傛暟ID
+     * @return
+     */
+    EamEquipmentPrecisionParameters queryByEquipmentIdAndParameterId(String equipmentId, String parameterId);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param equipmentId
+     * @param page
+     * @return
+     */
+    IPage<EamEquipmentPrecisionParameters> queryPageList(String equipmentId, Page<EamEquipmentPrecisionParameters> page);
+
+    /**
+     * 鍒楄〃鏌ヨ
+     * @param equipmentId
+     * @return
+     */
+    List<EamEquipmentPrecisionParameters> queryList(String equipmentId);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentProcessParametersService.java b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentProcessParametersService.java
new file mode 100644
index 0000000..c881016
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentProcessParametersService.java
@@ -0,0 +1,31 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamEquipmentProcessParameters;
+
+/**
+ * @Description: 璁惧宸ヨ壓鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+public interface IEamEquipmentProcessParametersService extends IService<EamEquipmentProcessParameters> {
+
+    /**
+     * 鏌ヨ璁惧宸ヨ壓鍙傛暟
+     * @param equipmentId 璁惧缂栧彿
+     * @param parameterId 鍙傛暟缂栧彿
+     * @return
+     */
+    EamEquipmentProcessParameters queryByEquipmentIdAndParameterId(String equipmentId, String parameterId);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param equipmentId
+     * @param page
+     * @return
+     */
+    IPage<EamEquipmentProcessParameters> queryPageList(String equipmentId, Page<EamEquipmentProcessParameters> page);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
new file mode 100644
index 0000000..9814e2d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
@@ -0,0 +1,55 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.request.EamEquipmentQuery;
+import org.jeecg.modules.eam.vo.EamEquipmentTree;
+import org.jeecg.modules.eam.vo.EquipmentSearchResult;
+
+import java.util.List;
+
+/**
+ * @Description: 璁惧鍙拌处
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface IEamEquipmentService extends IService<EamEquipment> {
+
+    /**
+     * 鍙拌处璁惧娣诲姞
+     * @param eamEquipment
+     */
+    EamEquipment saveEquipment(EamEquipment eamEquipment);
+
+    /**
+     * 鑾峰彇浜х嚎涓嬬殑璁惧淇℃伅
+     * @param ids 浜х嚎ids
+     * @return
+     */
+//    List<EamEquipmentTree> loadTreeListByProductionIds(String ids);
+
+    /**
+     * 璁惧鍙拌处鍒嗛〉鏌ヨ
+     * @param page
+     * @param eamEquipment
+     * @return
+     */
+    IPage<EamEquipment> queryPageList(IPage<EamEquipment> page, EamEquipmentQuery eamEquipment);
+
+    /**
+     * 鍏抽敭瀛楁悳绱�
+     * @param keyword
+     * @param pageSize
+     * @return
+     */
+    List<EquipmentSearchResult> asyncLoadEquipment(String keyword, Integer pageSize, String id);
+
+    /**
+     * 鏌ヨ璁惧淇℃伅
+     * @param equipmentCode
+     * @return
+     */
+    EamEquipment selectByEquipmentCode(String equipmentCode);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderDetailService.java b/src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderDetailService.java
new file mode 100644
index 0000000..0fd64c7
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderDetailService.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 鐐规宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+public interface IEamInspectionOrderDetailService extends IService<EamInspectionOrderDetail> {
+    /**
+     * 鑾峰彇宸ュ崟淇濆吇椤瑰唴瀹�
+     * @param orderId 宸ュ崟ID
+     * @return
+     */
+    List<EamInspectionOrderDetail> queryListByOrderId(String orderId);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderService.java b/src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderService.java
new file mode 100644
index 0000000..d6dd822
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamInspectionOrderService.java
@@ -0,0 +1,96 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.eam.entity.EamInspectionOrder;
+import org.jeecg.modules.eam.request.EamInspectionOrderQuery;
+import org.jeecg.modules.eam.request.EamInspectionOrderRequest;
+import org.jeecg.modules.eam.vo.InspectionVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 鐐规宸ュ崟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+public interface IEamInspectionOrderService extends IService<EamInspectionOrder> {
+
+    /**
+     * 鏂板鐐规宸ュ崟
+     * @param eamInspectionOrderRequest
+     * @return
+     */
+    boolean addInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest);
+
+    /**
+     * 缂栬緫鐐规宸ュ崟
+     * @param eamInspectionOrderRequest
+     * @return
+     */
+    boolean editInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest);
+
+    /**
+     * 棰嗗彇鐐规宸ュ崟
+     * @param id
+     * @return
+     */
+    boolean takeInspectionOrder(String id);
+
+    /**
+     * 浣滃簾鐐规宸ュ崟
+     * @param id
+     * @return
+     */
+    boolean cancelInspectionOrder(String id);
+
+    /**
+     * 鎵归噺浣滃簾涓庨鍙�
+     * @param ids
+     * @param type
+     * @return
+     */
+    Result<?> batchCancelOrTakeInspectionOrder(String ids, String type);
+
+    /**
+     * 鏌ヨ鐐规宸ュ崟鍩烘湰淇℃伅
+     * @param id
+     * @return
+     */
+    Result<?> selectVoById(String id);
+
+    /**
+     * 鐐规娴佺▼
+     * @param eamInspectionOrderRequest
+     * @return
+     */
+    EamInspectionOrder inspectionProcess(EamInspectionOrderRequest eamInspectionOrderRequest);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param query
+     * @return
+     */
+    IPage<EamInspectionOrder> queryPageList(Page<EamInspectionOrder> page, EamInspectionOrderQuery query);
+
+    /**
+     * 鑾峰彇鏈偣妫�鐨勫伐鍗�
+     * @param expiredDate 杩囨湡鏃ユ湡
+     * @return
+     */
+    List<EamInspectionOrder> selectUnCompleteOrder(String expiredDate);
+
+    /**
+     * 鐐规鎶ヨ〃 new
+     */
+    List<InspectionVo> findInspectionResult(String equipmentId, String itemDemand,String yearMonth);
+
+    List<InspectionVo> findInspectionUser(String equipmentId,String yearMonth);
+
+    List<Map<String,Object>> findInspectionStandard(String equipmentId);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderDetailService.java b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderDetailService.java
new file mode 100644
index 0000000..9c561f5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderDetailService.java
@@ -0,0 +1,22 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 淇濆吇宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+public interface IEamMaintenanceOrderDetailService extends IService<EamMaintenanceOrderDetail> {
+
+    /**
+     * 鏍规嵁宸ュ崟ID 鏌ヨ淇濆吇鏄庣粏
+     * @param orderId
+     * @return
+     */
+    List<EamMaintenanceOrderDetail> queryListByOrderId(String orderId);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderService.java b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderService.java
new file mode 100644
index 0000000..ebcaf1f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceOrderService.java
@@ -0,0 +1,62 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrder;
+import org.jeecg.modules.eam.request.EamMaintenanceQuery;
+import org.jeecg.modules.eam.request.EamMaintenanceRequest;
+
+import java.util.List;
+
+/**
+ * @Description: 淇濆吇宸ュ崟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+public interface IEamMaintenanceOrderService extends IService<EamMaintenanceOrder> {
+
+    /**
+     * 鎵嬪姩鏂板宸ュ崟
+     * @param request
+     * @return
+     */
+    boolean addMaintenance(EamMaintenanceRequest request);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param query
+     * @return
+     */
+    IPage<EamMaintenanceOrder> queryPageList(Page<EamMaintenanceOrder> page, EamMaintenanceQuery query);
+
+    /**
+     * 淇濆吇缂栬緫鐘舵��
+     * @param request
+     * @return
+     */
+    boolean editMaintenance(EamMaintenanceRequest request);
+
+    /**
+     * 棰嗗彇淇濆吇宸ュ崟
+     * @param id
+     * @return
+     */
+    boolean collect(String id);
+
+    /**
+     * 鎴戠殑寰呭姙锛屽鎵瑰姩浣�
+     * @param request
+     * @return
+     */
+    EamMaintenanceOrder approval(EamMaintenanceRequest request);
+
+    /**
+     * 鑾峰彇浠婂ぉ涔嬪墠鏈繚鍏诲畬鎴愮殑宸ュ崟
+     * @param expiredDate 杩囨湡鏃ユ湡
+     * @return
+     */
+    List<EamMaintenanceOrder> selectUnCompleteOrder(String expiredDate);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardDetailService.java b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardDetailService.java
new file mode 100644
index 0000000..c5981af
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardDetailService.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 淇濆吇鏍囧噯鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-03-26
+ * @Version: V1.0
+ */
+public interface IEamMaintenanceStandardDetailService extends IService<EamMaintenanceStandardDetail> {
+    /**
+     * 鑾峰彇鏍囧噯涓嬫槑缁嗛」淇℃伅
+     * @param standardId
+     * @return
+     */
+    List<EamMaintenanceStandardDetail> selectByStandardId(String standardId);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
new file mode 100644
index 0000000..c136e81
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
@@ -0,0 +1,67 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
+import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest;
+
+import java.util.List;
+
+/**
+ * @Description: 淇濆吇鏍囧噯
+ * @Author: jeecg-boot
+ * @Date:   2025-03-26
+ * @Version: V1.0
+ */
+public interface IEamMaintenanceStandardService extends IService<EamMaintenanceStandard> {
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page
+     * @param eamMaintenanceStandard
+     * @return
+     */
+    IPage<EamMaintenanceStandard> queryPageList(Page<EamMaintenanceStandard> page, EamMaintenanceStandard eamMaintenanceStandard);
+
+    /**
+     * 鏂板 淇濆吇鏍囧噯
+     * @param standardRequest
+     */
+    boolean addMaintenanceStandard(EamMaintenanceStandardRequest standardRequest);
+
+    /**
+     * 鏂板 淇濆吇鏍囧噯
+     * @param standardRequest
+     */
+    boolean editMaintenanceStandard(EamMaintenanceStandardRequest standardRequest);
+
+    /**
+     * 鍗囩増
+     * @param standardRequest
+     * @return
+     */
+    boolean upgradeMaintenanceStandard(EamMaintenanceStandardRequest standardRequest);
+
+    /**
+     * 閲嶅鎬ф牎楠�
+     * @param equipmentId 璁惧缂栧彿
+     * @param maintenanceCategory 淇濆吇绫诲瀷
+     * @return
+     */
+    EamMaintenanceStandard checkDuplicate(String equipmentId, String maintenanceCategory);
+
+    /**
+     * 鏌ヨ鏍囧噯鍒楄〃-鍓嶇灞曠ず璇ョ敤鎴锋嫢鏈夌殑鏍囧噯
+     * @param keyword 鍏抽敭璇�
+     * @param maintenanceCategory 淇濆吇绫诲瀷
+     * @return
+     */
+    List<EamMaintenanceStandard> queryListByKeywordAndCategory(String keyword, String equipmentId, Integer pageSize, String maintenanceCategory);
+
+    /**
+     * 鏌ヨ淇濆吇绫诲瀷涓嬫甯哥殑淇濆吇鏍囧噯
+     * @param maintenanceCategory 淇濆吇绫诲瀷
+     * @return
+     */
+    List<EamMaintenanceStandard> queryListByCategory(String maintenanceCategory);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamPrecisionCheckDetailService.java b/src/main/java/org/jeecg/modules/eam/service/IEamPrecisionCheckDetailService.java
new file mode 100644
index 0000000..3a40ced
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamPrecisionCheckDetailService.java
@@ -0,0 +1,30 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamPrecisionCheckDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 璁惧绮惧害妫�娴嬫槑缁�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-13
+ * @Version: V1.0
+ */
+public interface IEamPrecisionCheckDetailService extends IService<EamPrecisionCheckDetail> {
+
+    /**
+     * 鏍规嵁宸ュ崟ID 鏌ヨ 绮惧害淇℃伅
+     * @param orderId
+     * @return
+     */
+    List<EamPrecisionCheckDetail> getByOrderId(String orderId);
+
+    /**
+     * 鏍¢獙鏄惁瀛樺湪绮惧害妫�楠�
+     * @param orderId
+     * @return
+     */
+    boolean hasPrecisionCheckDetail(String orderId);
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamPrecisionParametersService.java b/src/main/java/org/jeecg/modules/eam/service/IEamPrecisionParametersService.java
new file mode 100644
index 0000000..5e36900
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamPrecisionParametersService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamPrecisionParameters;
+
+/**
+ * @Description: 绮惧害鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+public interface IEamPrecisionParametersService extends IService<EamPrecisionParameters> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamProcessParametersService.java b/src/main/java/org/jeecg/modules/eam/service/IEamProcessParametersService.java
new file mode 100644
index 0000000..3bd6983
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamProcessParametersService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamProcessParameters;
+
+/**
+ * @Description: 宸ュ簭鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+public interface IEamProcessParametersService extends IService<EamProcessParameters> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java b/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
new file mode 100644
index 0000000..2c015e4
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
@@ -0,0 +1,47 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamRepairOrder;
+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;
+
+/**
+ * @Description: 缁翠慨宸ュ崟
+ * @Author: Lius
+ * @Date: 2025-04-03
+ */
+public interface IEamRepairOrderService extends IService<EamRepairOrder> {
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     * @param page
+     * @param eamRepairOrderQuery
+     * @return
+     */
+    IPage<EamRepairOrder> pageList(Page<EamRepairOrder> page, EamRepairOrderQuery eamRepairOrderQuery);
+
+    /**
+     * 棰嗗彇宸ュ崟锛屽惎鍔ㄧ淮淇祦绋�
+     * @param eamRepairOrder
+     */
+    void saveRepairOrder(EamRepairOrder eamRepairOrder);
+
+    /**
+     * 娴佺▼鎿嶄綔
+     * @param request
+     * @return
+     */
+    EamRepairOrder perform(EamRepairOrderRequest request);
+
+    EamRepairOrderResponse findById(String id);
+
+    /**
+     * 鎸囨淳
+     * @param eamReportRepairQuery
+     */
+    void assign(EamReportRepairQuery eamReportRepairQuery);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java b/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java
new file mode 100644
index 0000000..f123ee2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java
@@ -0,0 +1,57 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+import org.jeecg.modules.eam.entity.EamReportRepair;
+import org.jeecg.modules.eam.request.EamReportRepairQuery;
+
+import java.util.List;
+
+/**
+ * @Description: 鏁呴殰鎶ヤ慨
+ * @Author: Lius
+ * @Date: 2025-04-01
+ */
+public interface IEamReportRepairService extends IService<EamReportRepair> {
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     * @param page
+     * @param eamReportRepairQuery
+     * @return
+     */
+    IPage<EamReportRepair> pageList(Page<EamReportRepair> page, EamReportRepairQuery eamReportRepairQuery);
+
+    /**
+     * 浠庝繚鍏讳腑鐢熸垚鎶ヤ慨
+     * @param detailList
+     * @return
+     */
+    EamReportRepair reportRepairFromMaintenance(String equipmentId, String reportUser, List<EamMaintenanceOrderDetail> detailList);
+
+
+    /**
+     * 浠庝繚鍏讳腑鐢熸垚鎶ヤ慨
+     * @param detailList
+     * @return
+     */
+    EamReportRepair reportRepairFromInspection(String equipmentId, String reportUser, List<EamInspectionOrderDetail> detailList);
+
+    /**
+     * 鏁呴殰淇濅慨
+     * @param eamReportRepair
+     * @return
+     */
+    EamReportRepair add(EamReportRepair eamReportRepair);
+
+    /**
+     * 缂栬緫
+     * @param eamReportRepair
+     * @return
+     */
+    boolean edit(EamReportRepair eamReportRepair);
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/IEamSysFilesService.java b/src/main/java/org/jeecg/modules/eam/service/IEamSysFilesService.java
new file mode 100644
index 0000000..6b0c5f7
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/IEamSysFilesService.java
@@ -0,0 +1,45 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.modules.eam.entity.EamSysFiles;
+import org.jeecg.modules.eam.request.EamSysFilesRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @Description: 璁惧闄勪欢绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+public interface IEamSysFilesService extends IService<EamSysFiles> {
+
+    /**
+     * 涓嬭浇鏂囦欢
+     * @param response
+     * @param byId
+     */
+    void downloadFile(HttpServletResponse response, EamSysFiles byId);
+
+    /**
+     * 涓婁紶闄勪欢
+     * @param file
+     * @return
+     */
+    FileUploadResult uploadFile(MultipartFile file);
+
+    /**
+     * 鎵归噺娣诲姞璁惧闄勪欢
+     * @param request
+     */
+    boolean saveEamSysFiles(EamSysFilesRequest request);
+
+    /**
+     * 鏍规嵁璺緞鑾峰彇鏂囦欢
+     * @param path
+     * @return
+     */
+    EamSysFiles getByPath(String path);
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentAttachmentServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentAttachmentServiceImpl.java
new file mode 100644
index 0000000..2dbbe82
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentAttachmentServiceImpl.java
@@ -0,0 +1,65 @@
+package org.jeecg.modules.eam.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.util.FileUtil;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamEquipmentAttachment;
+import org.jeecg.modules.eam.mapper.EamEquipmentAttachmentMapper;
+import org.jeecg.modules.eam.request.EamEquipmentAttachmentRequest;
+import org.jeecg.modules.eam.service.IEamEquipmentAttachmentService;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 璁惧鏂囨。鍙拌处浣跨敤
+ * @Author: jeecg-boot
+ * @Date:   2025-04-16
+ * @Version: V1.0
+ */
+@Service
+public class EamEquipmentAttachmentServiceImpl extends ServiceImpl<EamEquipmentAttachmentMapper, EamEquipmentAttachment> implements IEamEquipmentAttachmentService {
+
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+
+    @Override
+    public void downloadFile(HttpServletResponse response, EamEquipmentAttachment entity) {
+        FileUtil.downLoadFile(response, entity.getFilePath(), entity.getFileName());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveEntity(EamEquipmentAttachmentRequest request) {
+        if(request == null || CollectionUtil.isEmpty(request.getFileList())){
+            return false;
+        }
+        EamEquipment equipment = eamEquipmentService.getById(request.getEquipmentId());
+        if(equipment == null){
+            throw new JeecgBootException("璇峰厛閫夋嫨璁惧鍐嶄笂浼犳枃妗�");
+        }
+        List<EamEquipmentAttachment> resultList = new ArrayList<>();
+        for (FileUploadResult fileUploadResult : request.getFileList()) {
+            EamEquipmentAttachment entity = new EamEquipmentAttachment();
+            entity.setFilePath(fileUploadResult.getFilePath());
+            entity.setFileName(fileUploadResult.getFileName());
+            entity.setFileEncodeName(fileUploadResult.getFileEncodeName());
+            entity.setFileSize(fileUploadResult.getFileSize());
+            entity.setFileSuffix(fileUploadResult.getFileSuffix());
+            entity.setDescription(request.getDescription());
+            entity.setDelFlag(CommonConstant.DEL_FLAG_0);
+            entity.setEquipmentId(request.getEquipmentId());
+            resultList.add(entity);
+        }
+        return this.saveBatch(resultList);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java
new file mode 100644
index 0000000..292b944
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java
@@ -0,0 +1,47 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamEquipmentExtend;
+import org.jeecg.modules.eam.mapper.EamEquipmentExtendMapper;
+import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+/**
+ * @Description: 璁惧鍙拌处鎵╁睍琛�
+ * @Author: jeecg-boot
+ * @Date: 2025-03-19
+ * @Version: V1.0
+ */
+@Service
+public class EamEquipmentExtendServiceImpl extends ServiceImpl<EamEquipmentExtendMapper, EamEquipmentExtend> implements IEamEquipmentExtendService {
+
+    @Resource
+    private EamEquipmentExtendMapper eamEquipmentExtendMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateEquipmentMaintenanceStatus(String equipmentId, String status) {
+        EamEquipmentExtend entity = eamEquipmentExtendMapper.selectById(equipmentId);
+        if (entity == null) {
+            return false;
+        }
+        entity.setMaintenanceStatus(status);
+        eamEquipmentExtendMapper.updateById(entity);
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateEquipmentRepairStatus(String equipmentId, String status) {
+        EamEquipmentExtend entity = eamEquipmentExtendMapper.selectById(equipmentId);
+        if (entity == null) {
+            return false;
+        }
+        entity.setRepairStatus(status);
+        eamEquipmentExtendMapper.updateById(entity);
+        return true;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentFaultReasonServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentFaultReasonServiceImpl.java
new file mode 100644
index 0000000..32cbbbd
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentFaultReasonServiceImpl.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamEquipmentFaultReason;
+import org.jeecg.modules.eam.mapper.EamEquipmentFaultReasonMapper;
+import org.jeecg.modules.eam.service.IEamEquipmentFaultReasonService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 璁惧鏁呴殰鍘熷洜缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Service
+public class EamEquipmentFaultReasonServiceImpl extends ServiceImpl<EamEquipmentFaultReasonMapper, EamEquipmentFaultReason> implements IEamEquipmentFaultReasonService {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentHistoryLogServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentHistoryLogServiceImpl.java
new file mode 100644
index 0000000..b9ff3f5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentHistoryLogServiceImpl.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamEquipmentHistoryLog;
+import org.jeecg.modules.eam.mapper.EamEquipmentHistoryLogMapper;
+import org.jeecg.modules.eam.service.IEamEquipmentHistoryLogService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 璁惧灞ュ巻
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Service
+public class EamEquipmentHistoryLogServiceImpl extends ServiceImpl<EamEquipmentHistoryLogMapper, EamEquipmentHistoryLog> implements IEamEquipmentHistoryLogService {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentPrecisionParametersServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentPrecisionParametersServiceImpl.java
new file mode 100644
index 0000000..a18493c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentPrecisionParametersServiceImpl.java
@@ -0,0 +1,51 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamEquipmentPrecisionParameters;
+import org.jeecg.modules.eam.mapper.EamEquipmentPrecisionParametersMapper;
+import org.jeecg.modules.eam.service.IEamEquipmentPrecisionParametersService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description: 璁惧绮惧害鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+@Service
+public class EamEquipmentPrecisionParametersServiceImpl extends ServiceImpl<EamEquipmentPrecisionParametersMapper, EamEquipmentPrecisionParameters> implements IEamEquipmentPrecisionParametersService {
+
+    @Resource
+    private EamEquipmentPrecisionParametersMapper eamEquipmentPrecisionParametersMapper;
+
+    @Override
+    public EamEquipmentPrecisionParameters queryByEquipmentIdAndParameterId(String equipmentId, String parameterId) {
+        LambdaQueryWrapper<EamEquipmentPrecisionParameters> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamEquipmentPrecisionParameters::getEquipmentId, equipmentId);
+        queryWrapper.eq(EamEquipmentPrecisionParameters::getParameterId, parameterId);
+        return eamEquipmentPrecisionParametersMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public IPage<EamEquipmentPrecisionParameters> queryPageList(String equipmentId, Page<EamEquipmentPrecisionParameters> page) {
+        QueryWrapper<EamEquipmentPrecisionParameters> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.equipment_id", equipmentId);
+        queryWrapper.orderByDesc("wmo.create_time");
+        return eamEquipmentPrecisionParametersMapper.queryPageList(page, queryWrapper);
+    }
+
+    @Override
+    public List<EamEquipmentPrecisionParameters> queryList(String equipmentId) {
+        LambdaQueryWrapper<EamEquipmentPrecisionParameters> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamEquipmentPrecisionParameters::getEquipmentId, equipmentId);
+        queryWrapper.orderByDesc(EamEquipmentPrecisionParameters::getCreateTime);
+        return eamEquipmentPrecisionParametersMapper.selectList(queryWrapper);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentProcessParametersServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentProcessParametersServiceImpl.java
new file mode 100644
index 0000000..03051f8
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentProcessParametersServiceImpl.java
@@ -0,0 +1,42 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamEquipmentProcessParameters;
+import org.jeecg.modules.eam.mapper.EamEquipmentProcessParametersMapper;
+import org.jeecg.modules.eam.service.IEamEquipmentProcessParametersService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @Description: 璁惧宸ヨ壓鍙傛暟
+ * @Author: jeecg-boot
+ * @Date:   2025-04-27
+ * @Version: V1.0
+ */
+@Service
+public class EamEquipmentProcessParametersServiceImpl extends ServiceImpl<EamEquipmentProcessParametersMapper, EamEquipmentProcessParameters> implements IEamEquipmentProcessParametersService {
+
+    @Resource
+    private EamEquipmentProcessParametersMapper eamEquipmentProcessParametersMapper;
+
+    @Override
+    public EamEquipmentProcessParameters queryByEquipmentIdAndParameterId(String equipmentId, String parameterId) {
+        LambdaQueryWrapper<EamEquipmentProcessParameters> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamEquipmentProcessParameters::getEquipmentId, equipmentId);
+        queryWrapper.eq(EamEquipmentProcessParameters::getParameterId, parameterId);
+        return eamEquipmentProcessParametersMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public IPage<EamEquipmentProcessParameters> queryPageList(String equipmentId, Page<EamEquipmentProcessParameters> page) {
+        QueryWrapper<EamEquipmentProcessParameters> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.equipment_id", equipmentId);
+        queryWrapper.orderByDesc("wmo.create_time");
+        return eamEquipmentProcessParametersMapper.queryPageList(page, queryWrapper);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
new file mode 100644
index 0000000..040d6e0
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -0,0 +1,278 @@
+package org.jeecg.modules.eam.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.constant.DataBaseConstant;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
+import org.jeecg.modules.eam.constant.AssetStatusEnum;
+import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus;
+import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
+import org.jeecg.modules.eam.constant.EquipmentRepairStatus;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamEquipmentExtend;
+import org.jeecg.modules.eam.mapper.EamEquipmentMapper;
+import org.jeecg.modules.eam.request.EamEquipmentQuery;
+import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.jeecg.modules.eam.vo.EquipmentSearchResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @Description: 璁惧鍙拌处
+ * @Author: jeecg-boot
+ * @Date: 2025-03-19
+ * @Version: V1.0
+ */
+@Service
+public class EamEquipmentServiceImpl extends ServiceImpl<EamEquipmentMapper, EamEquipment> implements IEamEquipmentService {
+
+    @Resource
+    private EamEquipmentMapper eamEquipmentMapper;
+    @Autowired
+    private IEamEquipmentExtendService equipmentExtendService;
+//    @Autowired
+//    private IMdcProductionService mdcProductionService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.ACCEPTANCE, businessTable = "eam_equipment")
+    public EamEquipment saveEquipment(EamEquipment eamEquipment) {
+        if (eamEquipment == null) {
+            return null;
+        }
+        //璧勪骇鐘舵�侀粯璁� 姝e父
+        eamEquipment.setAssetStatus(AssetStatusEnum.NORMAL.name());
+        eamEquipment.setDelFlag(CommonConstant.DEL_FLAG_0);
+        eamEquipmentMapper.insert(eamEquipment);
+
+        //鎵╁睍琛ㄦ暟鎹悓姝ユ坊鍔�
+        EamEquipmentExtend eamEquipmentExtend = new EamEquipmentExtend();
+        eamEquipmentExtend.setId(eamEquipment.getId());
+        eamEquipmentExtend.setMaintenanceStatus(EquipmentMaintenanceStatus.NORMAL.name());
+        eamEquipmentExtend.setRepairStatus(EquipmentRepairStatus.NORMAL.name());
+
+        equipmentExtendService.save(eamEquipmentExtend);
+
+        //鎻掑叆璁惧灞ュ巻   @EquipmentHistoryLog
+        return eamEquipment;
+    }
+
+//    @Override
+//    public List<EamEquipmentTree> loadTreeListByProductionIds(String ids) {
+//        List<String> productionIds = Arrays.asList(ids.split(","));
+//        //鑾峰彇鎵�鏈変骇绾挎暟鎹�
+//        List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder));
+//        List<String> allProductionIds = new ArrayList<>();
+//        //鎵惧埌鎵�鏈変骇绾縤d鐨勪笂绾d
+//        if (!productionIds.isEmpty()) {
+//            for (String productionId : productionIds) {
+//                this.getAllProductionIds(productionList, productionId, allProductionIds);
+//            }
+//        }
+//        //杩囨护浜х嚎鏁版嵁
+//        List<MdcProduction> list = productionList.stream().filter((MdcProduction mdcProduction) -> allProductionIds.contains(mdcProduction.getId())).collect(Collectors.toList());
+//        //缁勮浜х嚎璁惧鏍�
+//        List<EamEquipmentTree> treeList = FindsEquipmentProductionUtil.wrapEquipmentProductionTreeList(list);
+//        //濉厖璁惧鏁版嵁
+//        fillEquipmentByProduction(treeList);
+//        return treeList;
+//    }
+
+    @Override
+    public IPage<EamEquipment> queryPageList(IPage<EamEquipment> page, EamEquipmentQuery eamEquipment) {
+        QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("e.del_flag", CommonConstant.DEL_FLAG_0);
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return page;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id", sysUser.getId());
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (eamEquipment != null) {
+            if (StringUtils.isNotBlank(eamEquipment.getEquipmentCode())) {
+                queryWrapper.like("e.equipment_code", eamEquipment.getEquipmentCode());
+            }
+            if (StringUtils.isNotBlank(eamEquipment.getEquipmentName())) {
+                queryWrapper.like("e.equipment_name", eamEquipment.getEquipmentName());
+            }
+            if (StringUtils.isNotBlank(eamEquipment.getEquipmentImportance())) {
+                queryWrapper.eq("e.equipment_importance", eamEquipment.getEquipmentImportance());
+            }
+            if (StringUtils.isNotBlank(eamEquipment.getAssetStatus())) {
+                queryWrapper.like("e.asset_status", eamEquipment.getAssetStatus());
+            }
+            if (StringUtils.isNotBlank(eamEquipment.getTechnologyStatus())) {
+                queryWrapper.like("e.technology_status", eamEquipment.getTechnologyStatus());
+            }
+            if (StringUtils.isNotBlank(eamEquipment.getOperationSystem())) {
+                queryWrapper.like("e.operation_system", eamEquipment.getOperationSystem());
+            }
+//            if (StringUtils.isNotBlank(eamEquipment.getOrgId())) {
+//                //杞﹂棿缂栫爜涓嶄负绌�
+//                List<String> productIds = mdcProductionService.recursionChildren(eamEquipment.getOrgId());
+//                if (CollectionUtil.isNotEmpty(productIds)) {
+//                    //涓嶅仛绛涢��
+//                    queryWrapper.in("e.org_id", productIds);
+//                }
+//            }
+            if (StringUtils.isNotBlank(eamEquipment.getEquipmentCategory())) {
+                queryWrapper.like("e.equipment_category", eamEquipment.getEquipmentCategory());
+            }
+            if (StringUtils.isNotBlank(eamEquipment.getId())) {
+                queryWrapper.eq("e.id", eamEquipment.getId());
+            }
+            //鎺掑簭
+            if (StringUtils.isNotBlank(eamEquipment.getColumn()) && StringUtils.isNotBlank(eamEquipment.getOrder())) {
+                //queryWrapper.like("column", eamEquipment.getColumn());
+                String column = eamEquipment.getColumn();
+                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
+                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
+                }
+                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(eamEquipment.getOrder())) {
+                    queryWrapper.orderByAsc("e." + oConvertUtils.camelToUnderline(column));
+                } else {
+                    queryWrapper.orderByDesc("e." + oConvertUtils.camelToUnderline(column));
+                }
+            } else {
+                queryWrapper.orderByDesc("e.create_time");
+            }
+        } else {
+            queryWrapper.orderByDesc("e.create_time");
+        }
+
+        IPage<EamEquipment> ipage = eamEquipmentMapper.queryPageList(page, queryWrapper);
+        return ipage;
+    }
+
+    @Override
+    public List<EquipmentSearchResult> asyncLoadEquipment(String keyword, Integer pageSize, String id) {
+        if (StringUtils.isNotBlank(id)) {
+            EamEquipment eamEquipment = eamEquipmentMapper.selectById(id);
+            if (eamEquipment != null) {
+                List<EquipmentSearchResult> resultList = new ArrayList<>();
+                resultList.add(new EquipmentSearchResult(eamEquipment));
+                return resultList;
+            }
+        }
+        IPage<EamEquipment> page = new Page<>(1, pageSize);
+        QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>();
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return Collections.emptyList();
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=org_id", sysUser.getId());
+        }
+        if (StringUtils.isNotBlank(keyword)) {
+            queryWrapper.like("equipment_code", keyword);
+            queryWrapper.or().like("equipment_name", keyword);
+        }
+        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+        IPage<EamEquipment> pageResult = eamEquipmentMapper.queryPageList(page, queryWrapper);
+        if (pageResult != null && CollectionUtil.isNotEmpty(pageResult.getRecords())) {
+            List<EquipmentSearchResult> resultList = new ArrayList<>();
+            pageResult.getRecords().forEach((record) -> {
+                resultList.add(new EquipmentSearchResult(record));
+            });
+            return resultList;
+        }
+        return Collections.emptyList();
+    }
+
+    @Override
+    public EamEquipment selectByEquipmentCode(String equipmentCode) {
+        if (StringUtils.isBlank(equipmentCode)) {
+            return null;
+        }
+        QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>();
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return null;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=org_id", sysUser.getId());
+        }
+        queryWrapper.eq("equipment_code", equipmentCode);
+        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
+
+        return eamEquipmentMapper.selectOne(queryWrapper);
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夌殑浜х嚎id锛堝寘鍚墍鏈変笂绾э級
+     */
+//    private void getAllProductionIds(List<MdcProduction> productionList, String productionId, List<String> allProductionIds) {
+//        if (!allProductionIds.contains(productionId)) {
+//            allProductionIds.add(productionId);
+//        }
+//        for (MdcProduction mdcProduction : productionList) {
+//            if (StringUtils.isEmpty(mdcProduction.getParentId())) {
+//                continue;
+//            }
+//            if (productionId.equals(mdcProduction.getId())) {
+//                if (!allProductionIds.contains(mdcProduction.getParentId())) {
+//                    allProductionIds.add(mdcProduction.getParentId());
+//                    getAllProductionIds(productionList, mdcProduction.getParentId(), allProductionIds);
+//                }
+//            }
+//        }
+//    }
+
+    /**
+     * 浜х嚎璁惧鏍戝~鍏呰澶囨暟鎹�
+     */
+//    private void fillEquipmentByProduction(List<EamEquipmentTree> treeList) {
+//        for (EamEquipmentTree mdcEquipmentTree : treeList) {
+//            List<EamEquipment> equipmentList = eamEquipmentMapper.queryByProductionId(mdcEquipmentTree.getKey());
+//            if (CollectionUtil.isNotEmpty(equipmentList)) {
+//                for (EamEquipment mdcEquipment : equipmentList) {
+//                    EamEquipmentTree tree = new EamEquipmentTree().convert(mdcEquipment);
+//                    tree.setParentId(mdcEquipmentTree.getKey());
+//                    tree.setType(2);
+//                    mdcEquipmentTree.getChildren().add(tree);
+//                }
+//                mdcEquipmentTree.setLeaf(false);
+//            }
+//            if (CollectionUtil.isNotEmpty(mdcEquipmentTree.getChildren())) {
+//                fillEquipmentByProduction(mdcEquipmentTree.getChildren());
+//            }
+//        }
+//    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderDetailServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderDetailServiceImpl.java
new file mode 100644
index 0000000..36bf8b5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderDetailServiceImpl.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.mapper.EamInspectionOrderDetailMapper;
+import org.jeecg.modules.eam.service.IEamInspectionOrderDetailService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 鐐规宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Service
+public class EamInspectionOrderDetailServiceImpl extends ServiceImpl<EamInspectionOrderDetailMapper, EamInspectionOrderDetail> implements IEamInspectionOrderDetailService {
+
+    @Override
+    public List<EamInspectionOrderDetail> queryListByOrderId(String orderId) {
+        LambdaQueryWrapper<EamInspectionOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamInspectionOrderDetail::getOrderId, orderId);
+        queryWrapper.orderByAsc(EamInspectionOrderDetail::getItemCode);
+        return super.list(queryWrapper);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java
new file mode 100644
index 0000000..696baeb
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java
@@ -0,0 +1,556 @@
+package org.jeecg.modules.eam.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
+import org.jeecg.modules.eam.constant.InspectionStatus;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamInspectionOrder;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.mapper.EamInspectionOrderMapper;
+import org.jeecg.modules.eam.request.EamInspectionOrderQuery;
+import org.jeecg.modules.eam.request.EamInspectionOrderRequest;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.jeecg.modules.eam.service.IEamInspectionOrderDetailService;
+import org.jeecg.modules.eam.service.IEamInspectionOrderService;
+import org.jeecg.modules.eam.service.IEamReportRepairService;
+import org.jeecg.modules.eam.vo.InspectionVo;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
+import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
+import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
+import org.jeecg.modules.flowable.service.IFlowDefinitionService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @Description: 鐐规宸ュ崟
+ * @Author: jeecg-boot
+ * @Date: 2025-04-02
+ * @Version: V1.0
+ */
+@Service("IEamInspectionOrderService")
+public class EamInspectionOrderServiceImpl extends ServiceImpl<EamInspectionOrderMapper, EamInspectionOrder> implements IEamInspectionOrderService, FlowCallBackServiceI {
+
+    @Resource
+    private EamInspectionOrderMapper eamInspectionOrderMapper;
+    @Autowired
+    private IEamInspectionOrderDetailService eamInspectionOrderDetailService;
+    @Resource
+    private FlowCommonService flowCommonService;
+    @Resource
+    private IFlowDefinitionService flowDefinitionService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+    @Autowired
+    private FlowMyBusinessServiceImpl flowMyBusinessService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private IEamEquipmentService iEamEquipmentService;
+    @Autowired
+    private IEamReportRepairService eamReportRepairService;
+
+    @Override
+    public IPage<EamInspectionOrder> queryPageList(Page<EamInspectionOrder> page, EamInspectionOrderQuery query) {
+        QueryWrapper<EamInspectionOrder> queryWrapper = new QueryWrapper<>();
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return page;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (query != null) {
+            if (StringUtils.isNotBlank(query.getEquipmentId())) {
+                queryWrapper.eq("wmo.equipment_id", query.getEquipmentId());
+            }
+            if (StringUtils.isNotBlank(query.getOrderNum())) {
+                queryWrapper.like("wmo.order_num", query.getOrderNum());
+            }
+            if (StringUtils.isNotBlank(query.getInspectionStatus())) {
+                queryWrapper.eq("wmo.inspection_status", query.getInspectionStatus());
+            }
+            if (query.getInspectionDateBegin() != null && query.getInspectionDateEnd() != null) {
+                queryWrapper.between("wmo.inspection_date", query.getInspectionDateBegin(), query.getInspectionDateEnd());
+            }
+            //鎺掑簭
+            if (StringUtils.isNotBlank(query.getColumn()) && StringUtils.isNotBlank(query.getOrder())) {
+                String column = query.getColumn();
+                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
+                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
+                }
+                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(query.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 eamInspectionOrderMapper.queryPageList(page, queryWrapper);
+    }
+
+    @Override
+    public List<EamInspectionOrder> selectUnCompleteOrder(String expiredDate) {
+        LambdaQueryWrapper<EamInspectionOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.lt(EamInspectionOrder::getInspectionDate, expiredDate);
+        List<String> unCompleteStatus = new ArrayList<>();
+        unCompleteStatus.add(InspectionStatus.WAIT_INSPECTION.name());
+        unCompleteStatus.add(InspectionStatus.UNDER_INSPECTION.name());
+        queryWrapper.in(EamInspectionOrder::getInspectionStatus, unCompleteStatus);
+        queryWrapper.orderByAsc(EamInspectionOrder::getInspectionDate);
+        return eamInspectionOrderMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest) {
+        EamInspectionOrder eamInspectionOrder = new EamInspectionOrder();
+        BeanUtils.copyProperties(eamInspectionOrderRequest, eamInspectionOrder);
+        //淇敼鐘舵��
+        if (StrUtil.isNotBlank(eamInspectionOrderRequest.getOperator())) {
+            eamInspectionOrder.setInspectionStatus(InspectionStatus.UNDER_INSPECTION.name());
+        } else {
+            eamInspectionOrder.setInspectionStatus(InspectionStatus.WAIT_INSPECTION.name());
+        }
+        save(eamInspectionOrder);
+        //澶勭悊鏄庣粏鏁版嵁
+        if (CollectionUtil.isNotEmpty(eamInspectionOrderRequest.getTableDetailList())) {
+            eamInspectionOrderRequest.getTableDetailList().forEach(tableDetail -> {
+                tableDetail.setOrderId(eamInspectionOrder.getId());
+                tableDetail.setId(null);
+            });
+            eamInspectionOrderDetailService.saveBatch(eamInspectionOrderRequest.getTableDetailList());
+        }
+        //澶勭悊闄勪欢
+        if (CollectionUtil.isNotEmpty(eamInspectionOrderRequest.getFileList())) {
+            FileUploadResult fileUploadResult = eamInspectionOrderRequest.getFileList().get(0);
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                String referenceFile = mapper.writeValueAsString(fileUploadResult);
+                eamInspectionOrder.setImageFiles(referenceFile);
+            } catch (JsonProcessingException e) {
+                log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+            }
+        }
+        if (StrUtil.isNotBlank(eamInspectionOrderRequest.getOperator())) {
+            triggerProcess(eamInspectionOrder);
+        }
+        return true;
+    }
+
+    /**
+     * 瑙﹀彂娴佺▼
+     *
+     * @param eamInspectionOrder
+     * @return
+     */
+    public boolean triggerProcess(EamInspectionOrder eamInspectionOrder) {
+        EamEquipment equipment = eamEquipmentService.getById(eamInspectionOrder.getEquipmentId());
+        if (equipment == null) {
+            return false;
+        } else {
+            eamInspectionOrder.setEquipmentCode(equipment.getEquipmentCode());
+        }
+        flowCommonService.initActBusiness("宸ュ崟鍙�: " + eamInspectionOrder.getOrderNum() + ";璁惧缂栧彿: " + eamInspectionOrder.getEquipmentCode() + ";瀹夎浣嶇疆: " + equipment.getInstallationPosition(),
+                eamInspectionOrder.getId(), "IEamInspectionOrderService", "eam_inspection", null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", eamInspectionOrder.getId());
+        if (StrUtil.isEmpty(eamInspectionOrder.getRemark())) {
+            variables.put("organization", "鏂板鐐规宸ュ崟榛樿鍚姩娴佺▼");
+            variables.put("comment", "鏂板鐐规宸ュ崟榛樿鍚姩娴佺▼");
+        } else {
+            variables.put("organization", eamInspectionOrder.getRemark());
+            variables.put("comment", eamInspectionOrder.getRemark());
+        }
+        variables.put("proofreading", true);
+        List<String> usernames = new ArrayList<>();
+        usernames.add(eamInspectionOrder.getOperator());
+        variables.put("NextAssignee", usernames);
+        Result result = flowDefinitionService.startProcessInstanceByKey("eam_inspection", variables);
+        return result.isSuccess();
+    }
+
+
+    @Override
+    public boolean editInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest) {
+        EamInspectionOrder eamInspectionOrder = new EamInspectionOrder();
+        BeanUtils.copyProperties(eamInspectionOrderRequest, eamInspectionOrder);
+        if (StrUtil.isNotEmpty(eamInspectionOrder.getOperator())) {
+            eamInspectionOrder.setInspectionStatus(InspectionStatus.UNDER_INSPECTION.name());
+        }
+        super.updateById(eamInspectionOrder);
+        //澶勭悊鏄庣粏鏁版嵁
+        if (CollectionUtil.isNotEmpty(eamInspectionOrderRequest.getTableDetailList())) {
+            eamInspectionOrderRequest.getTableDetailList().forEach(tableDetail -> {
+                tableDetail.setOrderId(eamInspectionOrder.getId());
+                tableDetail.setCreateTime(new Date());
+            });
+            //鍒犻櫎鏄庣粏
+            eamInspectionOrderDetailService.remove(new QueryWrapper<EamInspectionOrderDetail>().eq("order_id", eamInspectionOrder.getId()));
+            eamInspectionOrderDetailService.saveBatch(eamInspectionOrderRequest.getTableDetailList());
+        }
+        return true;
+    }
+
+    /**
+     * 棰嗗彇鐐规宸ュ崟
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean takeInspectionOrder(String id) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if(user == null || !BusinessCodeConst.PCR0001.equals(user.getPost())) {
+            throw new JeecgBootException("涓嶆槸鎿嶄綔宸ワ紝鏃犳硶棰嗗彇姝ゅ伐鍗曪紒");
+        }
+        EamInspectionOrder eamInspectionOrder = this.getById(id);
+        if (eamInspectionOrder == null) {
+            return false;
+        } else {
+            eamInspectionOrder.setOperator(user.getUsername());
+            //淇敼鐘舵��
+            eamInspectionOrder.setInspectionStatus(InspectionStatus.UNDER_INSPECTION.name());
+            this.triggerProcess(eamInspectionOrder);
+            this.updateById(eamInspectionOrder);
+            return true;
+        }
+    }
+
+    /**
+     * 浣滃簾鐐规宸ュ崟
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public boolean cancelInspectionOrder(String id) {
+        EamInspectionOrder eamInspectionOrder = this.getById(id);
+        if (eamInspectionOrder == null) {
+            return false;
+        } else {
+            eamInspectionOrder.setInspectionStatus(InspectionStatus.ABOLISH.name());
+            return updateById(eamInspectionOrder);
+        }
+    }
+
+    /**
+     * 鐐规娴佺▼
+     *
+     * @param eamInspectionOrderRequest
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.POINT_INSPECTION, businessTable = "eam_inspection_order")
+    public EamInspectionOrder inspectionProcess(EamInspectionOrderRequest eamInspectionOrderRequest) {
+        try {
+            // 妫�鏌ヨ姹傚弬鏁�
+            if (!isValidRequest(eamInspectionOrderRequest)) {
+                throw new JeecgBootException("闈炴硶鍙傛暟");
+            }
+
+            // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+            LoginUser user = getCurrentUser();
+            if (user == null || StrUtil.isBlank(user.getId())) {
+                throw new JeecgBootException("璐﹀彿涓嶅瓨鍦�");
+            }
+            eamInspectionOrderRequest.setAssignee(user.getUsername());
+
+            // 鑾峰彇鐐规宸ュ崟淇℃伅
+            EamInspectionOrder eamInspectionOrder = getEamInspectionOrder(eamInspectionOrderRequest.getDataId());
+            if (eamInspectionOrder == null) {
+                throw new JeecgBootException("鏈壘鍒板搴旀暟鎹�");
+            }
+
+            // 鑾峰彇娴佺▼涓氬姟璁板綍
+            FlowMyBusiness flowMyBusiness = getFlowMyBusiness(eamInspectionOrderRequest.getInstanceId());
+            if (flowMyBusiness == null) {
+                throw new JeecgBootException("娴佺▼璁板綍涓嶅瓨鍦�");
+            }
+
+            // 妫�鏌ョ敤鎴锋槸鍚︽湁鏉冮檺鎿嶄綔浠诲姟
+            if (!isUserAuthorized(flowMyBusiness, user)) {
+                throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�");
+            }
+
+            // 璁ら浠诲姟
+            if (!claimTask(flowMyBusiness.getTaskId(), user)) {
+                throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰�");
+            }
+
+            // 璁剧疆娴佺▼鍙橀噺
+            setupProcessVariables(eamInspectionOrderRequest, eamInspectionOrder, user);
+
+            // 瀹屾垚娴佺▼浠诲姟
+            Result result = flowTaskService.complete(eamInspectionOrderRequest);
+
+            // 鏍规嵁浠诲姟瀹屾垚缁撴灉鏇存柊宸ュ崟鐘舵��
+            updateOrderStatus(result, eamInspectionOrderRequest, eamInspectionOrder, user);
+
+            // 鏇存柊宸ュ崟淇℃伅
+            updateEamInspectionOrder(eamInspectionOrder);
+
+            //鏌ヨ鏁版嵁,杩涜璁惧缁翠慨澶勭悊
+            if (eamInspectionOrder.getInspectionStatus().equals(InspectionStatus.WAIT_CONFIRM.name())) {
+                updateEamInspectionOrderDetail(eamInspectionOrder);
+            }
+
+            return eamInspectionOrder;
+        } catch (Exception e) {
+            throw new JeecgBootException("鎿嶄綔澶辫触锛�" + e.getMessage());
+        }
+    }
+
+
+    private boolean isValidRequest(EamInspectionOrderRequest request) {
+        return StrUtil.isNotBlank(request.getTaskId()) && StrUtil.isNotBlank(request.getDataId());
+    }
+
+    private LoginUser getCurrentUser() {
+        try {
+            return (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    private EamInspectionOrder getEamInspectionOrder(String dataId) {
+        return this.getById(dataId);
+    }
+
+    private FlowMyBusiness getFlowMyBusiness(String instanceId) {
+        List<FlowMyBusiness> businessList = flowMyBusinessService.list(
+                new QueryWrapper<FlowMyBusiness>().eq("process_instance_id", instanceId));
+        return businessList.isEmpty() ? null : businessList.get(0);
+    }
+
+    private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
+        List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
+        return todoUsers != null && todoUsers.contains(user.getUsername());
+    }
+
+    private boolean claimTask(String taskId, LoginUser user) {
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        if (task == null) {
+            return false;
+        }
+        if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
+            return false;
+        }
+        taskService.claim(taskId, user.getUsername());
+        return true;
+    }
+
+    private void setupProcessVariables(EamInspectionOrderRequest request, EamInspectionOrder order, LoginUser user) {
+        Map<String, Object> values = new HashMap<>();
+        if (InspectionStatus.UNDER_INSPECTION.name().equals(order.getInspectionStatus()) && user.getUsername().equals(order.getOperator())) {
+            // 鐐规浜虹偣妫�缁撴潫
+            String manager = Optional.ofNullable(iEamEquipmentService.getById(order.getEquipmentId()))
+                    .map(EamEquipment::getEquipmentManager)
+                    .orElse(null);
+            if (manager == null) {
+                throw new IllegalArgumentException("璁惧绠$悊鍛樻湭閰嶇疆");
+            }
+            List<String> usernameList = Collections.singletonList(manager);
+            values.put("dataId", order.getId());
+            values.put("organization", "鐐规浜虹偣妫�缁撴潫");
+            values.put("comment", "鐐规浜虹偣妫�缁撴潫");
+            values.put("NextAssignee", usernameList);
+            request.setComment("鐐规浜虹偣妫�缁撴潫");
+        } else {
+            // 鐝粍闀跨‘璁�
+            values.put("dataId", order.getId());
+            values.put("organization", request.getConfirmComment());
+            values.put("comment", request.getConfirmComment());
+            values.put("confirmation", request.getConfirmDealType());
+            request.setComment(request.getConfirmComment());
+            if ("2".equals(request.getConfirmDealType())) {
+                // 鐝粍闀块┏鍥�
+                List<String> usernames = new ArrayList<>();
+                usernames.add(order.getOperator());
+                order.setInspectionStatus(InspectionStatus.UNDER_INSPECTION.name());
+                values.put("NextAssignee", usernames);
+            }
+        }
+        request.setValues(values);
+    }
+
+    private void updateOrderStatus(Result result, EamInspectionOrderRequest request, EamInspectionOrder order, LoginUser user) {
+        if (result.isSuccess()) {
+            if (InspectionStatus.UNDER_INSPECTION.name().equals(order.getInspectionStatus()) && StrUtil.isEmpty(request.getConfirmDealType())) {
+                // 鐐规瀹屾垚
+                order.setInspectionStatus(InspectionStatus.WAIT_CONFIRM.name());
+                order.setOperateTime(new Date());
+                if (CollectionUtil.isNotEmpty(request.getFileList())) {
+                    List<FileUploadResult> fileUploadResultList = request.getFileList();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        order.setImageFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                eamInspectionOrderDetailService.remove(new QueryWrapper<EamInspectionOrderDetail>().eq("order_id", order.getId()));
+                eamInspectionOrderDetailService.saveBatch(request.getTableDetailList());
+            } else if (InspectionStatus.WAIT_CONFIRM.name().equals(order.getInspectionStatus()) && StrUtil.isNotEmpty(request.getConfirmDealType())) {
+                // 鐝粍闀跨‘璁や换鍔�
+                order.setInspectionStatus(InspectionStatus.COMPLETE.name());
+                order.setConfirmUser(user.getUsername());
+                order.setConfirmComment(request.getConfirmComment());
+                order.setConfirmDealType(request.getConfirmDealType());
+                order.setConfirmTime(new Date());
+            }
+        }
+    }
+
+    private void updateEamInspectionOrder(EamInspectionOrder eamInspectionOrder) {
+        this.updateById(eamInspectionOrder);
+    }
+
+    /**
+     * 璁惧鏄惁瀛樺湪寮傚父,骞惰繘琛岃澶囩淮淇�
+     *
+     * @param eamInspectionOrder
+     */
+    private void updateEamInspectionOrderDetail(EamInspectionOrder eamInspectionOrder) {
+        List<EamInspectionOrderDetail> eamInspectionOrderDetails = eamInspectionOrderDetailService
+                .list(new QueryWrapper<EamInspectionOrderDetail>()
+                        .eq("order_id", eamInspectionOrder.getId()).eq("report_flag", "1").eq("inspection_result", "2"));
+        eamReportRepairService.reportRepairFromInspection(eamInspectionOrder.getEquipmentId(), eamInspectionOrder.getOperator(), eamInspectionOrderDetails);
+    }
+
+    /**
+     * 鎵归噺浣滃簾涓庨鍙�
+     *
+     * @param ids
+     * @param type
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result<?> batchCancelOrTakeInspectionOrder(String ids, String type) {
+        if (type == null) {
+            return Result.error("璇烽�夋嫨鎿嶄綔绫诲瀷");
+        }
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        List<String> list = Arrays.asList(ids.split(","));
+        QueryWrapper<EamInspectionOrder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("id", list);
+        queryWrapper.eq("inspection_status", InspectionStatus.WAIT_INSPECTION.name());
+        List<EamInspectionOrder> eamInspectionOrderList = this.list(queryWrapper);
+        if (!eamInspectionOrderList.isEmpty()) {
+            eamInspectionOrderList.forEach(eamInspectionOrder -> {
+                eamInspectionOrder.setInspectionStatus(type);
+                if (InspectionStatus.UNDER_INSPECTION.name().equals(type)) {
+                    eamInspectionOrder.setOperator(loginUser.getUsername());
+                    this.triggerProcess(eamInspectionOrder);
+                } else {
+                    eamInspectionOrder.setOperator(null);
+                }
+            });
+            this.updateBatchById(eamInspectionOrderList);
+        }
+        return Result.OK("鎿嶄綔鎴愬姛");
+    }
+
+
+    @Override
+    public Result<?> selectVoById(String id) {
+        List<EamInspectionOrder> eamInspectionOrders = this.list(new QueryWrapper<EamInspectionOrder>().eq("id", id));
+        List<EamInspectionOrderRequest> eamInspectionOrderRequestList = new ArrayList<>();
+        eamInspectionOrders.forEach(eamInspectionOrder -> {
+            EamInspectionOrderRequest eamInspectionOrderRequest = new EamInspectionOrderRequest();
+            BeanUtils.copyProperties(eamInspectionOrder, eamInspectionOrderRequest);
+            List<EamInspectionOrderDetail> eamInspectionOrderDetails = eamInspectionOrderDetailService
+                    .list(new QueryWrapper<EamInspectionOrderDetail>().eq("order_id", eamInspectionOrder.getId()));
+            eamInspectionOrderRequest.setTableDetailList(eamInspectionOrderDetails);
+            eamInspectionOrderRequestList.add(eamInspectionOrderRequest);
+        });
+        return Result.ok(eamInspectionOrderRequestList);
+    }
+
+    @Override
+    public void afterFlowHandle(FlowMyBusiness business) {
+        business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣
+        business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟
+        business.getActStatus();
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return this.getById(dataId);
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return null;
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞�
+        //鑾峰彇涓嬩竴姝ュ鐞嗕汉
+        Object object = values.get("NextAssignee");
+        return (List<String>) object;
+    }
+
+    @Override
+    public List<InspectionVo> findInspectionResult(String equipmentId,String itemDemand,String yearMonth) {
+        return this.baseMapper.findInspectionResult(equipmentId,itemDemand,yearMonth);
+    }
+
+    @Override
+    public List<InspectionVo> findInspectionUser(String equipmentId,String yearMonth) {
+        return this.baseMapper.findInspectionUser(equipmentId,yearMonth);
+    }
+
+    @Override
+    public List<Map<String, Object>> findInspectionStandard(String equipmentId) {
+        return this.baseMapper.findInspectionStandard(equipmentId);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderDetailServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderDetailServiceImpl.java
new file mode 100644
index 0000000..3b71a63
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderDetailServiceImpl.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+import org.jeecg.modules.eam.mapper.EamMaintenanceOrderDetailMapper;
+import org.jeecg.modules.eam.service.IEamMaintenanceOrderDetailService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 淇濆吇宸ュ崟鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-04-02
+ * @Version: V1.0
+ */
+@Service
+public class EamMaintenanceOrderDetailServiceImpl extends ServiceImpl<EamMaintenanceOrderDetailMapper, EamMaintenanceOrderDetail> implements IEamMaintenanceOrderDetailService {
+
+    @Override
+    public List<EamMaintenanceOrderDetail> queryListByOrderId(String orderId) {
+        LambdaQueryWrapper<EamMaintenanceOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamMaintenanceOrderDetail::getOrderId, orderId);
+        queryWrapper.orderByAsc(EamMaintenanceOrderDetail::getItemCode);
+        return super.list(queryWrapper);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderServiceImpl.java
new file mode 100644
index 0000000..bf0013e
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceOrderServiceImpl.java
@@ -0,0 +1,548 @@
+package org.jeecg.modules.eam.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus;
+import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
+import org.jeecg.modules.eam.constant.MaintenanceStatusEnum;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrder;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+import org.jeecg.modules.eam.mapper.EamMaintenanceOrderMapper;
+import org.jeecg.modules.eam.request.EamMaintenanceQuery;
+import org.jeecg.modules.eam.request.EamMaintenanceRequest;
+import org.jeecg.modules.eam.service.*;
+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;
+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.system.service.ISysUserService;
+import org.jeecg.modules.system.vo.UserSelector;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 淇濆吇宸ュ崟
+ * @Author: jeecg-boot
+ * @Date: 2025-04-02
+ * @Version: V1.0
+ */
+@Service("IEamMaintenanceOrderService")
+public class EamMaintenanceOrderServiceImpl extends ServiceImpl<EamMaintenanceOrderMapper, EamMaintenanceOrder> implements IEamMaintenanceOrderService, FlowCallBackServiceI {
+
+    @Resource
+    private EamMaintenanceOrderMapper eamMaintenanceOrderMapper;
+
+    @Autowired
+    private IEamMaintenanceOrderDetailService eamMaintenanceOrderDetailService;
+
+    @Autowired
+    private FlowCommonService flowCommonService;
+    @Autowired
+    private IFlowDefinitionService flowDefinitionService;
+    @Autowired
+    private IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+    @Autowired
+    private IEamReportRepairService eamReportRepairService;
+    @Autowired
+    private IEamEquipmentExtendService eamEquipmentExtendService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addMaintenance(EamMaintenanceRequest request) {
+        EamEquipment equipment = eamEquipmentService.getById(request.getEquipmentId());
+        if (equipment == null) {
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝娣诲姞澶辫触锛�");
+        }
+        EamMaintenanceOrder order = new EamMaintenanceOrder();
+        order.setOrderNum(request.getOrderNum());
+        order.setEquipmentId(request.getEquipmentId());
+        order.setStandardId(request.getStandardId());
+        order.setMaintenanceDate(request.getMaintenanceDate());
+        order.setOperator(request.getOperator());
+        order.setRemark(request.getRemark());
+        //鐘舵�佸垵濮嬪寲
+        order.setMaintenanceStatus(MaintenanceStatusEnum.WAIT_MAINTENANCE.name());
+        order.setCreationMethod(request.getCreationMethod());
+        //鍒犻櫎鏍囪
+        order.setDelFlag(CommonConstant.DEL_FLAG_0);
+        eamMaintenanceOrderMapper.insert(order);
+        //澶勭悊鏄庣粏鏁版嵁
+        if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
+            request.getTableDetailList().forEach(tableDetail -> {
+                tableDetail.setId(null);
+                tableDetail.setOrderId(order.getId());
+            });
+            eamMaintenanceOrderDetailService.saveBatch(request.getTableDetailList());
+        }
+        //鍒ゆ柇鏄惁瀛樺湪淇濆吇浜� 濡傛灉瀛樺湪鍒欏惎鍔ㄦ祦绋�
+        if (StringUtils.isNotBlank(order.getOperator())) {
+            //鍚姩娴佺▼
+            flowCommonService.initActBusiness("宸ュ崟鍙�:" + order.getOrderNum() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";杩涜璁惧淇濆吇",
+                    order.getId(), "IEamMaintenanceOrderService", "maintenance_process", null);
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("dataId", order.getId());
+            if (StrUtil.isEmpty(order.getRemark())) {
+                variables.put("organization", "鏂板淇濆吇宸ュ崟榛樿鍚姩娴佺▼");
+                variables.put("comment", "鏂板淇濆吇宸ュ崟榛樿鍚姩娴佺▼");
+            } else {
+                variables.put("organization", order.getRemark());
+                variables.put("comment", order.getRemark());
+            }
+            variables.put("proofreading", true);
+            List<String> usernames = new ArrayList<>();
+            usernames.add(order.getOperator());
+            variables.put("NextAssignee", usernames);
+            Result result = flowDefinitionService.startProcessInstanceByKey("_maintenance_process", variables);
+            if (result != null) {
+                //鏇存柊淇濆吇鐘舵��
+                order.setMaintenanceStatus(MaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+                order.setActualStartTime(new Date());
+                eamMaintenanceOrderMapper.updateById(order);
+                //鏇存柊璁惧淇濆吇鐘舵��
+                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(order.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
+                return result.isSuccess();
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public IPage<EamMaintenanceOrder> queryPageList(Page<EamMaintenanceOrder> page, EamMaintenanceQuery query) {
+        QueryWrapper<EamMaintenanceOrder> queryWrapper = new QueryWrapper<>();
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return page;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (query != null) {
+            if (StringUtils.isNotBlank(query.getEquipmentId())) {
+                queryWrapper.eq("wmo.equipment_id", query.getEquipmentId());
+            }
+            if (StringUtils.isNotBlank(query.getOrderNum())) {
+                queryWrapper.like("wmo.order_num", query.getOrderNum());
+            }
+            if (StringUtils.isNotBlank(query.getMaintenanceStatus())) {
+                queryWrapper.eq("wmo.maintenance_status", query.getMaintenanceStatus());
+            }
+            if (query.getMaintenanceDateBegin() != null && query.getMaintenanceDateEnd() != null) {
+                queryWrapper.between("wmo.maintenance_date", query.getMaintenanceDateBegin(), query.getMaintenanceDateEnd());
+            }
+            //鎺掑簭
+            if (StringUtils.isNotBlank(query.getColumn()) && StringUtils.isNotBlank(query.getOrder())) {
+                String column = query.getColumn();
+                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
+                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
+                }
+                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(query.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 eamMaintenanceOrderMapper.queryPageList(page, queryWrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean editMaintenance(EamMaintenanceRequest request) {
+        EamEquipment equipment = eamEquipmentService.getById(request.getEquipmentId());
+        if (equipment == null) {
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝娣诲姞澶辫触锛�");
+        }
+        EamMaintenanceOrder entity = eamMaintenanceOrderMapper.selectById(request.getId());
+        if (entity == null) {
+            throw new JeecgBootException("缂栬緫鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
+        }
+        if (!MaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+            throw new JeecgBootException("鍙湁寰呬繚鍏荤姸鎬佺殑鏁版嵁鎵嶅彲缂栬緫锛�");
+        }
+        entity.setMaintenanceDate(request.getMaintenanceDate());
+        entity.setOperator(request.getOperator());
+        entity.setRemark(request.getRemark());
+
+        eamMaintenanceOrderMapper.updateById(entity);
+        //澶勭悊璇︽儏
+        if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
+            List<EamMaintenanceOrderDetail> addList = new ArrayList<>();
+            List<EamMaintenanceOrderDetail> updateList = new ArrayList<>();
+            request.getTableDetailList().forEach(tableDetail -> {
+                tableDetail.setOrderId(entity.getId());
+                if (tableDetail.getId() == null) {
+                    addList.add(tableDetail);
+                } else {
+                    updateList.add(tableDetail);
+                }
+            });
+            if (CollectionUtil.isNotEmpty(addList)) {
+                eamMaintenanceOrderDetailService.saveBatch(addList);
+            }
+            if (CollectionUtil.isNotEmpty(updateList)) {
+                eamMaintenanceOrderDetailService.updateBatchById(updateList);
+            }
+        }
+        if (CollectionUtil.isNotEmpty(request.getRemoveDetailList())) {
+            List<String> ids = request.getRemoveDetailList().stream().map(EamMaintenanceOrderDetail::getId).collect(Collectors.toList());
+            eamMaintenanceOrderDetailService.removeBatchByIds(ids);
+        }
+        //鍒ゆ柇鏄惁瀛樺湪淇濆吇浜� 濡傛灉瀛樺湪鍒欏惎鍔ㄦ祦绋�
+        if (StringUtils.isNotBlank(entity.getOperator())) {
+            //鍚姩娴佺▼
+            flowCommonService.initActBusiness("宸ュ崟鍙�:" + entity.getOrderNum() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";杩涜璁惧淇濆吇",
+                    entity.getId(), "IEamMaintenanceOrderService", "_maintenance_process", null);
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("dataId", entity.getId());
+            if (StrUtil.isEmpty(entity.getRemark())) {
+                variables.put("organization", "鏂板淇濆吇宸ュ崟榛樿鍚姩娴佺▼");
+                variables.put("comment", "鏂板淇濆吇宸ュ崟榛樿鍚姩娴佺▼");
+            } else {
+                variables.put("organization", entity.getRemark());
+                variables.put("comment", entity.getRemark());
+            }
+            variables.put("proofreading", true);
+            List<String> usernames = new ArrayList<>();
+            usernames.add(entity.getOperator());
+            variables.put("NextAssignee", usernames);
+            Result result = flowDefinitionService.startProcessInstanceByKey("_maintenance_process", variables);
+            if (result != null) {
+                //鏇存柊淇濆吇鐘舵��
+                entity.setMaintenanceStatus(MaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+                entity.setActualStartTime(new Date());
+                eamMaintenanceOrderMapper.updateById(entity);
+                //鏇存柊璁惧淇濆吇鐘舵��
+                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
+                return result.isSuccess();
+            }
+
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean collect(String id) {
+        EamMaintenanceOrder entity = eamMaintenanceOrderMapper.selectById(id);
+        if (entity == null) {
+            throw new JeecgBootException("瑕侀鍙栫殑宸ュ崟涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        if (!MaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+            throw new JeecgBootException("璇ュ伐鍗曞凡杩涜杩囬鍙栵紒");
+        }
+        EamEquipment equipment = eamEquipmentService.getById(entity.getEquipmentId());
+        if (equipment == null) {
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝娣诲姞澶辫触锛�");
+        }
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if(sysUser == null || !BusinessCodeConst.PCR0001.equals(sysUser.getPost())) {
+            throw new JeecgBootException("涓嶆槸鎿嶄綔宸ワ紝鏃犳硶棰嗗彇姝ゅ伐鍗曪紒");
+        }
+        entity.setOperator(sysUser.getUsername());
+        entity.setMaintenanceStatus(MaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+        entity.setActualStartTime(new Date());
+        eamMaintenanceOrderMapper.updateById(entity);
+
+        //鍚姩娴佺▼
+        flowCommonService.initActBusiness("宸ュ崟鍙�:" + entity.getOrderNum() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";杩涜璁惧淇濆吇",
+                entity.getId(), "IEamMaintenanceOrderService", "_maintenance_process", null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", entity.getId());
+        if (StrUtil.isEmpty(entity.getRemark())) {
+            variables.put("organization", "鏂板淇濆吇宸ュ崟榛樿鍚姩娴佺▼");
+            variables.put("comment", "鏂板淇濆吇宸ュ崟榛樿鍚姩娴佺▼");
+        } else {
+            variables.put("organization", entity.getRemark());
+            variables.put("comment", entity.getRemark());
+        }
+        variables.put("proofreading", true);
+        List<String> usernames = new ArrayList<>();
+        usernames.add(entity.getOperator());
+        variables.put("NextAssignee", usernames);
+        Result result = flowDefinitionService.startProcessInstanceByKey("_maintenance_process", variables);
+        if (result != null) {
+            //鏇存柊璁惧淇濆吇鐘舵��
+            eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
+            return result.isSuccess();
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.MAINTENANCE, businessTable = "eam__maintenance_order")
+    public EamMaintenanceOrder approval(EamMaintenanceRequest request) {
+        EamMaintenanceOrder entity = eamMaintenanceOrderMapper.selectById(request.getId());
+        if (entity == null) {
+            throw new JeecgBootException("瀹℃壒鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
+        }
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (user == null || StrUtil.isBlank(user.getId())) {
+            throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒");
+        }
+        request.setAssignee(user.getUsername());
+        // 鑾峰彇娴佺▼涓氬姟璁板綍
+        FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId());
+        if (flowMyBusiness == null) {
+            throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯锛�");
+        }
+
+        boolean userAuthorized = isUserAuthorized(flowMyBusiness, user);
+        if (!userAuthorized) {
+            throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔★紝璇峰埛鏂板悗閲嶈瘯锛�");
+        }
+        // 璁ら浠诲姟
+        if (!claimTask(flowMyBusiness.getTaskId(), user)) {
+            throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰嗭紒");
+        }
+
+        EamEquipment equipment = eamEquipmentService.getById(entity.getEquipmentId());
+        if (equipment == null) {
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒");
+        }
+
+        MaintenanceStatusEnum status = MaintenanceStatusEnum.getInstance(entity.getMaintenanceStatus());
+        if (status == null) {
+            return null;
+        }
+        //娴佺▼鍙橀噺
+        Map<String, Object> values = new HashMap<>();
+        List<UserSelector> userSelectors;
+        List<String> userApprovalList;
+        switch (status) {
+            case UNDER_MAINTENANCE:
+                //鎵ц瀹屾垚
+                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
+                if (CollectionUtil.isEmpty(userSelectors)) {
+                    throw new JeecgBootException("璁惧鏈垎閰嶇粰鐝粍闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                }
+                userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                values.put("dataId", entity.getId());
+                values.put("organization", "淇濆吇鎵ц缁撴潫");
+                values.put("comment", "淇濆吇鎵ц缁撴潫");
+                values.put("NextAssignee", userApprovalList);
+                request.setComment("淇濆吇鎵ц缁撴潫");
+                //璁剧疆entity
+                entity.setMaintenanceStatus(MaintenanceStatusEnum.WAIT_CONFIRM.name());
+                entity.setActualEndTime(new Date());
+                //澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        entity.setImageFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                //澶勭悊璇︽儏
+                if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
+                    eamMaintenanceOrderDetailService.updateBatchById(request.getTableDetailList());
+                }
+                //鏇存柊璁惧淇濆吇鐘舵��
+                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.MAINTENANCE_WAIT_CONFIRM.name());
+                break;
+            case WAIT_CONFIRM:
+                if (StringUtils.isBlank(equipment.getEquipmentManager())) {
+                    throw new JeecgBootException("璁惧鏈垎閰嶈澶囩鐞嗗憳锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                }
+                //鐝粍闀跨‘璁�
+                userApprovalList = new ArrayList<>();
+                userApprovalList.add(equipment.getEquipmentManager());
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getConfirmComment());
+                values.put("comment", request.getConfirmComment());
+                values.put("NextAssignee", userApprovalList);
+                values.put("confirmation", request.getConfirmDealType());
+                request.setComment(request.getConfirmComment());
+                //璁剧疆entity
+                entity.setMaintenanceStatus(MaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name());
+                entity.setConfirmUser(user.getUsername());
+                entity.setConfirmComment(request.getConfirmComment());
+                entity.setConfirmTime(new Date());
+                entity.setConfirmDealType(request.getConfirmDealType());
+                if (CommonConstant.HAS_CANCLE.equals(request.getConfirmDealType())) {
+                    //椹冲洖
+                    userApprovalList = new ArrayList<>();
+                    userApprovalList.add(entity.getOperator());
+                    values.put("NextAssignee", userApprovalList);
+                    entity.setMaintenanceStatus(MaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+                }
+                //澶勭悊鎶ヤ慨
+                List<EamMaintenanceOrderDetail> collect = request.getTableDetailList().stream().filter((detail) -> CommonConstant.DEFAULT_1.equals(detail.getReportFlag())).collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(collect)) {
+                    eamReportRepairService.reportRepairFromMaintenance(equipment.getId(), entity.getOperator(), collect);
+                }
+                break;
+            case WAIT_INITIAL_ACCEPTANCE:
+                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0005);
+                if (CollectionUtil.isEmpty(userSelectors)) {
+                    throw new JeecgBootException("璁惧鏈垎閰嶇粰璁捐兘閮ㄧ鐞嗗憳锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                }
+                userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getInitialAcceptanceComment());
+                values.put("comment", request.getInitialAcceptanceComment());
+                values.put("NextAssignee", userApprovalList);
+                request.setComment(request.getInitialAcceptanceComment());
+                //璁剧疆entity
+                entity.setMaintenanceStatus(MaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name());
+                entity.setInitialAcceptanceUser(user.getUsername());
+                entity.setInitialAcceptanceComment(request.getInitialAcceptanceComment());
+                entity.setInitialAcceptanceTime(new Date());
+                //澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getInitialAcceptanceFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getInitialAcceptanceFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        entity.setInitialAcceptanceFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                break;
+            case WAIT_FINAL_ACCEPTANCE:
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getFinalAcceptanceComment());
+                values.put("comment", request.getFinalAcceptanceComment());
+                request.setComment(request.getFinalAcceptanceComment());
+                //璁剧疆entity
+                entity.setMaintenanceStatus(MaintenanceStatusEnum.COMPLETE.name());
+                entity.setFinalAcceptanceUser(user.getUsername());
+                entity.setFinalAcceptanceComment(request.getFinalAcceptanceComment());
+                entity.setFinalAcceptanceTime(new Date());
+                //澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getFinalAcceptanceFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getFinalAcceptanceFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        entity.setFinalAcceptanceFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                //鏇存柊璁惧淇濆吇鐘舵��
+                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.NORMAL.name());
+                break;
+        }
+        request.setValues(values);
+
+        // 瀹屾垚娴佺▼浠诲姟
+        Result result = flowTaskService.complete(request);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
+        }
+        //淇濆瓨宸ュ崟
+        eamMaintenanceOrderMapper.updateById(entity);
+        return entity;
+    }
+
+    @Override
+    public List<EamMaintenanceOrder> selectUnCompleteOrder(String expiredDate) {
+        LambdaQueryWrapper<EamMaintenanceOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.lt(EamMaintenanceOrder::getMaintenanceDate, expiredDate);
+        List<String> unCompleteStatus = new ArrayList<>();
+        unCompleteStatus.add(MaintenanceStatusEnum.WAIT_MAINTENANCE.name());
+        unCompleteStatus.add(MaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+        queryWrapper.in(EamMaintenanceOrder::getMaintenanceStatus, unCompleteStatus);
+        queryWrapper.orderByAsc(EamMaintenanceOrder::getMaintenanceDate);
+        return eamMaintenanceOrderMapper.selectList(queryWrapper);
+    }
+
+    private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
+        List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
+        return todoUsers != null && todoUsers.contains(user.getUsername());
+    }
+
+    private boolean claimTask(String taskId, LoginUser user) {
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        if (task == null) {
+            return false;
+        }
+        if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
+            return false;
+        }
+        taskService.claim(taskId, user.getUsername());
+        return true;
+    }
+
+    @Override
+    public void afterFlowHandle(FlowMyBusiness business) {
+        business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣
+        business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟
+        business.getActStatus();
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return this.getById(dataId);
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return null;
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞�
+        //鑾峰彇涓嬩竴姝ュ鐞嗕汉
+        Object object = values.get("NextAssignee");
+        return (List<String>) object;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardDetailServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardDetailServiceImpl.java
new file mode 100644
index 0000000..7dce5a5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardDetailServiceImpl.java
@@ -0,0 +1,31 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+import org.jeecg.modules.eam.mapper.EamMaintenanceStandardDetailMapper;
+import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description: 淇濆吇鏍囧噯鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-03-26
+ * @Version: V1.0
+ */
+@Service
+public class EamMaintenanceStandardDetailServiceImpl extends ServiceImpl<EamMaintenanceStandardDetailMapper, EamMaintenanceStandardDetail> implements IEamMaintenanceStandardDetailService {
+    @Resource
+    private EamMaintenanceStandardDetailMapper emMaintenanceStandardDetailMapper;
+
+    @Override
+    public List<EamMaintenanceStandardDetail> selectByStandardId(String standardId) {
+        LambdaQueryWrapper<EamMaintenanceStandardDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamMaintenanceStandardDetail::getStandardId, standardId);
+        queryWrapper.orderByAsc(EamMaintenanceStandardDetail::getItemCode);
+        return emMaintenanceStandardDetailMapper.selectList(queryWrapper);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
new file mode 100644
index 0000000..1315ecf
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -0,0 +1,292 @@
+package org.jeecg.modules.eam.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper;
+import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest;
+import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
+import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 淇濆吇鏍囧噯
+ * @Author: jeecg-boot
+ * @Date:   2025-03-26
+ * @Version: V1.0
+ */
+@Service
+public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService {
+
+    @Resource
+    private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
+
+    @Autowired
+    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+
+    @Override
+    public IPage<EamMaintenanceStandard> queryPageList(Page<EamMaintenanceStandard> page, EamMaintenanceStandard eamMaintenanceStandard) {
+        QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("ems.del_flag", CommonConstant.DEL_FLAG_0);
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return page;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
+        }
+        if(eamMaintenanceStandard != null) {
+            //缂栫爜 妯$硦鏌ヨ
+            if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardCode())) {
+                queryWrapper.like("ems.standard_code", eamMaintenanceStandard.getStandardCode());
+            }
+            //鍚嶇О 妯$硦鏌ヨ
+            if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardName())) {
+                queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardCode());
+            }
+            //璁惧
+            if(StringUtils.isNotBlank(eamMaintenanceStandard.getEquipmentId())) {
+                queryWrapper.eq("ems.equipment_id", eamMaintenanceStandard.getEquipmentId());
+            }
+            //淇濆吇鍒嗙被
+            if(StringUtils.isNotBlank(eamMaintenanceStandard.getMaintenanceCategory())) {
+                queryWrapper.eq("ems.maintenance_category", eamMaintenanceStandard.getMaintenanceCategory());
+            }
+            //淇濆吇鍒嗙被
+            if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardStatus())) {
+                queryWrapper.eq("ems.standard_status", eamMaintenanceStandard.getStandardStatus());
+            }
+            //璁惧缂栫爜
+            if(StringUtils.isNotBlank(eamMaintenanceStandard.getKeyword())) {
+                queryWrapper.and(wrapper -> wrapper.like("e.equipment_name", eamMaintenanceStandard.getKeyword())
+                        .or()
+                        .like("e.equipment_code", eamMaintenanceStandard.getKeyword()));
+            }
+        }
+        queryWrapper.orderByDesc("ems.create_time");
+        return eamMaintenanceStandardMapper.queryPageList(page, queryWrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) {
+        EamMaintenanceStandard entity = new EamMaintenanceStandard();
+        entity.setStandardCode(standardRequest.getStandardCode());
+        entity.setStandardName(standardRequest.getStandardName());
+        entity.setMaintenanceCategory(standardRequest.getMaintenanceCategory());
+        entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod());
+        entity.setInitialDate(standardRequest.getInitialDate());
+        entity.setFileCode(standardRequest.getFileCode());
+        entity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name());
+        //鐗堟湰閫掑
+        entity.setStandardVersion(CommonConstant.OPERATE_TYPE_1);
+        //璁惧澶勭悊
+        entity.setEquipmentId(standardRequest.getEquipmentId());
+        //鍒犻櫎鏍囪
+        entity.setDelFlag(CommonConstant.DEL_FLAG_0);
+        //閲嶅鎬ф牎楠�
+        EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory());
+        if(exist != null){
+            throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�");
+        }
+        //澶勭悊闄勪欢
+        if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) {
+            FileUploadResult fileUploadResult = standardRequest.getFileList().get(0);
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                String referenceFile = mapper.writeValueAsString(fileUploadResult);
+                entity.setReferenceFile(referenceFile);
+            } catch (JsonProcessingException e) {
+                log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+            }
+        }
+        eamMaintenanceStandardMapper.insert(entity);
+        //澶勭悊鏄庣粏鏁版嵁
+        if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
+            standardRequest.getTableDetailList().forEach(tableDetail -> {
+                tableDetail.setStandardId(entity.getId());
+            });
+            eamMaintenanceStandardDetailService.saveBatch(standardRequest.getTableDetailList());
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean editMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) {
+        EamMaintenanceStandard entity = eamMaintenanceStandardMapper.selectById(standardRequest.getId());
+        if(entity == null){
+            throw new JeecgBootException("缂栬緫鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
+        }
+        entity.setStandardName(standardRequest.getStandardName());
+        entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod());
+        entity.setFileCode(standardRequest.getFileCode());
+        //澶勭悊闄勪欢
+        if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) {
+            FileUploadResult fileUploadResult = standardRequest.getFileList().get(0);
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                String referenceFile = mapper.writeValueAsString(fileUploadResult);
+                entity.setReferenceFile(referenceFile);
+            } catch (JsonProcessingException e) {
+                log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+            }
+        }else {
+            entity.setReferenceFile(null);
+        }
+        eamMaintenanceStandardMapper.updateById(entity);
+        //澶勭悊璇︽儏
+        if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
+            List<EamMaintenanceStandardDetail> addList = new ArrayList<>();
+            List<EamMaintenanceStandardDetail> updateList = new ArrayList<>();
+            standardRequest.getTableDetailList().forEach(tableDetail -> {
+                tableDetail.setStandardId(entity.getId());
+                if(tableDetail.getId() == null){
+                    addList.add(tableDetail);
+                }else {
+                    updateList.add(tableDetail);
+                }
+            });
+            if(CollectionUtil.isNotEmpty(addList)){
+                eamMaintenanceStandardDetailService.saveBatch(addList);
+            }
+            if(CollectionUtil.isNotEmpty(updateList)){
+                eamMaintenanceStandardDetailService.updateBatchById(updateList);
+            }
+        }
+        if(CollectionUtil.isNotEmpty(standardRequest.getRemoveDetailList())) {
+            List<String> ids = standardRequest.getRemoveDetailList().stream().map(EamMaintenanceStandardDetail::getId).collect(Collectors.toList());
+            eamMaintenanceStandardDetailService.removeBatchByIds(ids);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean upgradeMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) {
+        EamMaintenanceStandard entity = eamMaintenanceStandardMapper.selectById(standardRequest.getId());
+        if(entity == null){
+            throw new JeecgBootException("缂栬緫鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
+        }
+        entity.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
+        //鍘熸潵鐨勪綔搴�
+        eamMaintenanceStandardMapper.updateById(entity);
+
+        //鏂板涓�涓増鏈�
+        EamMaintenanceStandard newEntity = new EamMaintenanceStandard();
+        newEntity.setStandardCode(standardRequest.getStandardCode());
+        newEntity.setStandardName(standardRequest.getStandardName());
+        newEntity.setMaintenanceCategory(standardRequest.getMaintenanceCategory());
+        newEntity.setMaintenancePeriod(standardRequest.getMaintenancePeriod());
+        newEntity.setInitialDate(standardRequest.getInitialDate());
+        newEntity.setFileCode(standardRequest.getFileCode());
+        newEntity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name());
+        //鐗堟湰閫掑
+        newEntity.setStandardVersion(entity.getStandardVersion() + 1);
+        //璁惧澶勭悊
+        newEntity.setEquipmentId(standardRequest.getEquipmentId());
+        //鍒犻櫎鏍囪
+        newEntity.setDelFlag(CommonConstant.DEL_FLAG_0);
+        //閲嶅鎬ф牎楠�
+        EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory());
+        if(exist != null){
+            throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�");
+        }
+        //澶勭悊闄勪欢
+        if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) {
+            FileUploadResult fileUploadResult = standardRequest.getFileList().get(0);
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                String referenceFile = mapper.writeValueAsString(fileUploadResult);
+                newEntity.setReferenceFile(referenceFile);
+            } catch (JsonProcessingException e) {
+                log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+            }
+        }
+        eamMaintenanceStandardMapper.insert(newEntity);
+        //澶勭悊鏄庣粏鏁版嵁
+        if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
+            standardRequest.getTableDetailList().forEach(tableDetail -> {
+                tableDetail.setId(null);
+                tableDetail.setCreateBy(null);
+                tableDetail.setUpdateBy(null);
+                tableDetail.setCreateTime(null);
+                tableDetail.setUpdateTime(null);
+                tableDetail.setStandardId(newEntity.getId());
+            });
+            eamMaintenanceStandardDetailService.saveBatch(standardRequest.getTableDetailList());
+        }
+        return true;
+    }
+
+    @Override
+    public EamMaintenanceStandard checkDuplicate(String equipmentId, String maintenanceCategory) {
+        LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId);
+        queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory);
+        queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0);
+        queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name());
+        queryWrapper.orderByDesc(EamMaintenanceStandard::getStandardVersion);
+
+        List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper);
+        if(CollectionUtil.isEmpty(list)) {
+            return null;
+        }
+        return list.get(0);
+    }
+
+    /**
+     * 鏌ヨ鏍囧噯鍒楄〃-鍓嶇灞曠ず璇ョ敤鎴锋嫢鏈夌殑鏍囧噯
+     * @param keyword 璁惧缂栧彿
+     * @param maintenanceCategory 淇濆吇绫诲瀷
+     * @return
+     */
+    @Override
+    public List<EamMaintenanceStandard> queryListByKeywordAndCategory(String keyword, String equipmentId, Integer pageSize, String maintenanceCategory){
+        Page<EamMaintenanceStandard> page = new Page<EamMaintenanceStandard>(1, pageSize);
+        EamMaintenanceStandard query = new EamMaintenanceStandard();
+        query.setEquipmentId(equipmentId);
+        query.setKeyword(keyword);
+        query.setMaintenanceCategory(maintenanceCategory);
+        query.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name());
+        IPage<EamMaintenanceStandard> pageData = this.queryPageList(page, query);
+        return pageData.getRecords();
+    }
+
+    @Override
+    public List<EamMaintenanceStandard> queryListByCategory(String maintenanceCategory) {
+        LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0);
+        queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory);
+        queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name());
+        return eamMaintenanceStandardMapper.selectList(queryWrapper);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionCheckDetailServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionCheckDetailServiceImpl.java
new file mode 100644
index 0000000..cda6eb5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionCheckDetailServiceImpl.java
@@ -0,0 +1,38 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamPrecisionCheckDetail;
+import org.jeecg.modules.eam.mapper.EamPrecisionCheckDetailMapper;
+import org.jeecg.modules.eam.service.IEamPrecisionCheckDetailService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description: 璁惧绮惧害妫�娴嬫槑缁�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-13
+ * @Version: V1.0
+ */
+@Service
+public class EamPrecisionCheckDetailServiceImpl extends ServiceImpl<EamPrecisionCheckDetailMapper, EamPrecisionCheckDetail> implements IEamPrecisionCheckDetailService {
+
+    @Resource
+    private EamPrecisionCheckDetailMapper eamPrecisionCheckDetailMapper;
+
+    @Override
+    public List<EamPrecisionCheckDetail> getByOrderId(String orderId) {
+        LambdaQueryWrapper<EamPrecisionCheckDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamPrecisionCheckDetail::getOrderId, orderId);
+        return eamPrecisionCheckDetailMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public boolean hasPrecisionCheckDetail(String orderId) {
+        LambdaQueryWrapper<EamPrecisionCheckDetail> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EamPrecisionCheckDetail::getOrderId, orderId);
+        return eamPrecisionCheckDetailMapper.selectCount(wrapper) > 0;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionParametersServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionParametersServiceImpl.java
new file mode 100644
index 0000000..5f8e5b6
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamPrecisionParametersServiceImpl.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamPrecisionParameters;
+import org.jeecg.modules.eam.mapper.EamPrecisionParametersMapper;
+import org.jeecg.modules.eam.service.IEamPrecisionParametersService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 绮惧害鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+@Service
+public class EamPrecisionParametersServiceImpl extends ServiceImpl<EamPrecisionParametersMapper, EamPrecisionParameters> implements IEamPrecisionParametersService {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamProcessParametersServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamProcessParametersServiceImpl.java
new file mode 100644
index 0000000..916abbf
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamProcessParametersServiceImpl.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.EamProcessParameters;
+import org.jeecg.modules.eam.mapper.EamProcessParametersMapper;
+import org.jeecg.modules.eam.service.IEamProcessParametersService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 宸ュ簭鍙傛暟缁存姢
+ * @Author: jeecg-boot
+ * @Date:   2025-03-17
+ * @Version: V1.0
+ */
+@Service
+public class EamProcessParametersServiceImpl extends ServiceImpl<EamProcessParametersMapper, EamProcessParameters> implements IEamProcessParametersService {
+
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
new file mode 100644
index 0000000..4092235
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -0,0 +1,563 @@
+package org.jeecg.modules.eam.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
+import org.jeecg.modules.eam.constant.EquipmentRepairStatus;
+import org.jeecg.modules.eam.constant.ReportRepairEnum;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamRepairOrder;
+import org.jeecg.modules.eam.entity.EamReportRepair;
+import org.jeecg.modules.eam.mapper.EamRepairOrderMapper;
+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.service.IEamEquipmentExtendService;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.jeecg.modules.eam.service.IEamRepairOrderService;
+import org.jeecg.modules.eam.service.IEamReportRepairService;
+import org.jeecg.modules.eam.util.DateUtils;
+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;
+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.system.service.ISysBusinessCodeRuleService;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.vo.UserSelector;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 缁翠慨宸ュ崟
+ * @Author: Lius
+ * @Date: 2025-04-03
+ */
+@Service("IEamRepairOrderService")
+public class EamRepairOrderServiceImpl extends ServiceImpl<EamRepairOrderMapper, EamRepairOrder> implements IEamRepairOrderService, FlowCallBackServiceI {
+
+    @Resource
+    private FlowCommonService flowCommonService;
+
+    @Resource
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+
+    @Resource
+    private IEamReportRepairService eamReportRepairService;
+
+    @Resource
+    private IFlowDefinitionService flowDefinitionService;
+
+    @Resource
+    private IEamEquipmentService eamEquipmentService;
+
+    @Resource
+    private IFlowMyBusinessService flowMyBusinessService;
+
+    @Resource
+    private TaskService taskService;
+
+    @Resource
+    private IFlowTaskService flowTaskService;
+
+    @Resource
+    private IEamEquipmentExtendService eamEquipmentExtendService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    @Override
+    public IPage<EamRepairOrder> pageList(Page<EamRepairOrder> page, EamRepairOrderQuery query) {
+        QueryWrapper<EamRepairOrder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.del_flag", CommonConstant.DEL_FLAG_0);
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return page;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (query != null) {
+            if (StringUtils.isNotBlank(query.getEquipmentId())) {
+                queryWrapper.eq("wmo.equipment_id", query.getEquipmentId());
+            }
+            if (StringUtils.isNotBlank(query.getEquipmentCode())) {
+                queryWrapper.like("e.equipment_code", query.getEquipmentCode());
+            }
+            if (StringUtils.isNotBlank(query.getEquipmentName())) {
+                queryWrapper.like("e.equipment_name", query.getEquipmentName());
+            }
+            if (StringUtils.isNotBlank(query.getRepairStatus())) {
+                queryWrapper.eq("wmo.repair_status", query.getRepairStatus());
+            }
+            if (StringUtils.isNotBlank(query.getRepairer())) {
+                queryWrapper.like("wmo.repairer", query.getRepairer());
+            }
+            if (StringUtils.isNotBlank(query.getRepairCode())) {
+                queryWrapper.like("wmo.repair_code", query.getRepairCode());
+            }
+//            if(query.getStartTime() != null && query.getEndTime() != null) {
+//                queryWrapper.between("wmo.fault_start_time", query.getStartTime(), query.getEndTime());
+//            }
+            //鎺掑簭
+            if (StringUtils.isNotBlank(query.getColumn()) && StringUtils.isNotBlank(query.getOrder())) {
+                String column = query.getColumn();
+                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
+                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
+                }
+                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(query.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 baseMapper.queryPageList(page, queryWrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveRepairOrder(EamRepairOrder eamRepairOrder) {
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.REPAIR_ORDER_CODE_RULE);
+        eamRepairOrder.setRepairCode(codeSeq);
+        EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
+        if(eamReportRepair == null){
+            throw new JeecgBootException("鏁呴殰鎶ヤ慨涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        eamRepairOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
+        eamRepairOrder.setEquipmentId(eamReportRepair.getEquipmentId());
+        eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
+        eamRepairOrder.setActualStartTime(DateUtils.getNow());
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        eamRepairOrder.setRepairer(user.getUsername());
+        super.save(eamRepairOrder);
+        EamEquipment eamEquipment = eamEquipmentService.getById(eamReportRepair.getEquipmentId());
+        // 鍚姩缁翠慨娴佺▼
+        flowCommonService.initActBusiness("宸ュ崟鍙凤細" + codeSeq + ", 璁惧缂栧彿锛�" + eamEquipment.getEquipmentCode() + ";瀹夎浣嶇疆: " + eamEquipment.getInstallationPosition(),
+                eamRepairOrder.getId(),
+                "IEamRepairOrderService",
+                "eam_repair",
+                null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", eamRepairOrder.getId());
+        variables.put("organization", "缁翠慨宸ュ崟鍚姩娴佺▼");
+        variables.put("comment", "缁翠慨宸ュ崟鍚姩娴佺▼");
+        variables.put("proofreading", true);
+        List<String> usernames = new ArrayList<>();
+        usernames.add(user.getUsername());
+        variables.put("NextAssignee", usernames);
+        Result result = flowDefinitionService.startProcessInstanceByKey("eam_repair", variables);
+        if (!result.isSuccess()) {
+            super.removeById(eamRepairOrder);
+        } else {
+            eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
+            eamReportRepairService.updateById(eamReportRepair);
+            //鏇存柊璁惧缁翠慨鐘舵��
+            eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
+        }
+    }
+
+    /**
+     * 鎸囨淳
+     * @param eamReportRepairQuery
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void assign(EamReportRepairQuery eamReportRepairQuery) {
+        EamRepairOrder eamRepairOrder = new EamRepairOrder();
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.REPAIR_ORDER_CODE_RULE);
+        eamRepairOrder.setRepairCode(codeSeq);
+        EamReportRepair eamReportRepair = eamReportRepairService.getById(eamReportRepairQuery.getId());
+        if(eamReportRepair == null){
+            throw new JeecgBootException("鏁呴殰鎶ヤ慨涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        eamRepairOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
+        eamRepairOrder.setEquipmentId(eamReportRepair.getEquipmentId());
+        eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
+        eamRepairOrder.setActualStartTime(DateUtils.getNow());
+        eamRepairOrder.setRepairer(eamReportRepairQuery.getRepairer());
+        super.save(eamRepairOrder);
+        EamEquipment eamEquipment = eamEquipmentService.getById(eamReportRepair.getEquipmentId());
+        // 鍚姩缁翠慨娴佺▼
+        flowCommonService.initActBusiness("宸ュ崟鍙凤細" + codeSeq + ", 璁惧缂栧彿锛�" + eamEquipment.getEquipmentCode() + ";瀹夎浣嶇疆: " + eamEquipment.getInstallationPosition(),
+                eamRepairOrder.getId(),
+                "IEamRepairOrderService",
+                "eam_repair",
+                null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", eamRepairOrder.getId());
+        variables.put("organization", "缁翠慨宸ュ崟鍚姩娴佺▼");
+        variables.put("comment", "缁翠慨宸ュ崟鍚姩娴佺▼");
+        variables.put("proofreading", true);
+        List<String> usernames = new ArrayList<>();
+        usernames.add(eamReportRepairQuery.getRepairer());
+        variables.put("NextAssignee", usernames);
+        Result result = flowDefinitionService.startProcessInstanceByKey("eam_repair", variables);
+        if (!result.isSuccess()) {
+            super.removeById(eamRepairOrder);
+        } else {
+            eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_INTERNAL_CONFIRM.name());
+            eamReportRepairService.updateById(eamReportRepair);
+            //鏇存柊璁惧缁翠慨鐘舵��
+            eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
+        }
+    }
+
+    /**
+     * 娴佺▼鎿嶄綔
+     *
+     * @param request
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.REPAIRED, businessTable = "eam_repair_order")
+    public EamRepairOrder perform(EamRepairOrderRequest request) {
+        EamRepairOrder order = this.baseMapper.selectById(request.getId());
+        if (order == null) {
+            throw new JeecgBootException("缁翠慨宸ュ崟涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        EamReportRepair eamReportRepair = eamReportRepairService.getById(order.getReportId());
+        if (eamReportRepair == null) {
+            throw new JeecgBootException("鏁呴殰鎶ヤ慨涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (user == null || StrUtil.isBlank(user.getId())) {
+            throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒");
+        }
+        request.setAssignee(user.getUsername());
+        // 鑾峰彇娴佺▼涓氬姟璁板綍
+        FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId());
+        if (flowMyBusiness == null) {
+            throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯锛�");
+        }
+        boolean userAuthorized = isUserAuthorized(flowMyBusiness, user);
+        if (!userAuthorized) {
+            throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔★紝璇峰埛鏂板悗閲嶈瘯锛�");
+        }
+        // 璁ら浠诲姟
+        if (!claimTask(flowMyBusiness.getTaskId(), user)) {
+            throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰嗭紒");
+        }
+        EamEquipment equipment = eamEquipmentService.getById(request.getEquipmentId());
+        if (equipment == null) {
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒");
+        }
+
+        ReportRepairEnum status = ReportRepairEnum.getInstance(order.getRepairStatus());
+        if (status == null) {
+            throw new JeecgBootException("宸ュ崟鐘舵�佷笉鍚堟硶锛岃妫�鏌ワ紒");
+        }
+        //娴佺▼鍙橀噺
+        Map<String, Object> values = new HashMap<>();
+        List<UserSelector> userSelectors;
+        List<String> userApprovalList;
+        switch (status) {
+            case WAIT_INTERNAL_CONFIRM:
+                order.setRepairConfirm(request.getRepairConfirm());
+                order.setRepairConfirmComment(request.getRepairConfirmComment());
+                order.setRepairConfirmTime(new Date());
+                values.put("dataId", order.getId());
+                values.put("repairConfirm", request.getRepairConfirm());
+                if(StringUtils.isNotBlank(request.getRepairConfirmComment())){
+                    values.put("organization", request.getRepairConfirmComment());
+                    values.put("comment", request.getRepairConfirmComment());
+                    request.setComment(request.getRepairConfirmComment());
+                }else {
+                    values.put("organization", "缁翠慨宸ュ崟缁翠慨浜虹‘璁ゅ畬鎴�");
+                    values.put("comment", "缁翠慨宸ュ崟缁翠慨浜虹‘璁ゅ畬鎴�");
+                    request.setComment("缁翠慨宸ュ崟缁翠慨浜虹‘璁ゅ畬鎴�");
+                }
+                if(CommonConstant.STATUS_1.equals(request.getRepairConfirm())) {
+                    //鍙唴閮ㄧ淮淇�  缁翠慨浜鸿繘琛岀淮淇�
+                    values.put("NextAssignee", Arrays.asList(order.getRepairer().split(",")));
+
+                    order.setRepairStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
+                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
+                }else {
+                    //鎻愪氦鏈哄姩鍔炵淮淇紝杞﹂棿绠$悊鍛樼‘璁�
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈垎閰嶇粰鐝粍闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                    }
+                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
+                    order.setRepairStatus(ReportRepairEnum.WAIT_LEADER_CONFIRM.name());
+                    eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_LEADER_CONFIRM.name());
+                }
+                break;
+            case UNDER_INTERNAL_REPAIR:
+                // 鍐呴儴缁翠慨
+                values.put("dataId", order.getId());
+                values.put("organization", "缁翠慨宸ュ崟缁翠慨瀹屾垚寰呮搷浣滃伐纭");
+                values.put("comment", "缁翠慨宸ュ崟缁翠慨瀹屾垚寰呮搷浣滃伐纭");
+                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
+                request.setComment("缁翠慨宸ュ崟缁翠慨瀹屾垚寰呮搷浣滃伐纭");
+                order.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+                eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+                order.setFaultReason(request.getFaultReason());
+                order.setRepairDescription(request.getRepairDescription());
+                order.setActualEndTime(new Date());
+                // 澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        order.setImageFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                //鏇存柊璁惧缁翠慨鐘舵��
+                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
+                break;
+            case WAIT_LEADER_CONFIRM:
+                order.setLeaderConfirm(request.getLeaderConfirm());
+                order.setLeaderConfirmComment(request.getLeaderConfirmComment());
+                order.setLeaderUser(user.getUsername());
+                order.setLeaderConfirmTime(new Date());
+                values.put("dataId", order.getId());
+                values.put("leaderConfirm", request.getLeaderConfirm());
+                if(StringUtils.isNotBlank(request.getLeaderConfirmComment())){
+                    values.put("organization", request.getLeaderConfirmComment());
+                    values.put("comment", request.getLeaderConfirmComment());
+                    request.setComment(request.getLeaderConfirmComment());
+                }else {
+                    values.put("organization", "缁翠慨宸ュ崟棰嗗纭瀹屾垚");
+                    values.put("comment", "缁翠慨宸ュ崟棰嗗纭瀹屾垚");
+                    request.setComment("缁翠慨宸ュ崟棰嗗纭瀹屾垚");
+                }
+                if(CommonConstant.STATUS_1.equals(request.getLeaderConfirm())) {
+                    //閫氳繃 鎻愪氦鏈哄姩鍔炵淮淇�
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0006);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈垎閰嶇粰鍏徃绠$悊鍛橈紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                    }
+                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
+                    order.setRepairStatus(ReportRepairEnum.WAIT_EXTERNAL_CONFIRM.name());
+                    eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_EXTERNAL_CONFIRM.name());
+                }else {
+                    //椹冲洖 鍙唴閮ㄧ淮淇�  缁翠慨浜鸿繘琛岀淮淇�
+                    values.put("NextAssignee", Arrays.asList(order.getRepairer().split(",")));
+                    order.setRepairStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
+                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_INTERNAL_REPAIR.name());
+                }
+                break;
+            case WAIT_EXTERNAL_CONFIRM:
+                order.setExternalConfirm(request.getExternalConfirm());
+                order.setExternalConfirmComment(request.getExternalConfirmComment());
+                order.setExternalRepairer(user.getUsername());
+                order.setExternalConfirmTime(new Date());
+                values.put("dataId", order.getId());
+                values.put("externalConfirm", request.getExternalConfirm());
+                if(StringUtils.isNotBlank(request.getExternalConfirmComment())){
+                    values.put("organization", request.getExternalConfirmComment());
+                    values.put("comment", request.getExternalConfirmComment());
+                    request.setComment(request.getExternalConfirmComment());
+                }else {
+                    values.put("organization", "缁翠慨宸ュ崟鏈哄姩鍔炵‘璁ゅ畬鎴�");
+                    values.put("comment", "缁翠慨宸ュ崟鏈哄姩鍔炵‘璁ゅ畬鎴�");
+                    request.setComment("缁翠慨宸ュ崟鏈哄姩鍔炵‘璁ゅ畬鎴�");
+                }
+                if(CommonConstant.STATUS_1.equals(request.getExternalConfirm())) {
+                    //鏈哄姩鍔炲彲缁翠慨  鏈哄姩鍔炵淮淇汉杩涜缁翠慨
+                    values.put("NextAssignee", Arrays.asList(order.getExternalRepairer().split(",")));
+                    order.setRepairStatus(ReportRepairEnum.UNDER_EXTERNAL_REPAIR.name());
+                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_EXTERNAL_REPAIR.name());
+                }else {
+                    //鏈哄姩鍔炰笉鍙淮淇� 杩涜濮斿缁翠慨
+                    values.put("NextAssignee", Arrays.asList(order.getExternalRepairer().split(",")));
+                    order.setRepairStatus(ReportRepairEnum.UNDER_OUTSIDE_REPAIR.name());
+                    eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_OUTSIDE_REPAIR.name());
+                }
+                break;
+            case UNDER_EXTERNAL_REPAIR:
+                // 鏈哄姩鍔炵淮淇�
+                values.put("dataId", order.getId());
+                values.put("organization", "缁翠慨宸ュ崟鏈哄姩鍔炵淮淇畬鎴愬緟鎿嶄綔宸ョ‘璁�");
+                values.put("comment", "缁翠慨宸ュ崟鏈哄姩鍔炵淮淇畬鎴愬緟鎿嶄綔宸ョ‘璁�");
+                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
+                request.setComment("缁翠慨宸ュ崟鏈哄姩鍔炵淮淇畬鎴愬緟鎿嶄綔宸ョ‘璁�");
+                order.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+                eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+                order.setFaultReason(request.getFaultReason());
+                order.setRepairDescription(request.getRepairDescription());
+                order.setActualEndTime(new Date());
+                // 澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        order.setImageFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                //鏇存柊璁惧缁翠慨鐘舵��
+                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
+                break;
+            case UNDER_OUTSIDE_REPAIR:
+                // 鏈哄姩鍔炵淮淇�
+                values.put("dataId", order.getId());
+                values.put("organization", "缁翠慨宸ュ崟濮斿缁翠慨瀹屾垚寰呮搷浣滃伐纭");
+                values.put("comment", "缁翠慨宸ュ崟濮斿缁翠慨瀹屾垚寰呮搷浣滃伐纭");
+                values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
+                request.setComment("缁翠慨宸ュ崟濮斿缁翠慨瀹屾垚寰呮搷浣滃伐纭");
+                order.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+                order.setOutsourcedUser(user.getUsername());
+                eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+                order.setFaultReason(request.getFaultReason());
+                order.setRepairDescription(request.getRepairDescription());
+                order.setActualEndTime(new Date());
+                // 澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        order.setImageFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                //鏇存柊璁惧缁翠慨鐘舵��
+                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
+                break;
+            case WAIT_CONFIRM:
+                // 寰呯‘璁�, 缁翠慨鍛樼淮淇畬鎴愶紝鎶ヤ慨浜虹‘璁ょ粨鏉熸祦绋�
+                values.put("dataId", order.getId());
+                values.put("organization", "缁翠慨宸ュ崟娴佺▼缁撴潫");
+                values.put("comment", "缁翠慨宸ュ崟娴佺▼缁撴潫");
+                request.setComment("缁翠慨宸ュ崟娴佺▼缁撴潫");
+                order.setRepairStatus(ReportRepairEnum.COMPLETE.name());
+                eamReportRepair.setReportStatus(ReportRepairEnum.COMPLETE.name());
+                order.setConfirmComment(request.getConfirmComment());
+                order.setConfirmTime(new Date());
+                order.setConfirmer(user.getUsername());
+                //鏇存柊璁惧缁翠慨鐘舵��
+                eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.NORMAL.name());
+                break;
+        }
+        request.setValues(values);
+
+        // 瀹屾垚娴佺▼浠诲姟
+        Result result = flowTaskService.complete(request);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
+        }
+        //淇濆瓨宸ュ崟
+        this.baseMapper.updateById(order);
+        // 鍚屾鏇存柊鎶ヤ慨琛ㄧ姸鎬�
+        eamReportRepairService.updateById(eamReportRepair);
+        return order;
+    }
+
+    @Override
+    public EamRepairOrderResponse findById(String id) {
+        EamRepairOrderResponse eamRepairOrderResponse = new EamRepairOrderResponse();
+        EamRepairOrder eamRepairOrder = this.baseMapper.selectById(id);
+        BeanUtils.copyProperties(eamRepairOrder, eamRepairOrderResponse);
+        EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
+        BeanUtils.copyProperties(eamReportRepair, eamRepairOrderResponse);
+        eamRepairOrderResponse.setReportImageFiles(eamReportRepair.getImageFiles());
+        eamRepairOrderResponse.setImageFiles(eamRepairOrder.getImageFiles());
+        return eamRepairOrderResponse;
+    }
+
+    private boolean claimTask(String taskId, LoginUser user) {
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        if (task == null) {
+            return false;
+        }
+        if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
+            return false;
+        }
+        taskService.claim(taskId, user.getUsername());
+        return true;
+    }
+
+    /**
+     * 鍒ゆ柇鐢ㄦ埛鏄惁鎷ユ湁姝ゆ潈闄�
+     * @param flowMyBusiness
+     * @param user
+     * @return
+     */
+    private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
+        List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
+        return todoUsers != null && todoUsers.contains(user.getUsername());
+    }
+
+
+    @Override
+    public void afterFlowHandle(FlowMyBusiness business) {
+
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        //鑾峰彇涓嬩竴姝ュ鐞嗕汉
+        Object object = values.get("NextAssignee");
+        return (List<String>) object;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java
new file mode 100644
index 0000000..a8fc353
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java
@@ -0,0 +1,206 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.constant.DataBaseConstant;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
+import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
+import org.jeecg.modules.eam.constant.EquipmentRepairStatus;
+import org.jeecg.modules.eam.constant.ReportRepairEnum;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.entity.EamMaintenanceOrderDetail;
+import org.jeecg.modules.eam.entity.EamReportRepair;
+import org.jeecg.modules.eam.mapper.EamReportRepairMapper;
+import org.jeecg.modules.eam.request.EamReportRepairQuery;
+import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
+import org.jeecg.modules.eam.service.IEamReportRepairService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 鏁呴殰鎶ヤ慨
+ * @Author: Lius
+ * @Date: 2025-04-01
+ */
+@Service
+public class EamReportRepairServiceImpl extends ServiceImpl<EamReportRepairMapper, EamReportRepair> implements IEamReportRepairService {
+
+    @Resource
+    private IEamEquipmentExtendService eamEquipmentExtendService;
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    @Override
+    public IPage<EamReportRepair> pageList(Page<EamReportRepair> page, EamReportRepairQuery query) {
+        QueryWrapper<EamReportRepair> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.del_flag", CommonConstant.DEL_FLAG_0);
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return page;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
+            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (query != null) {
+            if (StringUtils.isNotBlank(query.getEquipmentId())) {
+                queryWrapper.eq("wmo.equipment_id", query.getEquipmentId());
+            }
+            if (StringUtils.isNotBlank(query.getEquipmentCode())) {
+                queryWrapper.like("e.equipment_code", query.getEquipmentCode());
+            }
+            if (StringUtils.isNotBlank(query.getEquipmentName())) {
+                queryWrapper.like("e.equipment_name", query.getEquipmentName());
+            }
+            if (StringUtils.isNotBlank(query.getBreakdownFlag())) {
+                queryWrapper.eq("wmo.breakdown_flag", query.getBreakdownFlag());
+            }
+            if (StringUtils.isNotBlank(query.getReportStatus())) {
+                queryWrapper.eq("wmo.report_status", query.getReportStatus());
+            }
+            if (StringUtils.isNotBlank(query.getFaultDescription())) {
+                queryWrapper.like("wmo.fault_description", query.getFaultDescription());
+            }
+            if(query.getStartTime() != null && query.getEndTime() != null) {
+                queryWrapper.between("wmo.fault_start_time", query.getStartTime(), query.getEndTime());
+            }
+            //鎺掑簭
+            if (StringUtils.isNotBlank(query.getColumn()) && StringUtils.isNotBlank(query.getOrder())) {
+                String column = query.getColumn();
+                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
+                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
+                }
+                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(query.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 baseMapper.queryPageList(page, queryWrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.REPORT_REPAIR, businessTable = "eam_report_repair")
+    public EamReportRepair reportRepairFromMaintenance(String equipmentId, String reportUser, List<EamMaintenanceOrderDetail> detailList) {
+        StringBuilder sb = new StringBuilder();
+        detailList.forEach(detail -> {
+            sb.append(detail.getItemCode()).append("銆�");
+            sb.append(detail.getExceptionDescription()).append(";");
+        });
+        EamReportRepair entity = new EamReportRepair();
+        entity.setEquipmentId(equipmentId);
+        entity.setCreateBy(reportUser);
+        entity.setFaultStartTime(new Date());
+        entity.setBreakdownFlag(CommonConstant.DEFAULT_0);
+        entity.setDelFlag(CommonConstant.DEL_FLAG_0);
+        entity.setFaultName("淇濆吇鎵ц鎶ヤ慨澶勭悊");
+        entity.setFaultDescription(sb.toString());
+        entity.setFaultType(CommonConstant.DEFAULT_1);
+        entity.setReportStatus(ReportRepairEnum.WAIT_REPAIR.name());
+        this.baseMapper.insert(entity);
+        //鏇存柊璁惧缁翠慨鐘舵��
+        eamEquipmentExtendService.updateEquipmentRepairStatus(entity.getEquipmentId(), EquipmentRepairStatus.WAIT_REPAIR.name());
+        return entity;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.REPORT_REPAIR, businessTable = "eam_report_repair")
+    public EamReportRepair reportRepairFromInspection(String equipmentId, String reportUser, List<EamInspectionOrderDetail> detailList) {
+        StringBuilder sb = new StringBuilder();
+        detailList.forEach(detail -> {
+            sb.append(detail.getItemCode()).append("銆�");
+            sb.append(detail.getExceptionDescription()).append(";");
+        });
+        EamReportRepair entity = new EamReportRepair();
+        entity.setEquipmentId(equipmentId);
+        entity.setCreateBy(reportUser);
+        entity.setFaultStartTime(new Date());
+        entity.setBreakdownFlag(CommonConstant.DEFAULT_0);
+        entity.setDelFlag(CommonConstant.DEL_FLAG_0);
+        entity.setFaultName("鐐规鎵ц鎶ヤ慨澶勭悊");
+        entity.setFaultDescription(sb.toString());
+        entity.setFaultType(CommonConstant.DEFAULT_1);
+        entity.setReportStatus(ReportRepairEnum.WAIT_REPAIR.name());
+        this.baseMapper.insert(entity);
+        //鏇存柊璁惧缁翠慨鐘舵��
+        eamEquipmentExtendService.updateEquipmentRepairStatus(entity.getEquipmentId(), EquipmentRepairStatus.WAIT_REPAIR.name());
+        return entity;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.REPORT_REPAIR, businessTable = "eam_report_repair")
+    public EamReportRepair add(EamReportRepair eamReportRepair) {
+        eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_REPAIR.name());
+        eamReportRepair.setDelFlag(CommonConstant.DEL_FLAG_0);
+        // 闄勪欢澶勭悊
+        if (eamReportRepair.getImageFilesResult() != null) {
+            List<FileUploadResult> imageFilesResult = eamReportRepair.getImageFilesResult();
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                String referenceFile = mapper.writeValueAsString(imageFilesResult);
+                eamReportRepair.setImageFiles(referenceFile);
+            } catch (JsonProcessingException e) {
+                return null;
+            }
+        }
+        this.baseMapper.insert(eamReportRepair);
+        //鏇存柊璁惧缁翠慨鐘舵��
+        eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_REPAIR.name());
+        return eamReportRepair;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean edit(EamReportRepair eamReportRepair) {
+        // 闄勪欢澶勭悊
+        if (eamReportRepair.getImageFilesResult() != null) {
+            List<FileUploadResult> imageFilesResult = eamReportRepair.getImageFilesResult();
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                String referenceFile = mapper.writeValueAsString(imageFilesResult);
+                eamReportRepair.setImageFiles(referenceFile);
+            } catch (JsonProcessingException e) {
+                return false;
+            }
+        } else {
+            eamReportRepair.setImageFiles(null);
+        }
+        this.baseMapper.updateById(eamReportRepair);
+        return true;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/service/impl/EamSysFilesServiceImpl.java b/src/main/java/org/jeecg/modules/eam/service/impl/EamSysFilesServiceImpl.java
new file mode 100644
index 0000000..f836554
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/service/impl/EamSysFilesServiceImpl.java
@@ -0,0 +1,71 @@
+package org.jeecg.modules.eam.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.api.vo.FileUploadResult;
+import org.jeecg.common.util.FileUtil;
+import org.jeecg.modules.eam.entity.EamSysFiles;
+import org.jeecg.modules.eam.mapper.EamSysFilesMapper;
+import org.jeecg.modules.eam.request.EamSysFilesRequest;
+import org.jeecg.modules.eam.service.IEamSysFilesService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 璁惧闄勪欢绠$悊
+ * @Author: jeecg-boot
+ * @Date: 2025-03-17
+ * @Version: V1.0
+ */
+@Service
+public class EamSysFilesServiceImpl extends ServiceImpl<EamSysFilesMapper, EamSysFiles> implements IEamSysFilesService {
+
+    @Resource
+    private EamSysFilesMapper eamSysFilesMapper;
+
+    @Override
+    public void downloadFile(HttpServletResponse response, EamSysFiles entity) {
+        FileUtil.downLoadFile(response, entity.getFilePath(), entity.getFileName());
+    }
+
+    @Override
+    public FileUploadResult uploadFile(MultipartFile file) {
+        return FileUtil.uploadFile(file);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveEamSysFiles(EamSysFilesRequest request) {
+        if (request == null || CollectionUtil.isEmpty(request.getFileList())) {
+            return false;
+        }
+        List<EamSysFiles> resultList = new ArrayList<>();
+        for (FileUploadResult fileUploadResult : request.getFileList()) {
+            EamSysFiles eamSysFiles = this.getByPath(fileUploadResult.getFilePath());
+            if (eamSysFiles == null) {
+                continue;
+            }
+            eamSysFiles.setDescription(request.getDescription());
+            resultList.add(eamSysFiles);
+        }
+        return this.updateBatchById(resultList);
+    }
+
+    @Override
+    public EamSysFiles getByPath(String path) {
+        LambdaQueryWrapper<EamSysFiles> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EamSysFiles::getFileEncodeName, path);
+        List<EamSysFiles> list = eamSysFilesMapper.selectList(queryWrapper);
+        if (CollectionUtil.isEmpty(list)) {
+            return null;
+        }
+        return list.get(0);
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/tree/FindsEquipmentProductionUtil.java b/src/main/java/org/jeecg/modules/eam/tree/FindsEquipmentProductionUtil.java
new file mode 100644
index 0000000..d9aec4b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/tree/FindsEquipmentProductionUtil.java
@@ -0,0 +1,79 @@
+//package org.jeecg.modules.eam.tree;
+//
+//import org.jeecg.common.util.oConvertUtils;
+//import org.jeecg.modules.eam.vo.EamEquipmentTree;
+//import org.jeecg.modules.system.entity.MdcProduction;
+//import org.jeecg.modules.system.model.MdcProductionTreeModel;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+///**
+// * 浜х嚎璁惧鏍�
+// * @author: LiuS
+// * @create: 2023-04-03 15:59
+// */
+//public class FindsEquipmentProductionUtil {
+//
+//    /**
+//     * 鑾峰彇 MdcEquipmentTree
+//     */
+//    public static List<EamEquipmentTree> wrapEquipmentProductionTreeList(List<MdcProduction> recordList) {
+//        List<EamEquipmentTree> idList = new ArrayList<>();
+//        List<MdcProductionTreeModel> records = new ArrayList<>();
+//        for (MdcProduction mdcProduction : recordList) {
+//            records.add(new MdcProductionTreeModel(mdcProduction));
+//        }
+//        getChildren(records, idList);
+//        setEmptyChildrenAsNull(idList);
+//        return idList;
+//    }
+//
+//    /**
+//     * 璇ユ柟娉曟槸鎵惧埌骞跺皝瑁呴《绾х埗绫荤殑鑺傜偣鍒癟reeList闆嗗悎
+//     */
+//    private static void getChildren(List<MdcProductionTreeModel> recordList, List<EamEquipmentTree> idList) {
+//        List<MdcProductionTreeModel> treeList = new ArrayList<>();
+//        for (MdcProductionTreeModel mdcProductionTreeModel : recordList) {
+//            if (oConvertUtils.isEmpty(mdcProductionTreeModel.getParentId())) {
+//                mdcProductionTreeModel.setType(1);
+//                treeList.add(mdcProductionTreeModel);
+//                idList.add(new EamEquipmentTree().convertByProduction(mdcProductionTreeModel));
+//            }
+//        }
+//        getGrandChildren(treeList, recordList, idList);
+//    }
+//
+//    /**
+//     *璇ユ柟娉曟槸鎵惧埌椤剁骇鐖剁被涓嬬殑鎵�鏈夊瓙鑺傜偣闆嗗悎骞跺皝瑁呭埌TreeList闆嗗悎
+//     */
+//    private static void getGrandChildren(List<MdcProductionTreeModel> treeList, List<MdcProductionTreeModel> recordList, List<EamEquipmentTree> idList) {
+//        for (int i = 0; i < treeList.size(); i++) {
+//            MdcProductionTreeModel model = treeList.get(i);
+//            EamEquipmentTree mdcEquipmentTree = idList.get(i);
+//            for (int i1 = 0; i1 < recordList.size(); i1++) {
+//                MdcProductionTreeModel m = recordList.get(i1);
+//                if (m.getParentId() != null && m.getParentId().equals(model.getId())) {
+//                    model.getChildren().add(m);
+//                    m.setType(1);
+//                    mdcEquipmentTree.getChildren().add(new EamEquipmentTree().convertByProduction(m));
+//                }
+//            }
+//            getGrandChildren(treeList.get(i).getChildren(), recordList, idList.get(i).getChildren());
+//        }
+//    }
+//
+//    /**
+//     * 璇ユ柟娉曟槸灏嗗瓙鑺傜偣涓虹┖鐨凩ist闆嗗悎璁剧疆涓篘ull鍊�
+//     */
+//    private static void setEmptyChildrenAsNull(List<EamEquipmentTree> idList) {
+//        for (EamEquipmentTree mdcEquipmentTree : idList) {
+//            if (mdcEquipmentTree.getChildren().isEmpty()) {
+//                mdcEquipmentTree.setLeaf(true);
+//            } else {
+//                setEmptyChildrenAsNull(mdcEquipmentTree.getChildren());
+//                mdcEquipmentTree.setLeaf(false);
+//            }
+//        }
+//    }
+//}
diff --git a/src/main/java/org/jeecg/modules/eam/util/DateUtils.java b/src/main/java/org/jeecg/modules/eam/util/DateUtils.java
new file mode 100644
index 0000000..fd0d32f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/util/DateUtils.java
@@ -0,0 +1,1089 @@
+package org.jeecg.modules.eam.util;
+
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.ChronoField;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class DateUtils {
+
+    private final static long DAYTIMESUNSET = 86400;
+
+    /**
+     * @return 寰楀埌鏄庡ぉ
+     */
+    public static Date getNextDay(Date d1) {
+        long d2 = d1.getTime() + 86400 * 1000;
+        return new Date(d2);
+    }
+
+    /**
+     * @return 寰楀埌鏄ㄥぉ
+     */
+    public static Date getPreviousDay(Date d1) {
+        long d2 = d1.getTime() - 86400 * 1000;
+        return new Date(d2);
+    }
+
+    /**
+     * @return 杩斿洖鏃堕棿宸殑璇█鎻忚堪  濡�1澶�2灏忔椂5鍒�6绉�
+     */
+    public static String different(Date d1, Date d2) {
+        if (d1 == null || d2 == null) {
+            return "";
+        }
+        StringBuilder strB = new StringBuilder();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            //姣ms
+            long diff = d2.getTime() - d1.getTime();
+            long diffSeconds = diff / 1000 % 60;
+            long diffMinutes = diff / (60 * 1000) % 60;
+            long diffHours = diff / (60 * 60 * 1000) % 24;
+            long diffDays = diff / (24 * 60 * 60 * 1000);
+            if (diffDays > 0) {
+                strB.append(diffDays + " 澶� ");
+                strB.append(diffHours + " 灏忔椂 ");
+                strB.append(diffMinutes + " 鍒嗛挓 ");
+                strB.append(diffSeconds + " 绉� ");
+            } else if (diffHours > 0) {
+                strB.append(diffHours + " 灏忔椂 ");
+                strB.append(diffMinutes + " 鍒嗛挓 ");
+                strB.append(diffSeconds + " 绉� ");
+            } else if (diffMinutes > 0) {
+                strB.append(diffMinutes + " 鍒嗛挓 ");
+                strB.append(diffSeconds + " 绉� ");
+            } else {
+                strB.append(diffSeconds + " 绉� ");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return strB.toString();
+    }
+
+    /**
+     * @return 鑾峰彇涓や釜date鐨勬椂闂村樊锛岀粨鏋滀负绉� 闄�
+     */
+    public static long differentSecond(Date startDate, Date endDate) {
+        return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("1000"), 0, BigDecimal.ROUND_HALF_UP).longValue();
+//        return (endDate.getTime() - startDate.getTime()) / 1000;
+    }
+
+    /**
+     * @return 鑾峰彇涓や釜date鐨勬椂闂村樊锛岀粨鏋滀负鍒嗛挓
+     */
+    public static Integer differentMinutes(Date startDate, Date endDate) {
+        return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("60000"), 0, RoundingMode.HALF_UP).intValue();
+    }
+
+    /**
+     * @return 杩斿洖浼犲叆鏃堕棿鐨�0鐐�0鍒�0绉�
+     */
+    public static Date getTodayZero(Date d) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(d);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        return cal.getTime();
+    }
+
+    /**
+     * @return 杩斿洖浼犲叆鏃堕棿鐨�0鐐�0鍒�0绉�
+     */
+    public static Date getTomorrowZero(Date d) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(d);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.add(Calendar.DAY_OF_MONTH, 1);
+        return cal.getTime();
+    }
+
+    /**
+     * @return 鍒ゆ柇鏃堕棿鏄惁鏄綋澶�
+     */
+    public static boolean isTaday(Date date) {
+        Date now = new Date();
+        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
+        String nowDay = sf.format(now);
+        String day = sf.format(date);
+        return day.equals(nowDay);
+    }
+
+    /**
+     * @return 鍒ゆ柇涓や釜鏃堕棿鏄惁涓哄悓涓�澶�
+     */
+    public static boolean isOneDay(Date d1, Date d2) {
+        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
+        String d1Str = sf.format(d1);
+        String d2Str = sf.format(d2);
+        return d1Str.equals(d2Str);
+    }
+
+    /**
+     * @return 鍒ゆ柇涓や釜鏃堕棿鏄惁涓哄悓涓�骞�
+     */
+    public static boolean isOneYear(Date d1, Date d2) {
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy");
+        String d1Str = sf.format(d1);
+        String d2Str = sf.format(d2);
+        return d1Str.equals(d2Str);
+    }
+
+    public static String dateProportion(Date start, Date end) {
+        float differentSecond = DateUtils.differentSecond(start, end);
+        float f = differentSecond / DAYTIMESUNSET * 100;
+        return String.format("%.2f", f) + "%";
+    }
+
+    public static Date strToDate(String dateStr, String format) {
+        SimpleDateFormat sf = new SimpleDateFormat(format);
+        Date result = null;
+        try {
+            result = sf.parse(dateStr);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    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";
+    public static final String STR_DATE_TIME_HOUR = "yyyy-MM-dd HH";
+    public static final String STR_DATE_TIME_FULL = "yyyyMMddHHmmssSSS";
+    public static final String STR_HHMMSS = "HH:mm:ss";
+    public static final String STR_HHMM = "HH:mm";
+    public static final String STR_MMDD = "MM-dd";
+
+    /**
+     * <p>
+     * Description: 瀹為檯鎶曟爣鏈堜唤
+     * </p>
+     *
+     * @param startDate
+     * @param endDate
+     * @return obj [0] 瀹為檯鎶曟爣鏈堜唤 渚嬪瀹為檯鎶曟爣鏈堜唤锛�3.86锛夋剰涔夋槸3涓湀鍙�26澶� obj[1] 瀹為檯鍙栨暣鏈堜唤 锛�3锛�
+     */
+    public static Integer getRealMonth(Date startDate, Date endDate) {
+        Integer month = 0;
+        Calendar start = Calendar.getInstance();
+        start.setTime(startDate);
+
+        Calendar end = Calendar.getInstance();
+        end.setTime(endDate);
+        int year = start.get(Calendar.YEAR);
+        int year2 = end.get(Calendar.YEAR);
+        int month2 = start.get(Calendar.MONTH);
+        int month3 = end.get(Calendar.MONTH);
+        try {
+            while (start.before(end)) {
+                start.add(Calendar.MONTH, 1);
+                month++;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        int day2 = start.get(Calendar.DAY_OF_MONTH);
+        int day3 = end.get(Calendar.DAY_OF_MONTH);
+        int tmpYear = year2 - year;
+        if (day2 == day3) {
+            return (tmpYear * 12) + (month3 - month2);
+        }
+        return month == 0 ? month : (month - 1);
+    }
+
+    public static Date getNow() {
+        return new Date(System.currentTimeMillis());
+    }
+
+    public static int getDayOfMonth() {
+        Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
+        int day = aCalendar.getActualMaximum(Calendar.DATE);
+        return day;
+    }
+
+    /**
+     * <p>
+     * Description: 淇敼鏃堕棿涓烘寚瀹氭椂闂村綋澶╃殑23:59:59.000
+     * </p>
+     *
+     * @param date 闇�瑕佷慨鏀圭殑鏃堕棿
+     * @return 淇敼鍚庣殑鏃堕棿
+     */
+    public static Date fillTime(Date date) {
+        Date result = removeTime(date);
+        result.setTime(result.getTime() + 24 * 60 * 60 * 1000 - 1000); // 鍔犱竴澶�
+        return result;
+    }
+
+    /**
+     * @param date 褰撳墠鏃堕棿
+     * @param i    寰�鍓嶅嚑澶�
+     * @return
+     */
+    public static Date fillBeforeTime(Date date, Integer i) {
+        Date result = removeTime(date);
+        Calendar calendar = Calendar.getInstance(); // 寰楀埌鏃ュ巻
+        calendar.setTime(result);// 鎶婂綋鍓嶆椂闂磋祴缁欐棩鍘�
+        calendar.add(Calendar.DAY_OF_MONTH, i); // 璁剧疆涓哄墠涓�澶�
+        result.setTime(calendar.getTime().getTime() + 24 * 60 * 60 * 1000
+                - 1000); // 鍔犱竴澶�
+        return result;
+    }
+
+    /**
+     * <p>
+     * Description: 淇敼鏃堕棿涓烘寚瀹氭椂闂村墠涓�澶╃殑00:00:00
+     * </p>
+     *
+     * @param date 闇�瑕佷慨鏀圭殑鏃堕棿
+     * @return 淇敼鍚庣殑鏃堕棿
+     */
+    public static Date plusTime(Date date, Integer i) {
+        Date result = removeTime(date);
+        Calendar calendar = Calendar.getInstance(); // 寰楀埌鏃ュ巻
+        calendar.setTime(result);// 鎶婂綋鍓嶆椂闂磋祴缁欐棩鍘�
+        calendar.add(Calendar.DAY_OF_MONTH, i); // 璁剧疆涓哄墠涓�澶�
+        return calendar.getTime();
+    }
+
+    /**
+     * <p>
+     * Description: 鍘绘帀鏃ユ湡鏃堕棿涓殑鏃堕棿閮ㄥ垎
+     * </p>
+     * 濡�: 2013-11-11 18:56:33 ---> 2013-11-11 00:00:00
+     *
+     * @param date 闇�瑕佷慨鏀圭殑鏃堕棿
+     * @return 淇敼鍚庣殑鏃堕棿
+     */
+    public static Date removeTime(Date date) {
+        Date result = null;
+        try {
+            SimpleDateFormat df = new SimpleDateFormat(STR_DATE);
+            String dateStr = df.format(date);
+            result = df.parse(dateStr);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * <p>
+     * Description: 鎸夐粯璁ゆ牸寮�(yyyy-MM-dd HH:mm:ss.SSS)鑾峰彇鏃堕棿瀛楃涓�
+     * </p>
+     *
+     * @param date 瑕佽浆鎹㈢殑鏃ユ湡
+     * @return 杞崲鍚庣殑鏃堕棿瀛楃涓�
+     */
+    public static String format(Date date) {
+        SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME);
+        return df.format(date);
+    }
+
+    public static Date parseDate(Date date, String format) {
+        SimpleDateFormat df = new SimpleDateFormat(format);
+        try {
+            date = df.parse(df.format(date));
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return date;
+    }
+
+    public static Date getDelayedYear() {
+        Calendar curr = Calendar.getInstance();
+        curr.set(Calendar.YEAR, curr.get(Calendar.YEAR) + 1);
+        Date date = curr.getTime();
+        return date;
+    }
+
+    /**
+     * <p>
+     * Description: 鎸夋寚瀹氭牸寮忚幏鍙栨椂闂村瓧绗︿覆
+     * </p>
+     *
+     * @param date   瑕佽浆鎹㈢殑鏃ユ湡
+     * @param format 鏍煎紡,渚嬪:yyyy-MM-dd HH:mm:ss.SSS
+     * @return 杞崲鍚庣殑鏃堕棿瀛楃涓�
+     */
+    public static String format(Date date, String format) {
+        SimpleDateFormat df = new SimpleDateFormat(format);
+        return df.format(date);
+    }
+
+    /**
+     * <p>
+     * Description: 鍔犳湀鍑芥暟
+     * </p>
+     *
+     * @param month 鏈堜唤鏁�
+     * @return
+     */
+    public static Date addMonth(Integer month, Date time) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(time);
+        c.add(Calendar.MONTH, month);
+        return c.getTime();
+    }
+
+    public static Boolean greater(Date startTime, Date endTime) {
+        return startTime.getTime() > endTime.getTime();
+    }
+
+    public static Boolean less(Date startTime, Date endTime) {
+        return startTime.getTime() < endTime.getTime();
+    }
+
+    public static Boolean equals(Date startTime, Date endTime) {
+        return startTime.getTime() == endTime.getTime();
+    }
+
+    public static Integer getDiffMonth(Calendar c, Calendar c1) {
+        return (c.get(Calendar.YEAR) - c1.get(Calendar.YEAR)) * 12
+                + (c.get(Calendar.MONTH) - c1.get(Calendar.MONTH));
+    }
+
+    /**
+     * 鏄惁涓哄悓涓�澶�
+     */
+    public static boolean equalsDay(Date a, Date b) {
+        return removeTime(a).getTime() == removeTime(b).getTime();
+    }
+
+    public static Integer getDays(Date startTime, Date endTime) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(startTime);
+        Calendar c1 = Calendar.getInstance();
+        c1.setTime(endTime);
+        long t1 = c.getTimeInMillis();
+        long t2 = c1.getTimeInMillis();
+        // 璁$畻澶╂暟
+        Long days = (t2 - t1) / (24 * 60 * 60 * 1000);
+        return days.intValue();
+    }
+
+    public static Integer getSeconds(Date startTime, Date endTime) {
+        try {
+            Calendar c = Calendar.getInstance();
+            c.setTime(startTime);
+            Calendar c1 = Calendar.getInstance();
+            c1.setTime(endTime);
+            long t1 = c.getTimeInMillis();
+            long t2 = c1.getTimeInMillis();
+            // 璁$畻绉掓暟
+            Long days = (t2 - t1) / (1000);
+            return days.intValue();
+        } catch (Exception e) {
+            return 0;
+        }
+
+    }
+
+    //鑾峰彇灏忔椂宸�
+    public static double subHours(Date startTime, Date endTime) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(startTime);
+        Calendar c1 = Calendar.getInstance();
+        c1.setTime(endTime);
+        double t1 = c.getTimeInMillis();
+        double t2 = c1.getTimeInMillis();
+        // 璁$畻澶╂暟
+        double hours = (t2 - t1) / (1000 * 60 * 60);
+        return Double.valueOf(new DecimalFormat("#.00").format(hours));
+    }
+
+    //鏍规嵁褰撳墠鏃堕棿鍜屽嚭鐢熸棩鏈熻幏鍙栧勾榫�
+    public static int getAge(Date birthDay) {
+        Calendar cal = Calendar.getInstance();
+        // 鍙栧嚭绯荤粺褰撳墠鏃堕棿鐨勫勾銆佹湀銆佹棩閮ㄥ垎
+        int yearNow = cal.get(Calendar.YEAR);
+        int monthNow = cal.get(Calendar.MONTH);
+        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
+        cal.setTime(birthDay);
+        // 鍙栧嚭鍑虹敓鏃ユ湡鐨勫勾銆佹湀銆佹棩閮ㄥ垎
+        int yearBirth = cal.get(Calendar.YEAR);
+        int monthBirth = cal.get(Calendar.MONTH);
+        int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
+        // 褰撳墠骞翠唤涓庡嚭鐢熷勾浠界浉鍑忥紝鍒濇璁$畻骞撮緞
+        int age = yearNow - yearBirth;
+        // 褰撳墠鏈堜唤涓庡嚭鐢熸棩鏈熺殑鏈堜唤鐩告瘮锛屽鏋滄湀浠藉皬浜庡嚭鐢熸湀浠斤紝鍒欏勾榫勪笂鍑�1锛岃〃绀轰笉婊″灏戝懆宀�
+        if (monthNow <= monthBirth) {
+            // 濡傛灉鏈堜唤鐩哥瓑锛屽湪姣旇緝鏃ユ湡锛屽鏋滃綋鍓嶆棩锛屽皬浜庡嚭鐢熸棩锛屼篃鍑�1锛岃〃绀轰笉婊″灏戝懆宀�
+            if (monthNow == monthBirth) {
+                if (dayOfMonthNow < dayOfMonthBirth) {
+                    age--;
+                }
+            } else {
+                age--;
+            }
+
+        }
+        return age;
+    }
+
+    public static Date subDays(Date startTime, Integer day) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(startTime);
+        c.add(Calendar.DATE, day * -1);
+        return c.getTime();
+    }
+
+    public static Date addDays(Date startTime, Integer day) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(startTime);
+        c.add(Calendar.DATE, day);
+        return c.getTime();
+    }
+    /*public static Date addHours(Date startTime, Integer hours) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(startTime);
+        c.add(Calendar.HOUR, hours );
+        return c.getTime();
+    }*/
+
+    public static Date toDate(String date, String format) {
+        SimpleDateFormat df = new SimpleDateFormat(format);
+        try {
+            return df.parse(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static Date toDateFull(String date) {
+        SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME);
+        try {
+            return df.parse(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static Date toDateMedium(String date) {
+        SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME_SMALL);
+        try {
+            Date dd = df.parse(date);
+            return dd;
+        } catch (ParseException e) {
+            return null;
+        }
+    }
+
+    public static Integer getDate(Date date) {
+        if (date != null) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            int day = calendar.get(Calendar.DATE);
+            return day;
+        }
+        return null;
+    }
+
+    public static Integer getYear() {
+        return getYear(new Date());
+    }
+
+    public static Integer getYear(Date date) {
+        if (date != null) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            int year = calendar.get(Calendar.YEAR);
+            return year;
+        }
+        return null;
+    }
+
+    public static Integer getMonth() {
+        return getMonth(new Date());
+    }
+
+    public static Integer getMonth(Date date) {
+        if (date != null) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            int month = calendar.get(Calendar.MONTH);
+            return month + 1;
+        }
+        return null;
+    }
+
+    public static Integer getDay() {
+        return getDay(new Date());
+    }
+
+    public static Integer getDay(Date date) {
+        if (date != null) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            int day = calendar.get(Calendar.DAY_OF_MONTH);
+            return day;
+        }
+        return null;
+    }
+
+
+    public static Date[] getMonthStartTimeAndEndTime(Integer month) {
+        Calendar calendar = Calendar.getInstance();
+        Date[] dates = new Date[2];
+        Date startTime = null;
+        Date endsTime = null;
+        if (month != null) {
+            calendar.set(Calendar.MONTH, month);
+            //鑾峰緱鍒版湰鏈堢殑绗竴澶�
+            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
+            startTime = calendar.getTime();
+            startTime = DateUtils.removeTime(startTime);
+            //鑾峰緱鍒版湰鏈堢殑鏈�鍚庝竴澶�
+            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+            endsTime = calendar.getTime();
+            endsTime = DateUtils.fillTime(endsTime);
+        }
+        dates[0] = startTime;
+        dates[1] = endsTime;
+        return dates;
+    }
+
+    public static Date[] getMonthStartTimeAndEndTime(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        Integer month = calendar.get(Calendar.MONTH);
+        Date[] dates = new Date[2];
+        Date startTime = null;
+        Date endsTime = null;
+        if (month != null) {
+            calendar.set(Calendar.MONTH, month);
+            //鑾峰緱鍒版湰鏈堢殑绗竴澶�
+            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
+            startTime = calendar.getTime();
+            startTime = DateUtils.removeTime(startTime);
+            //鑾峰緱鍒版湰鏈堢殑鏈�鍚庝竴澶�
+            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+            endsTime = calendar.getTime();
+            endsTime = DateUtils.fillTime(endsTime);
+        }
+        dates[0] = startTime;
+        dates[1] = endsTime;
+        return dates;
+    }
+
+    /**
+     * 鑾峰彇days澶╃殑鏃堕棿鍖洪棿锛宔ndTime 涓哄綋澶╃殑鍚庝竴澶�0鐐癸紝
+     * startTime 涓篹ndTime鍓峝ays澶�
+     *
+     * @param days
+     * @return
+     */
+    public static Date[] getDaysStartTimeAndEndTime(Integer days) {
+        Date[] dates = new Date[2];
+        Date endDate = plusTime(removeTime(getNow()), 1);
+        Date startDate = subDays(endDate, days);
+        dates[0] = startDate;
+        dates[1] = endDate;
+        return dates;
+    }
+
+    /**
+     * 鏍规嵁鏌愪竴骞磋幏鍙栨渶鍚庝竴澶╃殑鏃堕棿
+     * 2013 ---> 2013-12-31 23:59:59.000
+     *
+     * @param year
+     * @return
+     */
+    public static Date getYearEndDay(Integer year) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.clear();
+        calendar.set(Calendar.YEAR, year);
+        calendar.roll(Calendar.DAY_OF_YEAR, -1);
+        Date yearLast = calendar.getTime();
+        Date lastYear = DateUtils.fillTime(yearLast);
+        return lastYear;
+    }
+
+    /**
+     * 鑾峰彇start/end鐨勬墍鏈夋棩鏈熷瓧绗︿覆 鏍煎紡yyyy-MM-dd
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    public static List<String> getDatesStringList(Date start, Date end, String strDate) {
+        List<String> list = new ArrayList<>();
+        int i = getDays(start, end);
+        for (int j = 0; j <= i; j++) {
+            if (j == 0) {
+                list.add(format(start, strDate));
+            } else {
+                list.add(format(plusTime(start, j), strDate));
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇start/end鐨勬墍鏈夋棩鏈熷瓧绗︿覆 鏍煎紡yyyy-MM-dd
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    public static List<String> getDatesStringList(Date start, Date end) {
+        List<String> list = new ArrayList<>();
+        int i = getDays(start, end);
+        for (int j = 0; j <= i; j++) {
+            if (j == 0) {
+                list.add(format(start, STR_DATE));
+            } else {
+                list.add(format(plusTime(start, j), STR_DATE));
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇start/end鐨勬墍鏈夋棩鏈熷瓧绗︿覆 鏍煎紡yyyyMMdd
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    public static List<String> getDatesStringList2(Date start, Date end) {
+        List<String> list = new ArrayList<>();
+        int i = getDays(start, end);
+        for (int j = 0; j <= i; j++) {
+            if (j == 0) {
+                list.add(format(start, STRDATE));
+            } else {
+                list.add(format(plusTime(start, j), STRDATE));
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇start/end鐨勬墍鏈夋棩鏈熷瓧绗︿覆 鏍煎紡MM-dd
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    public static List<String> getDatesStringLists(Date start, Date end) {
+        List<String> list = new ArrayList<>();
+        int i = getDays(start, end);
+        for (int j = 0; j <= i; j++) {
+            if (j == 0) {
+                list.add(format(start, STR_MMDD));
+            } else {
+                list.add(format(plusTime(start, j), STR_MMDD));
+            }
+        }
+        return list;
+    }
+
+    public static List<String> getMonthBetween(Date start, Date end) {
+        List<String> list = new ArrayList<>();
+        Calendar min = Calendar.getInstance();
+        Calendar max = Calendar.getInstance();
+        min.setTime(start);
+        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
+        max.setTime(end);
+        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
+        Calendar curr = min;
+        while (curr.before(max)) {
+            list.add(format(curr.getTime(), STR_YEAR_MONTH));
+            curr.add(Calendar.MONTH, 1);
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇dateStr鐨勬棩鏈熸牸寮弝yyy-MM-dd
+     *
+     * @param dateStr
+     * @return
+     */
+    public static Date getShortDate(String dateStr) {
+        SimpleDateFormat sdf = new SimpleDateFormat(STR_DATE);
+        Date startTime = null;
+        try {
+            startTime = sdf.parse(dateStr);
+        } catch (ParseException e) {
+        }
+        return startTime == null ? removeTime(new Date()) : startTime;
+    }
+
+    /**
+     * 鑾峰彇dateStr鐨勬棩鏈熸牸寮弝yyyMMdd
+     *
+     * @param dateStr
+     * @return
+     */
+    public static Date getShortDate2(String dateStr) {
+        SimpleDateFormat sdf = new SimpleDateFormat(STRDATE);
+        Date startTime = null;
+        try {
+            startTime = sdf.parse(dateStr);
+        } catch (ParseException e) {
+        }
+        return startTime == null ? removeTime(new Date()) : startTime;
+    }
+
+    public static Date getFormatDate(String dateStr, String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        Date startTime = null;
+        try {
+            startTime = sdf.parse(dateStr);
+        } catch (ParseException e) {
+        }
+        return startTime == null ? removeTime(new Date()) : startTime;
+    }
+
+    /**
+     * @param time
+     * @param n
+     * @return 鍦ㄤ竴涓椂闂翠笂鍔犵
+     */
+    public static Date addSecond(Date time, Integer n) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(time);
+        c.add(Calendar.SECOND, n);
+        return c.getTime();
+    }
+
+    /**
+     * @param time
+     * @param n
+     * @return 鍦ㄤ竴涓椂闂翠笂鍔犲垎閽�
+     */
+    public static Date addMinute(Date time, Integer n) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(time);
+        c.add(Calendar.MINUTE, n);
+        return c.getTime();
+    }
+
+    /**
+     * @param time
+     * @param n
+     * @return 鍦ㄤ竴涓椂闂翠笂鍔犲皬鏃�
+     */
+    public static Date addHour(Date time, Integer n) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(time);
+        c.add(Calendar.HOUR_OF_DAY, n);
+        return c.getTime();
+    }
+
+    /**
+     * 鑾峰彇start/end鐨勬墍鏈夋棩鏈熷瓧绗︿覆 鏍煎紡yyyy-MM-dd
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    public static List<String> getDateMonth(String start, String end) {
+        List<String> list = new ArrayList<>();
+        SimpleDateFormat yyyyMM = new SimpleDateFormat("yyyy-MM");
+        Date startyear = null;
+        try {
+            startyear = yyyyMM.parse(start);
+            Date endyear = yyyyMM.parse(end);
+            Calendar dd = Calendar.getInstance();//瀹氫箟鏃ユ湡瀹炰緥
+            dd.setTime(startyear);//璁剧疆鏃ユ湡璧峰鏃堕棿
+            while (dd.getTime().before(endyear)) {//鍒ゆ柇鏄惁鍒扮粨鏉熸棩鏈�
+                String str = yyyyMM.format(dd.getTime());
+                dd.add(Calendar.MONTH, 1);//杩涜褰撳墠鏃ユ湡鏈堜唤鍔�1
+                list.add(str);
+            }
+            list.add(yyyyMM.format(endyear));
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇start/end鐨勬墍鏈夋棩鏈熷瓧绗︿覆 鏍煎紡yyyy
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    public static List<String> getDateYear(String start, String end) {
+        List<String> list = new ArrayList<>();
+        SimpleDateFormat yyyy = new SimpleDateFormat("yyyy");
+        Date startyear = null;
+        try {
+            startyear = yyyy.parse(start);
+            Date endyear = yyyy.parse(end);
+            Calendar dd = Calendar.getInstance();//瀹氫箟鏃ユ湡瀹炰緥
+            dd.setTime(startyear);//璁剧疆鏃ユ湡璧峰鏃堕棿
+            while (dd.getTime().before(endyear)) {//鍒ゆ柇鏄惁鍒扮粨鏉熸棩鏈�
+                String str = yyyy.format(dd.getTime());
+                dd.add(Calendar.YEAR, 1);//杩涜褰撳墠鏃ユ湡鏈堜唤鍔�1
+                list.add(str);
+            }
+            list.add(yyyy.format(endyear));
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏃堕棿 瀹氫綅鍒板皬鏃�
+     * 鏍煎紡涓� yyyy-MM-dd hh:mm
+     * 渚嬶細2018-02-27 11:00
+     *
+     * @return
+     */
+    public static Date getNowHourDate() {
+        Date now = getNow();
+        Date result;
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        int hour = calendar.get(Calendar.HOUR_OF_DAY);
+        String dateStr = format(now, STR_DATE);
+        dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":00";
+        result = toDate(dateStr, STR_DATE_TIME_MIN);
+        return result;
+    }
+
+    /**
+     * 鑾峰彇姣忔棩8:11鎴�11:11鐨勬椂闂寸偣
+     *
+     * @return
+     */
+    public static Date getNowHourDateTo() {
+        Date now = getNow();
+        Date result;
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        int hour = calendar.get(Calendar.HOUR_OF_DAY);
+        if (hour != 8 && hour != 11) {
+            return null;
+        }
+        int minute = calendar.get(Calendar.MINUTE);
+        if (minute < 11) {
+            return null;
+        }
+        String dateStr = format(now, STR_DATE);
+        dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":11";
+        result = toDate(dateStr, STR_DATE_TIME_MIN);
+        return result;
+    }
+
+    /**
+     * 鑾峰彇姣忔棩8:00銆�13:00銆�20:00鐨勬椂闂寸偣
+     *
+     * @return
+     */
+    public static List<Date> getHourDateList(Date time) {
+        List<Date> result = new ArrayList<>();
+        result.add(addHour(time, 8));
+        result.add(addHour(time, 13));
+        result.add(addHour(time, 20));
+        return result;
+    }
+
+    /**
+     * 鑾峰彇涓婃湀鐨勬渶鍚庝竴澶�
+     *
+     * @return
+     */
+    public static Date getPreviousMonthLastDay() {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DAY_OF_MONTH, 0);
+        return DateUtils.removeTime(calendar.getTime());
+    }
+
+    /**
+     * 鑾峰彇end鏃堕棿鏈堢殑绗竴澶�
+     *
+     * @param end 鏈堜唤鏈�鍚庝竴澶�
+     * @return
+     */
+    public static Date getTheMonthFirstDay(Date end) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(end);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        return calendar.getTime();
+    }
+
+    public static String secToTimeHour(int time) {
+        String timeStr = null;
+        int hour = 0;
+        if (time <= 0) {
+            return "0灏忔椂";
+        } else {
+            BigDecimal bigDecimal = new BigDecimal(time);
+            BigDecimal bigDecimal1 = new BigDecimal(3600);
+            BigDecimal hourBigDecimal = new BigDecimal(0);
+            hourBigDecimal = new BigDecimal(String.valueOf(bigDecimal)).
+                    divide(new BigDecimal(String.valueOf(bigDecimal1)), 2, BigDecimal.ROUND_HALF_UP);
+            timeStr = hourBigDecimal + "灏忔椂";
+        }
+        return timeStr;
+    }
+
+    public static String secToTime(int time) {
+        String timeStr = null;
+        int hour = 0;
+        int minute = 0;
+        int second = 0;
+        if (time <= 0)
+            return " ";
+        else {
+            minute = time / 60;
+            if (minute < 60) {
+                second = time % 60;
+                timeStr = unitFormat(minute) + "鍒�" + unitFormat(second) + " 绉�";
+            } else {
+                hour = minute / 60;
+                minute = minute % 60;
+                second = time - hour * 3600 - minute * 60;
+                timeStr = unitFormat(hour) + "灏忔椂" + unitFormat(minute) + "鍒�" + unitFormat(second) + "绉�";
+            }
+        }
+        return timeStr;
+    }
+
+    public static String unitFormat(int i) {
+        String retStr = null;
+        if (i >= 0 && i < 10)
+            retStr = "0" + Integer.toString(i);
+        else
+            retStr = "" + i;
+        return retStr;
+    }
+
+    /**
+     * 楠岃瘉鏃堕棿
+     *
+     * @param time 鏃堕棿瀛楃涓� HH:mm
+     * @return 楠岃瘉鎴愬姛杩斿洖true锛岄獙璇佸け璐ヨ繑鍥瀎alse
+     */
+    public static boolean checkTime(String time) {
+        String regex = "([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
+        return Pattern.matches(regex, time);
+    }
+
+    /**
+     * 鑾峰彇姣忔棩07:30:00鐨勬椂闂寸偣
+     * 鏍煎紡涓� yyyy-MM-dd HH:mm:ss
+     * 渚嬶細2018-05-28 07:30:00
+     *
+     * @return
+     */
+    public static Date getHourDateTo(Date now, String time) {
+        String dateStr = format(now, STR_DATE);
+        dateStr = dateStr + " " + time;
+        Date result = toDate(dateStr, STR_DATE_TIME_SMALL);
+        return result;
+    }
+
+    public static Date setTimeForDay(Date theDate, String planTime) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(theDate);
+        String[] times = planTime.split(":");
+        cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(times[0]));
+        cal.set(Calendar.MINUTE, Integer.parseInt(times[1]));
+        cal.set(Calendar.SECOND, Integer.parseInt(times[2]));
+        return cal.getTime();
+    }
+
+    public static long getTimeWithOutDay(Date d) {
+        return d.getTime() / 1000 % 86400;
+    }
+
+    /**
+     * @param lo 姣鏁�
+     * @return String yyyy-MM-dd HH:mm:ss
+     * @Description: long绫诲瀷杞崲鎴愭棩鏈�
+     */
+    public static String longToDate(long lo) {
+        Date date = new Date(lo);
+        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sd.format(date);
+    }
+
+    /**
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public static List<Date> getWeekDays(LocalDate startDate, LocalDate endDate) {
+        List<Date> result = new ArrayList<>();
+        List<LocalDate> dateList = Stream.iterate(startDate, localDate -> localDate.plusDays(1))
+                .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1)
+                .filter(localDate -> DayOfWeek.SATURDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK))) || DayOfWeek.SUNDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK))))
+                .collect(Collectors.toList());
+        dateList.forEach(localDate -> result.add(Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())));
+        return result;
+    }
+
+    /**
+     * @param smallDate
+     * @param bigDate
+     * @desc 鑾峰彇涓や釜鏃ユ湡涔嬮棿鐨勫ぉ鏁�
+     */
+    public static Integer getDaysBetween(String smallDate, String bigDate) throws ParseException {
+        // 鏃ユ湡鏍煎紡
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        // 鑾峰彇涓や釜鏃ユ湡鐨勬椂闂存埑
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(sdf.parse(smallDate));
+        long smallTime = cal.getTimeInMillis();
+        cal.setTime(sdf.parse(bigDate));
+        long bigTime = cal.getTimeInMillis();
+        // 鐩稿樊鐨勬棩鏈�
+        long days = (bigTime - smallTime) / (1000 * 3600 * 24);
+        // long杞琲nt 瀛樺湪婧㈠嚭鎯呭喌  鏍规嵁涓氬姟鎯呭喌缂栬緫catch涓繑鍥炲��
+        try {
+            return Integer.parseInt(String.valueOf(days));
+        } catch (NumberFormatException e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 鏃ユ湡杞崲锛屽皢鎺ュ彛杩斿洖鐨�20180524杞负2018-05-24
+     *
+     * @param str
+     * @return
+     */
+    public static String dateConvertion(String str) {
+        Date parse = null;
+        String dateString = "";
+        try {
+            parse = new SimpleDateFormat("yyyyMMdd").parse(str);
+            dateString = new SimpleDateFormat("yyyy-MM-dd").format(parse);
+        } catch (ParseException e) {
+            dateString = null;
+        }
+
+        return dateString;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/util/ExcelUtils.java b/src/main/java/org/jeecg/modules/eam/util/ExcelUtils.java
new file mode 100644
index 0000000..87ce100
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/util/ExcelUtils.java
@@ -0,0 +1,51 @@
+package org.jeecg.modules.eam.util;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.text.SimpleDateFormat;
+
+public class ExcelUtils {
+    // 杈呭姪鏂规硶锛氭牴鎹崟鍏冩牸绫诲瀷瀹夊叏鍦拌幏鍙栧瓧绗︿覆鍊�
+    public static String getCellValueAsString(Cell cell) {
+        if (cell == null) {
+            return null;
+        }
+        switch (cell.getCellType()) {
+            case STRING:
+                return cell.getStringCellValue();
+            case NUMERIC:
+                if (DateUtil.isCellDateFormatted(cell)) {
+                    // 濡傛灉鏄棩鏈熸牸寮忥紝杩斿洖鏃ユ湡瀛楃涓�
+                    return new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue());
+                } else {
+                    // 鍚﹀垯杩斿洖鏁板�肩殑瀛楃涓插舰寮�
+                    return String.valueOf(cell.getNumericCellValue());
+                }
+            case BOOLEAN:
+                return String.valueOf(cell.getBooleanCellValue());
+            case FORMULA:
+                try {
+                    return String.valueOf(cell.getNumericCellValue()); // 灏濊瘯瑙f瀽鍏紡缁撴灉
+                } catch (Exception e) {
+                    return String.valueOf(cell.getStringCellValue()); // 濡傛灉鍏紡缁撴灉涓哄瓧绗︿覆
+                }
+            default:
+                return "";
+        }
+    }
+
+    // 鍒ゆ柇鏌愪竴琛屾槸鍚﹀叏涓虹┖(鏈夋晥鏁版嵁琛屽垽鏂�)
+    public static boolean isRowEmpty(Row row) {
+        if (row == null) return true;
+        for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
+            Cell cell = row.getCell(c);
+            if (cell != null && cell.getCellType() != CellType.BLANK) {
+                return false;
+            }
+        }
+        return true;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java b/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java
new file mode 100644
index 0000000..7d9894f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/vo/EamEquipmentTree.java
@@ -0,0 +1,121 @@
+package org.jeecg.modules.eam.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.eam.entity.EamEquipment;
+//import org.jeecg.modules.system.model.MdcProductionTreeModel;
+import org.jeecg.modules.system.model.SysDepartTreeModel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 璁惧鏍�
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "璁惧鏍戠粨鏋勬暟鎹疄浣�", description = "璁惧")
+public class EamEquipmentTree implements Serializable {
+
+    /**
+     * 鍓嶇鏁版嵁鏍戜腑鐨刱ey
+     */
+    private String key;
+
+    /**
+     * 鍓嶇鏁版嵁鏍戜腑鐨剉alue
+     */
+    private String value;
+
+    /**
+     * 鍓嶇鏁版嵁鏍戜腑鐨則itle
+     */
+    private String title;
+
+    /**
+     * 鏄惁鏄瓙鑺傜偣
+     */
+    private boolean isLeaf;
+
+    /**
+     * 璁惧缂栧彿锛堝墠绔畾浣嶇敤锛�
+     */
+    private String equipmentId;
+
+    /**
+     * 璁惧鍚嶇О锛堝墠绔畾浣嶇敤锛�
+     */
+    private String equipmentName;
+
+    /**
+     * 鐖剁骇id锛堝墠绔姹傜敤锛�
+     */
+    private String parentId;
+
+    /**
+     * 杞﹂棿鎻忚堪
+     */
+    private String memo;
+
+    /**
+     * 绫诲瀷 1 杞﹂棿 2璁惧
+     */
+    private Integer type;
+
+    /**
+     * orgType
+     */
+    private String orgType;
+
+
+    private List<EamEquipmentTree> children = new ArrayList<>();
+
+    /**
+     * 灏嗚澶囨暟鎹斁鍦ㄨ瀵硅薄涓�
+     *
+     * @param mdcEquipment
+     * @return
+     */
+    public EamEquipmentTree convert(EamEquipment mdcEquipment) {
+        this.key = mdcEquipment.getId();
+        this.value = mdcEquipment.getId();
+        this.title = mdcEquipment.getEquipmentCode() + "/" + mdcEquipment.getEquipmentName();
+        this.equipmentId = mdcEquipment.getEquipmentCode();
+        this.equipmentName = mdcEquipment.getEquipmentName();
+        this.isLeaf = true;
+        return this;
+    }
+
+    /**
+     * 灏哠ysDepartTreeModel鐨勯儴鍒嗘暟鎹斁鍦ㄨ瀵硅薄褰撲腑
+     *
+     * @param treeModel
+     * @return
+     */
+    public EamEquipmentTree convertByDepart(SysDepartTreeModel treeModel) {
+        this.key = treeModel.getId();
+        this.value = treeModel.getId();
+        this.title = treeModel.getDepartName();
+        return this;
+    }
+
+    /**
+     * 灏唌dcProductionTreeModel鐨勯儴鍒嗘暟鎹斁鍦ㄨ瀵硅薄褰撲腑
+     *
+     * @param treeModel
+     * @return
+     */
+//    public EamEquipmentTree convertByProduction(MdcProductionTreeModel treeModel) {
+//        this.key = treeModel.getId();
+//        this.value = treeModel.getId();
+//        this.title = treeModel.getProductionName();
+//        this.memo = treeModel.getMemo();
+//        this.type = treeModel.getType();
+//        this.orgType = treeModel.getOrgType();
+//        return this;
+//    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/vo/EquipmentSearchResult.java b/src/main/java/org/jeecg/modules/eam/vo/EquipmentSearchResult.java
new file mode 100644
index 0000000..0a27828
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/vo/EquipmentSearchResult.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.eam.vo;
+
+import lombok.Data;
+import org.jeecg.modules.eam.entity.EamEquipment;
+
+import java.io.Serializable;
+
+@Data
+public class EquipmentSearchResult implements Serializable {
+    /**
+     * 瀛楀吀value
+     */
+    private String value;
+    /**
+     * 瀛楀吀鏂囨湰
+     */
+    private String text;
+
+    public EquipmentSearchResult() {
+    }
+
+    public EquipmentSearchResult(EamEquipment eamEquipment) {
+        this.value = eamEquipment.getId();
+        this.text = eamEquipment.getEquipmentCode() + "[" + eamEquipment.getEquipmentName() + "]";
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/eam/vo/InspectionVo.java b/src/main/java/org/jeecg/modules/eam/vo/InspectionVo.java
new file mode 100644
index 0000000..02deb86
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/eam/vo/InspectionVo.java
@@ -0,0 +1,110 @@
+package org.jeecg.modules.eam.vo;
+
+import lombok.Data;
+
+@Data
+public class InspectionVo {
+
+    private String seq;
+    private String operator;//鎿嶄綔
+    private String confirmUser;//宸℃煡
+    private String inspectionContent;
+    private String dayTime;
+    private String inspectionResult;
+    private String day1;
+    private String day2;
+    private String day3;
+    private String day4;
+    private String day5;
+    private String day6;
+    private String day7;
+    private String day8;
+    private String day9;
+    private String day10;
+    private String day11;
+    private String day12;
+    private String day13;
+    private String day14;
+    private String day15;
+    private String day16;
+    private String day17;
+    private String day18;
+    private String day19;
+    private String day20;
+    private String day21;
+    private String day22;
+    private String day23;
+    private String day24;
+    private String day25;
+    private String day26;
+    private String day27;
+    private String day28;
+    private String day29;
+    private String day30;
+    private String day31;
+
+    private String confirmUser1;
+    private String confirmUser2;
+    private String confirmUser3;
+    private String confirmUser4;
+    private String confirmUser5;
+    private String confirmUser6;
+    private String confirmUser7;
+    private String confirmUser8;
+    private String confirmUser9;
+    private String confirmUser10;
+    private String confirmUser11;
+    private String confirmUser12;
+    private String confirmUser13;
+    private String confirmUser14;
+    private String confirmUser15;
+    private String confirmUser16;
+    private String confirmUser17;
+    private String confirmUser18;
+    private String confirmUser19;
+    private String confirmUser20;
+    private String confirmUser21;
+    private String confirmUser22;
+    private String confirmUser23;
+    private String confirmUser24;
+    private String confirmUser25;
+    private String confirmUser26;
+    private String confirmUser27;
+    private String confirmUser28;
+    private String confirmUser29;
+    private String confirmUser30;
+    private String confirmUser31;
+
+    private String operator1;
+    private String operator2;
+    private String operator3;
+    private String operator4;
+    private String operator5;
+    private String operator6;
+    private String operator7;
+    private String operator8;
+    private String operator9;
+    private String operator10;
+    private String operator11;
+    private String operator12;
+    private String operator13;
+    private String operator14;
+    private String operator15;
+    private String operator16;
+    private String operator17;
+    private String operator18;
+    private String operator19;
+    private String operator20;
+    private String operator21;
+    private String operator22;
+    private String operator23;
+    private String operator24;
+    private String operator25;
+    private String operator26;
+    private String operator27;
+    private String operator28;
+    private String operator29;
+    private String operator30;
+    private String operator31;
+
+}

--
Gitblit v1.9.3