From 2e994c878f976e4e8a1c92fea9b28cdf8048ac73 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期六, 19 七月 2025 11:06:42 +0800
Subject: [PATCH] csv文件读取方法调整&添加数据库密码连接字段

---
 pom.xml                                                 |    5 ++
 src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java |    4 ++
 src/main/java/com/chinaztt/mes/docx/util/TakeWords.java |   65 ++++++++++++++++++++++++++------
 3 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/pom.xml b/pom.xml
index 0ea035f..da5ec86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,6 +79,11 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.opencsv</groupId>
+            <artifactId>opencsv</artifactId>
+            <version>5.7.1</version>
+        </dependency>
 
     </dependencies>
     <dependencyManagement>
diff --git a/src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java b/src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java
index d219560..4e113ad 100644
--- a/src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java
+++ b/src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java
@@ -22,4 +22,8 @@
     private String fiberOpticRibbonCode;
     // 鍏夌氦甯︽暟鎹�
     private String fiberOpticRibbon;
+    //鏁版嵁搴撹繛鎺ヨ处鍙�
+    private String dbUser;
+    //鏁版嵁搴撹繛鎺ュ瘑鐮�
+    private String dbPassword;
 }
diff --git a/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java b/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
index 3d77d75..9d791dd 100644
--- a/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
+++ b/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
@@ -2,6 +2,9 @@
 
 import cn.hutool.core.io.FileUtil;
 import com.chinaztt.mes.docx.dto.GetFileDto;
+import com.opencsv.CSVReader;
+import com.opencsv.CSVReaderBuilder;
+import com.opencsv.exceptions.CsvValidationException;
 import net.sourceforge.tess4j.Tesseract;
 import net.sourceforge.tess4j.TesseractException;
 import org.apache.commons.lang3.ObjectUtils;
@@ -15,13 +18,18 @@
 import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
 
 import java.io.*;
-import java.nio.file.Files;
 import java.sql.*;
 import java.util.*;
+import java.util.regex.Pattern;
 
 public class TakeWords {
 
     private static final String splitIdentifier = "@-@"; // 鑷畾涔夊敮涓�鏍囪瘑绗�
+
+    // 绉戝璁℃暟娉曟鍒欐ā寮�
+    private static final Pattern SCIENTIFIC_PATTERN = Pattern.compile(
+            "^[+-]?\\d+(\\.\\d+)?[eE][+-]?\\d+$"
+    );
 
     public static Object readWordFile(File file) {
         String result = "";
@@ -84,23 +92,54 @@
     public static Object readCsvFile(File file) {
         StringBuilder stringBuilder = new StringBuilder();
         // 鍒涘缓 reader
-        try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
-            // CSV鏂囦欢鐨勫垎闅旂
-            String DELIMITER = ",";
-            // 鎸夎璇诲彇
-            String line;
-            while ((line = br.readLine()) != null) {
-                // 鍒嗗壊
-                String[] columns = line.split(DELIMITER);
-                // 鎵撳嵃琛�
-                stringBuilder.append(String.join(splitIdentifier, columns)).append("\n");
+//        try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
+//            // CSV鏂囦欢鐨勫垎闅旂
+//            String DELIMITER = ",";
+//            // 鎸夎璇诲彇
+//            String line;
+//            System.out.println(br.readLine());
+//            while ((line = br.readLine()) != null) {
+//                // 鍒嗗壊
+//                String[] columns = line.split(DELIMITER);
+//                // 鎵撳嵃琛�
+//                stringBuilder.append(String.join(splitIdentifier, columns)).append("\n");
+//            }
+//        } catch (IOException ex) {
+//            ex.printStackTrace();
+//        }
+        try (FileReader fileReader = new FileReader(file);
+             CSVReader csvReader = new CSVReaderBuilder(fileReader).build()) {
+
+            String[] nextLine;
+            while ((nextLine = csvReader.readNext()) != null) {
+                // 澶勭悊姣忎竴琛屾暟鎹�
+                for (String cell : nextLine) {
+                    if(StringUtils.isNotBlank(cell)){
+                        stringBuilder.append(scientificToNumber(cell)).append(splitIdentifier);
+                    }
+                }
+                stringBuilder.append("\n");
             }
-        } catch (IOException ex) {
-            ex.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (CsvValidationException e) {
+            throw new RuntimeException(e);
         }
         return stringBuilder.toString();
     }
 
+    /**
+     * 灏嗙瀛﹁鏁版硶杞崲涓烘暟瀛�
+     * @param cell
+     * @return
+     */
+    public static String scientificToNumber(String cell){
+        if(SCIENTIFIC_PATTERN.matcher(cell).matches()){
+            return String.valueOf(Double.parseDouble(cell));
+        }
+        return cell;
+    }
+
     public static Object readMdbFile(File file, GetFileDto getFileDto) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
         Map<String, Object> tableMap = new HashMap<>(16);
         Properties prop = new Properties();

--
Gitblit v1.9.3