From 35a6e242f935f942d70146e293213c7182e505ae Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期一, 07 七月 2025 21:11:53 +0800
Subject: [PATCH] 保养规范点检导入  设备二保 三保导入

---
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/ImportException.java                       |    7 
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/EamMaintenanceStandardDetailCategory.java |    8 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java               |    4 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java          |  472 +++++++--------------------
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java       |  523 ++++++++++++++++++++++++++++++
 5 files changed, 666 insertions(+), 348 deletions(-)

diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/EamMaintenanceStandardDetailCategory.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/EamMaintenanceStandardDetailCategory.java
new file mode 100644
index 0000000..8d58bff
--- /dev/null
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/EamMaintenanceStandardDetailCategory.java
@@ -0,0 +1,8 @@
+package org.jeecg.modules.eam.constant;
+
+public enum EamMaintenanceStandardDetailCategory {
+    DAY_INSPECTION,  //鏃ョ偣妫�
+    WEEK_INSPECTION, //鍛ㄧ偣妫�
+    OPERATOR_MAINTENANCE, //鎿嶄綔宸�
+    REPAIRER_MAINTENANCE //缁翠慨宸�
+}
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/ImportException.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/ImportException.java
new file mode 100644
index 0000000..a8aa74b
--- /dev/null
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/ImportException.java
@@ -0,0 +1,7 @@
+package org.jeecg.modules.eam.request;
+
+public class ImportException extends RuntimeException {
+    public ImportException(String message) {
+        super(message);
+    }
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
index e8d2bc8..cfc3b53 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -17,11 +17,6 @@
 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.SecondMaintenanceStandardImport;
-import org.jeecg.modules.eam.dto.ThirdMaintenanceStandardImport;
-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;
@@ -63,23 +58,25 @@
 
     /**
      * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹�
+     *
      * @param id
      * @return
      */
     @ApiOperation(value = "淇濆吇鏍囧噯-娴佺▼鍚姩淇濆瓨瀵瑰簲鐨勬暟鎹�", notes = "淇濆吇鏍囧噯-娴佺▼鍚姩淇濆瓨瀵瑰簲鐨勬暟鎹�")
     @GetMapping(value = "/saveEamMaintenanceStandardProcess")
-    public Result<?> saveEamMaintenanceStandardProcess(String id){
+    public Result<?> saveEamMaintenanceStandardProcess(String id) {
         return eamMaintenanceStandardService.saveEamMaintenanceStandardProcess(id);
     }
 
     /**
      * 娴佺▼瀹℃牳
+     *
      * @param eamMaintenanceStandardVo
      * @return
      */
     @ApiOperation(value = "淇濆吇鏍囧噯-娴佺▼瀹℃牳", notes = "淇濆吇鏍囧噯-娴佺▼瀹℃牳")
     @PostMapping(value = "/audit")
-    public Result<?> auditEamMaintenanceStandard(@RequestBody EamMaintenanceStandardVo eamMaintenanceStandardVo){
+    public Result<?> auditEamMaintenanceStandard(@RequestBody EamMaintenanceStandardVo eamMaintenanceStandardVo) {
         return eamMaintenanceStandardService.auditEamMaintenanceStandard(eamMaintenanceStandardVo);
     }
 
@@ -179,7 +176,8 @@
 
     /**
      * 鏌ヨ鏍囧噯鍒楄〃-鍓嶇灞曠ず璇ョ敤鎴锋嫢鏈夌殑鏍囧噯
-     * @param keyword 璁惧缂栧彿
+     *
+     * @param keyword             璁惧缂栧彿
      * @param maintenanceCategory 淇濆吇绫诲瀷
      * @return
      */
@@ -275,358 +273,150 @@
         return super.exportXls(request, eamMaintenanceStandard, EamMaintenanceStandard.class, "淇濆吇鏍囧噯");
     }
 
-    @PostMapping("/import")
-    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();
-            eamMaintenanceStandardService.importPointInspectionExcel(file);
-        }
-        return Result.ok("瀵煎叆鎴愬姛");
-    }
-
     /**
-     * 閫氳繃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 = "/weekMaintenanceImportExcel", method = RequestMethod.POST)
-    public Result<?> weekMaintenanceImportExcel(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 request
-     * @param response
-     * @return
-     */
-    @RequestMapping(value = "/secondMaintenanceImportExcel", method = RequestMethod.POST)
-    public Result<?> secondMaintenanceImportExcel(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.SECOND_MAINTENANCE.name());
-                standardRequest.setEquipmentId(equipment.getId());
-                //璇诲彇淇濆吇鏄庣粏鍐呭
-                List<SecondMaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), SecondMaintenanceStandardImport.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 = "/thirdMaintenanceImportExcel", method = RequestMethod.POST)
-    public Result<?> thirdMaintenanceImportExcel(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.THIRD_MAINTENANCE.name());
-                standardRequest.setEquipmentId(equipment.getId());
-                //璇诲彇淇濆吇鏄庣粏鍐呭
-                List<ThirdMaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), ThirdMaintenanceStandardImport.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;
+     * 鐐规瀵煎叆
+    */
+    @PostMapping("/importPointInspection")
+    public Result<?> importPointInspectionExcel(HttpServletRequest request) {
         try {
-            book = WorkbookFactory.create(file.getInputStream());
-            if (book instanceof XSSFWorkbook) {
-                isXSSFWorkbook = true;
+            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+            Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+
+            Map<String, String> results = new LinkedHashMap<>();
+            int successCount = 0;
+            int failureCount = 0;
+
+            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+                MultipartFile file = entity.getValue();
+                String fileName = file.getOriginalFilename();
+
+                Result<?> importResult = eamMaintenanceStandardService.importPointInspectionExcel(file);
+
+                if (importResult.isSuccess()) {
+                    results.put(fileName, "鎴愬姛: " + importResult.getMessage());
+                    successCount++;
+                } else {
+                    results.put(fileName, "澶辫触: " + importResult.getMessage());
+                    failureCount++;
+                }
             }
 
-            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());
+            // 鏋勫缓鍝嶅簲
+            Map<String, Object> response = new HashMap<>();
+            response.put("results", results);
+            response.put("totalFiles", fileMap.size());
+            response.put("successCount", successCount);
+            response.put("failureCount", failureCount);
 
-            //绗簩琛岃鍙�
-            row = sheet.getRow(1);
-            //淇濆吇鍛ㄦ湡
-            Cell period = row.getCell(11);
-            if (CellType.NUMERIC.equals(period.getCellType())) {
-                request.setMaintenancePeriod((int) period.getNumericCellValue());
+            if (failureCount == 0) {
+                return Result.ok("鎵�鏈夌偣妫�鏂囦欢瀵煎叆鎴愬姛"+response);
+            } else if (successCount == 0) {
+                return Result.error("鎵�鏈夌偣妫�鏂囦欢瀵煎叆澶辫触", response);
             } else {
-                //榛樿鐐规鍛ㄦ湡 1
-                request.setMaintenancePeriod(1);
+                return Result.error("閮ㄥ垎鐐规鏂囦欢瀵煎叆澶辫触", response);
             }
-            //鏂囦欢缂栫爜
-            Cell fileCode = row.getCell(13);
-            request.setFileCode(fileCode.getStringCellValue());
+
         } catch (Exception e) {
-            log.error("璇诲彇Excel淇℃伅澶辫触锛歿}", e.getMessage(), e);
+            log.error("鐐规瀵煎叆澶勭悊寮傚父", e);
+            return Result.error("鐐规瀵煎叆澶勭悊澶辫触: " + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 浜屼繚瀵煎叆
+     */
+    @PostMapping("/importSecondMaintenanceStandard")
+    public Result<?> importSecondMaintenanceStandard(HttpServletRequest request) {
+        try {
+            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+            Map<String, String> results = new LinkedHashMap<>();
+            Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+
+            // 缁熻瀵煎叆缁撴灉
+            int successCount = 0;
+            int failureCount = 0;
+
+            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+                MultipartFile file = entity.getValue();
+                String fileName = file.getOriginalFilename();
+
+                Result<?> importResult = eamMaintenanceStandardService.importMaintenanceStandard(file, "SECOND");
+
+                if (importResult.isSuccess()) {
+                    results.put(fileName, "鎴愬姛: " + importResult.getMessage());
+                    successCount++;
+                } else {
+                    results.put(fileName, "澶辫触: " + importResult.getMessage());
+                    failureCount++;
+                }
+            }
+
+            // 鏋勫缓鏈�缁堝搷搴�
+            Map<String, Object> response = new HashMap<>();
+            response.put("results", results);
+            response.put("totalFiles", fileMap.size());
+            response.put("successCount", successCount);
+            response.put("failureCount", failureCount);
+
+            if (failureCount > 0) {
+                return Result.error("閮ㄥ垎鏂囦欢瀵煎叆澶辫触", response);
+            }
+
+            return Result.ok("鎵�鏈夋枃浠跺鍏ユ垚鍔�"+response);
+
+        } catch (Exception e) {
+            log.error("瀵煎叆澶勭悊寮傚父", e);
+            return Result.error("瀵煎叆澶勭悊澶辫触: " + e.getMessage());
         }
     }
 
     /**
-     * 璇诲彇Excel 绗竴琛岋紝 绗簩琛岀殑淇℃伅
-     * @param file
-     * @param request
+     * 涓変繚瀵煎叆
      */
-    public void readWeekExcel(MultipartFile file, EamMaintenanceStandardRequest request) {
-        Workbook book = null;
-        boolean isXSSFWorkbook = false;
+    @PostMapping("/importThirdMaintenanceStandard")
+    public Result<?> importThirdMaintenanceStandard(HttpServletRequest request) {
         try {
-            book = WorkbookFactory.create(file.getInputStream());
-            if (book instanceof XSSFWorkbook) {
-                isXSSFWorkbook = true;
+            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+            Map<String, String> results = new LinkedHashMap<>();
+            Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+
+            // 缁熻瀵煎叆缁撴灉
+            int successCount = 0;
+            int failureCount = 0;
+
+            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+                MultipartFile file = entity.getValue();
+                String fileName = file.getOriginalFilename();
+
+                Result<?> importResult = eamMaintenanceStandardService.importMaintenanceStandard(file, "THIRD");
+
+                if (importResult.isSuccess()) {
+                    results.put(fileName, "鎴愬姛: " + importResult.getMessage());
+                    successCount++;
+                } else {
+                    results.put(fileName, "澶辫触: " + importResult.getMessage());
+                    failureCount++;
+                }
             }
 
-            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());
+            // 鏋勫缓鏈�缁堝搷搴�
+            Map<String, Object> response = new HashMap<>();
+            response.put("results", results);
+            response.put("totalFiles", fileMap.size());
+            response.put("successCount", successCount);
+            response.put("failureCount", failureCount);
 
-            //绗簩琛岃鍙�
-            row = sheet.getRow(1);
-            //淇濆吇鍛ㄦ湡
-            Cell period = row.getCell(6);
-            if (CellType.NUMERIC.equals(period.getCellType())) {
-                request.setMaintenancePeriod((int) period.getNumericCellValue());
-            } else {
-                request.setMaintenancePeriod(null);
+            if (failureCount > 0) {
+                return Result.error("閮ㄥ垎鏂囦欢瀵煎叆澶辫触", response);
             }
-            //鏂囦欢缂栫爜
-            Cell fileCode = row.getCell(8);
-            request.setFileCode(fileCode.getStringCellValue());
+
+            return Result.ok("鎵�鏈夋枃浠跺鍏ユ垚鍔�"+response);
+
         } catch (Exception e) {
-            log.error("璇诲彇Excel淇℃伅澶辫触锛歿}", e.getMessage(), e);
+            log.error("瀵煎叆澶勭悊寮傚父", e);
+            return Result.error("瀵煎叆澶勭悊澶辫触: " + e.getMessage());
         }
     }
+
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
index 61bef31..b320af0 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
@@ -9,6 +9,7 @@
 import org.jeecg.modules.eam.vo.EamMaintenanceStandardVo;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -87,4 +88,7 @@
      * 鐐规琛ㄥ鍏ュ叆鍙�
      */
     public Result<?> importPointInspectionExcel(MultipartFile file);
+
+
+    Result<?> importMaintenanceStandard(MultipartFile file, String type);
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
index 596714b..76b2db9 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -10,8 +10,13 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jeecg.weibo.exception.BusinessException;
+import liquibase.pro.packaged.R;
+import liquibase.pro.packaged.S;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.*;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.engine.TaskService;
 import org.flowable.task.api.Task;
@@ -24,12 +29,16 @@
 import org.jeecg.modules.eam.base.service.IBaseFactoryService;
 import org.jeecg.modules.eam.base.service.IBaseFactoryUserService;
 import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.EamMaintenanceStandardDetailCategory;
 import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum;
 import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamEquipmentExtend;
 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.request.ImportException;
+import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
 import org.jeecg.modules.eam.service.IEamEquipmentService;
 import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
 import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
@@ -40,15 +49,18 @@
 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.cloud.commons.ConfigDataMissingEnvironmentPostProcessor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -87,6 +99,22 @@
     private ISysUserService sysUserService;
     @Autowired
     private IEamEquipmentService eamEquipmentService;
+    @Autowired
+    private IEamEquipmentExtendService eamEquipmentExtendService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+
+    // 甯搁噺瀹氫箟
+    private static final String REPAIR_TITLE = "缁翠慨浜哄憳淇濆吇鍐呭";
+    private static final String OPERATOR_TITLE = "鎿嶄綔浜哄憳淇濆吇鍐呭";
+    private static final Map<String, EamMaintenanceStandardDetailCategory> SECOND_CATEGORY_MAPPING = new HashMap<>();
+
+    // 鏋氫妇鏄犲皠鍒濆鍖�
+    static {
+        SECOND_CATEGORY_MAPPING.put(REPAIR_TITLE, EamMaintenanceStandardDetailCategory.REPAIRER_MAINTENANCE);
+        SECOND_CATEGORY_MAPPING.put(OPERATOR_TITLE, EamMaintenanceStandardDetailCategory.OPERATOR_MAINTENANCE);
+    }
+
     @Override
     public IPage<EamMaintenanceStandard> queryPageList(Page<EamMaintenanceStandard> page, EamMaintenanceStandard eamMaintenanceStandard) {
         QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>();
@@ -520,7 +548,7 @@
     /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/
 
 
-    /*瀵煎叆鏂囦欢--------------------------寮�濮�*/
+    /*瀵煎叆鐐规鏂囦欢Excel--------------------------寮�濮�*/
     /**
         * 鐐规琛ㄥ鍏ュ叆鍙�
     */
@@ -536,7 +564,7 @@
             // 1. 鎻愬彇璁惧淇℃伅
             EamMaintenanceStandard eamMaintenanceStandard = extractDeviceInfo(sheet);
             if (eamMaintenanceStandard == null) {
-                throw new BusinessException("璁惧淇℃伅鎻愬彇澶辫触");
+                return Result.error("璁惧淇℃伅鎻愬彇澶辫触");
             }
 
             eamMaintenanceStandard.setStandardName(name);
@@ -544,9 +572,15 @@
 
             // 2. 鎻愬彇姣忔棩鐐规椤圭洰
             List<EamMaintenanceStandardDetail> dailyDetails = extractDailyItems(sheet, eamMaintenanceStandard);
+            if(dailyDetails.isEmpty()){
+                return Result.error("鏈壘鍒版瘡鏃ョ偣妫�椤圭洰");
+            }
 
             // 3. 鎻愬彇鍛ㄤ繚鍏婚」鐩�
             List<EamMaintenanceStandardDetail> weeklyDetails = extractWeeklyItems(sheet, eamMaintenanceStandard);
+            if(weeklyDetails.isEmpty()){
+                return Result.error("鏈壘鍒板懆淇濆吇椤圭洰");
+            }
 
             // 鍚堝苟骞朵繚瀛樻墍鏈夐」鐩�
             List<EamMaintenanceStandardDetail> allDetails = new ArrayList<>();
@@ -618,7 +652,7 @@
         EamMaintenanceStandard standard = new EamMaintenanceStandard();
         standard.setEquipmentName(extractField(headerText, "璁惧鍚嶇О[:锛歖\\s*(\\S+)"));
         standard.setEquipmentId(extractField(headerText, "璁惧鍨嬪彿[:锛歖\\s*(\\S+)"));
-        standard.setStandardCode(extractField(headerText, "缁熶竴缂栧彿[:锛歖\\s*(\\S+)"));
+
 
         // 鏃ユ湡澶勭悊
         String dateStr = extractField(headerText, "鏃ユ湡[:锛歖\\s*(\\S+)");
@@ -633,11 +667,31 @@
             }
         }
 
+        // 鍏宠仈璁惧ID
+        if (isNotBlank(standard.getEquipmentCode()) &&
+                isNotBlank(standard.getEquipmentName())) {
+
+            List<EamEquipment> equipments = eamEquipmentService.list(
+                    new QueryWrapper<EamEquipment>()
+                            .eq("equipment_code", standard.getEquipmentCode())
+                            .eq("equipment_name", standard.getEquipmentName())
+            );
+
+            if (!equipments.isEmpty()) {
+                standard.setEquipmentId(equipments.get(0).getId());
+            }else {
+                return null;
+            }
+        }
+
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE);
+        standard.setStandardCode(codeSeq);
         standard.setMaintenanceCategory("POINT_INSPECTION");
         standard.setPeriodUnit("澶�");
         standard.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
         standard.setStandardVersion("v" + CommonConstant.OPERATE_TYPE_1);
         standard.setDelFlag(0);
+        standard.setMaintenancePeriod(1);
 
         return standard;
     }
