From fbf75b40fb739220240e6becff9598c25dac6060 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 10 九月 2025 15:42:53 +0800
Subject: [PATCH] 优化保养规范批量导入,改为返回文件让用户自己查询对应设备型号

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java |  202 ++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 169 insertions(+), 33 deletions(-)

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 bf01e42..48a668e 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
@@ -25,12 +25,16 @@
 import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
@@ -316,7 +320,7 @@
      * 浜屼繚瀵煎叆
     */
     @PostMapping("/importSecondMaintenanceStandard")
-    public Result<?> importSecondMaintenanceStandard(HttpServletRequest request) {
+    public ResponseEntity<?> importSecondMaintenanceStandard(HttpServletRequest request) {
         try {
             MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
             Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
@@ -329,14 +333,174 @@
             for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
                 MultipartFile file = entity.getValue();
                 String fileName = file.getOriginalFilename();
+                if (fileName == null || fileName.contains("undefined") || fileName.trim().isEmpty()) {
+                    fileName = "file_" + System.currentTimeMillis() + ".tmp";
+                }
                 Result<?> importResult = eamMaintenanceStandardService.importMaintenanceStandard(file, "SECOND", null);
-                successDeviceCount = getSuccessDeviceCount(successFileNames, failedFileNames, failedFiles, successDeviceCount, notFoundCodes, fileName, importResult);
+                if (importResult.isSuccess()) {
+                    successFileNames.add(fileName);
+                    // 鎻愬彇鎴愬姛瀵煎叆鐨勮澶囨暟閲�
+                    String message = importResult.getMessage();
+                    Pattern devicePattern = Pattern.compile("璁惧鏁帮細(\\d+)");
+                    Matcher deviceMatcher = devicePattern.matcher(message);
+                    if (deviceMatcher.find()) {
+                        successDeviceCount += Integer.parseInt(deviceMatcher.group(1));
+                    }
+                    // 妫�鏌ユ槸鍚︽湁鏈壘鍒扮殑璁惧缂栫爜
+                    if (message.contains("浣嗕互涓嬭澶囩紪鐮佹湭鎵惧埌锛�")) {
+                        // 鎻愬彇鏈壘鍒扮殑璁惧缂栫爜
+                        Pattern codePattern = Pattern.compile("浣嗕互涓嬭澶囩紪鐮佹湭鎵惧埌锛歕\s*(\\d+)");
+                        Matcher codeMatcher = codePattern.matcher(message);
+                        while (codeMatcher.find()) {
+                            notFoundCodes.add(codeMatcher.group(1));
+                        }
+                    }
+                } else {
+                    log.error("鏂囦欢瀵煎叆澶辫触: {}, 鍘熷洜: {}", fileName, importResult.getMessage());
+                    failedFileNames.add(fileName);
+                    failedFiles.put(fileName, importResult.getMessage());
+
+                    // 浠庨敊璇秷鎭腑鎻愬彇鏈壘鍒扮殑璁惧缂栫爜
+                    String errorMessage = importResult.getMessage();
+                    if (errorMessage.contains("鏈壘鍒扮殑璁惧缂栫爜")) {
+                        Pattern codePattern = Pattern.compile("鏈壘鍒扮殑璁惧缂栫爜\\s*(\\d+)");
+                        Matcher codeMatcher = codePattern.matcher(errorMessage);
+                        while (codeMatcher.find()) {
+                            notFoundCodes.add(codeMatcher.group(1));
+                        }
+                    }
+                }
             }
-            // 鏋勫缓鍝嶅簲
-            return getResult(totalFiles, successFileNames, failedFileNames, failedFiles, successDeviceCount, notFoundCodes);
+            // 妫�鏌ユ槸鍚﹀瓨鍦ㄦ湭鎵惧埌鐨勮澶囩紪鐮�
+            if (!notFoundCodes.isEmpty()) {
+                // 鍒涘缓鍖呭惈鏈壘鍒扮紪鐮佺殑CSV鏂囦欢
+                String csvContent = "鏈壘鍒扮殑璁惧缂栫爜\n" + String.join("\n", notFoundCodes);
+                byte[] csvBytes = csvContent.getBytes(StandardCharsets.UTF_8);
+
+                // 璁剧疆鍝嶅簲澶�
+                HttpHeaders headers = new HttpHeaders();
+                headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=not_found_codes.csv");
+                headers.add(HttpHeaders.CONTENT_TYPE, "text/csv; charset=utf-8");
+                headers.setContentLength(csvBytes.length);
+
+                return ResponseEntity.ok()
+                        .headers(headers)
+                        .body(csvBytes);
+            }
+            if (failedFileNames.isEmpty()) {
+                return ResponseEntity.ok(Result.ok(String.format(
+                        "鎴愬姛瀵煎叆鏂囦欢鏁帮細%d锛屾枃浠跺悕锛�%s锛屾垚鍔熷鍏ヨ澶囨暟锛�%d",
+                        totalFiles,
+                        String.join(",", successFileNames),
+                        successDeviceCount
+                )));
+            } else {
+                String errorMsg = String.format("澶辫触鏂囦欢鏁帮細%d锛屽け璐ユ枃浠跺悕锛�%s锛屽け璐ュ師鍥狅細%s",
+                        failedFileNames.size(),
+                        String.join(",", failedFileNames),
+                        failedFiles.entrySet().stream()
+                                .map(e -> e.getKey() + ":" + e.getValue())
+                                .collect(Collectors.joining("锛�")));
+                return ResponseEntity.ok(Result.error(errorMsg));
+            }
         } catch (Exception e) {
             log.error("瀵煎叆澶勭悊寮傚父", e);
-            return Result.error("瀵煎叆澶勭悊澶辫触: " + e.getMessage());
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
+                    .body(Result.error("瀵煎叆澶勭悊澶辫触: " + e.getClass().getSimpleName() + " - " + e.getMessage()));
+        }
+    }
+
+    /**
+     * 涓変繚瀵煎叆
+     */
+    @PostMapping("/importThirdMaintenanceStandard")
+    public ResponseEntity<?> importThirdMaintenanceStandard(HttpServletRequest request) {
+        try {
+            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+            Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+            int totalFiles = fileMap.size();
+            List<String> successFileNames = new ArrayList<>();
+            List<String> failedFileNames = new ArrayList<>();
+            Map<String, String> failedFiles = new LinkedHashMap<>();
+            int successDeviceCount = 0;
+            List<String> notFoundCodes = new ArrayList<>();
+            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+                MultipartFile file = entity.getValue();
+                String fileName = file.getOriginalFilename();
+                if (fileName == null || fileName.contains("undefined") || fileName.trim().isEmpty()) {
+                    fileName = "file_" + System.currentTimeMillis() + ".tmp";
+                }
+                Result<?> importResult = eamMaintenanceStandardService.importMaintenanceStandard(file, "THIRD", null);
+                if (importResult.isSuccess()) {
+                    successFileNames.add(fileName);
+                    // 鎻愬彇鎴愬姛瀵煎叆鐨勮澶囨暟閲�
+                    String message = importResult.getMessage();
+                    Pattern devicePattern = Pattern.compile("璁惧鏁帮細(\\d+)");
+                    Matcher deviceMatcher = devicePattern.matcher(message);
+                    if (deviceMatcher.find()) {
+                        successDeviceCount += Integer.parseInt(deviceMatcher.group(1));
+                    }
+                    // 妫�鏌ユ槸鍚︽湁鏈壘鍒扮殑璁惧缂栫爜
+                    if (message.contains("浣嗕互涓嬭澶囩紪鐮佹湭鎵惧埌锛�")) {
+                        // 鎻愬彇鏈壘鍒扮殑璁惧缂栫爜
+                        Pattern codePattern = Pattern.compile("浣嗕互涓嬭澶囩紪鐮佹湭鎵惧埌锛歕\s*(\\d+)");
+                        Matcher codeMatcher = codePattern.matcher(message);
+                        while (codeMatcher.find()) {
+                            notFoundCodes.add(codeMatcher.group(1));
+                        }
+                    }
+                } else {
+                    log.error("鏂囦欢瀵煎叆澶辫触: {}, 鍘熷洜: {}", fileName, importResult.getMessage());
+                    failedFileNames.add(fileName);
+                    failedFiles.put(fileName, importResult.getMessage());
+
+                    // 浠庨敊璇秷鎭腑鎻愬彇鏈壘鍒扮殑璁惧缂栫爜
+                    String errorMessage = importResult.getMessage();
+                    if (errorMessage.contains("鏈壘鍒扮殑璁惧缂栫爜")) {
+                        Pattern codePattern = Pattern.compile("鏈壘鍒扮殑璁惧缂栫爜\\s*(\\d+)");
+                        Matcher codeMatcher = codePattern.matcher(errorMessage);
+                        while (codeMatcher.find()) {
+                            notFoundCodes.add(codeMatcher.group(1));
+                        }
+                    }
+                }
+            }
+            // 妫�鏌ユ槸鍚﹀瓨鍦ㄦ湭鎵惧埌鐨勮澶囩紪鐮�
+            if (!notFoundCodes.isEmpty()) {
+                // 鍒涘缓鍖呭惈鏈壘鍒扮紪鐮佺殑CSV鏂囦欢
+                String csvContent = "鏈壘鍒扮殑璁惧缂栫爜\n" + String.join("\n", notFoundCodes);
+                byte[] csvBytes = csvContent.getBytes(StandardCharsets.UTF_8);
+
+                // 璁剧疆鍝嶅簲澶�
+                HttpHeaders headers = new HttpHeaders();
+                headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=not_found_codes.csv");
+                headers.add(HttpHeaders.CONTENT_TYPE, "text/csv; charset=utf-8");
+                headers.setContentLength(csvBytes.length);
+
+                return ResponseEntity.ok()
+                        .headers(headers)
+                        .body(csvBytes);
+            }
+            if (failedFileNames.isEmpty()) {
+                return ResponseEntity.ok(Result.ok(String.format(
+                        "鎴愬姛瀵煎叆鏂囦欢鏁帮細%d锛屾枃浠跺悕锛�%s锛屾垚鍔熷鍏ヨ澶囨暟锛�%d",
+                        totalFiles,
+                        String.join(",", successFileNames),
+                        successDeviceCount
+                )));
+            } else {
+                String errorMsg = String.format("澶辫触鏂囦欢鏁帮細%d锛屽け璐ユ枃浠跺悕锛�%s锛屽け璐ュ師鍥狅細%s",
+                        failedFileNames.size(),
+                        String.join(",", failedFileNames),
+                        failedFiles.entrySet().stream()
+                                .map(e -> e.getKey() + ":" + e.getValue())
+                                .collect(Collectors.joining("锛�")));
+                return ResponseEntity.ok(Result.error(errorMsg));
+            }
+        } catch (Exception e) {
+            log.error("瀵煎叆澶勭悊寮傚父", e);
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
+                    .body(Result.error("瀵煎叆澶勭悊澶辫触: " + e.getClass().getSimpleName() + " - " + e.getMessage()));
         }
     }
 
