From 99cf848f87e2e06954d1ca101c9ff1879cf801c7 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 12 五月 2025 15:15:45 +0800
Subject: [PATCH] 远场上传的文件解析调整+检验任务样品编号筛选
---
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 202 ++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 168 insertions(+), 34 deletions(-)
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
index af24757..5731840 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -24,6 +24,7 @@
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.*;
import com.yuanchu.mom.vo.*;
+import org.apache.poi.hwpf.usermodel.*;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
@@ -35,6 +36,7 @@
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
+import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.nio.file.Files;
@@ -48,6 +50,8 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+
+import org.apache.poi.hwpf.HWPFDocument;
/**
* 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
@@ -142,7 +146,9 @@
}
String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹�
insOrderPlanDTO.setSonLaboratory(null);
- IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userName, sonLaboratory, laboratory);
+ String sampleCode = insOrderPlanDTO.getSampleCode();
+ insOrderPlanDTO.setSampleCode(null);
+ IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userName, sonLaboratory, laboratory,sampleCode);
map.put("body", insOrderPage);
return map;
}
@@ -346,7 +352,7 @@
insOrderFile.setFileUrl(pathName);
insOrderFileMapper.insert(insOrderFile);
String[] split = filename.split("\\.");
- if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("杩戝満") && split[split.length - 1].equals("csv")) {
+ if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("杩戝満") && (split[split.length - 1].equals("csv") || split[split.length - 1].equals("xlsx"))) {
fuSheUtils.getFuSheWord1(sonLaboratory, insOrderFile);
} else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("杩滃満") && split[split.length - 1].equals("xlsx")) {
fuSheUtils.getFuSheWord2(sonLaboratory, insOrderFile);
@@ -356,6 +362,14 @@
dianLuUtils.readDianLuFile2(sampleId, insOrderFile);
} else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
dianLuUtils.readDianLuFile3(sampleId, insOrderFile);
+ }
+ // 鐢佃矾瀹為獙杩斿洖鏂囦欢鍚�
+ if(ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙")){
+ return pathName;
+ }
+ // 闇囧姩doc鏂囦欢瑙f瀽
+ if(filename.toLowerCase().contains(".doc") && sonLaboratory.equals("鎸姩")){
+ return docAnalysis(urlString,orderId,sampleId,file.getOriginalFilename());
}
} catch (Exception e) {
throw new ErrorException(e.getMessage());
@@ -413,6 +427,7 @@
if (orderState.getInsState() == 6) {
orderState.setInsState(0);
orderState.setNum(orderState.getNum() + 1);//閫掑
+ orderState.setCreateTime(LocalDateTime.now());
insOrderStateMapper.updateById(orderState);
}
} else {
@@ -424,10 +439,17 @@
insOrderState.setNum(1);//鍒濆鏄涓�娆�
insOrderStateMapper.insert(insOrderState);
}
+ //鍚屼竴鏍峰搧鍦ㄥ叾浠栫珯鐐瑰叆搴撲箣鍚庨渶瑕佸皢鍏朵粬绔欑偣鐨勪换鍔′笉鏄剧ず
+ insOrderStateMapper.update(null,Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId,insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId,insSample.getId())
+ .eq(InsOrderState::getInsState,6)//澶嶆牳缁х画璇曢獙
+ .ne(InsOrderState::getLaboratory,sonLaboratory)
+ .set(InsOrderState::getIsOut,1));//涓嶆樉绀�
return 1;
}
- //鎵爜鍑哄簱
+ //鎵爜鍑哄簱(鍙湁澶嶆牳缁撴潫鎵嶄細璋冪敤)
@Override
public int outInsOrderState(String sonLaboratory, String sampleCode, String entrustCode) {
//鍒ゆ柇璇ユ牱鍝佺殑妫�楠屼换鍔℃槸鍚﹀凡缁忕粨鏉�(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
@@ -442,22 +464,16 @@
if (!collect.contains(sonLaboratory)) {
throw new ErrorException("璇ユ牱鍝佹病鏈�" + sonLaboratory + "绔欑偣鐨勭浉鍏抽」鐩�,璇锋煡鐪嬩笅鍗曡鎯�!");
}
+ //鍒ゆ柇璇ヤ换鍔℃槸鍚︽槸缁撴潫璇曢獙
//鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
- List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
- .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
- .eq(InsOrderState::getInsState, 5));//缁撴潫璇曢獙
- if (CollectionUtils.isEmpty(orderStates)) {
- List<InsOrderState> orderStates1 = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
- .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
- .eq(InsOrderState::getInsSampleId, insSample.getId())
- .eq(InsOrderState::getLaboratory, sonLaboratory)
- .eq(InsOrderState::getInsState, 6));//缁х画璇曢獙
- if (CollectionUtils.isEmpty(orderStates1)) {
- throw new ErrorException("璇ユ牱鍝佺殑妫�楠屼换鍔¤繕娌℃湁缁撴潫璇曢獙鎴栫户缁瘯楠�,鏆傛椂鏃犳硶鍑哄簱!");
- }
+ InsOrderState orderStates = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getLaboratory,sonLaboratory)
+ .eq(InsOrderState::getInsSampleId, insSample.getId())
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()));
+ if (orderStates.getInsState()!=5) {
+ throw new ErrorException("褰撳墠鏍峰搧鐨勭珯鐐逛换鍔″苟涓嶆槸澶嶆牳鐨勭粨鏉熻瘯楠�,鏃犻渶鎵嬪姩鍑哄簱!");
}
- boolean a = true;
- warehouseService.outWarehouse(sampleCode, a, entrustCode);
+ warehouseService.outWarehouse(sampleCode, true, entrustCode);
return 0;
}
@@ -904,6 +920,122 @@
return 1;
}
+ /**
+ * 闇囧姩doc鏂囦欢瑙f瀽
+ * @param urlString
+ * @param orderId
+ * @param sampleId
+ * @param originFileName
+ * @return
+ */
+ private Map<String, String> docAnalysis(String urlString,Integer orderId,Integer sampleId,String originFileName) {
+ Map<String, String> analysisMap = new HashMap<>();
+ try {
+ File file = new File(urlString);
+ HWPFDocument document = new HWPFDocument(new FileInputStream(file));
+ Range range = document.getRange();
+ TableIterator tableIterator = new TableIterator(range);
+ List<Table> tableList = new ArrayList<>();
+ while (tableIterator.hasNext()) {
+ tableList.add(tableIterator.next());
+ }
+ for (int tableIndex = 0; tableIndex < tableList.size(); tableIndex++) {
+ // 鍙栫涓�涓〃鍗曢檺鍒跺弬鏁扮殑 鎸姩鍙板瀷鍙枫�佽繍鍔ㄩ儴浠剁瓑鏁堣川閲忋�佽瘯浠惰川閲忔暟鍊�
+ if(tableIndex == 0){
+ Table table = tableList.get(0);
+ for (int i = 0; i < table.numRows(); i++) {
+ if(table.getRow(i).numCells() < 2){
+ continue;
+ }
+ String columnText = ObjectUtils.isEmpty(table.getRow(i).getCell(0))? "" : table.getRow(i).getCell(0).text();
+ String columnValue = ObjectUtils.isEmpty(table.getRow(i).getCell(1))? "" : table.getRow(i).getCell(1).text();
+ if(columnValue.contains("\u0007")){
+ columnValue = columnValue.replace("\u0007","");
+ }
+ if(columnText.contains("\u0007")){
+ columnText = columnText.replace("\u0007","");
+ }
+ if(columnText.equals("鎸姩鍙板瀷鍙�")){
+ analysisMap.put("11",columnValue);
+ }
+ if(columnText.equals("杩愬姩閮ㄤ欢绛夋晥璐ㄩ噺")){
+ analysisMap.put("12",columnValue);
+ }
+ if(columnText.equals("璇曚欢璐ㄩ噺")){
+ analysisMap.put("1",columnValue);
+ }
+ }
+ }
+ //鍙栫涓�涓〃鍗曡緭鍏ラ�氶亾鍙傛暟绗竴鏉℃暟鎹�
+ if(tableIndex == 1){
+ Table table = tableList.get(1);
+ if(ObjectUtils.isNotEmpty(table) && table.numRows() > 1 && table.getRow(1).numCells() >= 3){
+ String columnValue = ObjectUtils.isEmpty(table.getRow(1).getCell(2))? "" : table.getRow(1).getCell(2).text();
+ if(columnValue.contains("\u0007")){
+ columnValue = columnValue.replace("\u0007","");
+ }
+ analysisMap.put("9",columnValue);
+ }
+ }
+ // 鍙栨渶鍚庝竴涓〃鍗曠涓夌鍥涜淇℃伅
+ if(tableIndex == tableList.size() - 1){
+ Table table = tableList.get(tableIndex);
+ for (int i = 0; i < table.numRows(); i++) {
+ if(table.getRow(i).numCells() < 2){
+ continue;
+ }
+ String columnText = ObjectUtils.isEmpty(table.getRow(i).getCell(0))? "" : table.getRow(i).getCell(0).text();
+ String columnValue = ObjectUtils.isEmpty(table.getRow(i).getCell(1))? "" : table.getRow(i).getCell(1).text();
+ if(columnValue.contains("\u0007")){
+ columnValue = columnValue.replace("\u0007","");
+ }
+ if(columnText.contains("\u0007")){
+ columnText = columnText.replace("\u0007","");
+ }
+ if(columnText.contains("鎬昏繍琛屾椂闂�")){
+ analysisMap.put("13",columnValue);
+ }
+ if(columnText.contains("璇曢獙鎵鏁�")){
+ analysisMap.put("10",columnValue);
+ }
+ }
+ }
+ }
+ // 鍥剧墖缁戝畾
+ List<Picture> pictureList = document.getPicturesTable().getAllPictures();
+ String[] split = originFileName.split("\\.");
+ String docName = "";
+ if(null != split && split.length > 0){
+ docName = split[0];
+ }
+ for (Picture picture : pictureList) {
+ byte[] pictureData = picture.getContent();
+ File imgDir = new File(imgUrl);
+ if (!imgDir.exists()) {
+ imgDir.mkdirs();
+ }
+ String filename = docName + "_" + UUID.randomUUID()+".png";
+ File pictureFile = new File(imgUrl + File.separatorChar + filename);
+ // 鍒涘缓杈撳嚭娴佷互灏嗗浘鐗囨暟鎹啓鍏ュ埌鎸囧畾璺緞
+ try (OutputStream outputStream = new FileOutputStream(pictureFile)) {
+ // 鍐欏叆鏁版嵁
+ outputStream.write(pictureData);
+ }
+ InsOrderFile insOrderFile = new InsOrderFile();
+ insOrderFile.setInsOrderId(orderId);
+ insOrderFile.setInsSampleId(sampleId);
+ insOrderFile.setSonLaboratory("鎸姩");
+ insOrderFile.setType(1);
+ insOrderFile.setFileName(filename);
+ insOrderFile.setFileUrl(filename);
+ insOrderFileMapper.insert(insOrderFile);
+ }
+ }catch (Exception e){
+ log.error(e.getMessage());
+ }
+ return analysisMap;
+ }
+
//娓╂箍搴﹁瘯楠�+鍔熺巼璇曢獙鐨勪繚瀛樻楠屽唴瀹�
@Override
public int saveInsContext3(InsProductResult insProductResult) {
@@ -1060,6 +1192,15 @@
.set(InsOrderState::getInsState, 6)
.set(InsOrderState::getVerifyTell, tell)
.set(InsOrderState::getVerifyUser, userId));
+ //缁х画璇曢獙鑷姩鍑哄簱
+ WarehouseHistory history = new WarehouseHistory();
+ history.setState(2);
+ history.setInsSampleId(sampleId);
+ history.setCellId(insSample.getCellId());
+ history.setWarehouseCode(warehouseHistoryMapper.selectOne(Wrappers.<WarehouseHistory>lambdaQuery()
+ .eq(WarehouseHistory::getInsSampleId, sampleId).select(WarehouseHistory::getWarehouseCode).orderByDesc(WarehouseHistory::getId).last("limit 1")).getWarehouseCode());
+ insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate().eq(InsSample::getId, sampleId).set(InsSample::getCellId, null));
+ warehouseHistoryMapper.insert(history);
break;
case 2:
//缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙(鏃犳硶鍐嶆妫�楠�)銆�
@@ -1070,15 +1211,6 @@
.set(InsOrderState::getInsState, 5)
.set(InsOrderState::getVerifyTell, tell)
.set(InsOrderState::getVerifyUser, userId));
- //濡傛灉璁㈠崟绫诲瀷鏄師鐞嗘牱鏈�,鍒欒璁㈠崟鐩存帴闂幆
- List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
- for (InsSample sample : insSamples) {
- try{
- outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
- }catch (Exception e){
-
- }
- }
/*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
createReport(insOrder.getId(),insReportDto1s);
@@ -1136,6 +1268,16 @@
.set(InsOrderState::getVerifyTell, tell)
.set(InsOrderState::getVerifyUser, userId));
}
+ //缁х画璇曢獙闇�瑕佸嚭搴�
+ WarehouseHistory history = new WarehouseHistory();
+ history.setState(2);
+ history.setInsSampleId(sampleId);
+ history.setCellId(insSample.getCellId());
+ history.setWarehouseCode(warehouseHistoryMapper.selectOne(Wrappers.<WarehouseHistory>lambdaQuery()
+ .eq(WarehouseHistory::getInsSampleId, sampleId).select(WarehouseHistory::getWarehouseCode).orderByDesc(WarehouseHistory::getId).last("limit 1")).getWarehouseCode());
+ insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate()
+ .eq(InsSample::getId, sampleId).set(InsSample::getCellId, null));
+ warehouseHistoryMapper.insert(history);
break;
case 2:
//缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙(鏃犳硶鍐嶆妫�楠�)銆�
@@ -1157,14 +1299,6 @@
.set(InsOrderState::getInsState, 5)
.set(InsOrderState::getVerifyTell, tell)
.set(InsOrderState::getVerifyUser, userId));
- }
- //鍑哄簱
- List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
- for (InsSample sample : insSamples) {
- try{
- outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
- }catch (Exception e){
- }
}
/*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
--
Gitblit v1.9.3