From c9cc74fad46adaa4bc448cba673e830baf705fce Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期二, 24 六月 2025 17:40:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml                           |    5 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderExpiredJob.java          |   96 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java               |  199 +--------
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java                     |   17 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/GuideCardBatchServiceImpl.java       |    4 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java        |  139 ++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java                              |   39 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java       |    6 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOEEJob.java                            |   83 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java      |    8 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml                     |    5 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderGenerateJob.java         |  154 +++++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java |   10 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java             |   80 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml                      |    1 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java           |   18 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcOeeComputeVo.java                           |    4 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderExpiredJob.java         |   96 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java         |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java                        |   11 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java                             |   29 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/GuideCardBatch.java                        |    4 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java                        |   55 --
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java                |   46 --
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java                       |   62 +++
 25 files changed, 897 insertions(+), 276 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/GuideCardBatch.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/GuideCardBatch.java
index a3bd5f4..3af6f98 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/GuideCardBatch.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/GuideCardBatch.java
@@ -131,6 +131,10 @@
     @DateTimeFormat(pattern="yyyy-MM-dd")
     @ApiModelProperty(value = "棣栨鏃ユ湡")
     private Date inspectionTime;
+    /**棣栨鎰忚*/
+    @Excel(name = "棣栨鎰忚", width = 15)
+    @ApiModelProperty(value = "棣栨鎰忚")
+    private String inspectionOpinion;
 	/**瀹℃壒浜�*/
 	@Excel(name = "瀹℃壒浜�", width = 15)
     @ApiModelProperty(value = "瀹℃壒浜�")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java
index d7d6b1f..bfd8427 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java
@@ -2,22 +2,25 @@
 
 import org.apache.commons.io.monitor.FileAlterationListener;
 import org.apache.commons.io.monitor.FileAlterationObserver;
-import org.jeecg.common.util.FileUtil;
-import org.jeecg.modules.dnc.service.IDocInfoService;
-import org.jeecg.modules.dnc.utils.file.FileUtilS;
+import org.jeecg.modules.dnc.dto.TransferPackage;
+import org.jeecg.modules.dnc.service.impl.DataImportService;
+import org.jeecg.modules.dnc.service.impl.FileFerryService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.File;
-import java.util.Objects;
 
 @Component
 public class FileListener implements FileAlterationListener {
     private static final Logger log = LoggerFactory.getLogger(FileListener.class);
+
     @Autowired
-    private IDocInfoService docInfoService;  // 鏂囨。鏈嶅姟
+    private FileFerryService fileFerryService;
+
+    @Autowired
+    private DataImportService dataImportService;
 
     @Override
     public void onStart(FileAlterationObserver observer) {
@@ -43,6 +46,11 @@
     public void onFileCreate(File file) {
         String filePath = file.getAbsolutePath();
         log.info("[鏂板缓]: {}", filePath);
+        if (filePath.endsWith(".ferry")){
+            TransferPackage data = fileFerryService.importData(filePath);
+            dataImportService.importTransferPackage(data);
+            log.info("鏂囦欢瀵煎叆瀹屾垚");
+        }
     }
     @Override
     public void onFileChange(File file) {
@@ -58,42 +66,5 @@
     public void onStop(FileAlterationObserver observer) {
 //        log.info("缁撴潫鐩戝惉鐩綍: {}", observer.getDirectory().getAbsolutePath());
     }
-
-    /**
-     * 宸ユ帶缃戣В鏋愭秹瀵嗙綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽
-     * @param file
-     */
-    private void handleIndustrialDocFile(File file) {
-        log.info("宸ユ帶缃戣В鏋愭秹瀵嗙綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽: {}", file.getAbsolutePath());
-        try {
-            if (Objects.equals(FileUtil.getFileSuffix(file.getName()), "nc")) {
-                boolean success = docInfoService.addDocInfoAnalysisGwNcService(file.getAbsolutePath(), file);
-                if (success) {
-                    FileUtilS.copyFileRec(file.getAbsolutePath());
-                    FileUtilS.fileRecDelete(file.getAbsolutePath());
-                }
-            }else if (Objects.equals(FileUtil.getFileSuffix(file.getName()), "txt")) {
-                //todo 鏄惁瑙f瀽宸ヤ綔娴佹搷浣�
-
-            }
-        } catch (Exception e) {
-            log.error("宸ユ帶缃戣В鏋愭秹瀵嗙綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽: {}", e.getMessage());
-        }
-    }
-
-    /**
-     * 娑夊瘑缃戣В鏋愬伐鎺х綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽锛堢▼搴忓洖浼狅級
-     * @param file
-     */
-    private void handleSecretDocFile(File file) {
-        log.info("娑夊瘑缃戣В鏋愬伐鎺х綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽: {}", file.getAbsolutePath());
-        try {
-            boolean b= docInfoService.addDocInfoAnalysisSmwNcService(file.getAbsolutePath(), file);
-
-        }catch (Exception e) {
-            log.error("娑夊瘑缃戣В鏋愬伐鎺х綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽: {}", e.getMessage());
-        }
-    }
-
 
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml
index f725e8d..99ce988 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml
@@ -118,6 +118,7 @@
         ,d.publish_file_id
         ,d.publish_version
         ,d.description
+        ,d.doc_dispatch_status
         from (select classification_id, doc_id,attribution_type,attribution_id from nc_doc_relative
         where delete_flag=0 and doc_id=#{docId} and attribution_type=#{attrType} and attribution_id=#{attrId}) r
         inner join nc_doc_info d
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
index 91e9992..a39eb0e 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
@@ -628,14 +628,18 @@
             List<Long> ids = productMixList.stream().map(ProductMix::getId).collect(Collectors.toList());
             //鑾峰彇宸茬粡鑷韩琚�熺敤鐨勯儴浠�
             LambdaQueryWrapper<ComponentInfo> borrowQueryWrapper = new LambdaQueryWrapper<>();
-            borrowQueryWrapper.in(ComponentInfo::getBorrowId,ids);
+            if (!ids.isEmpty()){
+                borrowQueryWrapper.in(ComponentInfo::getBorrowId,ids);
+            }
             borrowQueryWrapper.eq(ComponentInfo::getParentId,componentInfo.getComponentId());
             List<String> borrowIds= super.list(borrowQueryWrapper).stream().map(ComponentInfo::getBorrowId).collect(Collectors.toList());
             LambdaQueryWrapper<ComponentInfo> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.like(StrUtil.isNotEmpty(componentInfo.getComponentName()),ComponentInfo::getComponentName, componentInfo.getComponentName());
             queryWrapper.like(StrUtil.isNotEmpty(componentInfo.getComponentCode()),ComponentInfo::getComponentCode, componentInfo.getComponentCode());
             queryWrapper.isNull(ComponentInfo::getBorrowId);
-            queryWrapper.in(ComponentInfo::getComponentId,ids);
+            if (!ids.isEmpty()){
+                queryWrapper.in(ComponentInfo::getComponentId,ids);
+            }
             queryWrapper.ne(StrUtil.isNotEmpty(oldComponentInfo.getBorrowId()),ComponentInfo::getComponentId,oldComponentInfo.getBorrowId());
             if (!borrowIds.isEmpty()) {
                 queryWrapper.notIn(ComponentInfo::getComponentId,borrowIds);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java
index b8649bd..c91c587 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java
@@ -1,14 +1,10 @@
 package org.jeecg.modules.dnc.service.impl;
 
-import cn.hutool.core.util.StrUtil;
 import com.jeecg.weibo.exception.BusinessException;
 import org.jeecg.modules.dnc.dto.ComponentHierarchy;
 import org.jeecg.modules.dnc.dto.TransferPackage;
 import org.jeecg.modules.dnc.entity.*;
 import org.jeecg.modules.dnc.mapper.*;
-import org.jeecg.modules.dnc.service.*;
-import org.jeecg.modules.system.service.IMdcProductionService;
-import org.jeecg.modules.system.service.ISysUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,48 +64,6 @@
     @Autowired
     private GuideCardBatchMapper guideCardBatchMapper;
 
-    @Autowired
-    private ISysUserService sysUserService;
-
-    @Autowired
-    private IMdcProductionService mdcProductionService;
-
-    @Autowired
-    private IProductPermissionService productPermissionService;
-
-    @Autowired
-    private IProductDepartmentService productDepartmentService;
-
-    @Autowired
-    private IComponentPermissionService componentPermissionService;
-
-    @Autowired
-    private IComponentDepartmentService componentDepartmentService;
-
-    @Autowired
-    private IPartsPermissionService partsPermissionService;
-
-    @Autowired
-    private IPartsDepartmentService partsDepartmentService;
-
-    @Autowired
-    private IProcessSpecVersionPermissionService processSpecVersionPermissionService;
-
-    @Autowired
-    private IProcessSpecVersionDepartmentService processSpecVersionDepartmentService;
-
-    @Autowired
-    private IProcessStreamPermissionService processStreamPermissionService;
-
-    @Autowired
-    private IProcessionDepartmentService processionDepartmentService;
-
-    @Autowired
-    private IWorkStepPermissionService workStepPermissionService;
-
-    @Autowired
-    private IWorkStepDepartmentService workStepDepartmentService;
-
     @Transactional(rollbackFor = Exception.class)
     public void importTransferPackage(TransferPackage transferPackage) {
         try {
@@ -155,12 +109,6 @@
             if (transferPackage.getTraceChain() != null&&
                     transferPackage.getTraceChain().getTreePath() != null) {
                 saveTreePath(transferPackage.getTraceChain().getTreePath());
-            }
-
-            //淇濆瓨鏉冮檺
-            if (transferPackage.getTraceChain() != null&&
-                    transferPackage.getTraceChain().getPermissionStreamNewList() != null) {
-                savePermissionStreamNewList(transferPackage.getTraceChain().getPermissionStreamNewList());
             }
 
             // 淇濆瓨璁惧绫�
@@ -222,7 +170,8 @@
             productMapper.insert(product);
             logger.debug("浜у搧宸蹭繚瀛�: {}", product.getProductId());
         } else {
-            logger.debug("浜у搧宸插瓨鍦�: {}", product.getProductId());
+            productMapper.updateById(product);
+            logger.debug("浜у搧宸叉洿鏂�: {}", product.getProductId());
         }
     }
 
@@ -232,7 +181,8 @@
                 componentMapper.insert(component);
                 logger.debug("閮ㄤ欢宸蹭繚瀛�: {}", component.getComponentId());
             } else {
-                logger.debug("閮ㄤ欢宸插瓨鍦�: {}", component.getComponentId());
+                componentMapper.updateById(component);
+                logger.debug("閮ㄤ欢宸叉洿鏂�: {}", component.getComponentId());
             }
         }
     }
@@ -242,7 +192,8 @@
             partsMapper.insert(parts);
             logger.debug("闆朵欢宸蹭繚瀛�: {}", parts.getPartsId());
         } else {
-            logger.debug("闆朵欢宸插瓨鍦�: {}", parts.getPartsId());
+            partsMapper.updateById(parts);
+            logger.debug("闆朵欢宸叉洿鏂�: {}", parts.getPartsId());
         }
     }
 