@@ -800,7 +854,7 @@
     }
 
     /**
-        * 璇嗗埆鏂拌〃澶村紑濮�
+     * 璇嗗埆鏂拌〃澶村紑濮�
     */
     private boolean isNewHeaderStart(Row row) {
         for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
@@ -837,7 +891,6 @@
     */
     private String extractField(String text, String regex) {
         if (StringUtils.isBlank(text)) return "";
-
         Pattern pattern = Pattern.compile(regex);
         Matcher matcher = pattern.matcher(text);
         return matcher.find() ? matcher.group(1) : "";
@@ -848,7 +901,6 @@
     */
     private String getCellStringValue(Cell cell) {
         if (cell == null) return "";
-
         switch (cell.getCellType()) {
             case STRING:
                 return cell.getStringCellValue().trim();
@@ -886,5 +938,462 @@
             return "";
         }
     }
-    /*瀵煎叆鏂囦欢--------------------------缁撴潫*/
+    /*瀵煎叆鐐规鏂囦欢Excel--------------------------缁撴潫*/
+
+    /*瀵煎叆浜屼繚涓変繚鏂囦欢Excel--------------------------寮�濮�*/
+    /**
+     * 缁熶竴淇濆吇瑙勮寖瀵煎叆鍏ュ彛
+     * @param file 涓婁紶鏂囦欢
+     * @param type 淇濆吇绫诲瀷 (SECOND/THIRD)
+     * @return 瀵煎叆缁撴灉锛堝寘鍚垚鍔�/澶辫触淇℃伅锛�
+     */
+    @Override
+    @Transactional
+    public Result<?> importMaintenanceStandard(MultipartFile file, String type) {
+        String fileName = file.getOriginalFilename();
+
+        try (XWPFDocument doc = new XWPFDocument(file.getInputStream())) {
+            // 鍩虹楠岃瘉
+            if (doc.getTables().isEmpty()) {
+                return Result.error(fileName + ": 鏂囨。涓湭鎵惧埌琛ㄦ牸");
+            }
+
+            XWPFTable table = doc.getTables().get(0);
+
+            // 鏂囨。绫诲瀷鏍¢獙 - 闃叉浜屼繚浼犲叆涓変繚鎴栧弽涔�
+            if (isWrongDocumentType(table, type)) {
+                return Result.error(fileName + ": 鏂囨。绫诲瀷涓嶅尮閰� - " +
+                        ("SECOND".equals(type) ? "璇峰鍏ヤ簩绾т繚鍏绘枃妗�" : "璇峰鍏ヤ笁绾т繚鍏绘枃妗�"));
+            }
+
+            EamMaintenanceStandard standard = extractDeviceInfo(table);
+            if (standard == null) {
+                return Result.error(fileName + ": 璁惧淇℃伅鎻愬彇澶辫触");
+            }
+
+            // 閰嶇疆绫诲瀷鐩稿叧鍙傛暟
+            configureStandard(standard, type, file);
+            eamMaintenanceStandardMapper.insert(standard);
+            String standardId = standard.getId();
+
+            // 鎻愬彇淇濆吇椤圭洰
+            List<EamMaintenanceStandardDetail> items;
+            if ("SECOND".equals(type)) {
+                items = extractSecondMaintenanceItems(table, standardId);
+            } else if ("THIRD".equals(type)) {
+                items = extractThirdMaintenanceItems(table, standardId);
+            } else {
+                return Result.error(fileName + ": 涓嶆敮鎸佺殑淇濆吇绫诲瀷: " + type);
+            }
+
+            // 椤圭洰楠岃瘉
+            if (items.isEmpty()) {
+                return Result.error(fileName + ": 鏈彁鍙栧埌浠讳綍淇濆吇椤圭洰");
+            }
+
+            // 淇濆瓨椤圭洰
+            eamMaintenanceStandardDetailService.saveBatch(items);
+
+            return Result.ok(fileName + ": 瀵煎叆鎴愬姛, 椤圭洰鏁�: " + items.size());
+
+        } catch (ImportException e) {
+            return Result.error(e.getMessage());
+        } catch (Exception e) {
+            return Result.error(fileName + ": 绯荤粺閿欒 - " + e.getClass().getSimpleName());
+        }
+    }
+
+    /**
+     * 鏂囨。绫诲瀷鏍¢獙 - 闃叉浜屼繚浼犲叆涓変繚鎴栧弽涔�
+    */
+    private boolean isWrongDocumentType(XWPFTable table, String requestedType) {
+        boolean hasRepairTitle = false;
+        boolean hasOperatorTitle = false;
+        boolean hasMaintenancePart = false;
+
+        // 鍙鏌ュ墠10琛岋紙閫氬父鏍囬鍦ㄥ墠鍑犺锛�
+        int maxRows = Math.min(table.getNumberOfRows(), 10);
+
+        for (int i = 0; i < maxRows; i++) {
+            XWPFTableRow row = table.getRow(i);
+            if (row == null) continue;
+
+            // 妫�鏌ユ墍鏈夊崟鍏冩牸鍐呭
+            for (int j = 0; j < row.getTableCells().size(); j++) {
+                String cellText = getCellText(row.getCell(j));
+
+                // 妫�鏌ヤ簩绾т繚鍏荤壒寰�
+                if (cellText.contains(REPAIR_TITLE)) {
+                    hasRepairTitle = true;
+                }
+                if (cellText.contains(OPERATOR_TITLE)) {
+                    hasOperatorTitle = true;
+                }
+
+                // 妫�鏌ヤ笁绾т繚鍏荤壒寰�
+                if (cellText.contains("淇濆吇閮ㄤ綅")) {
+                    hasMaintenancePart = true;
+                }
+            }
+        }
+
+        // 閫昏緫鍒ゆ柇
+        if ("SECOND".equals(requestedType)) {
+            // 濡傛灉璇锋眰瀵煎叆浜岀骇淇濆吇锛屼絾鏂囨。涓湁涓夌骇淇濆吇鐗瑰緛
+            return !(hasRepairTitle || hasOperatorTitle) || hasMaintenancePart;
+        } else if ("THIRD".equals(requestedType)) {
+            // 濡傛灉璇锋眰瀵煎叆涓夌骇淇濆吇锛屼絾鏂囨。涓湁浜岀骇淇濆吇鐗瑰緛
+            return !hasMaintenancePart || (hasRepairTitle || hasOperatorTitle);
+        }
+
+        return false;
+    }
+
+    /**
+     * 鎻愬彇璁惧鍩烘湰淇℃伅
+     */
+    private EamMaintenanceStandard extractDeviceInfo(XWPFTable table) {
+        if (table.getNumberOfRows() < 2) return null;
+
+        // 鎻愬彇鍓嶄袱琛屾暟鎹�
+        Map<String, String> row1Data = extractRowData(table.getRow(0));
+        Map<String, String> row2Data = extractRowData(table.getRow(1));
+
+        // 鍒涘缓璁惧鏍囧噯瀵硅薄
+        EamMaintenanceStandard standard = new EamMaintenanceStandard();
+        standard.setEquipmentText(row1Data.get("璁惧绫诲埆"));
+        standard.setEquipmentCode(row1Data.get("璁惧缂栧彿"));
+        standard.setEquipmentName(row2Data.get("璁惧鍚嶇О"));
+        standard.setEquipmentModel(row2Data.get("璁惧鍨嬪彿"));
+
+        // 鍏宠仈璁惧ID
+        if (isNotBlank(standard.getEquipmentCode()) &&
+                isNotBlank(standard.getEquipmentName())) {
+
+            List<EamEquipment> equipments = eamEquipmentService.list(
+                    new QueryWrapper<EamEquipment>()
+                            .eq("equipment_code", standard.getEquipmentCode())
+                            .eq("equipment_name", standard.getEquipmentName())
+            );
+
+            if (!equipments.isEmpty()) {
+                standard.setEquipmentId(equipments.get(0).getId());
+            }else {
+                return null;
+            }
+        }
+
+        return standard;
+    }
+
+    // 绠�鏄撶増瀛楃涓查潪绌哄垽鏂�
+    private boolean isNotBlank(String str) {
+        return str != null && !str.trim().isEmpty();
+    }
+
+    /**
+     * 琛ㄦ牸琛屾暟鎹В鏋�
+     */
+    private Map<String, String> extractRowData(XWPFTableRow row) {
+        Map<String, String> data = new HashMap<>();
+        int cellCount = row.getTableCells().size();
+
+        try {
+            // 閿�煎妯″紡 (鏍囩|鍊紎鏍囩|鍊�)
+            if (cellCount >= 4 && cellCount % 2 == 0) {
+                for (int i = 0; i < cellCount; i += 2) {
+                    String key = cleanKey(getCellText(row.getCell(i)));
+                    String value = getCellText(row.getCell(i + 1));
+                    if (!key.isEmpty()) data.put(key, value);
+                }
+            }
+            // 杩炵画鍗曞厓鏍兼ā寮�
+            else {
+                for (int i = 0; i < cellCount; i++) {
+                    String text = getCellText(row.getCell(i));
+                    int colonIndex = text.indexOf('锛�');
+                    if (colonIndex > 0) {
+                        String key = cleanKey(text.substring(0, colonIndex));
+                        String value = text.substring(colonIndex + 1);
+                        data.put(key, value);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("琛屾暟鎹В鏋愬紓甯�", e);
+        }
+        return data;
+    }
+
+    /**
+     * 閿悕鏍囧噯鍖栧鐞�
+     */
+    private String cleanKey(String key) {
+        if (key == null) return "";
+        // 绉婚櫎绌烘牸鍜屼腑鏂囧啋鍙�
+        return key.replaceAll("\\s", "").replace("锛�", "");
+    }
+
+    /**
+     * 閰嶇疆淇濆吇鏍囧噯鍙傛暟
+     */
+    private void configureStandard(EamMaintenanceStandard standard, String type, MultipartFile file) {
+        // 鍩虹鍙傛暟
+        String filename = file.getOriginalFilename();
+        if (filename != null && filename.contains(".")) {
+            filename = filename.substring(0, filename.lastIndexOf('.'));
+        }
+
+        standard.setStandardName(filename)
+                .setInitialDate(new Date())
+                .setStandardStatus(MaintenanceStandardStatusEnum.START.name())
+                .setStandardVersion("v1.0")
+                .setDelFlag(0)
+                .setStandardCode(businessCodeRuleService.generateBusinessCodeSeq(
+                        BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE
+                ));
+
+        // 绫诲瀷鐗瑰畾鍙傛暟
+        if ("SECOND".equals(type)) {
+            standard.setMaintenanceCategory("SECOND_MAINTENANCE")
+                    .setMaintenancePeriod(6)
+                    .setPeriodUnit("鏈�");
+        } else {
+            standard.setMaintenanceCategory("THIRD_MAINTENANCE")
+                    .setPeriodUnit("骞�");
+
+            // 鑾峰彇涓夌骇淇濆吇鍛ㄦ湡
+            if (standard.getEquipmentId() != null) {
+                EamEquipmentExtend extend = eamEquipmentExtendService.getById(standard.getEquipmentId());
+                if (extend != null) {
+                    standard.setMaintenancePeriod(extend.getThirdMaintenancePeriod());
+                }
+            }
+        }
+    }
+
+    /**
+     * 鎻愬彇浜岀骇淇濆吇椤圭洰
+     */
+    private List<EamMaintenanceStandardDetail> extractSecondMaintenanceItems(
+            XWPFTable table, String standardId) {
+
+        List<EamMaintenanceStandardDetail> items = new ArrayList<>();
+        EamMaintenanceStandardDetailCategory currentCategory = null;
+
+        for (int i = 0; i < table.getNumberOfRows(); i++) {
+            XWPFTableRow row = table.getRow(i);
+            if (row == null) continue;
+
+            // 妫�鏌ユ槸鍚︽槸鏍囬琛岋紙缁翠慨浜哄憳淇濆吇鍐呭鎴栨搷浣滀汉鍛樹繚鍏诲唴瀹癸級
+            String firstCell = getCellText(row.getCell(0));
+            if (firstCell != null) {
+                for (String title : SECOND_CATEGORY_MAPPING.keySet()) {
+                    if (firstCell.contains(title)) {
+                        currentCategory = SECOND_CATEGORY_MAPPING.get(title);
+
+                        // 妫�鏌ョ浜屽垪鍜岀涓夊垪鏄惁鏄�"搴忓彿"鍜�"淇濆吇鍐呭"
+                        if (row.getTableCells().size() > 2) {
+                            String secondCell = getCellText(row.getCell(1));
+                            String thirdCell = getCellText(row.getCell(2));
+
+                            // 鏄庣‘璺宠繃鏍囬琛�
+                            if ("搴忓彿".equals(secondCell) && "淇濆吇鍐呭".equals(thirdCell)) {
+                                continue; // 璺宠繃杩欎竴琛�
+                            }
+                        }
+
+                        // 灏濊瘯鎻愬彇鏍囬琛屼腑鐨勯」鐩紙濡傛灉瀛樺湪锛�
+                        if (row.getTableCells().size() > 2) {
+                            String content = getCellText(row.getCell(2));
+                            if (content != null && !content.trim().isEmpty() &&
+                                    !"淇濆吇鍐呭".equals(content.trim())) { // 杩囨护鏃犳晥鍐呭
+                                items.add(createItem(currentCategory, content.trim(), standardId));
+                            }
+                        }
+                        continue;
+                    }
+                }
+            }
+
+            // 澶勭悊鏅�氶」鐩
+            if (currentCategory != null && isValidItemRow(row)) {
+                // 鑾峰彇鍐呭
+                String content = row.getTableCells().size() > 2 ?
+                        getCellText(row.getCell(2)) : "";
+
+                // 鎺掗櫎鏍囬鍐呭
+                if ("淇濆吇鍐呭".equals(content) ||
+                        "搴忓彿".equals(content) ||
+                        content.contains("缁翠慨浜哄憳淇濆吇鍐呭") ||
+                        content.contains("鎿嶄綔浜哄憳淇濆吇鍐呭")) {
+                    continue;
+                }
+
+                EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail();
+                item.setItemCategory(String.valueOf(currentCategory));
+                item.setStandardId(standardId);
+                item.setItemName(cleanContent(content));
+
+                // 澶勭悊搴忓彿锛堢浜屽垪锛�
+                if (row.getTableCells().size() > 1) {
+                    String seqText = getCellText(row.getCell(1));
+                    try {
+                        if (seqText != null && !seqText.trim().isEmpty()) {
+                            item.setItemCode(Integer.parseInt(seqText.trim()));
+                        }
+                    } catch (NumberFormatException e) {
+                        // 蹇界暐搴忓彿瑙f瀽閿欒
+                    }
+                }
+
+                items.add(item);
+            }
+        }
+        return items;
+    }
+
+    /**
+     * 鍒涘缓淇濆吇椤圭洰
+     */
+    private EamMaintenanceStandardDetail createItem(
+            EamMaintenanceStandardDetailCategory category,
+            String content,
+            String standardId) {
+
+        EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail();
+        item.setItemCategory(category.name());
+        item.setStandardId(standardId);
+        item.setItemName(cleanContent(content));
+        return item;
+    }
+
+    /**
+     * 鎻愬彇涓夌骇淇濆吇椤圭洰锛堟棤绫诲瀷锛�
+     */
+    private List<EamMaintenanceStandardDetail> extractThirdMaintenanceItems(
+            XWPFTable table, String standardId) {
+
+        List<EamMaintenanceStandardDetail> items = new ArrayList<>();
+        String currentPart = "";
+        int itemCount = 1;
+
+        // 浠庣涓夎寮�濮嬶紙璺宠繃琛ㄥご鍜岃澶囦俊鎭級
+        for (int i = 2; i < table.getNumberOfRows(); i++) {
+            XWPFTableRow row = table.getRow(i);
+            if (row == null || isRowEmpty(row)) continue;
+
+            // 璺宠繃"淇濆吇閮ㄤ綅"鏍囬琛�
+            String firstCell = getCellText(row.getCell(0));
+            if ("淇濆吇閮ㄤ綅".equals(firstCell)) {
+                continue;
+            }
+
+            EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail();
+            // 涓夌骇淇濆吇涓嶉渶瑕佺被鍨嬶紝涓嶈缃甶temCategory
+            item.setStandardId(standardId);
+            item.setItemCode(itemCount++);
+
+            // 澶勭悊閮ㄤ綅鍒�
+            if (!row.getTableCells().isEmpty()) {
+                String partCell = getCellText(row.getCell(0));
+                if (!partCell.trim().isEmpty()) {
+                    currentPart = partCell.trim();
+                }
+            }
+            item.setItemPart(currentPart);
+
+            // 鏍规嵁鍒楁暟纭畾鍐呭鍜屾爣鍑嗙殑浣嶇疆
+            int cellCount = row.getTableCells().size();
+            if (cellCount == 3) { // 閮ㄤ綅|鍐呭|鏍囧噯
+                item.setItemName(getCellText(row.getCell(1)));
+                item.setItemDemand(getCellText(row.getCell(2)));
+            }
+            else if (cellCount == 2) { // 鍐呭|鏍囧噯
+                item.setItemName(getCellText(row.getCell(0)));
+                item.setItemDemand(getCellText(row.getCell(1)));
+            }
+            else if (cellCount == 1) { // 鍗曞垪鍐呭
+                item.setItemName(getCellText(row.getCell(0)));
+            }
+            else if (cellCount > 3) { // 澶氬垪澶勭悊
+                // 鍙栫2鍒椾綔涓哄唴瀹癸紝鏈�鍚庝竴鍒椾綔涓烘爣鍑�
+                item.setItemName(getCellText(row.getCell(1)));
+                item.setItemDemand(getCellText(row.getCell(cellCount - 1)));
+            }
+
+            items.add(item);
+        }
+        return items;
+    }
+
+    /**
+     * 鍏煎鐗堝崟鍏冩牸鏂囨湰鎻愬彇
+     */
+    private String getCellText(XWPFTableCell cell) {
+        if (cell == null) return "";
+
+        StringBuilder text = new StringBuilder();
+        for (XWPFParagraph para : cell.getParagraphs()) {
+            if (para != null) {
+                for (XWPFRun run : para.getRuns()) {
+                    if (run != null) {
+                        String runText = run.getText(0);
+                        if (runText != null) {
+                            text.append(runText);
+                        }
+                    }
+                }
+            }
+        }
+        return text.toString();
+    }
+
+    /**
+     * 鍐呭娓呯悊
+     */
+    private String cleanContent(String text) {
+        if (text == null) return "";
+
+        // 鏇挎崲鐗规畩绌烘牸鍜屽悎骞惰繛缁┖鏍�
+        text = text.replace('\u00A0', ' ')
+                .replace('\u2007', ' ')
+                .replace('\u202F', ' ')
+                .replaceAll("\\s+", " ");
+
+        // 瑙勮寖鏍囩偣绗﹀彿
+        return text.replace(',', '銆�')
+                .replace('锛�', '銆�')
+                .replace(';', '锛�')
+                .replace('锛�', '锛�')
+                .replace(':', '锛�')
+                .replace('锛�', '锛�')
+                .trim();
+    }
+
+    /**
+     * 楠岃瘉鏈夋晥椤圭洰琛�
+     */
+    private boolean isValidItemRow(XWPFTableRow row) {
+        return row != null &&
+                row.getTableCells().size() >= 2 &&
+                !getCellText(row.getCell(1)).trim().isEmpty();
+    }
+
+    /**
+     * 绌鸿妫�娴�
+     */
+    private boolean isRowEmpty(XWPFTableRow row) {
+        if (row == null) return true;
+        for (XWPFTableCell cell : row.getTableCells()) {
+            String text = getCellText(cell);
+            if (text != null && !text.trim().isEmpty()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /*瀵煎叆浜屼繚涓変繚鏂囦欢Excel--------------------------缁撴潫*/
+
 }

--
Gitblit v1.9.3