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