@@ -251,7 +202,8 @@
             psvMapper.insert(processSpec);
             logger.debug("宸ヨ壓瑙勭▼宸蹭繚瀛�: {}", processSpec.getId());
         } else {
-            logger.debug("宸ヨ壓瑙勭▼宸插瓨鍦�: {}", processSpec.getId());
+            psvMapper.updateById(processSpec);
+            logger.debug("宸ヨ壓瑙勭▼宸叉洿鏂�: {}", processSpec.getId());
         }
     }
 
@@ -260,7 +212,8 @@
             processMapper.insert(process);
             logger.debug("宸ュ簭宸蹭繚瀛�: {}", process.getProcessId());
         } else {
-            logger.debug("宸ュ簭宸插瓨鍦�: {}", process.getProcessId());
+            processMapper.updateById(process);
+            logger.debug("宸ュ簭宸叉洿鏂�: {}", process.getProcessId());
         }
     }
 
@@ -269,7 +222,8 @@
             workStepMapper.insert(workStep);
             logger.debug("宸ユ宸蹭繚瀛�: {}", workStep.getId());
         } else {
-            logger.debug("宸ユ宸插瓨鍦�: {}", workStep.getId());
+            workStepMapper.updateById(workStep);
+            logger.debug("宸ユ宸叉洿鏂�: {}", workStep.getId());
         }
     }
 
@@ -279,113 +233,10 @@
                 productMixMapper.insert(productMix);
                 logger.debug("浜у搧缁勫悎宸蹭繚瀛�: {}", productMix.getId());
             } else {
-                logger.debug("浜у搧缁勫悎宸插瓨鍦�: {}", productMix.getId());
+                productMixMapper.updateById(productMix);
+                logger.debug("浜у搧缁勫悎宸叉洿鏂�: {}", productMix.getId());
             }
         }
