From 91ab1a15515c4c213b2ac4f777a7f20c3d0d59ad Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 28 三月 2025 13:49:53 +0800
Subject: [PATCH] 一个订单在每个站点检验都需要扫码入库报检,在中间站点复核继续试验之后默认自动将样品出库,且在列表中也不需要再展示出来,到最后一步复核结束反而是需要手动去出库不能自动出库,且出库之后也不需要在页面展示

---
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java |  211 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 180 insertions(+), 31 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..8851ed4 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;
 
 /**
  * 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
@@ -357,6 +361,14 @@
             } 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 +425,7 @@
             if (orderState.getInsState() == 6) {
                 orderState.setInsState(0);
                 orderState.setNum(orderState.getNum() + 1);//閫掑
+                orderState.setCreateTime(LocalDateTime.now());
                 insOrderStateMapper.updateById(orderState);
             }
         } else {
@@ -424,10 +437,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 +462,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 +918,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 +1190,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 +1209,15 @@
                             .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<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 +1275,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:
                     //缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙(鏃犳硶鍐嶆妫�楠�)銆�
@@ -1159,13 +1308,13 @@
                                 .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<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);

--
Gitblit v1.9.3