From bf95078dab81dcd0639fdb1a41e998b31c940fb1 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期二, 24 三月 2026 09:37:04 +0800
Subject: [PATCH] 采集器调整3
---
src/main/java/com/chinaztt/mes/docx/util/Result.java | 38 +-
src/main/java/com/chinaztt/mes/docx/pojo/TestBatch.java | 19 +
src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java | 149 +++-------
src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java | 6
pom.xml | 17 +
src/main/java/com/chinaztt/mes/docx/handler/SerialPortListener.java | 145 ++++++++++
src/main/java/com/chinaztt/mes/docx/util/TakeWords.java | 95 ++++++
/dev/null | 18 -
src/main/java/com/chinaztt/mes/docx/pojo/Chemical.java | 22 +
src/main/java/com/chinaztt/mes/docx/config/SerialPortStartupRunner.java | 37 ++
src/main/java/com/chinaztt/mes/docx/controller/DocxController.java | 13
src/main/java/com/chinaztt/mes/docx/util/XMLFileListener.java | 231 ++++++++++++++++
src/main/java/com/chinaztt/mes/docx/config/TomcatConfig.java | 2
src/main/java/com/chinaztt/mes/docx/service/DocxService.java | 8
src/main/resources/application.yml | 6
15 files changed, 642 insertions(+), 164 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5881d1f..8ae6c48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,16 @@
</properties>
<dependencies>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.19.0</version>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+ <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.23</version>
@@ -62,7 +72,12 @@
<artifactId>poi-ooxml-full</artifactId>
<version>5.2.5</version>
</dependency>
-
+ <dependency>
+ <groupId>com.microsoft.sqlserver</groupId>
+ <artifactId>mssql-jdbc</artifactId>
+ <version>12.4.1.jre8</version> <!-- 閫傞厤 Java 8锛屽叾浠栫増鏈彲璋冩暣 -->
+ <scope>runtime</scope>
+ </dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
diff --git a/src/main/java/com/chinaztt/mes/docx/config/SerialPortStartupRunner.java b/src/main/java/com/chinaztt/mes/docx/config/SerialPortStartupRunner.java
new file mode 100644
index 0000000..a896d22
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/config/SerialPortStartupRunner.java
@@ -0,0 +1,37 @@
+package com.chinaztt.mes.docx.config;
+
+import com.chinaztt.mes.docx.handler.SerialPortListener;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 椤圭洰鍚姩瀹屾垚鍚庢墽琛屼覆鍙g洃鍚�
+ */
+@Slf4j
+@Component
+public class SerialPortStartupRunner implements ApplicationRunner {
+
+ @Value("${serialPort.enable}")
+ public Boolean enableSerialPort;
+
+ @Resource
+ private SerialPortListener serialPortListenerService;
+
+ @Autowired
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+ @Override
+ public void run(ApplicationArguments args) {
+ log.info("===== SpringBoot 椤圭洰鍚姩瀹屾垚锛屽紑濮嬪垵濮嬪寲涓插彛鐩戝惉 =====");
+ // 鍚姩涓插彛鐩戝惉锛堟牳蹇冭皟鐢級
+ if(enableSerialPort)threadPoolTaskExecutor.execute(() -> serialPortListenerService.serialPortDataListener());
+ }
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java b/src/main/java/com/chinaztt/mes/docx/config/TomcatConfig.java
similarity index 94%
rename from src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java
rename to src/main/java/com/chinaztt/mes/docx/config/TomcatConfig.java
index a0fdee0..05e219c 100644
--- a/src/main/java/com/chinaztt/mes/docx/constant/TomcatConfig.java
+++ b/src/main/java/com/chinaztt/mes/docx/config/TomcatConfig.java
@@ -1,4 +1,4 @@
-package com.chinaztt.mes.docx.constant;
+package com.chinaztt.mes.docx.config;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
diff --git a/src/main/java/com/chinaztt/mes/docx/controller/DocxController.java b/src/main/java/com/chinaztt/mes/docx/controller/DocxController.java
index a031ec0..7c4e04d 100644
--- a/src/main/java/com/chinaztt/mes/docx/controller/DocxController.java
+++ b/src/main/java/com/chinaztt/mes/docx/controller/DocxController.java
@@ -2,7 +2,7 @@
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.Result;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -21,19 +21,18 @@
private DocxService docxService;
@GetMapping("/getFile")
- public R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException {
+ public Result<?> 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) {
+ public Result<?> moveFile(String startFilePath, String endFilePath, String fileType) {
return docxService.moveFile(startFilePath, endFilePath, fileType);
}
-
- @GetMapping("/test")
- public void test() {
- docxService.test();
+ @GetMapping("/readXml")
+ public void readXml() {
+ docxService.readXml();
}
}
diff --git a/src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java b/src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java
index b9735a0..a658526 100644
--- a/src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java
+++ b/src/main/java/com/chinaztt/mes/docx/handler/GlobalExceptionHandler.java
@@ -1,13 +1,13 @@
package com.chinaztt.mes.docx.handler;
-import com.chinaztt.mes.docx.util.R;
+import com.chinaztt.mes.docx.util.Result;
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());
+ public Result<?> exception(Exception e) {
+ return Result.failed(e.getMessage());
}
}
diff --git a/src/main/java/com/chinaztt/mes/docx/handler/SerialPortListener.java b/src/main/java/com/chinaztt/mes/docx/handler/SerialPortListener.java
new file mode 100644
index 0000000..d0edcff
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/handler/SerialPortListener.java
@@ -0,0 +1,145 @@
+package com.chinaztt.mes.docx.handler;
+
+import com.fazecast.jSerialComm.SerialPort;
+import com.fazecast.jSerialComm.SerialPortDataListener;
+import com.fazecast.jSerialComm.SerialPortEvent;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Component
+public class SerialPortListener {
+
+ // 涓插彛鏍稿績瀵硅薄
+ private static SerialPort serialPort;
+
+ // 瀹氫箟缂撳啿鍖猴紝鏆傚瓨闆舵暎鏁版嵁
+ private static final StringBuilder dataBuffer = new StringBuilder();
+
+ // 瀹氫箟鏁版嵁缁撴潫鏍囧織
+ private static final String END_MARK = "g";
+
+ public List<Double> dataList = new ArrayList<>(6);
+
+ private static final int MAX_COUNT = 6;
+
+ @Value("${serialPort.listenName}")
+ public String listenName;
+
+ // 鏍囪鐩戝惉鏄惁杩愯
+ private volatile boolean isListening = false;
+
+ public void serialPortDataListener(){
+ // 鍙岄噸鏍¢獙閿侊紝閬垮厤閲嶅鍚姩
+ if (isListening) {
+ log.warn("涓插彛 {} 鐩戝惉宸插惎鍔紝鏃犻渶閲嶅鎵ц", listenName);
+ return;
+ }
+
+ synchronized (this) {
+ if (isListening) {
+ return;
+ }
+ isListening = true;
+ }
+
+ // 2. 閫夋嫨鐩爣涓插彛
+ String targetPortName = listenName;
+ serialPort = SerialPort.getCommPort(targetPortName);
+
+ // 3. 閰嶇疆涓插彛鍙傛暟锛堥渶涓庤澶囩涓�鑷达級
+ serialPort.setBaudRate(9600); // 娉㈢壒鐜�
+ serialPort.setNumDataBits(8); // 鏁版嵁浣�
+ serialPort.setNumStopBits(1); // 鍋滄浣�
+ serialPort.setParity(SerialPort.NO_PARITY); // 鏍¢獙浣嶏紙鏃犳牎楠岋級
+ serialPort.setFlowControl(SerialPort.NO_PARITY); // 鍏抽棴娴佹帶
+ serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 1000, 0); // 璇诲彇瓒呮椂
+
+ // 4. 鎵撳紑涓插彛
+ if (serialPort.openPort()) {
+ log.info("涓插彛鎵撳紑鎴愬姛锛歿}",targetPortName);
+ } else {
+ log.error("涓插彛鎵撳紑澶辫触锛佽妫�鏌ヤ覆鍙f槸鍚﹁鍗犵敤鎴栧悕绉版槸鍚︽纭�");
+ isListening = false;
+ return;
+ }
+
+ // 5. 娉ㄥ唽涓插彛鏁版嵁鐩戝惉鍣紙寮傛璇诲彇锛岄伩鍏嶉樆濉炰富绾跨▼锛�
+ try {
+ serialPort.addDataListener(new SerialPortDataListener() {
+ // 鎸囧畾鐩戝惉鐨勪簨浠剁被鍨嬶細鏁版嵁鍙敤鏃惰Е鍙�
+ @Override
+ public int getListeningEvents() {
+ return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
+ }
+
+ // 鏁版嵁鍙敤鏃剁殑澶勭悊閫昏緫
+ @Override
+ public void serialEvent(SerialPortEvent event) {
+ if (event.getEventType() == SerialPort.LISTENING_EVENT_DATA_AVAILABLE) {
+ // 璇诲彇缂撳啿鍖轰腑鐨勬墍鏈夊瓧鑺�
+ byte[] buffer = new byte[serialPort.bytesAvailable()];
+ int readBytes = serialPort.readBytes(buffer, buffer.length);
+
+ if (readBytes > 0) {
+ // 鎶婃湰娆℃敹鍒扮殑闆舵暎鏁版嵁杞垚瀛楃涓诧紝杩藉姞鍒扮紦鍐插尯
+ String received = new String(buffer, 0, readBytes, StandardCharsets.UTF_8);
+ dataBuffer.append(received);
+
+ // 妫�鏌ョ紦鍐插尯鏄惁鍖呭惈鈥滅粨鏉熸爣蹇椻�濓紝寰幆澶勭悊鎵�鏈夊畬鏁存暟鎹�
+ int endIndex = dataBuffer.indexOf(END_MARK);
+ while (endIndex != -1) {
+ // 鎻愬彇鈥滃紑澶村埌缁撴潫鏍囧織鈥濈殑瀹屾暣鏁版嵁
+ String completeData = dataBuffer.substring(0, endIndex).replace(" ", "").replace("\n","");
+ // 鎵撳嵃/澶勭悊鍚堝苟鍚庣殑瀹屾暣鏁版嵁
+ double parseDouble = Double.parseDouble(completeData);
+ log.info("鎺ユ敹鍒扮殑鏁版嵁-->{}",parseDouble);
+ if(dataList.size()<MAX_COUNT){
+ dataList.add(parseDouble);
+ }
+ // 绉婚櫎缂撳啿鍖轰腑宸插鐞嗙殑閮ㄥ垎锛堜繚鐣欏墿浣欐湭瀹屾垚鐨勫唴瀹癸級
+ dataBuffer.delete(0, endIndex + END_MARK.length());
+ // 缁х画妫�鏌ョ紦鍐插尯鏄惁杩樻湁鍏朵粬瀹屾暣鏁版嵁
+ endIndex = dataBuffer.indexOf(END_MARK);
+ }
+ }
+ }
+ }
+ });
+ } catch (Exception e) {
+ log.warn("涓插彛鐩戝惉瀛愮嚎绋嬭涓柇", e);
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ /**
+ * 鍏抽棴涓插彛
+ */
+ private void closeSerialPort() {
+ if (serialPort != null && serialPort.isOpen()) {
+ serialPort.removeDataListener(); // 绉婚櫎鐩戝惉
+ serialPort.closePort(); // 鍏抽棴涓插彛
+ log.info("涓插彛 {} 宸插叧闂�", listenName);
+ }
+ isListening = false;
+ }
+
+ /**
+ * 椤圭洰鍋滄鏃跺叧闂覆鍙�
+ */
+ @PreDestroy
+ public void destroy() {
+ log.info("椤圭洰鍋滄锛屽叧闂覆鍙� {} 鐩戝惉", listenName);
+ isListening = false; // 缁堟瀛愮嚎绋嬪惊鐜�
+ closeSerialPort();
+ }
+
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/pojo/Chemical.java b/src/main/java/com/chinaztt/mes/docx/pojo/Chemical.java
new file mode 100644
index 0000000..ce15cfc
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/pojo/Chemical.java
@@ -0,0 +1,22 @@
+package com.chinaztt.mes.docx.pojo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description 鍖栧鎴愬垎淇℃伅
+ * @Author fz
+ **/
+@Data
+public class Chemical implements Serializable {
+
+ private String name;// 鍏冪礌鍚�
+ private String value = "-";// 妫�楠屾暟鍊�
+ private String record = "-";// 璁板綍鏁板��
+ private String detail = "-";// 鏍囧噯鏄庣粏
+ private String result = "-";// 妫�楠岀粨璁�
+ private Date testTime;
+ private Date equipmentTime;
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/pojo/TestBatch.java b/src/main/java/com/chinaztt/mes/docx/pojo/TestBatch.java
new file mode 100644
index 0000000..9a0f6c2
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/pojo/TestBatch.java
@@ -0,0 +1,19 @@
+package com.chinaztt.mes.docx.pojo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description 鍏夎氨浠笂鐨勬楠屼俊鎭�
+ * @Author fz
+ **/
+@Data
+public class TestBatch implements Serializable {
+
+ private String batchNo;// 妫�楠屾壒娆′俊鎭�
+ private Date equipmentTime;// 璁板綍鏃堕棿
+ private List<Chemical> chemicals;// 鍖栧鎴愬垎鍒楄〃
+}
diff --git a/src/main/java/com/chinaztt/mes/docx/service/DocxService.java b/src/main/java/com/chinaztt/mes/docx/service/DocxService.java
index 4029dd8..7b6d49d 100644
--- a/src/main/java/com/chinaztt/mes/docx/service/DocxService.java
+++ b/src/main/java/com/chinaztt/mes/docx/service/DocxService.java
@@ -1,17 +1,17 @@
package com.chinaztt.mes.docx.service;
import com.chinaztt.mes.docx.dto.GetFileDto;
-import com.chinaztt.mes.docx.util.R;
+import com.chinaztt.mes.docx.util.Result;
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;
+ Result<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException;
- R<?> moveFile(String startFilePath, String endFilePath, String fileType);
+ Result<?> moveFile(String startFilePath, String endFilePath, String fileType);
- void test();
+ void readXml();
}
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
index a10f958..8a55cec 100644
--- a/src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java
+++ b/src/main/java/com/chinaztt/mes/docx/service/impl/DocxServiceImpl.java
@@ -3,79 +3,93 @@
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil;
import com.chinaztt.mes.docx.dto.GetFileDto;
+import com.chinaztt.mes.docx.handler.SerialPortListener;
+import com.chinaztt.mes.docx.pojo.TestBatch;
import com.chinaztt.mes.docx.service.DocxService;
-import com.chinaztt.mes.docx.util.R;
+import com.chinaztt.mes.docx.util.XMLFileListener;
+import com.chinaztt.mes.docx.util.Result;
import com.chinaztt.mes.docx.util.TakeWords;
-import com.fazecast.jSerialComm.SerialPort;
-import com.fazecast.jSerialComm.SerialPortDataListener;
-import com.fazecast.jSerialComm.SerialPortEvent;
+import lombok.extern.slf4j.Slf4j;
import net.sourceforge.tess4j.TesseractException;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Service
+@Slf4j
public class DocxServiceImpl implements DocxService {
+ @Autowired
+ private SerialPortListener serialPortListener;
+
@Override
- public R<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException {
+ public Result<?> getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException {
String fileExtension = getFileDto.getFileExtension();
if(StringUtils.equals(".pngInExcel",getFileDto.getFileExtension())){
fileExtension = ".xls";
}
File file = getFileStart(getFileDto.getFilePath(), fileExtension);
if (file != null && !file.exists()) {
- return R.failed("鏈煡璇㈠埌璇ヨ矾寰勶細" + getFileDto.getFilePath() + "涓嬪瓨鍦細" + getFileDto.getFileExtension() + "缁撳熬鐨勬枃浠讹紒");
+ return Result.failed("鏈煡璇㈠埌璇ヨ矾寰勶細" + getFileDto.getFilePath() + "涓嬪瓨鍦細" + getFileDto.getFileExtension() + "缁撳熬鐨勬枃浠讹紒");
}
switch (getFileDto.getFileExtension()) {
case ".docx":
- return R.ok(TakeWords.readWordFile(file));
+ return Result.ok(TakeWords.readWordFile(file));
case ".pngInExcel":
- return R.ok(TakeWords.readPngContextInExcel(file));
+ return Result.ok(TakeWords.readPngContextInExcel(file));
case ".xls":
case ".xlsx":
try {
- return R.ok(TakeWords.readExcelFile(file));
+ return Result.ok(TakeWords.readExcelFile(file));
} catch (Exception e) {
- return R.failed("鍙︿竴涓▼搴忔鍦ㄤ娇鐢ㄦ鏂囦欢锛屾棤娉曡繘琛屾暟鎹噰闆嗐��");
+ return Result.failed("鍙︿竴涓▼搴忔鍦ㄤ娇鐢ㄦ鏂囦欢锛屾棤娉曡繘琛屾暟鎹噰闆嗐��");
}
case ".txt":
- return R.ok(TakeWords.readTxtFile(file));
+ return Result.ok(TakeWords.readTxtFile(file));
case ".csv":
- return R.ok(TakeWords.readCsvFile(file));
+ return Result.ok(TakeWords.readCsvFile(file));
case ".mdb":
if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) {
- return R.failed("鏈厤缃�.mdb閲囬泦鏂囦欢鍚嶇О锛�");
+ return Result.failed("鏈厤缃�.mdb閲囬泦鏂囦欢鍚嶇О锛�");
}
- return R.ok(TakeWords.readMdbFile(file, getFileDto));
+ return Result.ok(TakeWords.readMdbFile(file, getFileDto));
case ".db":
if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) {
- return R.failed("鏈厤缃�.db閲囬泦鏂囦欢鍚嶇О锛�");
+ return Result.failed("鏈厤缃�.db閲囬泦鏂囦欢鍚嶇О锛�");
}
- return R.ok(TakeWords.readDbFile(file, getFileDto));
+ return Result.ok(TakeWords.readDbFile(file, getFileDto));
case ".mysql":
if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) {
- return R.failed("鏈厤缃�.mysql閲囬泦鏂囦欢鍚嶇О锛�");
+ return Result.failed("鏈厤缃�.mysql閲囬泦鏂囦欢鍚嶇О锛�");
}
- return R.ok(TakeWords.getMysqlFile(getFileDto));
+ return Result.ok(TakeWords.getMysqlFile(getFileDto));
case ".png":
- return R.ok(TakeWords.readPngFile(file));
+ return Result.ok(TakeWords.readPngFile(file));
case ".mqtt":
- return R.ok("mqtt---");
+ return Result.ok("mqtt---");
+ case ".serialPort":
+ List<Double> valList = new ArrayList<>(serialPortListener.dataList);
+ serialPortListener.dataList.clear();
+ return Result.ok(valList);
+ case ".sqlserver":
+ if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) {
+ return Result.failed("鏈厤缃�.sqlserver閲囬泦鏂囦欢鍚嶇О锛�");
+ }
+ return Result.ok(TakeWords.readSqlServerDataBase(getFileDto));
default:
- return R.failed("鍚庣紑鍚嶉厤缃敊璇紒");
+ return Result.failed("鍚庣紑鍚嶉厤缃敊璇紒");
}
}
@Override
- public R<?> moveFile(String startFilePath, String endFilePath, String fileType) {
+ public Result<?> moveFile(String startFilePath, String endFilePath, String fileType) {
// 婧愭枃浠惰矾寰�
File startFile= getFileStart(startFilePath, fileType);
// 鐩殑鐩綍璺緞
@@ -90,15 +104,14 @@
try {
// 璋冪敤File绫荤殑鏍稿績鏂规硶renameTo
if (startFile.renameTo(endFile)) {
- return R.ok("鏂囦欢绉诲姩鎴愬姛锛�");
+ return Result.ok("鏂囦欢绉诲姩鎴愬姛锛�");
} else {
- return R.failed("鏂囦欢绉诲姩澶辫触锛�");
+ return Result.failed("鏂囦欢绉诲姩澶辫触锛�");
}
}catch(Exception e) {
- return R.failed("鏂囦欢绉诲姩鍑虹幇寮傚父锛�");
+ return Result.failed("鏂囦欢绉诲姩鍑虹幇寮傚父锛�");
}
}
-
public static File getLatestFile(List<File> files) {
File latestFile = null;
@@ -140,84 +153,10 @@
}
@Override
- public void test(){
- // 1. 鑾峰彇鎵�鏈夊彲鐢ㄧ殑涓插彛
- SerialPort[] ports = SerialPort.getCommPorts();
- if (ports.length == 0) {
- System.err.println("鏈壘鍒板彲鐢ㄧ殑涓插彛锛�");
- return;
- }
-
- // 鎵撳嵃鎵�鏈夊彲鐢ㄤ覆鍙o紙渚涚敤鎴烽�夋嫨锛�
- System.out.println("鍙敤涓插彛鍒楄〃锛�");
- SerialPort targetPort = null;
- for (int i = 0; i < ports.length; i++) {
- if(ports[i].getSystemPortName().equals("COM7")){
- targetPort = ports[i];
- }
- System.out.printf("%d: %s (%s)\n", i + 1, ports[i].getSystemPortName(), ports[i].getPortDescription());
- }
-
- // 2. 閫夋嫨鐩爣涓插彛锛堢ず渚嬶細閫夋嫨绗竴涓覆鍙o級
-
- System.out.println("\n閫夋嫨鐨勪覆鍙o細" + targetPort.getSystemPortName());
-
- // 3. 閰嶇疆涓插彛鍙傛暟锛堝繀椤讳笌璁惧涓�鑷达紝鍚﹀垯閫氫俊澶辫触锛�
- targetPort.setComPortParameters(
- 9600, // 娉㈢壒鐜囷紙甯歌鍊硷細9600銆�19200銆�38400銆�115200锛�
- 8, // 鏁版嵁浣嶏紙閫氬父涓� 8锛�
- SerialPort.ONE_STOP_BIT, // 鍋滄浣嶏紙1 浣嶏級
- SerialPort.NO_PARITY // 鏍¢獙浣嶏紙鏃犳牎楠岋級
- );
- targetPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 100, 0); // 璇诲彇瓒呮椂璁剧疆
-
- // 4. 鎵撳紑涓插彛
- if (!targetPort.openPort()) {
- System.err.println("涓插彛鎵撳紑澶辫触锛佽妫�鏌ョ鍙f槸鍚﹁鍗犵敤鎴栨潈闄愭槸鍚﹁冻澶熴��");
- return;
- }
- System.out.println("涓插彛鎵撳紑鎴愬姛锛�");
-
- // 5. 娉ㄥ唽鏁版嵁鐩戝惉锛堝紓姝ヨ鍙栨暟鎹級
- SerialPort finalTargetPort = targetPort;
- targetPort.addDataListener(new SerialPortDataListener() {
- @Override
- public int getListeningEvents() {
- return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; // 鐩戝惉鏁版嵁鍙敤浜嬩欢
- }
-
- @Override
- public void serialEvent(SerialPortEvent event) {
- System.out.println("asasa"+event.toString());
- if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE) {
- return;
- }
-
- // 璇诲彇鍙敤鏁版嵁
- byte[] readBuffer = new byte[finalTargetPort.bytesAvailable()];
- int bytesRead = finalTargetPort.readBytes(readBuffer, readBuffer.length);
-
- if (bytesRead > 0) {
- // 杞崲涓哄瓧绗︿覆锛堟牴鎹澶囩紪鐮佽皟鏁达紝甯歌锛歎TF-8銆丟BK锛�
- String data = new String(readBuffer, 0, bytesRead, StandardCharsets.UTF_8);
- System.out.printf("鏀跺埌鏁版嵁锛�%d 瀛楄妭锛夛細%s", bytesRead, data);
- }
- }
- });
-
- // 6. 淇濇寔绋嬪簭杩愯锛堥伩鍏嶄富绾跨▼閫�鍑猴級
- try {
- while (true) {
- Thread.sleep(1000); // 涓荤嚎绋嬩紤鐪狅紝涓嶅奖鍝嶇洃鍚嚎绋�
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- System.out.println("绋嬪簭琚腑鏂��");
- } finally {
- // 7. 鍏抽棴涓插彛锛堢▼搴忛��鍑烘椂閲婃斁璧勬簮锛�
- targetPort.closePort();
- System.out.println("涓插彛宸插叧闂��");
- }
+ public void readXml() {
+ XMLFileListener fileListener = new XMLFileListener();
+ List<TestBatch> testBatches = fileListener.explainXml(new File("C:\\Users\\27233\\Desktop\\251117鏁伴噰鏂囦欢\\鏁伴噰鏂囦欢\\鍏夎氨浠猂esults_20251018133246.xml"));
+ testBatches.forEach(System.out::println);
}
}
diff --git a/src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java b/src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java
deleted file mode 100644
index 3817040..0000000
--- a/src/main/java/com/chinaztt/mes/docx/util/CharsetChangeUtil.java
+++ /dev/null
@@ -1,18 +0,0 @@
-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/Result.java
similarity index 73%
rename from src/main/java/com/chinaztt/mes/docx/util/R.java
rename to src/main/java/com/chinaztt/mes/docx/util/Result.java
index c145904..63f4c24 100644
--- a/src/main/java/com/chinaztt/mes/docx/util/R.java
+++ b/src/main/java/com/chinaztt/mes/docx/util/Result.java
@@ -9,7 +9,11 @@
import java.io.Serializable;
-public class R<T> implements Serializable {
+/**
+ * 閫氱敤杩斿洖瀵硅薄
+ * @param <T>
+ */
+public class Result<T> implements Serializable {
private static final long serialVersionUID = 1L;
// "杩斿洖鏍囪锛氭垚鍔熸爣璁�=0锛屽け璐ユ爣璁�=1"
private int code;
@@ -18,36 +22,36 @@
// "鏁版嵁"
private T data;
- public static <T> R<T> ok() {
+ public static <T> Result<T> ok() {
return restResult(null, CommonConstants.SUCCESS, (String) null);
}
- public static <T> R<T> ok(T data) {
+ public static <T> Result<T> ok(T data) {
return restResult(data, CommonConstants.SUCCESS, (String) null);
}
- public static <T> R<T> ok(T data, String msg) {
+ public static <T> Result<T> ok(T data, String msg) {
return restResult(data, CommonConstants.SUCCESS, msg);
}
- public static <T> R<T> failed() {
+ public static <T> Result<T> failed() {
return restResult(null, CommonConstants.FAIL, (String) null);
}
- public static <T> R<T> failed(String msg) {
+ public static <T> Result<T> failed(String msg) {
return restResult(null, CommonConstants.FAIL, msg);
}
- public static <T> R<T> failed(T data) {
+ public static <T> Result<T> failed(T data) {
return restResult(data, CommonConstants.FAIL, (String) null);
}
- public static <T> R<T> failed(T data, String msg) {
+ public static <T> Result<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();
+ private static <T> Result<T> restResult(T data, int code, String msg) {
+ Result<T> apiResult = new Result();
apiResult.setCode(code);
apiResult.setData(data);
apiResult.setMsg(msg);
@@ -62,10 +66,10 @@
return "R(code=" + this.getCode() + ", msg=" + this.getMsg() + ", data=" + this.getData() + ")";
}
- public R() {
+ public Result() {
}
- public R(int code, String msg, T data) {
+ public Result(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
@@ -75,7 +79,7 @@
return this.code;
}
- public R<T> setCode(int code) {
+ public Result<T> setCode(int code) {
this.code = code;
return this;
}
@@ -84,7 +88,7 @@
return this.msg;
}
- public R<T> setMsg(String msg) {
+ public Result<T> setMsg(String msg) {
this.msg = msg;
return this;
}
@@ -93,7 +97,7 @@
return this.data;
}
- public R<T> setData(T data) {
+ public Result<T> setData(T data) {
this.data = data;
return this;
}
@@ -121,8 +125,8 @@
return this;
}
- public R<T> build() {
- return new R(this.code, this.msg, this.data);
+ public Result<T> build() {
+ return new Result(this.code, this.msg, this.data);
}
public String toString() {
diff --git a/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java b/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
index 861d5ad..e563da7 100644
--- a/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
+++ b/src/main/java/com/chinaztt/mes/docx/util/TakeWords.java
@@ -17,7 +17,6 @@
import org.apache.poi.ooxml.POIXMLDocument;
import org.apache.poi.ooxml.extractor.POIXMLTextExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
@@ -236,7 +235,7 @@
if(StringUtils.isNotBlank(getFileDto.getMdbSampleCode())){
s+=" and " + getFileDto.getMdbSampleCode() + " = '" + getFileDto.getSampleCode() + "'";
}
- if(StringUtils.isNotBlank(getFileDto.getBushingColorField())){
+ if(ObjectUtils.allNotNull(getFileDto.getBushingColorField(), getFileDto.getBushingColor()) && !getFileDto.getBushingColorField().equals("null")){
s+=" and " + getFileDto.getBushingColorField() + " = '" + getFileDto.getBushingColor() + "'";
}
@@ -286,7 +285,7 @@
String table = getFileDto.getDbTable();
// 妫�鏌ユ暟鎹簱鍚嶅拰琛ㄥ悕鏄惁涓虹┖
if (dbName == null || dbName.isEmpty() || table == null || table.isEmpty()) {
- return R.failed("鏁版嵁搴撳悕鎴栬〃鍚嶄笉鑳戒负绌�");
+ return Result.failed("鏁版嵁搴撳悕鎴栬〃鍚嶄笉鑳戒负绌�");
}
// 鏁版嵁搴撹繛鎺ヤ俊鎭�
String url = "jdbc:mysql://localhost:3306/"+dbName+"?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&characterEncoding=utf8";
@@ -332,7 +331,7 @@
} catch (Exception e) {
e.printStackTrace();
// 鍋囪 R 绫绘湁 failed 鏂规硶锛岃嫢娌℃湁闇�琛ュ厖瀹炵幇
- return R.failed("鏁版嵁搴撴煡璇㈠嚭閿�: " + e.getMessage());
+ return Result.failed("鏁版嵁搴撴煡璇㈠嚭閿�: " + e.getMessage());
} finally {
try {
if (resultSet != null) {
@@ -371,9 +370,13 @@
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 + "'";
+ String sql = "select * from " + getFileDto.getDbFileName() + " where 1=1";
+ if(StringUtils.isNotBlank(getFileDto.getMdbEntrustCode())){
+ sql+=" and " + getFileDto.getMdbEntrustCode() + " = '" + getFileDto.getEntrustCode() +"'";
+ }
+ if(StringUtils.isNotBlank(getFileDto.getMdbSampleCode())){
+ sql+=" and " + getFileDto.getMdbSampleCode() + " = '" + sampleCode + "'";
+ }
if (ObjectUtils.allNotNull(getFileDto.getFiberOpticRibbonCode(), getFileDto.getFiberOpticRibbon()) && !getFileDto.getFiberOpticRibbonCode().equals("null")) {
sql = sql + " and " + getFileDto.getFiberOpticRibbonCode() + " = '" + getFileDto.getFiberOpticRibbon() + "'";
}
@@ -456,4 +459,82 @@
}
}
+ /**
+ * 璇诲彇sqlserver鏁版嵁
+ * @param getFileDto 璇锋眰鍙傛暟瀵硅薄
+ * @return
+ */
+ public static Object readSqlServerDataBase(GetFileDto getFileDto) {
+ Map<String, Object> tableMap = new HashMap<>(16);
+ // 浠� GetFileDto 鑾峰彇鏁版嵁搴撳悕锛屽搴斻�愭枃浠跺悕绉般�戝瓧娈�
+ String dbName = getFileDto.getDbFileName();
+ String user = getFileDto.getDbUserName();
+ String password = getFileDto.getDbPassword();
+ // 浠� GetFileDto 鑾峰彇鏁版嵁琛ㄥ悕锛屽搴斻�愭暟鎹簱琛ㄥ悕銆戝瓧娈�
+ String table = getFileDto.getDbTable();
+ // 妫�鏌ユ暟鎹簱鍚嶅拰琛ㄥ悕鏄惁涓虹┖
+ if (dbName == null || dbName.isEmpty() || table == null || table.isEmpty()) {
+ return Result.failed("鏁版嵁搴撳悕鎴栬〃鍚嶄笉鑳戒负绌�");
+ }
+ // 鏁版嵁搴撹繛鎺ヤ俊鎭�
+ String url = "jdbc:sqlserver://localhost:1433;DatabaseName="+dbName+";encrypt=true;trustServerCertificate=true";
+ Connection connection = null;
+ PreparedStatement preparedStatement = null;
+ ResultSet resultSet = null;
+ List<Map<String, Object>> dataList = new ArrayList<>();
+ try {
+ // 寤虹珛杩炴帴
+ connection = DriverManager.getConnection(url, user, password);
+ // 鏋勫缓鍩虹 SQL
+
+ String sql = "SELECT * FROM "+table+" WHERE 1=1";
+ if(StringUtils.isNotBlank(getFileDto.getMdbEntrustCode()) ){
+ sql+=" AND (" + getFileDto.getMdbEntrustCode() + " = TRIM('" + getFileDto.getEntrustCode()+ "')";
+ if(StringUtils.isNotBlank(getFileDto.getLotBatchNo())){
+ sql+=" OR "+ getFileDto.getMdbEntrustCode() + " = TRIM('" + getFileDto.getLotBatchNo()+ "')";
+ }
+ sql+=")";
+ }
+ if(StringUtils.isNotBlank(getFileDto.getMdbSampleCode())){
+ sql+=" AND " + getFileDto.getMdbSampleCode() + " = '" + getFileDto.getSampleCode() + "'";
+ }
+ if(StringUtils.isNotBlank(getFileDto.getCableTag())){
+ sql+=" AND Color = '" + getFileDto.getCableTag() + "'";
+ }
+ // 鍒涘缓 PreparedStatement 瀵硅薄鎵ц SQL
+ preparedStatement = connection.prepareStatement(sql);
+ resultSet = preparedStatement.executeQuery();
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ int columnCount = metaData.getColumnCount();
+ // 閬嶅巻缁撴灉闆嗚幏鍙栨暟鎹�
+ while (resultSet.next()) {
+ Map<String, Object> rowData = new HashMap<>();
+ for (int i = 1; i <= columnCount; i++) {
+ String columnName = metaData.getColumnName(i);
+ rowData.put(columnName, resultSet.getObject(i));
+ }
+ dataList.add(rowData);
+ }
+ tableMap.put("data", dataList);
+ } catch (Exception e) {
+ e.printStackTrace();
+ // 鍋囪 R 绫绘湁 failed 鏂规硶锛岃嫢娌℃湁闇�琛ュ厖瀹炵幇
+ return Result.failed("鏁版嵁搴撴煡璇㈠嚭閿�: " + e.getMessage());
+ } finally {
+ try {
+ if (resultSet != null) {
+ resultSet.close();
+ }
+ if (preparedStatement != null) {
+ preparedStatement.close();
+ }
+ if (connection != null) {
+ connection.close();
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ return tableMap;
+ }
}
diff --git a/src/main/java/com/chinaztt/mes/docx/util/XMLFileListener.java b/src/main/java/com/chinaztt/mes/docx/util/XMLFileListener.java
new file mode 100644
index 0000000..585dfc0
--- /dev/null
+++ b/src/main/java/com/chinaztt/mes/docx/util/XMLFileListener.java
@@ -0,0 +1,231 @@
+package com.chinaztt.mes.docx.util;
+
+import com.chinaztt.mes.docx.pojo.Chemical;
+import com.chinaztt.mes.docx.pojo.TestBatch;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.SerializationUtils;
+import org.dom4j.Attribute;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import java.io.File;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description 鏂囦欢鍙樺寲澶勭悊
+ * @Author fz
+ **/
+@Slf4j
+public class XMLFileListener {
+
+ private final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ /**
+ * 瑙f瀽xml鏂囦欢
+ *
+ * @param file
+ */
+ public List<TestBatch> explainXml(File file) {
+ // 閫氳繃鍚庣紑鍚嶅垽鏂槸鍚︽槸xml鏂囦欢
+ if (file.exists() && file.isFile()) {
+ String fileName = file.getName();
+ if (".xml".equals(fileName.substring(fileName.lastIndexOf(".")))) {
+ // 鍒涘缓reader瀵硅薄
+ SAXReader reader = new SAXReader();
+ // 鍔犺浇xml鏂囦欢
+ Document document;
+ try {
+ document = reader.read(file);
+ } catch (Exception e) {
+ log.error("鏂囨。鍐呭闈瀤ml鏍煎紡锛屾棤娉曡В鏋愶紒");
+ return null;
+ }
+ // 鏍硅妭鐐� SampleResults
+ Element root = document.getRootElement();
+ // 妫�楠屾壒娆′俊鎭妭鐐� SampleResult
+ Element sampleResult = root.element("SampleResult");
+ List<Attribute> attributes = sampleResult.attributes();
+ String name;
+ String value;
+ String batchNo = null;
+ String mark = null;
+ String reportTime = null;
+ for (Attribute attribute : attributes) {
+ name = attribute.getName();
+ value = attribute.getValue();
+ if ("Type".equals(name) && "TypeStandardization".equals(value)) {
+ log.info("鏍″噯鏁版嵁锛屼笉杩涜閲囬泦...");
+ return null;
+ } else if ("Name".equals(name)) {
+ batchNo = value;
+ } else if ("TypeCorrSample".equals(name)) {
+ mark = value;
+ } else if ("RecalculationDateTime".equals(name)) {
+ reportTime = value;
+ }
+ }
+ if (batchNo == null || batchNo.trim().length() == 0) {
+ log.warn("鏃犳硶瑙f瀽鎵规鍙蜂俊鎭紝姝や负蹇呰淇℃伅鎵�浠ョ粓姝㈣В鏋愶紒");
+ return null;
+ }
+ // 鍏堝垽鏂槸鍚︽槸姹熶笢閲戝叿鐨勫鎵樿鍗�
+// List<String> batchNos = saveTestBatchService.explainBatchNo(batchNo.trim());
+// if (batchNos == null || batchNos.size() == 0) {
+// return null;
+// }
+// if (batchNos.get(0).equals(batchNo.trim())) {
+// log.warn(batchNo.trim() + " 闈炴娴嬪崟鍙凤紝涓嶈繘琛岃В鏋�...");
+// return null;
+// }
+ // 鍐嶅幓闄よ灪鏍撹灪姣嶇殑濮旀墭璁㈠崟(鐜颁笉鍋氶噰闆�)
+ /*batchNos = saveTestBatchService.excludeBatchNo(batchNos);
+ if (batchNos == null || batchNos.size() == 0) {
+ log.warn("璇ユ壒娆′负铻烘爴/铻烘瘝鐨勬娴嬪崟锛岀幇涓嶅仛閲囬泦...");
+ return null;
+ }*/
+ // 鍖呭惈鍏蜂綋妫�楠屼俊鎭妭鐐� MeasurementReplicates
+ Element measurement = sampleResult.element("MeasurementReplicates");
+ List<Element> elements = measurement.elements();
+ List<TestBatch> batches = new ArrayList<>(elements.size());
+ TestBatch batch;
+ Date time;
+ List<Element> children;
+ for (Element element : elements) {
+ batch = new TestBatch();
+ try {
+ value = element.attributeValue("MeasureDateTime").replaceFirst("T", " ");
+ time = SDF.parse(value);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ log.error("鎶ュ憡鏃堕棿鏍煎紡闈� yyyy-MM-ddTHH:mm:ss 鎴� yyyy-MM-dd HH:mm:ss锛屾棤娉曡В鏋愶紒");
+ return null;
+ }
+ batch.setEquipmentTime(time);
+ // 鍙栨湭琚垹闄ょ殑妫�楠屼俊鎭�
+ value = element.attributeValue("IsDeleted");
+ if ("No".equals(value)) {
+ element = element.element("Measurement");
+ // 鐪熸鍖呭惈妫�楠岀粨鏋滅殑鑺傜偣 Elements
+ element = element.element("Elements");
+ children = element.elements("Element");
+ batch.setChemicals(explainElements(children, time));
+ batches.add(batch);
+ }
+ }
+ if (!batches.isEmpty()) {
+ // 鍖呭惈妫�楠屾暟鎹钩鍧囧�艰妭鐐� MeasurementStatistics
+ elements = null;
+ try {
+ measurement = sampleResult.element("MeasurementStatistics").element("Measurement").element("Elements");
+ elements = measurement.elements("Element");
+ } catch (Exception e) {
+ log.error("妫�楠屾暟鎹钩鍧囧�兼棤娉曡В鏋愶紒");
+ }
+ if (elements != null && !elements.isEmpty()) {
+ batch = new TestBatch();
+ time = batches.get(batches.size() - 1).getEquipmentTime();
+ batch.setEquipmentTime(time);
+ batch.setChemicals(explainElements(elements, time));
+ batches.add(batch);
+ }
+// List<List<TestBatch>> testBatches = new ArrayList<>(batchNos.size());
+// if (batchNos.size() > 1) {
+// List<TestBatch> batchList;
+// for (String no : batchNos) {
+// log.info("鎶ュ憡妫�楠屾壒娆★細" + no + "\t鏉愭枡鐗屽彿锛�" + mark + "\t鐢熸垚鏃堕棿锛�" + reportTime);
+// batchList = cloneBatches(batches, no);
+// testBatches.add(batchList);
+// }
+// } else if (batchNos.size() == 1) {
+// log.info("鎶ュ憡妫�楠屾壒娆★細" + batchNos.get(0) + "\t鏉愭枡鐗屽彿锛�" + mark + "\t鐢熸垚鏃堕棿锛�" + reportTime);
+// for (TestBatch testBatch : batches) {
+// testBatch.setBatchNo(batchNos.get(0));
+// }
+// testBatches.add(batches);
+// }
+// log.info(fileName + " 瑙f瀽瀹屾垚...");
+// return testBatches;
+ return batches;
+ } else {
+ log.warn(fileName + " 鏈В鏋愬嚭鏈夋晥鏁版嵁锛�");
+ return null;
+ }
+ }
+ log.warn(fileName + " 闈瀤ml鏂囦欢锛屾棤娉曡В鏋愶紒");
+ }
+ return null;
+ }
+
+ private List<Chemical> explainElements(List<Element> elements, Date time) {
+ List<Chemical> chemicals = new ArrayList<>(elements.size());
+ Chemical chemical;
+ String value;
+ List<Element> results;
+ for (Element child : elements) {
+ chemical = new Chemical();
+ value = child.attributeValue("ElementName");
+ chemical.setName(value);
+ results = child.elements();
+ if (results.size() == 3) {
+ for (Element result : results) {
+ value = result.attributeValue("StatType");
+ if ("Reported".equals(value)) {
+ /*value = result.attributeValue("CalibrationStatus");
+ if (!"InRange".equals(value)) {
+ chemical.setRemark(value);
+ }*/
+ result = result.element("ResultValue");
+ value = result.getTextTrim();
+ chemical.setValue(value);
+ chemical.setEquipmentTime(time);
+ }
+ }
+ } else {
+ for (Element result : results) {
+ value = result.attributeValue("Type");
+ if ("ConcTypeCorr".equals(value)) {
+ value = result.attributeValue("StatType");
+ if ("Reported".equals(value)) {
+ /*value = result.attributeValue("CalibrationStatus");
+ if (!"InRange".equals(value)) {
+ chemical.setRemark(value);
+ }*/
+ result = result.element("ResultValue");
+ value = result.getTextTrim();
+ chemical.setValue(value);
+ chemical.setEquipmentTime(time);
+ }
+ }
+ }
+ }
+ if (!"-".equals(chemical.getValue())) {
+ chemicals.add(chemical);
+ }
+ }
+ return chemicals;
+ }
+
+ /**
+ * 瀵硅薄鏁扮粍娣辨嫹璐�
+ *
+ * @param batches
+ * @param batchNo
+ * @return
+ */
+ private List<TestBatch> cloneBatches(List<TestBatch> batches, String batchNo) {
+ List<TestBatch> testBatches = new ArrayList<>(batches.size());
+ TestBatch testBatch;
+ for (TestBatch batch : batches) {
+ testBatch = SerializationUtils.clone(batch);
+ testBatch.setBatchNo(batchNo);
+ testBatches.add(testBatch);
+ }
+ return testBatches;
+ }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 01a1b61..7c1d2cd 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,2 +1,6 @@
server:
- port: 9527
\ No newline at end of file
+ port: 9527
+
+serialPort:
+ enable: true # 鏄惁寮�鍚覆鍙g洃鍚�
+ listenName: COM4 # 鐩戝惉鐨勪覆鍙e悕绉�
\ No newline at end of file
--
Gitblit v1.9.3