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