-    }
-
-    private void savePermissionStreamNewList(List<PermissionStreamNew> permissionStreamNewList) {
-        for (PermissionStreamNew permissionStreamNew : permissionStreamNewList) {
-            if (permissionStreamNew.getUserId() != null) {
-                String id=sysUserService.getUserByName(permissionStreamNew.getUserId()).getId();
-                if (id!=null){
-                    permissionStreamNew.setUserId(id);
-                }
-            }
-            if (permissionStreamNew.getDepartId() != null) {
-                String id=mdcProductionService.findByOrgCode(permissionStreamNew.getDepartId()).getId();
-                if (id!=null){
-                permissionStreamNew.setDepartId(id);
-                }
-            }
-            permissionStreamNewMapper.insert(permissionStreamNew);
-            logger.debug("鏉冮檺宸蹭繚瀛�: {}", permissionStreamNew.getId());
-        }
-        //鍒嗘壒娣诲姞浜у搧銆侀儴浠躲�侀浂浠躲�佸伐鑹鸿绋嬨�佸伐搴忋�佸伐姝ユ潈闄�
-        permissionStreamNewList.forEach(item -> {
-            switch (item.getBusinessType()){
-                case "1":
-                    if (StrUtil.isNotEmpty(item.getUserId())){
-                        ProductPermission productPermission = new ProductPermission();
-                        productPermission.setProductId(item.getBusinessId());
-                        productPermission.setUserId(item.getUserId());
-                        productPermissionService.save(productPermission);
-                    }else {
-                        ProductDepartment productDepartment = new ProductDepartment();
-                        productDepartment.setProductId(item.getBusinessId());
-                        productDepartment.setDepartId(item.getDepartId());
-                        productDepartmentService.save(productDepartment);
-                    }
-                    break;
-                case "2":
-
-                    if (StrUtil.isNotEmpty(item.getUserId())){
-                        ComponentPermission componentPermission = new ComponentPermission();
-                        componentPermission.setComponentId(item.getBusinessId());
-                        componentPermission.setUserId(item.getUserId());
-                        componentPermissionService.save(componentPermission);
-                    }else {
-                        ComponentDepartment componentDepartment = new ComponentDepartment();
-                        componentDepartment.setComponentId(item.getBusinessId());
-                        componentDepartment.setDepartId(item.getDepartId());
-                        componentDepartmentService.save(componentDepartment);
-                    }
-                    break;
-                case "3":
-                    if (StrUtil.isNotEmpty(item.getUserId())){
-                        PartsPermission partsPermission = new PartsPermission();
-                        partsPermission.setPartsId(item.getBusinessId());
-                        partsPermission.setUserId(item.getUserId());
-                        partsPermissionService.save(partsPermission);
-                    }else {
-                        PartsDepartment partsDepartment = new PartsDepartment();
-                        partsDepartment.setPartsId(item.getBusinessId());
-                        partsDepartment.setDepartId(item.getDepartId());
-                        partsDepartmentService.save(partsDepartment);
-                    }
-                    break;
-                case "4":
-                    if (StrUtil.isNotEmpty(item.getUserId())){
-                        ProcessSpecVersionPermission processSpecVersionPermission = new ProcessSpecVersionPermission();
-                        processSpecVersionPermission.setPsvId(item.getBusinessId());
-                        processSpecVersionPermission.setUserId(item.getUserId());
-                        processSpecVersionPermissionService.save(processSpecVersionPermission);
-                    }else {
-                        ProcessSpecVersionDepartment processSpecVersionDepartment = new ProcessSpecVersionDepartment();
-                        processSpecVersionDepartment.setPsvId(item.getBusinessId());
-                        processSpecVersionDepartment.setDepartId(item.getDepartId());
-                        processSpecVersionDepartmentService.save(processSpecVersionDepartment);
-                    }
-                    break;
-                case "5":
-                    if (StrUtil.isNotEmpty(item.getUserId())){
-                        ProcessionPermission processionPermission = new ProcessionPermission();
-                        processionPermission.setProcessId(item.getBusinessId());
-                        processionPermission.setUserId(item.getUserId());
-                        processStreamPermissionService.save(processionPermission);
-                    }else {
-                        ProcessionDepartment processionDepartment = new ProcessionDepartment();
-                        processionDepartment.setProcessId(item.getBusinessId());
-                        processionDepartment.setDepartId(item.getDepartId());
-                        processionDepartmentService.save(processionDepartment);
-                    }
-                    break;
-                case  "6":
-                    if (StrUtil.isNotEmpty(item.getUserId())){
-                        WorkStepPermission workStepPermission = new WorkStepPermission();
-                        workStepPermission.setStepId(item.getBusinessId());
-                        workStepPermission.setUserId(item.getUserId());
-                        workStepPermissionService.save(workStepPermission);
-                    }else {
-                        WorkStepDepartment workStepDepartment = new WorkStepDepartment();
-                        workStepDepartment.setStepId(item.getBusinessId());
-                        workStepDepartment.setDepartId(item.getDepartId());
-                        workStepDepartmentService.save(workStepDepartment);
-                    }
-                    break;
-                    default:
-            }
-        });
     }
 
     private void saveDeviceManagement(DeviceManagement deviceManagement) {
@@ -393,7 +244,8 @@
             deviceManagementMapper.insert(deviceManagement);
             logger.debug("璁惧绫讳俊鎭凡淇濆瓨: {}", deviceManagement.getId());
         } else {
-            logger.debug("璁惧绫讳俊鎭凡瀛樺湪: {}", deviceManagement.getId());
+            deviceManagementMapper.updateById(deviceManagement);
+            logger.debug("璁惧绫讳俊鎭凡鏇存柊: {}", deviceManagement.getId());
         }
     }
 
@@ -402,7 +254,8 @@
             deviceTypeMapper.insert(deviceType);
             logger.debug("璁惧绫诲凡淇濆瓨: {}", deviceType.getId());
         } else {
-            logger.debug("璁惧绫诲凡瀛樺湪: {}", deviceType.getId());
+            deviceTypeMapper.updateById(deviceType);
+            logger.debug("璁惧绫诲凡鏇存柊: {}", deviceType.getId());
         }
     }
 
@@ -411,7 +264,9 @@
             docInfoMapper.insert(docInfo);
             logger.debug("鏂囨。宸蹭繚瀛�: {}", docInfo.getDocId());
         } else {
-            logger.debug("鏂囨。宸插瓨鍦�: {}", docInfo.getDocId());
+            docInfo.setDocDispatchStatus(5);
+            docInfoMapper.updateById(docInfo);
+            logger.debug("鏂囨。宸叉洿鏂�: {}", docInfo.getDocId());
         }
     }
 
@@ -420,7 +275,8 @@
             docFileMapper.insert(docFile);
             logger.debug("鏂囨。鏂囦欢宸蹭繚瀛�: {}", docFile.getFileId());
         } else {
-            logger.debug("鏂囨。鏂囦欢宸插瓨鍦�: {}", docFile.getFileId());
+            docFileMapper.updateById(docFile);
+            logger.debug("鏂囨。鏂囦欢宸叉洿鏂�: {}", docFile.getFileId());
         }
     }
 
@@ -429,7 +285,8 @@
             docRelativeMapper.insert(docRelative);
             logger.debug("鏂囨。瀵瑰簲鍏崇郴宸蹭繚瀛�: {}", docRelative.getId());
         } else {
-            logger.debug("鏂囨。瀵瑰簲鍏崇郴宸插瓨鍦�: {}", docRelative.getId());
+            docRelativeMapper.updateById(docRelative);
+            logger.debug("鏂囨。瀵瑰簲鍏崇郴宸叉洿鏂�: {}", docRelative.getId());
         }
     }
 
@@ -440,6 +297,7 @@
                 logger.debug("鍒�鍏峰凡淇濆瓨: {}", cutter.getId());
             } else {
                 cutterMapper.updateById(cutter);
+                logger.debug("鍒�鍏峰凡鏇存柊: {}", cutter.getId());
             }
         }
     }
@@ -447,9 +305,10 @@
     private void saveGuideCardBatch(GuideCardBatch guideCardBatch) {
         if (guideCardBatchMapper.selectById(guideCardBatch.getId()) == null) {
             guideCardBatchMapper.insert(guideCardBatch);
-            logger.debug("鍒�鐗囨壒娆″凡淇濆瓨: {}", guideCardBatch.getId());
+            logger.debug("绋嬪簭鍔犲伐纭琛ㄥ凡淇濆瓨: {}", guideCardBatch.getId());
         } else {
-            logger.debug("鍒�鐗囨壒娆″凡瀛樺湪: {}", guideCardBatch.getId());
+            guideCardBatchMapper.updateById(guideCardBatch);
+            logger.debug("绋嬪簭鍔犲伐纭琛ㄥ凡鏇存柊: {}", guideCardBatch.getId());
         }
     }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java
