From 4960c8975807c39be4b6ee97aac20e95b789df9a Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 05 六月 2025 14:56:10 +0800
Subject: [PATCH] init commit

---
 src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java           |   19 +
 src/main/java/com/chinaztt/mes/docx/constant/CommonConstants.java        |    8 
 .gitignore                                                               |   34 ++
 src/main/java/com/chinaztt/mes/docx/DataAcquisitionApplication.java      |   13 
 src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java    |  120 +++++++
 src/main/resources/logback-spring.xml                                    |   74 ++++
 src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java  |   13 
 pom.xml                                                                  |  129 ++++++++
 src/main/java/com/chinaztt/mes/docx/util/R.java                          |  132 ++++++++
 src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java                  |   25 +
 src/main/java/com/chinaztt/mes/docx/util/TakeWords.java                  |  258 ++++++++++++++++
 src/main/java/com/chinaztt/mes/docx/controller/DocxController.java       |   32 ++
 src/main/java/com/chinaztt/mes/docx/service/DocxService.java             |   14 
 src/main/resources/application.yml                                       |    2 
 src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java          |   18 +
 src/test/java/com/chinaztt/mes/docx/DataAcquisitionApplicationTests.java |   22 +
 16 files changed, 913 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0581bd1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,34 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+logs
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0ea035f
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.chinaztt.mes.data-acquisition</groupId>
+    <artifactId>data-acquisition</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>data-acquisition</name>
+    <description>data-acquisition</description>
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.3</spring-boot.version>
+    </properties>
+    <dependencies>
+        <!--lombok-->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sourceforge.tess4j</groupId>
+            <artifactId>tess4j</artifactId>
+            <version>5.12.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.xerial</groupId>
+            <artifactId>sqlite-jdbc</artifactId>
+            <version>3.34.0</version> <!-- Use the latest version -->
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sf.ucanaccess</groupId>
+            <artifactId>ucanaccess</artifactId>
+            <version>5.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.17</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.17</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>3.17</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.16</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <finalName>${project.name}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.chinaztt.mes.docx.DataAcquisitionApplication</mainClass>
+                    <skip>false</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/src/main/java/com/chinaztt/mes/docx/DataAcquisitionApplication.java b/src/main/java/com/chinaztt/mes/docx/DataAcquisitionApplication.java
new file mode 100644
index 0000000..f44be8f
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/DataAcquisitionApplication.java
@@ -0,0 +1,13 @@
+package com.chinaztt.mes.docx;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DataAcquisitionApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(DataAcquisitionApplication.class, args);
+    }
+
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/constant/CommonConstants.java b/src/main/java/com/chinaztt/mes/docx/constant/CommonConstants.java
new file mode 100644
index 0000000..4763f4a
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/constant/CommonConstants.java
@@ -0,0 +1,8 @@
+package com.chinaztt.mes.docx.constant;
+
+
+public interface CommonConstants {
+    Integer SUCCESS = 0;
+    Integer FAIL = 1;
+}
+
diff --git a/src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java b/src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java
new file mode 100644
index 0000000..a0fdee0
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java
@@ -0,0 +1,19 @@
+package com.chinaztt.mes.docx.constant;
+
+import org.apache.catalina.connector.Connector;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class TomcatConfig {
+    @Bean
+    public TomcatServletWebServerFactory webServerFactory() {
+        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
+        factory.addConnectorCustomizers((Connector connector) -> {
+            connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}.");
+            connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}.");
+        });
+        return factory;
+    }
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/controller/DocxController.java b/src/main/java/com/chinaztt/mes/docx/controller/DocxController.java
new file mode 100644
index 0000000..bc31427
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/controller/DocxController.java
@@ -0,0 +1,32 @@
+package com.chinaztt.mes.docx.controller;
+
+import com.chinaztt.mes.docx.dto.GetFileDto;
+import com.chinaztt.mes.docx.service.DocxService;
+import com.chinaztt.mes.docx.util.R;
+import net.sourceforge.tess4j.TesseractException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.sql.SQLException;
+
+@RestController
+@RequestMapping("/lims")
+public class DocxController {
+
+    @Autowired
+    private DocxService docxService;
+
+    @GetMapping("/getFile")
+    public R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException {
+        return docxService.getFile(getFileDto);
+    }
+
+    @GetMapping("/moveFile")
+    public R<?> moveFile(String startFilePath, String endFilePath, String fileType) {
+        return docxService.moveFile(startFilePath, endFilePath, fileType);
+    }
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java b/src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java
new file mode 100644
index 0000000..d219560
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/dto/GetFileDto.java
@@ -0,0 +1,25 @@
+package com.chinaztt.mes.docx.dto;
+
+import lombok.Data;
+
+@Data
+public class GetFileDto {
+    // 閲囬泦璺緞
+    private String filePath;
+    // 鏂囦欢鍚庣紑
+    private String fileExtension;
+    // 濮旀墭鍗曞彿
+    private String entrustCode;
+    // 鏍峰搧缂栧彿
+    private String sampleCode;
+    // 濮旀墭缂栧彿瀛楁
+    private String mdbEntrustCode;
+    // 鏍峰搧缂栧彿瀛楁
+    private String mdbSampleCode;
+    // db鏂囦欢鍚嶇О
+    private String dbFileName;
+    // 鍏夌氦甯﹀瓧娈�
+    private String fiberOpticRibbonCode;
+    // 鍏夌氦甯︽暟鎹�
+    private String fiberOpticRibbon;
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java b/src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..b9735a0
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java
@@ -0,0 +1,13 @@
+package com.chinaztt.mes.docx.handler;
+
+import com.chinaztt.mes.docx.util.R;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+    @ExceptionHandler({Exception.class})
+    public R<?> exception(Exception e) {
+        return R.failed(e.getMessage());
+    }
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/service/DocxService.java b/src/main/java/com/chinaztt/mes/docx/service/DocxService.java
new file mode 100644
index 0000000..48a0814
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/service/DocxService.java
@@ -0,0 +1,14 @@
+package com.chinaztt.mes.docx.service;
+
+import com.chinaztt.mes.docx.dto.GetFileDto;
+import com.chinaztt.mes.docx.util.R;
+import net.sourceforge.tess4j.TesseractException;
+
+import java.io.IOException;
+import java.sql.SQLException;
+
+public interface DocxService {
+    R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException;
+
+    R<?> moveFile(String startFilePath, String endFilePath, String fileType);
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java b/src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java
new file mode 100644
index 0000000..1843c1a
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java
@@ -0,0 +1,120 @@
+package com.chinaztt.mes.docx.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.chinaztt.mes.docx.dto.GetFileDto;
+import com.chinaztt.mes.docx.service.DocxService;
+import com.chinaztt.mes.docx.util.R;
+import com.chinaztt.mes.docx.util.TakeWords;
+import net.sourceforge.tess4j.TesseractException;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.stereotype.Service;
+
+import java.io.*;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+public class DocxServiceImpl implements DocxService {
+
+    @Override
+    public R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException {
+        File file = getFileStart(getFileDto.getFilePath(), getFileDto.getFileExtension());
+        if (!file.exists()) {
+            return R.failed("鏈煡璇㈠埌璇ヨ矾寰勶細" + getFileDto.getFilePath() + "涓嬪瓨鍦細" + getFileDto.getFileExtension() + "缁撳熬鐨勬枃浠讹紒");
+        }
+        switch (getFileDto.getFileExtension()) {
+            case ".docx":
+                return R.ok(TakeWords.readWordFile(file));
+            case ".xlsx":
+                try {
+                    return R.ok(TakeWords.readExcelFile(file));
+                } catch (FileNotFoundException e) {
+                    return R.failed("鍙︿竴涓▼搴忔鍦ㄤ娇鐢ㄦ鏂囦欢锛屾棤娉曡繘琛屾暟鎹噰闆嗐��");
+                }
+            case ".txt":
+                return R.ok(TakeWords.readTxtFile(file));
+            case ".csv":
+                return R.ok(TakeWords.readCsvFile(file));
+            case ".mdb":
+                if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) {
+                    return R.failed("鏈厤缃�.mdb閲囬泦鏂囦欢鍚嶇О锛�");
+                }
+                return R.ok(TakeWords.readMdbFile(file, getFileDto));
+            case ".db":
+                if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) {
+                    return R.failed("鏈厤缃�.db閲囬泦鏂囦欢鍚嶇О锛�");
+                }
+                return R.ok(TakeWords.readDbFile(file, getFileDto));
+            case ".png":
+                return R.ok(TakeWords.readPngFile(file));
+            default:
+                return R.failed("鍚庣紑鍚嶉厤缃敊璇紒");
+        }
+    }
+
+    @Override
+    public R<?> moveFile(String startFilePath, String endFilePath, String fileType) {
+        // 婧愭枃浠惰矾寰�
+        File startFile= getFileStart(startFilePath, fileType);
+        // 鐩殑鐩綍璺緞
+        File endDirection=new File(endFilePath);
+        // 濡傛灉鐩殑鐩綍璺緞涓嶅瓨鍦紝鍒欒繘琛屽垱寤�
+        if(!endDirection.exists()) {
+            endDirection.mkdirs();
+        }
+        // 鐩殑鏂囦欢璺緞=鐩殑鐩綍璺緞+婧愭枃浠跺悕绉�
+        File endFile=new File(endDirection+ File.separator+ startFile.getName());
+
+        try {
+	    // 璋冪敤File绫荤殑鏍稿績鏂规硶renameTo
+            if (startFile.renameTo(endFile)) {
+                return R.ok("鏂囦欢绉诲姩鎴愬姛锛�");
+            } else {
+                return R.failed("鏂囦欢绉诲姩澶辫触锛�");
+            }
+        }catch(Exception e) {
+            return R.failed("鏂囦欢绉诲姩鍑虹幇寮傚父锛�");
+        }
+    }
+
+    public static File getLatestFile(List<File> files) {
+        File latestFile = null;
+        long latestTime = 0;
+
+        for (File file : files) {
+            long lastModified = file.lastModified();
+            if (lastModified > latestTime) {
+                latestTime = lastModified;
+                latestFile = file;
+            }
+        }
+
+        return latestFile;
+    }
+
+    public static File getFileStart(String filePath, String fileExtension) {
+        List<File> files = FileUtil.loopFiles(filePath);
+        List<File> list = new ArrayList<>();
+        files.forEach(i -> {
+            boolean b;
+            switch (fileExtension) {
+                case ".docx":
+                    b = i.getName().endsWith(".docx") || i.getName().endsWith(".doc");
+                    break;
+                case ".xlsx":
+                    b = i.getName().endsWith(".xlsx") || i.getName().endsWith(".xls");
+                    break;
+                default:
+                    b = i.getName().endsWith(fileExtension);
+                    break;
+            }
+            if (b) {
+                list.add(i);
+            }
+        });
+        return getLatestFile(list);
+    }
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java b/src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java
new file mode 100644
index 0000000..3817040
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java
@@ -0,0 +1,18 @@
+package com.chinaztt.mes.docx.util;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Objects;
+
+/**
+ * 瀛楃涓茬紪鐮佽浆鎹㈠伐鍏风被
+ */
+public class CharsetChangeUtil {
+
+    private static final String UTF8 = "UTF-8";
+
+    private static final String GB2312 = "GB2312";
+
+
+
+
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/util/R.java b/src/main/java/com/chinaztt/mes/docx/util/R.java
new file mode 100644
index 0000000..c145904
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/util/R.java
@@ -0,0 +1,132 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+package com.chinaztt.mes.docx.util;
+
+import com.chinaztt.mes.docx.constant.CommonConstants;
+
+import java.io.Serializable;
+
+public class R<T> implements Serializable {
+    private static final long serialVersionUID = 1L;
+    // "杩斿洖鏍囪锛氭垚鍔熸爣璁�=0锛屽け璐ユ爣璁�=1"
+    private int code;
+    // "杩斿洖淇℃伅"
+    private String msg;
+    // "鏁版嵁"
+    private T data;
+
+    public static <T> R<T> ok() {
+        return restResult(null, CommonConstants.SUCCESS, (String) null);
+    }
+
+    public static <T> R<T> ok(T data) {
+        return restResult(data, CommonConstants.SUCCESS, (String) null);
+    }
+
+    public static <T> R<T> ok(T data, String msg) {
+        return restResult(data, CommonConstants.SUCCESS, msg);
+    }
+
+    public static <T> R<T> failed() {
+        return restResult(null, CommonConstants.FAIL, (String) null);
+    }
+
+    public static <T> R<T> failed(String msg) {
+        return restResult(null, CommonConstants.FAIL, msg);
+    }
+
+    public static <T> R<T> failed(T data) {
+        return restResult(data, CommonConstants.FAIL, (String) null);
+    }
+
+    public static <T> R<T> failed(T data, String msg) {
+        return restResult(data, CommonConstants.FAIL, msg);
+    }
+
+    private static <T> R<T> restResult(T data, int code, String msg) {
+        R<T> apiResult = new R();
+        apiResult.setCode(code);
+        apiResult.setData(data);
+        apiResult.setMsg(msg);
+        return apiResult;
+    }
+
+    public static <T> RBuilder<T> builder() {
+        return new RBuilder();
+    }
+
+    public String toString() {
+        return "R(code=" + this.getCode() + ", msg=" + this.getMsg() + ", data=" + this.getData() + ")";
+    }
+
+    public R() {
+    }
+
+    public R(int code, String msg, T data) {
+        this.code = code;
+        this.msg = msg;
+        this.data = data;
+    }
+
+    public int getCode() {
+        return this.code;
+    }
+
+    public R<T> setCode(int code) {
+        this.code = code;
+        return this;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+
+    public R<T> setMsg(String msg) {
+        this.msg = msg;
+        return this;
+    }
+
+    public T getData() {
+        return this.data;
+    }
+
+    public R<T> setData(T data) {
+        this.data = data;
+        return this;
+    }
+
+    public static class RBuilder<T> {
+        private int code;
+        private String msg;
+        private T data;
+
+        RBuilder() {
+        }
+
+        public RBuilder<T> code(int code) {
+            this.code = code;
+            return this;
+        }
+
+        public RBuilder<T> msg(String msg) {
+            this.msg = msg;
+            return this;
+        }
+
+        public RBuilder<T> data(T data) {
+            this.data = data;
+            return this;
+        }
+
+        public R<T> build() {
+            return new R(this.code, this.msg, this.data);
+        }
+
+        public String toString() {
+            return "R.RBuilder(code=" + this.code + ", msg=" + this.msg + ", data=" + this.data + ")";
+        }
+    }
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java b/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
new file mode 100644
index 0000000..3d77d75
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
@@ -0,0 +1,258 @@
+package com.chinaztt.mes.docx.util;
+
+import cn.hutool.core.io.FileUtil;
+import com.chinaztt.mes.docx.dto.GetFileDto;
+import net.sourceforge.tess4j.Tesseract;
+import net.sourceforge.tess4j.TesseractException;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.POIXMLDocument;
+import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.sql.*;
+import java.util.*;
+
+public class TakeWords {
+
+    private static final String splitIdentifier = "@-@"; // 鑷畾涔夊敮涓�鏍囪瘑绗�
+
+    public static Object readWordFile(File file) {
+        String result = "";
+        //棣栧厛鍒ゆ柇鏂囦欢涓殑鏄痙oc/docx
+        try {
+            if (file.getName().endsWith(".doc")) {
+                InputStream is = new FileInputStream(file);
+                WordExtractor re = new WordExtractor(is);
+                result = re.getText();
+                re.close();
+            } else if (file.getName().endsWith(".docx")) {
+                OPCPackage opcPackage = POIXMLDocument.openPackage(file.getPath());
+                POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
+                result = extractor.getText();
+                extractor.close();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    public static Object readExcelFile(File file) throws FileNotFoundException, IOException {
+        StringBuilder result = new StringBuilder();
+        //鍒涘缓宸ヤ綔绨垮璞�
+        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));
+        //鑾峰彇宸ヤ綔绨夸笅sheet鐨勪釜鏁� 鍙鍙栫涓�涓猻heet
+//            int sheetNum = xssfWorkbook.getNumberOfSheets();
+        //閬嶅巻宸ヤ綔绨夸腑鐨勬墍鏈夋暟鎹�
+        for (int i = 0; i < 1; i++) {
+            XSSFSheet sheet = xssfWorkbook.getSheetAt(i);
+            //鑾峰彇鏈�鍚庝竴琛岀殑num锛屽嵆鎬昏鏁般�傛澶勪粠0寮�濮�
+            int maxRow = sheet.getLastRowNum();
+            for (int row = 0; row <= maxRow; row++) {
+                //鑾峰彇鏈�鍚庡崟鍏冩牸num锛屽嵆鎬诲崟鍏冩牸鏁� ***娉ㄦ剰锛氭澶勪粠1寮�濮嬭鏁�***
+                int maxRol = sheet.getRow(row).getLastCellNum();
+                StringBuilder aLine = new StringBuilder();
+                for (int rol = 0; rol < maxRol; rol++) {
+                    aLine.append(sheet.getRow(row).getCell(rol)).append(splitIdentifier);
+                }
+                result.append(aLine).append("\n");
+            }
+        }
+        return result.toString();
+    }
+
+    public static Object readTxtFile(File file) throws IOException {
+        FileInputStream fin = new FileInputStream(file);
+        InputStreamReader reader = new InputStreamReader(fin);
+        BufferedReader buffReader = new BufferedReader(reader);
+        StringBuilder stringBuilder = new StringBuilder();
+        String strTmp = "";
+        while ((strTmp = buffReader.readLine()) != null) {
+            stringBuilder.append(strTmp).append("\n");
+        }
+        buffReader.close();
+        return stringBuilder.toString();
+    }
+
+    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");
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+        return stringBuilder.toString();
+    }
+
+    public static Object readMdbFile(File file, GetFileDto getFileDto) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
+        Map<String, Object> tableMap = new HashMap<>(16);
+        Properties prop = new Properties();
+        //璁剧疆缂栫爜
+        prop.put("charSet", "UTF-8");
+        prop.put("user", "");
+        prop.put("password", "");
+        //鏁版嵁鍦板潃
+        String dbUrl = "jdbc:ucanaccess://" + file.getPath();
+        //寮曞叆椹卞姩
+        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance();
+        Connection conn = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet rs = null;
+
+        //杩炴帴鏁版嵁搴撹祫婧�
+        conn = DriverManager.getConnection(dbUrl, prop);
+        try {
+            List<Object> list = new ArrayList<>();
+            //閬嶅巻鑾峰彇澶氬紶琛ㄦ暟鎹�
+//            String s = "select * from " + getFileDto.getDbFileName() + " where 1=1" + getFileDto.getMdbEntrustCode() + " = '" + getFileDto.getEntrustCode() +
+//                    "' and " + getFileDto.getMdbSampleCode() + " = '" + getFileDto.getSampleCode() + "'";
+            String s = "select * from " + getFileDto.getDbFileName() + " where 1=1";
+            if(StringUtils.isNotBlank(getFileDto.getMdbEntrustCode())){
+                s+=" and " + getFileDto.getMdbEntrustCode() + " = '" + getFileDto.getEntrustCode()+ "'";
+            }
+            if(StringUtils.isNotBlank(getFileDto.getMdbSampleCode())){
+                s+=" and " + getFileDto.getMdbSampleCode() + " = '" + getFileDto.getSampleCode() + "'";
+            }
+            preparedStatement = conn.prepareStatement(s);
+            rs = preparedStatement.executeQuery();
+            ResultSetMetaData data = rs.getMetaData();
+            while (rs.next()) {
+                Map<String, String> map = new HashMap<>();
+                for (int i = 1; i <= data.getColumnCount(); i++) {
+                    //鍒楀悕
+                    String columnName = data.getColumnName(i);
+                    map.put(columnName, rs.getString(i));
+                }
+                list.add(map);
+            }
+            tableMap.put("data", list);
+        } catch (Exception e) {
+        } finally {
+            closeA1l(conn, preparedStatement, rs);
+        }
+        return tableMap;
+    }
+
+    private static void closeA1l(Connection conn, PreparedStatement preparedStatement, ResultSet rs) {
+        try {
+            if (null != rs) {
+                rs.close();
+            }
+            if (null != preparedStatement) {
+                preparedStatement.close();
+            }
+            if (null != conn) {
+                conn.close();
+            }
+        } catch (Exception ignore) {
+        }
+    }
+
+    public static Object readDbFile(File file, GetFileDto getFileDto) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
+        Map<String, Object> tableMap = new HashMap<>(16);
+        Properties prop = new Properties();
+        //璁剧疆缂栫爜
+        prop.put("charSet", "GBK");
+        prop.put("user", "");
+        prop.put("password", "");
+        //鏁版嵁鍦板潃
+        String dbUrl = "jdbc:sqlite:" + file.getPath();
+        //寮曞叆椹卞姩
+        Class.forName("org.sqlite.JDBC").newInstance();
+        Connection conn = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet rs = null;
+        //杩炴帴鏁版嵁搴撹祫婧�
+        conn = DriverManager.getConnection(dbUrl, prop);
+        try {
+            List<Object> list = new ArrayList<>();
+            //杞箟涓枃
+            String sampleCode = changeCharset(getFileDto.getSampleCode(), "GBK");
+            String sql = "select * from " + getFileDto.getDbFileName() +
+                    " where " + getFileDto.getMdbEntrustCode() + " = '" + getFileDto.getEntrustCode() +
+                    "' and " + getFileDto.getMdbSampleCode() + " = '" + sampleCode + "'";
+            if (ObjectUtils.allNotNull(getFileDto.getFiberOpticRibbonCode(), getFileDto.getFiberOpticRibbon()) && !getFileDto.getFiberOpticRibbonCode().equals("null")) {
+                sql = sql + " and " + getFileDto.getFiberOpticRibbonCode() + " = '" + getFileDto.getFiberOpticRibbon() + "'";
+            }
+            //閬嶅巻鑾峰彇澶氬紶琛ㄦ暟鎹�
+            preparedStatement = conn.prepareStatement(sql);
+            rs = preparedStatement.executeQuery();
+            ResultSetMetaData data = rs.getMetaData();
+            while (rs.next()) {
+                Map<String, String> map = new HashMap<>();
+                for (int i = 1; i <= data.getColumnCount(); i++) {
+                    //鍒楀悕
+                    String columnName = data.getColumnName(i);
+                    //灏嗚繑鍥炵殑缁撴灉杞崲浠巙tf-8缂栫爜
+                    map.put(columnName, changeCharset(rs.getString(i),"UTF-8"));
+                }
+                list.add(map);
+            }
+            tableMap.put("data", list);
+        } catch (Exception e) {
+        } finally {
+            closeA1l(conn, preparedStatement, rs);
+        }
+        return tableMap;
+    }
+
+    public static Object readPngFile(File file) throws IOException, TesseractException {
+        String canonicalPath32 = FileUtil.file(".", "/jre_32/tessdata").getCanonicalPath();
+        String canonicalPath64 = FileUtil.file(".", "/jre_64/tessdata").getCanonicalPath();
+        String path;
+        // 鍒ゆ柇鐢佃剳鏄�32浣嶈繕鏄�64浣�
+        String arch = System.getProperty("sun.arch.data.model");
+        if (arch.contains("32")) {
+            path = canonicalPath32.replaceAll("/chi_sim.traineddata", "").replaceAll("\\\\", "/");
+        } else {
+            path = canonicalPath64.replaceAll("/chi_sim.traineddata", "").replaceAll("\\\\", "/");
+        }
+        //璁剧疆閰嶇疆鏂囦欢澶瑰井瑙嗐�佽瘑鍒瑷�銆佽瘑鍒ā寮�
+        Tesseract tesseract = new Tesseract();
+        tesseract.setDatapath(path);
+        //璁剧疆璇嗗埆璇█涓轰腑鏂囩畝浣擄紝锛堝鏋滆璁剧疆涓鸿嫳鏂囧彲鏀逛负"eng"锛�
+        tesseract.setLanguage("chi_sim");
+        //浣跨敤 OSD 杩涜鑷姩椤甸潰鍒嗗壊浠ヨ繘琛屽浘鍍忓鐞�
+        tesseract.setPageSegMode(1);
+        //璁剧疆寮曟搸妯″紡鏄缁忕綉缁淟STM寮曟搸
+        tesseract.setOcrEngineMode(1);
+        //寮�濮嬭瘑鍒暣寮犲浘鐗囦腑鐨勬枃瀛�
+        return tesseract.doOCR(file);
+    }
+
+    /**
+     * 瀛楃涓茬紪鐮佽浆鎹�
+     *
+     * @param str 瑕佽浆鎹㈢殑瀛楃涓�
+     * @param unicode 瀛楃缂栫爜
+     * @return
+     */
+    public static String changeCharset(String str, String unicode) {
+        if(Objects.isNull(str)){
+            return "";
+        }
+        try {
+            return new String(str.getBytes(), unicode);
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..01a1b61
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,2 @@
+server:
+  port: 9527
\ No newline at end of file
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..bbea90b
--- /dev/null
+++ b/src/main/resources/logback-spring.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    灏忔妧宸�: 鍦ㄦ牴pom閲岄潰璁剧疆缁熶竴瀛樻斁璺緞锛岀粺涓�绠$悊鏂逛究缁存姢
+    <properties>
+        <log-path>/Users/ztt</log-path>
+    </properties>
+    1. 鍏朵粬妯″潡鍔犳棩蹇楄緭鍑猴紝鐩存帴copy鏈枃浠舵斁鍦╮esources 鐩綍鍗冲彲
+    2. 娉ㄦ剰淇敼 <property name="${log-path}/log.path" value=""/> 鐨剉alue妯″潡
+-->
+<configuration debug="false" scan="false">
+	<property name="log.path" value="logs/${project.artifactId}"/>
+	<!-- 褰╄壊鏃ュ織鏍煎紡 -->
+	<property name="CONSOLE_LOG_PATTERN"
+			  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+	<!-- 褰╄壊鏃ュ織渚濊禆鐨勬覆鏌撶被 -->
+	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+	<conversionRule conversionWord="wex"
+					converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+	<conversionRule conversionWord="wEx"
+					converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+	<!-- Console log output -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
+		</encoder>
+	</appender>
+
+	<!-- Log file debug output -->
+	<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/debug.log</file>
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+			<maxFileSize>50MB</maxFileSize>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
+		</encoder>
+	</appender>
+
+	<!-- Log file error output -->
+	<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/error.log</file>
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+			<maxFileSize>50MB</maxFileSize>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>ERROR</level>
+		</filter>
+	</appender>
+
+	<logger name="org.activiti.engine.impl.db" level="DEBUG">
+		<appender-ref ref="debug"/>
+	</logger>
+
+	<!--nacos 蹇冭烦 INFO 灞忚斀-->
+	<logger name="com.alibaba.nacos" level="OFF">
+		<appender-ref ref="error"/>
+	</logger>
+
+	<logger name="com.chinaztt.mes.common.aop" level="ERROR">
+		<appender-ref ref="error"/>
+	</logger>
+	<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
+	<root level="INFO">
+		<appender-ref ref="console"/>
+		<appender-ref ref="debug"/>
+	</root>
+</configuration>
diff --git a/src/test/java/com/chinaztt/mes/docx/DataAcquisitionApplicationTests.java b/src/test/java/com/chinaztt/mes/docx/DataAcquisitionApplicationTests.java
new file mode 100644
index 0000000..f531c24
--- /dev/null
+++ b/src/test/java/com/chinaztt/mes/docx/DataAcquisitionApplicationTests.java
@@ -0,0 +1,22 @@
+package com.chinaztt.mes.docx;
+
+import org.apache.commons.lang3.ObjectUtils;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.io.DataInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+@SpringBootTest
+class DataAcquisitionApplicationTests {
+
+    @Test
+    void  contextLoads() {
+        if (ObjectUtils.allNotNull("null")) {
+            System.out.println("鎴愬姛");
+        } else {
+            System.out.println("澶辫触");
+        }
+    }
+}

--
Gitblit v1.9.3