@@ -389,34 +553,6 @@
             failedFiles.put(fileName, importResult.getMessage());
         }
         return successDeviceCount;
-    }
-
-    /**
-     * 涓変繚瀵煎叆
-     */
-    @PostMapping("/importThirdMaintenanceStandard")
-    public Result<?> importThirdMaintenanceStandard(HttpServletRequest request) {
-        try {
-            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-            Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
-            int totalFiles = fileMap.size();
-            List<String> successFileNames = new ArrayList<>();
-            List<String> failedFileNames = new ArrayList<>();
-            Map<String, String> failedFiles = new LinkedHashMap<>();
-            int successDeviceCount = 0;
-            List<String> notFoundCodes = new ArrayList<>();
-            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-                MultipartFile file = entity.getValue();
-                String fileName = file.getOriginalFilename();
-                Result<?> importResult = eamMaintenanceStandardService.importMaintenanceStandard(file, "THIRD", null);
-                successDeviceCount = getSuccessDeviceCount(successFileNames, failedFileNames, failedFiles, successDeviceCount, notFoundCodes, fileName, importResult);
-            }
-            // 鏋勫缓鍝嶅簲
-            return getResult(totalFiles, successFileNames, failedFileNames, failedFiles, successDeviceCount, notFoundCodes);
-        } catch (Exception e) {
-            log.error("瀵煎叆澶勭悊寮傚父", e);
-            return Result.error("瀵煎叆澶勭悊澶辫触: " + e.getMessage());
-        }
     }
 
     /**

--
Gitblit v1.9.3