index 419c241..4661dcd 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java
@@ -1,19 +1,13 @@
 package org.jeecg.modules.dnc.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import org.apache.commons.lang3.StringUtils;
 import org.jeecg.modules.dnc.dto.ComponentHierarchy;
 import org.jeecg.modules.dnc.dto.TransferPackage;
-import org.jeecg.modules.dnc.entity.*;
-import org.jeecg.modules.dnc.exception.ExceptionCast;
-import org.jeecg.modules.dnc.response.ActivitiCode;
-import org.jeecg.modules.dnc.response.DocumentCode;
+import org.jeecg.modules.dnc.entity.ComponentInfo;
+import org.jeecg.modules.dnc.entity.DocFile;
 import org.jeecg.modules.dnc.service.IDocClassificationService;
 import org.jeecg.modules.dnc.service.IDocInfoService;
 import org.jeecg.modules.dnc.service.IDocRelativeService;
 import org.jeecg.modules.dnc.utils.JsonUtils;
-import org.jeecg.modules.dnc.utils.file.FileUtilS;
-import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.mapper.MdcEquipmentMapper;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.slf4j.Logger;
@@ -146,7 +140,6 @@
 
             // 6. 鑾峰彇鏂囦欢澶嶅埗鐩爣璺緞
             DocFile docFile = pkg.getTraceChain().getDocFile();
-            DocInfo docInfo = pkg.getTraceChain().getDocInfo();
             if (docFile == null) {
                 throw new IllegalStateException("浼犺緭鍖呬腑缂哄皯鏂囨。鏂囦欢淇℃伅");
             }
@@ -165,41 +158,6 @@
             logger.info("澶嶅埗鏂囦欢: {} 鈫� {}", ncFilePath, targetPath);
             Path source = Paths.get(ncFilePath);
             Files.copy(source, Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);
-
-            // 8. 鏌ヨ璁惧id
-            MdcEquipment mdcEquipment=mdcEquipmentMapper.selectOne(new QueryWrapper<MdcEquipment>().eq("equipment_id",equipmentId));
-            if (mdcEquipment == null) {
-                throw new IllegalArgumentException("鏃犳晥鐨勮澶嘔D: " + equipmentId);
-            }
-
-            // 9.浼犺緭鏂囦欢鍒拌澶囦笅
-            List<String> strings = mdcProductionService.findListParentTreeAll(mdcEquipment.getId());
-            if (strings != null && !strings.isEmpty()) {
-                DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(docInfo.getDocId(), 7, mdcEquipment.getId());
-                if (deviceDoc == null) {
-                    DocClassification classification = classificationService.getByCode("send");
-                    if(classification == null)
-                        ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR);
-                    DocRelative docRelative = new DocRelative();
-                    docRelative.setDocId(docInfo.getDocId());
-                    docRelative.setClassificationId(classification.getClassificationId());
-                    docRelative.setAttributionType(7);
-                    docRelative.setAttributionId(mdcEquipment.getId());
-                    docRelativeService.save(docRelative);
-                }
-                String sendPath = StringUtils.join(strings.toArray(), "/");
-                boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(), sendPath + "/" + mdcEquipment.getEquipmentId(),
-                        docFile.getFileEncodeName(),
-                        docFile.getFileName(), docFile.getFileSuffix());
-                if (!copyFileNc) {
-                    ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
-                } else {
-                    FileUtilS.deleteZipFromToSend(sendPath + "/" + mdcEquipment.getEquipmentId(),
-                            docFile.getFileName(), docFile.getFileSuffix());
-                }
-            } else {
-                throw new RuntimeException("鏂囦欢浼犺緭璺緞鑾峰彇澶辫触");
-            }
 
             // 10.鍒犻櫎涓存椂NC鏂囦欢涓巎son鏂囦欢
             logger.info("鍒犻櫎涓存椂鏂囦欢: {}", ncFilePath);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java
index 38ca508..43d8920 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java
@@ -6,6 +6,7 @@
 import org.jeecg.modules.dnc.entity.*;
 import org.jeecg.modules.dnc.mapper.*;
 import org.jeecg.modules.dnc.service.IPermissionStreamNewService;
+import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -225,7 +226,10 @@
                         .eq("delete_flag",0));
         path.forEach(item->{
             if (item.getDepartId()!=null){
-                item.setDepartId(mdcProductionService.getById(item.getDepartId()).getOrgCode());
+                MdcProduction mdcProduction=mdcProductionService.getById(item.getDepartId());
+                if(mdcProduction!=null){
+                    item.setDepartId(item.getDepartId());
+                }
             }
             if (item.getUserId()!=null){
                 item.setUserId(sysUserService.getById(item.getUserId()).getUsername());
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/GuideCardBatchServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/GuideCardBatchServiceImpl.java
index 45a9c0a..836f70c 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/GuideCardBatchServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/GuideCardBatchServiceImpl.java
@@ -33,9 +33,6 @@
     private IDocInfoService docInfoService;
 
     @Autowired
-    private IDocRelativeService docRelativeService;
-
-    @Autowired
     private IPartsInfoService partsInfoService;
 
     @Autowired
@@ -138,6 +135,7 @@
             guideCardBatch.setPartsName(partsInfo.getPartsName());
             guideCardBatch.setMaterielDesp(partsInfo.getMaterielDesp());
         }
+        guideCardBatch.setFlowStatus("0");
         guideCardBatch.setCompiler(user.getUsername());
         guideCardBatch.setCreateTime(new Date());
         return this.save(guideCardBatch);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java
index 806a4a8..4d4d867 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java
@@ -18,7 +18,7 @@
      * @param stream
      * @return
      */
-    Result applyAssignFile(AssignFileStream stream);
+    Result<?> applyAssignFile(AssignFileStream stream);
 
     /**securedoc
      * 鍚姩娴佺▼ 淇濆瓨鐩稿簲鐨勬暟鎹� 缁戝畾businessKey
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
index 036ac42..18f1a94 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
@@ -98,9 +98,11 @@
     private String secretFolder;    //娑夊瘑缃戜紶杈搉c鏂囦欢澶�
     @Autowired
     private FileFerryService ferryService;
+    @Autowired
+    private IDocClassificationService iDocClassificationService;
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public Result applyAssignFile(AssignFileStream stream) {
+    public Result<?> applyAssignFile(AssignFileStream stream) {
         synchronized (this){
             //鍒ゆ柇璁惧鐗规畩瀛楃
             String specialChar = getDeviceSpecialChar(stream.getDeviceId(),stream.getFileId());
@@ -108,6 +110,12 @@
                 //鎶涘嚭鐗规畩瀛楃寮傚父
                 return Result.error("鏂囦欢鍚嶇О瀛樺湪璁惧鐗规畩瀛楃");
             }
+            //鏌ヨ鏂囨。鐨勭姸鎬侊紝鎵瑰噯鐘舵�佹墠鍙互鎸囨淳
+            DocInfo docInfo=getDocInfo(stream);
+            DocClassification docClassification=iDocClassificationService.getById(docInfo.getClassificationId());
+            if (docInfo.getDocDispatchStatus()!=null&&docInfo.getDocDispatchStatus()!=3&&docClassification.getClassificationCode().equals("nc")){
+                return Result.error("璇ユ枃浠剁姸鎬佷笉鍏佽鎸囨淳,璇峰厛瀹屾垚瀹$娴佺▼");
+            }
             if(flowableEnable) {
                 return applyAssignFileActive(stream);
             }else {
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderExpiredJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderExpiredJob.java
new file mode 100644
index 0000000..8da6f51
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderExpiredJob.java
@@ -0,0 +1,96 @@
+package org.jeecg.modules.eam.job;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.eam.constant.SecondMaintenanceStatusEnum;
+import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum;
+import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrder;
+import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrder;
+import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService;
+import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+
+@Component
+@Slf4j
+public class SecondMaintenanceOrderExpiredJob implements Job {
+
+    @Autowired
+    private IEamSecondMaintenanceOrderService eamSecondMaintenanceOrderService;
+
+    @Autowired
+    private IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
+    @Autowired
+    private ISysQuartzLogService sysQuartzLogService;
+    @Autowired
+    private IQuartzJobService quartzJobService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        //浠诲姟鏃ュ織
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        long startTime = System.currentTimeMillis();
+        LocalDate now = LocalDate.now();
+        try {
+
+            List<EamSecondMaintenanceOrder> unCompleteOrderList = eamSecondMaintenanceOrderService.lambdaQuery()
+                    .lt(EamSecondMaintenanceOrder::getMaintenanceDate, now.toString())
+                    .in(EamSecondMaintenanceOrder::getMaintenanceStatus, SecondMaintenanceStatusEnum.WAIT_MAINTENANCE, SecondMaintenanceStatusEnum.UNDER_MAINTENANCE)
+                    .orderByDesc(EamSecondMaintenanceOrder::getMaintenanceDate)
+                    .list();
+
+            if (CollectionUtil.isEmpty(unCompleteOrderList)) {
+                //娌℃湁闇�瑕佸鐞嗙殑鏁版嵁
+                return;
+            }
+            for (EamSecondMaintenanceOrder order : unCompleteOrderList) {
+                if (SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(order.getMaintenanceStatus())) {
+                    order.setMaintenanceStatus(SecondMaintenanceStatusEnum.ABOLISH.name());
+                } else if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(order.getMaintenanceStatus())) {
+                    //宸茬粡琚帴鍗� 浣嗘湭鎵ц瀹屾垚
+                    order.setMaintenanceStatus(SecondMaintenanceStatusEnum.ABOLISH.name());
+                    //寮哄埗缁撴潫娴佺▼ 鍒犻櫎鐢ㄦ埛鐨勬寰呭姙浠诲姟
+                    FlowMyBusiness flowMyBusiness = flowMyBusinessService.selectByDataId(order.getId());
+                    if (flowMyBusiness != null) {
+                        flowTaskService.end(flowMyBusiness.getProcessInstanceId(), "杩囨湡鍒犻櫎");
+                    }
+                }
+            }
+            eamSecondMaintenanceOrderService.updateBatchById(unCompleteOrderList);
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            log.error("浜屼繚杩囨湡鎵ц瀹氭椂浠诲姟澶辫触锛寋}", e.getMessage(), e);
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java
new file mode 100644
index 0000000..89b126a
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java
@@ -0,0 +1,139 @@
+package org.jeecg.modules.eam.job;
+
+import cn.hutool.core.collection.CollectionUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum;
+import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
+import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
+import org.jeecg.modules.eam.request.EamWeekMaintenanceRequest;
+import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
+import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
+import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService;
+import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+@Slf4j
+public class SecondMaintenanceOrderGenerateJob implements Job {
+
+    @Autowired
+    private IEamSecondMaintenanceOrderService eamSecondMaintenanceOrderService;
+    @Autowired
+    private IEamMaintenanceStandardService eamMaintenanceStandardService;
+    @Autowired
+    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+    @Autowired
+    private ISysQuartzLogService sysQuartzLogService;
+    @Autowired
+    private IQuartzJobService quartzJobService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+
+        //浠诲姟鏃ュ織
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        long startTime = System.currentTimeMillis();
+        /**
+         * 鑾峰彇 閰嶇疆浜� 浜屼繚鏍囧噯鐨� 淇℃伅
+         */
+        List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.SECOND_MAINTENANCE.name());
+        if (CollectionUtil.isEmpty(standardList)) {
+            log.warn("娌℃湁閰嶇疆浠讳綍浜屼繚鏍囧噯锛屼换鍔$粨鏉�");
+            return;
+        }
+        //褰撳墠鏃ユ湡
+        LocalDate now = LocalDate.now();
+        try {
+            for (EamMaintenanceStandard standard : standardList) {
+                if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
+                    log.error("浜屼繚鏍囧噯鍛ㄦ湡璁剧疆閿欒锛岃鍏堥厤缃爣鍑嗗懆鏈�, standard:{}", standard);
+                    continue;
+                }
+                if (standard.getInitialDate() == null) {
+                    //璁剧疆鍒濆鏃ユ湡涓哄墠涓�澶�
+                    standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
+                }
+                LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
+                if (standard.getLastGenerateTime() != null) {
+                    generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
+                }
+                //鍔犲懆鏈�
+                do {
+                    //鍒濆鏃ユ湡璁剧疆鐨勬瘮杈冩棭锛屾垨浠诲姟闀挎椂闂存病鎵ц锛屽繀椤诲懆鏈熷埌浠婂ぉ鎵嶄細鐢熸垚宸ュ崟
+                    generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
+                } while (now.isAfter(generateDate));
+                if(!now.isEqual(generateDate)) {
+                    //杩樻湭鍒扮敓鎴愭棩鏈燂紝璺宠繃鎵ц
+                    continue;
+                }
+                //鑾峰彇淇濆吇椤规槑缁�
+                List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
+                if(CollectionUtil.isEmpty(standardDetailList)) {
+                    log.error("浜屼繚鏍囧噯娌℃湁淇濆吇鏄庣粏锛岃鍏堥厤缃繚鍏绘槑缁�, standard:{}", standard);
+                    continue;
+                }
+                //寮�濮嬬敓鎴�
+                EamSecondMaintenanceRequest request = new EamSecondMaintenanceRequest();
+                request.setEquipmentId(standard.getEquipmentId());
+                request.setStandardId(standard.getId());
+                request.setMaintenanceDate(DateUtils.localDateToDate(generateDate));
+                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE);
+                request.setOrderNum(codeSeq);
+                request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
+
+                List<EamSecondMaintenanceOrderDetail> tableDetailList = new ArrayList<>();
+                for (EamMaintenanceStandardDetail msd : standardDetailList) {
+                    EamSecondMaintenanceOrderDetail sod = new EamSecondMaintenanceOrderDetail();
+                    sod.setItemCode(msd.getItemCode());
+                    sod.setItemName(msd.getItemName());
+                    sod.setItemDemand(msd.getItemDemand());
+                    sod.setItemPart(msd.getItemPart());
+                    tableDetailList.add(sod);
+                }
+//                List<EamSecondMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamSecondMaintenanceOrderDetail::new).collect(Collectors.toList());
+                request.setTableDetailList(tableDetailList);
+                eamSecondMaintenanceOrderService.addMaintenance(request);
+
+                standard.setLastGenerateTime(new Date());
+                eamMaintenanceStandardService.updateById(standard);
+            }
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            log.error("浜屼繚鐢熸垚鎵ц瀹氭椂浠诲姟澶辫触锛寋}", e.getMessage(), e);
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+
+    }
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderExpiredJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderExpiredJob.java
new file mode 100644
index 0000000..8a90fee
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderExpiredJob.java
@@ -0,0 +1,96 @@
+package org.jeecg.modules.eam.job;
+
+import cn.hutool.core.collection.CollectionUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.eam.constant.SecondMaintenanceStatusEnum;
+import org.jeecg.modules.eam.constant.ThirdMaintenanceStatusEnum;
+import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum;
+import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrder;
+import org.jeecg.modules.eam.entity.EamThirdMaintenanceOrder;
+import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService;
+import org.jeecg.modules.eam.service.IEamThirdMaintenanceOrderService;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+
+@Component
+@Slf4j
+public class ThirdMaintenanceOrderExpiredJob implements Job {
+
+    @Autowired
+    private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService;
+
+    @Autowired
+    private IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
+    @Autowired
+    private ISysQuartzLogService sysQuartzLogService;
+    @Autowired
+    private IQuartzJobService quartzJobService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        //浠诲姟鏃ュ織
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        long startTime = System.currentTimeMillis();
+        LocalDate now = LocalDate.now();
+        try {
+
+            List<EamThirdMaintenanceOrder> unCompleteOrderList = eamThirdMaintenanceOrderService.lambdaQuery()
+                    .lt(EamThirdMaintenanceOrder::getMaintenanceDate, now.toString())
+                    .in(EamThirdMaintenanceOrder::getMaintenanceStatus, ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE, ThirdMaintenanceStatusEnum.UNDER_MAINTENANCE)
+                    .orderByDesc(EamThirdMaintenanceOrder::getMaintenanceDate)
+                    .list();
+
+            if (CollectionUtil.isEmpty(unCompleteOrderList)) {
+                //娌℃湁闇�瑕佸鐞嗙殑鏁版嵁
+                return;
+            }
+            for (EamThirdMaintenanceOrder order : unCompleteOrderList) {
+                if (ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(order.getMaintenanceStatus())) {
+                    order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.ABOLISH.name());
+                } else if (ThirdMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(order.getMaintenanceStatus())) {
+                    //宸茬粡琚帴鍗� 浣嗘湭鎵ц瀹屾垚
+                    order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.ABOLISH.name());
+                    //寮哄埗缁撴潫娴佺▼ 鍒犻櫎鐢ㄦ埛鐨勬寰呭姙浠诲姟
+                    FlowMyBusiness flowMyBusiness = flowMyBusinessService.selectByDataId(order.getId());
+                    if (flowMyBusiness != null) {
+                        flowTaskService.end(flowMyBusiness.getProcessInstanceId(), "杩囨湡鍒犻櫎");
+                    }
+                }
+            }
+            eamThirdMaintenanceOrderService.updateBatchById(unCompleteOrderList);
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            log.error("涓変繚杩囨湡鎵ц瀹氭椂浠诲姟澶辫触锛寋}", e.getMessage(), e);
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderGenerateJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderGenerateJob.java
new file mode 100644
index 0000000..8e19741
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderGenerateJob.java
@@ -0,0 +1,154 @@
+package org.jeecg.modules.eam.job;
+
+import cn.hutool.core.collection.CollectionUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum;
+import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
+import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
+import org.jeecg.modules.eam.request.EamThirdMaintenanceRequest;
+import org.jeecg.modules.eam.service.*;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+@Slf4j
+public class ThirdMaintenanceOrderGenerateJob implements Job {
+
+    @Autowired
+    private IEamEquipmentPrecisionParametersService eamEquipmentPrecisionParametersService;
+    @Autowired
+    private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService;
+    @Autowired
+    private IEamMaintenanceStandardService eamMaintenanceStandardService;
+    @Autowired
+    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+    @Autowired
+    private ISysQuartzLogService sysQuartzLogService;
+    @Autowired
+    private IQuartzJobService quartzJobService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+
+        //浠诲姟鏃ュ織
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        long startTime = System.currentTimeMillis();
+        /**
+         * 鑾峰彇 閰嶇疆浜� 涓変繚鏍囧噯鐨� 淇℃伅
+         */
+        List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.THIRD_MAINTENANCE.name());
+        if (CollectionUtil.isEmpty(standardList)) {
+            log.warn("娌℃湁閰嶇疆浠讳綍涓変繚鏍囧噯锛屼换鍔$粨鏉�");
+            return;
+        }
+        //褰撳墠鏃ユ湡
+        LocalDate now = LocalDate.now();
+        try {
+            for (EamMaintenanceStandard standard : standardList) {
+                if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
+                    log.error("涓変繚鏍囧噯鍛ㄦ湡璁剧疆閿欒锛岃鍏堥厤缃爣鍑嗗懆鏈�, standard:{}", standard);
+                    continue;
+                }
+                if (standard.getInitialDate() == null) {
+                    //璁剧疆鍒濆鏃ユ湡涓哄墠涓�澶�
+                    standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
+                }
+                LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
+                if (standard.getLastGenerateTime() != null) {
+                    generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
+                }
+                //鍔犲懆鏈�
+                do {
+                    //鍒濆鏃ユ湡璁剧疆鐨勬瘮杈冩棭锛屾垨浠诲姟闀挎椂闂存病鎵ц锛屽繀椤诲懆鏈熷埌浠婂ぉ鎵嶄細鐢熸垚宸ュ崟
+                    generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
+                } while (now.isAfter(generateDate));
+                if(!now.isEqual(generateDate)) {
+                    //杩樻湭鍒扮敓鎴愭棩鏈燂紝璺宠繃鎵ц
+                    continue;
+                }
+                //鑾峰彇淇濆吇椤规槑缁�
+                List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
+                if(CollectionUtil.isEmpty(standardDetailList)) {
+                    log.error("涓変繚鏍囧噯娌℃湁淇濆吇鏄庣粏锛岃鍏堥厤缃繚鍏绘槑缁�, standard:{}", standard);
+                    continue;
+                }
+
+                //寮�濮嬬敓鎴�
+                EamThirdMaintenanceRequest request = new EamThirdMaintenanceRequest();
+                request.setEquipmentId(standard.getEquipmentId());
+                request.setStandardId(standard.getId());
+                request.setMaintenanceDate(DateUtils.localDateToDate(generateDate));
+                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.THIRD_MAINTENANCE_CODE_RULE);
+                request.setOrderNum(codeSeq);
+                request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
+
+                List<EamThirdMaintenanceOrderDetail> tableDetailList = new ArrayList<>();
+                for (EamMaintenanceStandardDetail msd : standardDetailList) {
+                    EamThirdMaintenanceOrderDetail tod = new EamThirdMaintenanceOrderDetail();
+                    tod.setItemCode(msd.getItemCode());
+                    tod.setItemName(msd.getItemName());
+                    tod.setItemDemand(msd.getItemDemand());
+                    tod.setItemPart(msd.getItemPart());
+                    tableDetailList.add(tod);
+                }
+//                List<EamThirdMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamThirdMaintenanceOrderDetail::new).collect(Collectors.toList());
+                request.setTableDetailList(tableDetailList);
+
+                //閫氳繃璁惧 鑾峰彇璁惧绮惧害鍙傛暟
+                List<EamEquipmentPrecisionParameters> precisionParametersList = eamEquipmentPrecisionParametersService
+                        .lambdaQuery().eq(EamEquipmentPrecisionParameters::getEquipmentId, standard.getEquipmentId()).list();
+                if(precisionParametersList.size()>0){
+                    List<EamPrecisionCheckDetail> precisionDetailList = new ArrayList<>();
+                    for (EamEquipmentPrecisionParameters epp : precisionParametersList) {
+                        EamPrecisionCheckDetail pcd = new EamPrecisionCheckDetail();
+                        pcd.setParameterId(epp.getParameterId());
+                        pcd.setEquipmentId(standard.getEquipmentId());
+                        pcd.setParameterValue(epp.getParameterValue());
+                        precisionDetailList.add(pcd);
+                    }
+                    request.setPrecisionDetailList(precisionDetailList);
+                }
+                eamThirdMaintenanceOrderService.addMaintenance(request);
+
+                standard.setLastGenerateTime(new Date());
+                eamMaintenanceStandardService.updateById(standard);
+            }
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            log.error("涓変繚鐢熸垚鎵ц瀹氭椂浠诲姟澶辫触锛寋}", e.getMessage(), e);
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java
new file mode 100644
index 0000000..d522be5
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java
@@ -0,0 +1,39 @@
+package org.jeecg.modules.mdc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Lius
+ * @date 2024/12/18 14:19
+ */
+@Data
+@TableName("log_table")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "log_table瀵硅薄", description = "sql璁板綍琛�")
+public class LogTable implements Serializable {
+
+    private static final long serialVersionUID = 953864495681756550L;
+
+    /**
+     * 鎿嶄綔绫诲瀷锛圛NSERT / UPDATE / DELETE锛�
+     */
+    private String action;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+
+    /**
+     * sql璁板綍
+     */
+    private String sqlLog;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java
new file mode 100644
index 0000000..2dee55d
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java
@@ -0,0 +1,62 @@
+package org.jeecg.modules.mdc.job;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.mdc.service.ILogTableService;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Lius
+ * @date 2024/12/19 16:43
+ */
+@Slf4j
+public class ImportXmlToDataJob implements Job {
+
+    @Resource
+    private ISysQuartzLogService sysQuartzLogService;
+
+    @Resource
+    private IQuartzJobService quartzJobService;
+
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
+    @Resource
+    private ILogTableService logTableService;
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        log.info("瀹氭椂瀵煎叆sql鏁版嵁浠诲姟 ImportXmlToDataJob start!  鏃堕棿:" + DateUtils.now());
+        long startTime = System.currentTimeMillis();
+        try {
+            logTableService.importXmlToData();
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("瀹氭椂瀵煎叆sql鏁版嵁浠诲姟", quartzLog.getExceptionDetail());
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOEEJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOEEJob.java
new file mode 100644
index 0000000..57c88ca
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOEEJob.java
@@ -0,0 +1,83 @@
+package org.jeecg.modules.mdc.job;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.mdc.service.IMdcOeeInfoService;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.mdc.vo.MdcOeeComputeVo;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.quartz.*;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-04-24
+ * @Description: OEE
+ */
+@PersistJobDataAfterExecution
+@DisallowConcurrentExecution
+@Slf4j
+public class RunningOEEJob implements Job {
+
+    /**
+     * 鑻ュ弬鏁板彉閲忓悕淇敼 QuartzJobController涓篃闇�瀵瑰簲淇敼  鏃堕棿锛� yyyyMMdd 渚嬶細 20230414
+     */
+    private String parameter;
+
+    public void setParameter(String parameter) {
+        this.parameter = parameter;
+    }
+
+    @Resource
+    private IQuartzJobService quartzJobService;
+
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
+    @Resource
+    private ISysQuartzLogService sysQuartzLogService;
+
+    @Resource
+    private IMdcOeeInfoService mdcOeeInfoService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        quartzLog.setParams(this.parameter);
+        log.info("瀹氭椂璁$畻璁惧缁煎悎鏁堢巼OEE浠诲姟 RunningOEEJob start!  鏃堕棿:" + DateUtils.now(), this.parameter);
+        long startTime = System.currentTimeMillis();
+        try {
+            MdcOeeComputeVo mdcOeeComputeVo = new MdcOeeComputeVo();
+            String dateTime = LocalDate.now().plusDays(-1).toString();
+            if (StringUtils.isNotBlank(this.parameter)) {
+                dateTime = DateUtils.date2Str(DateUtils.str2Date(this.parameter, DateUtils.yyyyMMdd.get()), DateUtils.date_sdf.get());
+            }
+            mdcOeeComputeVo.setStartTime(dateTime);
+            mdcOeeComputeVo.setEndTime(dateTime);
+            mdcOeeInfoService.computeOee(mdcOeeComputeVo);
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("瀹氭椂璁$畻璁惧缁煎悎鏁堢巼OEE浠诲姟", quartzLog.getExceptionDetail());
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java
new file mode 100644
index 0000000..98cc17f
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java
@@ -0,0 +1,11 @@
+package org.jeecg.modules.mdc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.mdc.entity.LogTable;
+
+/**
+ * @author Lius
+ * @date 2024/12/18 14:24
+ */
+public interface LogTableMapper extends BaseMapper<LogTable>  {
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml
new file mode 100644
index 0000000..3d79dd7
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.mdc.mapper.LogTableMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java
new file mode 100644
index 0000000..9e9f887
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.mdc.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.mdc.entity.LogTable;
+
+/**
+ * @author Lius
+ * @date 2024/12/18 14:29
+ */
+public interface ILogTableService extends IService<LogTable> {
+
+    /**
+     * 瀵煎叆鍚屾鏁版嵁sql鎵ц鍒版暟鎹簱
+     */
+    void importXmlToData();
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java
new file mode 100644
index 0000000..8f5d25e
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java
@@ -0,0 +1,80 @@
+package org.jeecg.modules.mdc.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.file.FileReader;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.mdc.entity.LogTable;
+import org.jeecg.modules.mdc.mapper.LogTableMapper;
+import org.jeecg.modules.mdc.service.ILogTableService;
+import org.jeecg.modules.mdc.util.SqlExecutor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Lius
+ * @date 2024/12/18 14:29
+ */
+@Service
+@Slf4j
+public class LogTableServiceImpl extends ServiceImpl<LogTableMapper, LogTable> implements ILogTableService {
+
+    @Value("${fileService.localFilePath}")
+    private String localFilePath;
+
+    @Value("${fileService.newFilePath}")
+    private String newFilePath;
+
+    @Value("${fileService.failedLocFilePath}")
+    private String failedLocFilePath;
+
+    @Resource
+    private SqlExecutor sqlExecutor;
+
+    /**
+     * 瀵煎叆鍚屾鏁版嵁sql鎵ц鍒版暟鎹簱
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void importXmlToData() {
+        File[] files = FileUtil.ls(localFilePath);
+        List<String> failedSqlList = new ArrayList<>(); // 鐢ㄤ簬瀛樺偍鎵ц澶辫触鐨� SQL
+        for (File file : files) {
+            if (file.isFile()) {
+                String loFilePath = localFilePath + file.getName();
+                FileReader fileReader = new FileReader(loFilePath);
+                List<String> sqlList = fileReader.readLines();
+                log.info("鎴愬姛璇诲彇鍒皗}鏉ql,鎵ц鎿嶄綔", sqlList.size());
+                for (String sql : sqlList) {
+                    try {
+                        sqlExecutor.execute(sql);
+                    } catch (Exception e) {
+                        failedSqlList.add(sql);
+                    }
+                }
+                if (!failedSqlList.isEmpty()) {
+                    try {
+                        FileUtil.appendLines(failedSqlList, failedLocFilePath, "UTF-8");
+                    } catch (Exception e) {
+                        throw new JeecgBootException("鏁版嵁鍐欏叆鏂囦欢澶辫触锛�");
+                    }
+                }
+
+                if (Integer.parseInt(file.getName().substring(file.getName().length() - 10, file.getName().length() - 4)) == 1) {
+                    // 鍒犻櫎鍘嗗彶鏂囦欢
+                    FileUtil.clean(newFilePath);
+                }
+
+                // 澶囦唤
+                FileUtil.move(new File(loFilePath), new File(newFilePath + file.getName()), true);
+            }
+        }
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
index dd23560..aed617f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
@@ -165,8 +165,8 @@
     @Transactional(rollbackFor = Exception.class)
     public void computeOee(MdcOeeComputeVo mdcOeeComputeVo) {
         List<MdcOeeInfo> result = new ArrayList<>();
-        String startDate = mdcOeeComputeVo.getStartDate();
-        String endDate = mdcOeeComputeVo.getEndDate();
+        String startDate = mdcOeeComputeVo.getStartTime();
+        String endDate = mdcOeeComputeVo.getEndTime();
         List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate(startDate), DateUtils.getShortDate(endDate));
         if (!dateList.isEmpty()) {
             //鑾峰彇璁惧鍒楄〃
@@ -204,12 +204,10 @@
                     mdcOeeInfo.setTimeActuationRate(timeActuationRate);
                     // 鏈夋晥杩愯鏃堕棿 --- 鎸夐渶姹傜淮鎶ら浂浠跺姞宸ユ�绘椂闀縷|绯荤粺涓昏酱璐熻浇鏃堕棿
                     Integer effectiveRunLong = 0;
-                    Integer totalProcessLong = mdcPartProcessInfoService.selectTotalProcessLong(equipmentId, validDate);
-                    if (totalProcessLong == 0) {
-                        //鏌ヨ璁惧杩愯鏃堕棿
-                        effectiveRunLong = mdcEquipmentStatisticalInfoService.selectProcessLong(equipmentId, validDate.replace("-", ""));
-                    } else {
-                        effectiveRunLong = totalProcessLong;
+//                    Integer totalProcessLong = mdcPartProcessInfoService.selectTotalProcessLong(equipmentId, validDate);
+                    effectiveRunLong = mdcEquipmentStatisticalInfoService.selectProcessLong(equipmentId, validDate.replace("-", ""));
+                    if (effectiveRunLong == null) {
+                        effectiveRunLong = 0;
                     }
                     mdcOeeInfo.setEffectiveRunLong(effectiveRunLong);
                     // 鎬ц兘寮�鍔ㄧ巼 --- 鏈夋晥杩愯鏃堕棿/寮�鍔ㄦ椂闂�
@@ -217,7 +215,7 @@
                     if (effectiveRunLong != 0 && actuateLong != 0) {
                         performanceRate = new BigDecimal(effectiveRunLong).divide(new BigDecimal(actuateLong), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP);
                     }
-                    mdcOeeInfo.setPerformanceRate(performanceRate);
+                    mdcOeeInfo.setPerformanceRate(performanceRate.compareTo(new BigDecimal(100)) > 0 ? new BigDecimal(100) : performanceRate);
                     // 鍔犲伐闆朵欢鏁伴噺 --- 鎸夌淮鎶ゆ暟鎹粺璁″綋澶�
                     Integer processCount = mdcPartProcessInfoService.selectTotalProcessCount(equipmentId, validDate);
                     mdcOeeInfo.setProcessCount(processCount);
@@ -225,7 +223,7 @@
                     Integer passCount = mdcPartProcessInfoService.selectTotalPassCount(equipmentId, validDate);
                     mdcOeeInfo.setPassCount(passCount);
                     // 鍚堟牸鐜� --- 鍚堟牸鏁�/鍔犲伐鏁�
-                    BigDecimal passRate = BigDecimal.ZERO;
+                    BigDecimal passRate = new BigDecimal("100");
                     if (processCount != 0 && passCount != 0) {
                         passRate = new BigDecimal(passCount).divide(new BigDecimal(processCount), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP);
                     }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java
new file mode 100644
index 0000000..646dc55
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java
@@ -0,0 +1,29 @@
+package org.jeecg.modules.mdc.util;
+
+import org.apache.ibatis.jdbc.SqlRunner;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * @author Lius
+ * @date 2025/1/3 13:26
+ */
+@Component
+public class SqlExecutor {
+
+    @Resource
+    private SqlSessionFactory sqlSessionFactory;
+
+    public void execute(String sql) {
+        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)) {
+            SqlRunner runner = new SqlRunner(sqlSession.getConnection());
+            runner.run(sql);
+        } catch (Exception e) {
+//            e.printStackTrace();
+            throw new RuntimeException("Error executing SQL: " + sql, e);
+        }
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcOeeComputeVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcOeeComputeVo.java
index b23a4c9..bc8f5f4 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcOeeComputeVo.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcOeeComputeVo.java
@@ -8,6 +8,6 @@
  */
 @Data
 public class MdcOeeComputeVo {
-    private String startDate;
-    private String endDate;
+    private String startTime;
+    private String endTime;
 }
diff --git a/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml b/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml
index 682766c..127a534 100644
--- a/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml
+++ b/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml
@@ -321,3 +321,8 @@
     interval: 10000  # 鐩戞帶闂撮殧(ms)
 security:
   encryption-key: 1234567890abcdef # 鍔犺В瀵嗙閽�
+#mdc鏂囦欢璺緞閰嶇疆
+fileService:
+  localFilePath: D:/data/sql/     #鏈湴鏂囦欢璺緞
+  newFilePath: D:/data/bak/     #澶囦唤鏂囦欢璺緞
+  failedLocFilePath: D:/data/failed/failed.sql    #澶辫触鏂囦欢璺緞

--
Gitblit v1.9.3