From a00890e840b80a741f62eb6cb31b46f13be6202f Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期四, 24 十月 2024 16:46:45 +0800
Subject: [PATCH] 附件调试修改+辐射站点报告生成

---
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderFileServiceImpl.java |   16 +
 inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml                       |    5 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrderFile.java                    |    4 
 inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java                      |  124 ++++++++
 inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java       |    6 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java    |   24 -
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java |   52 ++
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java     |    6 
 inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml                        |   12 
 inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java                     |  443 +++++++++++++++++++++++++++++
 inspect-server/src/main/java/com/yuanchu/mom/service/WarehouseService.java             |    2 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java            |    2 
 inspect-server/src/main/resources/mapper/InsOrderMapper.xml                            |   81 ++--
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java    |   58 +++
 inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderFileService.java          |    1 
 inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java    |   28 
 inspect-server/src/main/java/com/yuanchu/mom/dto/Exceldata.java                        |   14 
 inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java          |    2 
 18 files changed, 768 insertions(+), 112 deletions(-)

diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
index 0036898..88e2c02 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -89,7 +89,7 @@
     @ValueClassify("妫�楠屼换鍔�")
     @ApiOperation(value = "浠诲姟浜ゆ帴")
     @PostMapping("/upPlanUser")
-    public Result<?> upPlanUser(Integer userId, Integer orderId,String sonLaboratory) {
+    public Result<?> upPlanUser(Integer userId, Integer orderId, String sonLaboratory) {
         return Result.success(insOrderPlanService.upPlanUser(userId, orderId, sonLaboratory));
     }
 
@@ -132,9 +132,9 @@
     @ApiOperation(value = "淇濆瓨妫�楠屽唴瀹�")
     @PostMapping("/saveInsContext")
     @ValueAuth
-    public Result<?> saveInsContext(String param,Integer num) {
+    public Result<?> saveInsContext(String param, Integer num) {
         Map<String, Object> param2 = JSON.parseObject(param, Map.class);
-        insOrderPlanService.saveInsContext(param2,num);
+        insOrderPlanService.saveInsContext(param2, num);
         return Result.success();
     }
 
@@ -165,15 +165,15 @@
     @ValueClassify("妫�楠屼换鍔�")
     @ApiOperation(value = "涓婁紶闄勪欢")
     @PostMapping("/uploadFile")
-    public Result<?> uploadFile(Integer orderId, MultipartFile file) {
-        return Result.success(insOrderPlanService.uploadFile(orderId, file));
+    public Result<?> uploadFile(Integer orderId, MultipartFile file, String sonLaboratory) {
+        return Result.success(insOrderPlanService.uploadFile(orderId, file, sonLaboratory));
     }
 
     @ValueClassify("妫�楠屼换鍔�")
     @ApiOperation(value = "鍒犻櫎闄勪欢")
     @PostMapping("/delfile")
     public Result<?> delfile(Integer id) {
-        return Result.success(insOrderFileService.removeById(id));
+        return Result.success(insOrderFileService.delfile(id));
     }
 
     @ValueAuth
@@ -212,7 +212,7 @@
     @ApiOperation(value = "鐢佃矾璇曢獙鐐瑰嚮妫�楠岄�夋嫨鐗堟湰")
     @PostMapping("/chooseVersion")
     @ValueAuth
-    public Result<?> chooseVersion(Integer orderStateId,Integer version) {
+    public Result<?> chooseVersion(Integer orderStateId, Integer version) {
         InsOrderState orderState = new InsOrderState();
         orderState.setId(orderStateId);
         orderState.setVersion(version);
@@ -229,28 +229,28 @@
     @ValueAuth
     @PostMapping("/getInsProduct2")
     @ApiOperation("鏌ョ湅妫�楠屽巻鍙�")
-    public Result<?> getInsProduct2(Integer id, Integer type, String laboratory, HttpServletRequest request,Integer num) {
-        return Result.success(insOrderPlanService.getInsProduct2(id, type, laboratory, request,num));
+    public Result<?> getInsProduct2(Integer id, Integer type, String laboratory, HttpServletRequest request, Integer num) {
+        return Result.success(insOrderPlanService.getInsProduct2(id, type, laboratory, request, num));
     }
 
     @ValueClassify("妫�楠屼换鍔�")
     @ApiOperation(value = "鎵爜鎶ユ(鍏ュ簱)")
     @PostMapping("/scanInsOrderState")
-    public Result scanInsOrderState(String sonLaboratory,String sampleCode,String trees) {
-        return Result.success(insOrderPlanService.scanInsOrderState(sonLaboratory,sampleCode,trees));
+    public Result scanInsOrderState(String sonLaboratory, String sampleCode, String trees) {
+        return Result.success(insOrderPlanService.scanInsOrderState(sonLaboratory, sampleCode, trees));
     }
 
     @ValueClassify("妫�楠屼换鍔�")
     @ApiOperation(value = "鎵爜鍑哄簱")
     @PostMapping("/outInsOrderState")
-    public Result outInsOrderState(String sonLaboratory,String sampleCode) {
-        return Result.success(insOrderPlanService.outInsOrderState(sonLaboratory,sampleCode));
+    public Result outInsOrderState(String sonLaboratory, String sampleCode) {
+        return Result.success(insOrderPlanService.outInsOrderState(sonLaboratory, sampleCode));
     }
 
     @ValueAuth
     @PostMapping("/preview")
     @ApiOperation("棰勮鏂囦欢")
-    public Result<?> preview(Integer id)throws Exception {
+    public Result<?> preview(Integer id) throws Exception {
         return Result.success(insOrderPlanService.preview(id));
     }
 
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java
index c656864..7f62740 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java
@@ -27,7 +27,7 @@
         return Result.success(warehouseService.addWarehouse(name));
     }
 
-    @ValueAuth
+    @ValueClassify("鏍峰搧绠$悊")
     @GetMapping("/selectWarehouse")
     @ApiOperation("鏌ヨ浠撳簱")
     public Result selectWarehouse() {
@@ -85,8 +85,8 @@
     @ValueClassify("鏍峰搧绠$悊")
     @PostMapping("/outWarehouse")
     @ApiOperation("鏍峰搧鍑哄簱")
-    public Result outWarehouse(String sampleCode) {
-        return Result.success(warehouseService.outWarehouse(sampleCode));
+    public Result outWarehouse(String sampleCode, boolean a) {
+        return Result.success(warehouseService.outWarehouse(sampleCode,a));
     }
 
     @ValueAuth
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/dto/Exceldata.java b/inspect-server/src/main/java/com/yuanchu/mom/dto/Exceldata.java
new file mode 100644
index 0000000..00fab8e
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/dto/Exceldata.java
@@ -0,0 +1,14 @@
+package com.yuanchu.mom.dto;
+
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+public class Exceldata {
+
+    private Map<Integer, Object> project ;
+
+    private Map<String,Object> dataRow;
+
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java
index bd53c37..6dfe1c7 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java
@@ -17,5 +17,5 @@
  */
 public interface InsOrderFileMapper extends BaseMapper<InsOrderFile> {
 
-    IPage<InsOrderFile> getFileList(@Param("page") Page page, @Param("ew") QueryWrapper<InsOrderFile> ew , @Param("insOrderId") Integer insOrderId);
+    IPage<InsOrderFile> getFileList(@Param("page") Page page, @Param("ew") QueryWrapper<InsOrderFile> ew , @Param("insOrderId") Integer insOrderId, @Param("sonLaboratory") String sonLaboratory);
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrderFile.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrderFile.java
index 0aa3a66..cfee659 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrderFile.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrderFile.java
@@ -65,4 +65,8 @@
 
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
+
+    @ApiModelProperty("鎵�灞炵珯鐐�")
+    @ValueTableShow(6)
+    private String sonLaboratory;
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderFileService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderFileService.java
index 832ce74..dae472c 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderFileService.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderFileService.java
@@ -12,4 +12,5 @@
  * @since 2024-06-06 10:08:21
  */
 public interface InsOrderFileService extends IService<InsOrderFile> {
+    int delfile(Integer id);
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
index 8ccd69b..640c48b 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
@@ -47,7 +47,7 @@
 
     Map<String,Object> getFileList(Page page, InsOrderFile insOrderFile);
 
-    int uploadFile(Integer orderId, MultipartFile file);
+    int uploadFile(Integer orderId, MultipartFile file,String sonLaboratory);
 
     List<String> upPlanUser2(Integer orderId);
 
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/WarehouseService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/WarehouseService.java
index 6d44c60..59d6501 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/WarehouseService.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/WarehouseService.java
@@ -34,7 +34,7 @@
 
     int inWarehouse(String trees, String sampleCode);
 
-    int outWarehouse(String sampleCode);
+    int outWarehouse(String sampleCode, boolean a);
 
     Map<String, Object> getSampleRecord(Integer id);
 
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderFileServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderFileServiceImpl.java
index 5c1c780..6fd217d 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderFileServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderFileServiceImpl.java
@@ -20,4 +20,20 @@
  */
 @Service
 public class InsOrderFileServiceImpl extends ServiceImpl<InsOrderFileMapper, InsOrderFile> implements InsOrderFileService {
+
+    @Resource
+    private InsOrderFileMapper insOrderFileMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    //鍒犻櫎闄勪欢
+    @Override
+    public int delfile(Integer id) {
+        InsOrderFile insOrderFile = insOrderFileMapper.selectById(id);
+        File file = new File(wordUrl + "/" + insOrderFile.getFileUrl());
+        file.delete();
+        insOrderFileMapper.deleteById(id);
+        return 0;
+    }
 }
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 fbd5a82..52ce93f 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
@@ -129,6 +129,9 @@
     @Resource
     private InsOrderFileMapper insOrderFileMapper;
 
+    @Resource
+    FuSheUtils fuSheUtils;
+
     @Override
     public Map<String, Object> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
         Map<String, Object> map = new HashMap<>();
@@ -290,13 +293,18 @@
         map.put("head", PrintChina.printChina(InsOrderFile.class));
         Integer insOrderId = insOrderFile.getInsOrderId();
         insOrderFile.setInsOrderId(null);
-        IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile), insOrderId);
+        String sonLaboratory = null;
+        if (ObjectUtils.isNotEmpty(insOrderFile.getSonLaboratory())) {
+            sonLaboratory = insOrderFile.getSonLaboratory();
+            insOrderFile.setSonLaboratory(null);
+        }
+        IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile), insOrderId, sonLaboratory);
         map.put("body", insOrderFileIPage);
         return map;
     }
 
     @Override
-    public int uploadFile(Integer orderId, MultipartFile file) {
+    public int uploadFile(Integer orderId, MultipartFile file, String sonLaboratory) {
         String urlString;
         String pathName;
         String path;
@@ -319,16 +327,39 @@
             if (!realpath.exists()) {
                 realpath.mkdirs();
             }
-            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+            pathName = file.getOriginalFilename();
             urlString = realpath + "/" + pathName;
             file.transferTo(new File(urlString));
             insOrderFile.setFileUrl(pathName);
-            return insOrderFileMapper.insert(insOrderFile);
+            if (ObjectUtils.isNotEmpty(sonLaboratory)) {
+                insOrderFile.setSonLaboratory(sonLaboratory);
+                //鍒犻櫎閲嶅鐨勬暟鎹�
+                insOrderFileMapper.delete(Wrappers.<InsOrderFile>lambdaQuery()
+                        .eq(InsOrderFile::getInsOrderId, orderId)
+                        .eq(InsOrderFile::getType, insOrderFile.getType())
+                        .eq(InsOrderFile::getFileName, insOrderFile.getFileName())
+                        .eq(InsOrderFile::getSonLaboratory, insOrderFile.getSonLaboratory())
+                        .eq(InsOrderFile::getFileUrl, insOrderFile.getFileUrl()));
+            } else {
+                //鍒犻櫎閲嶅鐨勬暟鎹�
+                insOrderFileMapper.delete(Wrappers.<InsOrderFile>lambdaQuery()
+                        .eq(InsOrderFile::getInsOrderId, orderId)
+                        .eq(InsOrderFile::getType, insOrderFile.getType())
+                        .eq(InsOrderFile::getFileName, insOrderFile.getFileName())
+                        .isNull(InsOrderFile::getSonLaboratory)
+                        .eq(InsOrderFile::getFileUrl, insOrderFile.getFileUrl()));
+            }
+            insOrderFileMapper.insert(insOrderFile);
+            //濡傛灉鏄緪灏勮瘯楠�(杩戝満/杩滅▼涓婁紶鐨刢sv鏂囦欢)
+            String[] split = filename.split("\\.");
+            if (ObjectUtils.isNotEmpty(sonLaboratory) && (sonLaboratory.equals("杩戝満") || sonLaboratory.equals("杩滃満")) &&
+                    split[split.length - 1].equals("csv")) {
+                fuSheUtils.getFuSheWord(sonLaboratory, insOrderFile);
+            }
         } catch (Exception e) {
-            e.printStackTrace();
             System.err.println("闄勪欢涓婁紶閿欒");
-            return 0;
         }
+        return 0;
     }
 
     @Override
@@ -419,7 +450,8 @@
                 throw new ErrorException("璇ユ牱鍝佺殑妫�楠屼换鍔¤繕娌℃湁缁撴潫璇曢獙鎴栫户缁瘯楠�,鏆傛椂鏃犳硶鍑哄簱!");
             }
         }
-        warehouseService.outWarehouse(sampleCode);
+        boolean a = true;
+        warehouseService.outWarehouse(sampleCode, a);
         return 0;
     }
 
@@ -954,9 +986,9 @@
                     if (insOrder.getFormType().equals("鍘熺悊鏍锋満")) {
                         for (InsSample sample : samples) {
                             //鍑哄簱
-                            try{
-                                outInsOrderState(laboratory,sample.getSampleCode());
-                            }catch (Exception e){
+                            try {
+                                outInsOrderState(laboratory, sample.getSampleCode());
+                            } catch (Exception e) {
 
                             }
                         }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
index 4607460..e3c51c2 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -40,6 +40,8 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -500,7 +502,9 @@
                 .filter(dto -> dto.getPrice() != null) // 杩囨护鎺変环鏍间负 null 鐨勫璞�
                 .mapToDouble(value -> value.getPrice().doubleValue() * value.getNum())
                 .sum();
-        map.put("total", totalPrice);
+        BigDecimal bd = new BigDecimal(totalPrice).setScale(2, RoundingMode.HALF_UP);
+        double roundedTotalPrice = bd.doubleValue();
+        map.put("total", roundedTotalPrice);
         return map;
     }
 
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
index d7805c8..bbbfaaf 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
@@ -251,15 +251,6 @@
         } catch (Exception e) {
             throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
         }
-        //鑾峰彇鍦烘墍鐨勬姤鍛婁笓鐢ㄧ珷
-       /* String sealUrl;
-        try {
-            String laboratory = insOrderMapper.selectById(insReport.getInsOrderId()).getLaboratory();
-            sealUrl = insReportMapper.getLaboratoryByName(laboratory);
-        } catch (Exception e) {
-            throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷");
-        }
-        if (sealUrl == null) throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷");*/
         //绯荤粺鐢熸垚鎶ュ憡鍦板潃
         String url = insReport.getUrl();
         //鎵嬪姩涓婁紶鎶ュ憡鍦板潃
@@ -488,20 +479,6 @@
     public String wordToPdf(String wordPath, String pdfPath, String sealUrl) {
         FileOutputStream os = null;
         try {
-            //鍑瘉 涓嶇劧鍒囨崲鍚庢湁姘村嵃
-//            InputStream inputStream = this.getClass().getResourceAsStream("/lib/license.xml");
-            /*String url;
-            try {
-                InputStream inputStream = this.getClass().getResourceAsStream("/lib/license.xml");
-                File file = File.createTempFile("temp", ".tmp");
-                OutputStream outputStream = new FileOutputStream(file);
-                IOUtils.copy(inputStream, outputStream);
-                url = file.getAbsolutePath();
-            } catch (FileNotFoundException e) {
-                throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }*/
             InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
             License license = new License();
             license.setLicense(is);
@@ -527,6 +504,7 @@
                     }
                 }
             }
+            doc.updateFields();
             doc.save(os, SaveFormat.PDF);
 
             //娣诲姞楠戠紳绔�
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java
index 83eaf1d..d480b47 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java
@@ -1,5 +1,7 @@
 package com.yuanchu.mom.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.mom.dto.HistoryDto;
@@ -20,6 +22,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
 * @author Administrator
@@ -42,6 +45,8 @@
     private WarehouseCellService warehouseCellService;
 
     private InsSampleMapper insSampleMapper;
+
+    private InsOrderStateMapper insOrderStateMapper;
 
     private InsProductMapper insProductMapper;
 
@@ -98,11 +103,37 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int upShelf(WarehouseShelf warehouseShelf) {
-        warehouseCellMapper.update(null, Wrappers.<WarehouseCell>lambdaUpdate()
-                .eq(WarehouseCell::getShelfId, warehouseShelf.getWarehouseId())
-                .gt(WarehouseCell::getRow, warehouseShelf.getRow())
-                .gt(WarehouseCell::getCol, warehouseShelf.getCol())
-                .set(WarehouseCell::getState, 0));
+        WarehouseShelf shelf = warehouseShelfMapper.selectById(warehouseShelf.getId());
+        if (shelf.getCol()>=warehouseShelf.getCol() && shelf.getRow() >= warehouseShelf.getRow()) {
+            //濡傛灉缁存姢鐨勬暟鎹皬浜庡師鏈夌殑琛屽垪鏁板彲浠ヨ繘琛屼慨鏀�
+            warehouseCellMapper.update(null, Wrappers.<WarehouseCell>lambdaUpdate()
+                    .eq(WarehouseCell::getShelfId, warehouseShelf.getId())
+                    .and(true, wrapper -> wrapper.gt(WarehouseCell::getRow, warehouseShelf.getRow())
+                            .or()
+                            .gt(WarehouseCell::getCol, warehouseShelf.getCol()))
+                    .set(WarehouseCell::getState, 0));
+        }else {
+            //濡傛灉缁存姢鐨勬暟鎹ぇ浜庡師鏈夌殑琛屽垪鏁伴渶瑕佽繘琛岄澶栨坊鍔�
+            List<WarehouseCell> cells = new ArrayList<>();
+            for (int i = 1; i < warehouseShelf.getRow() + 1; i++) {
+                for (int a = 1; a < warehouseShelf.getCol() + 1; a++) {
+                    WarehouseCell cell = new WarehouseCell();
+                    cell.setRow(i);
+                    cell.setCol(a);
+                    cell.setState(1);
+                    cell.setShelfId(warehouseShelf.getId());
+                    WarehouseCell warehouseCell = warehouseCellMapper.selectOne(Wrappers.<WarehouseCell>lambdaQuery()
+                            .eq(WarehouseCell::getShelfId, warehouseShelf.getId())
+                            .eq(WarehouseCell::getRow, i)
+                            .eq(WarehouseCell::getCol, a));
+                    if (ObjectUtils.isNotEmpty(warehouseCell)){
+                        cell.setId(warehouseCell.getId());
+                    }
+                    cells.add(cell);
+                }
+            }
+            warehouseCellService.saveOrUpdateBatch(cells);
+        }
         warehouseShelfMapper.updateById(warehouseShelf);
         return 0;
     }
@@ -139,7 +170,7 @@
     }
 
     @Override
-    public int outWarehouse(String sampleCode) {
+    public int outWarehouse(String sampleCode, boolean a) {
         List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode).select(InsSample::getId,InsSample::getCellId));
         if(samples.size()!=1){
             throw new ErrorException("鏍峰搧缂栧彿杈撳叆鏈夎");
@@ -147,6 +178,21 @@
         if(samples.get(0).getCellId()==null){
             throw new ErrorException("鏍峰搧 " + sampleCode + " 鏈叆搴�");
         }
+        if (!a) {
+            //鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
+            List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                    .eq(InsOrderState::getInsOrderId, samples.get(0).getInsOrderId())
+                    .eq(InsOrderState::getInsState, 5));
+            List<Integer> orderIds = new ArrayList<Integer>();
+            orderIds.add(6);
+            if (CollectionUtils.isEmpty(orderStates)) {
+                List<Integer> collect = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                        .eq(InsOrderState::getInsOrderId, samples.get(0).getInsOrderId())).stream().map(InsOrderState::getInsState).distinct().collect(Collectors.toList());
+                if (collect.size()!=0 && !collect.containsAll(orderIds)) {
+                    throw new ErrorException("璇ユ牱鍝佺殑妫�楠屼换鍔¤繕娌℃湁缁撴潫璇曢獙鎴栫户缁瘯楠�,鏆傛椂鏃犳硶鍑哄簱!");
+                }
+            }
+        }
         WarehouseHistory history = new WarehouseHistory();
         history.setState(2);
         history.setInsSampleId(samples.get(0).getId());
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java b/inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java
new file mode 100644
index 0000000..b95e6fa
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java
@@ -0,0 +1,443 @@
+package com.yuanchu.mom.utils;
+
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.*;
+import com.deepoove.poi.util.TableTools;
+import com.yuanchu.mom.dto.Exceldata;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.InsOrderFileMapper;
+import com.yuanchu.mom.mapper.InsOrderMapper;
+import com.yuanchu.mom.pojo.InsOrder;
+import com.yuanchu.mom.pojo.InsOrderFile;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+@Component
+public class FuSheUtils {
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Resource
+    InsOrderFileMapper insOrderFileMapper;
+
+    @Resource
+    InsOrderMapper insOrderMapper;
+
+    public void getFuSheWord(String sonLaboratory, InsOrderFile insOrderFile) {
+        //璇诲彇excel鏂囦欢鍐呭
+        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 鏇存柊涓轰綘鐨勬枃浠惰矾寰�
+        FileInputStream fileInputStream = null;
+        Workbook workbook = null;
+        try {
+            fileInputStream = new FileInputStream(new File(excelFilePath));
+            workbook = new XSSFWorkbook(fileInputStream); // 瀵逛簬 .xlsx 鏂囦欢
+            XWPFDocument document = new XWPFDocument();
+            Exceldata exceldata = new Exceldata();
+            Map<Integer, Object> project = new HashMap<>();
+            HashMap<String, Object> datas1 = new HashMap<>();
+            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
+                String s = "";
+                Sheet sheet = workbook.getSheetAt(i);
+                String sheetName = sheet.getSheetName();
+                Map<String, Object> map1 = new HashMap<>();
+                Map<String, Object> datas = new HashMap<>();
+                List<Map<String, Object>> list = new ArrayList<>();
+                for (Row row : sheet) {
+                    if (row.getRowNum() != 1) {
+                        HashMap<String, Object> map = new HashMap<>();
+                        for (Cell cell : row) {
+                            if (row.getRowNum() == 0) {
+                                switch (cell.getCellType()) {
+                                    case STRING:
+                                        project.put(cell.getColumnIndex(), cell.getStringCellValue());
+                                        System.out.print(cell.getStringCellValue() + "\t");
+                                        break;
+                                    case NUMERIC:
+                                        System.out.print(cell.getNumericCellValue() + "\t");
+                                        break;
+                                    case BOOLEAN:
+                                        System.out.print(cell.getBooleanCellValue() + "\t");
+                                        break;
+                                    case FORMULA:
+                                        System.out.print(cell.getCellFormula() + "\t");
+                                        break;
+                                    default:
+                                        System.out.print("NULL\t");
+                                }
+                            } else {
+                                switch (cell.getCellType()) {
+                                    case STRING:
+                                        if (StringUtils.isNotEmpty(s)) {
+                                            datas.put(s, list);
+                                        }
+                                        list = new ArrayList<>();
+                                        s = cell.getStringCellValue();
+                                        datas.put(s, cell.getStringCellValue());
+                                        System.out.print(cell.getStringCellValue() + "\t");
+                                        break;
+                                    case NUMERIC:
+                                        int columnIndex = cell.getColumnIndex();
+                                        Object o = project.get(columnIndex);
+                                        map.put(o.toString(), cell.getNumericCellValue());
+                                        System.out.print(cell.getNumericCellValue() + "\t");
+                                        break;
+                                    case BOOLEAN:
+                                        System.out.print(cell.getBooleanCellValue() + "\t");
+                                        break;
+                                    case FORMULA:
+                                        System.out.print(cell.getCellFormula() + "\t");
+                                        break;
+                                    default:
+                                        System.out.print("NULL\t");
+                                }
+                            }
+                            if (map.isEmpty()) {
+                                list.add(map);
+                            }
+                        }
+                    }
+                }
+                datas.put(s, list);
+                map1.put(sheetName, datas);
+                datas1.putAll(map1);
+            }
+            exceldata.setProject(project);
+            exceldata.setDataRow(datas1);
+            System.out.println(exceldata);
+
+            HashMap<String, Object> map = new HashMap<>();
+            for (String s : datas1.keySet()) {
+                Map<String, List<HashMap<String, Object>>> numbers = (Map<String, List<HashMap<String, Object>>>) datas1.get(s);
+                for (String s1 : numbers.keySet()) {
+                    List<HashMap<String, Object>> hashMaps = numbers.get(s1);
+                    List<Double> floatList = new ArrayList<>();
+                    for (Map<String, Object> number : hashMaps) {
+                        number.put("绔彛", s1);
+                        Double o = (Double) number.get("棰戠巼");
+                        floatList.add(o);
+                    }
+                    Double maxValue = Collections.max(floatList);
+                    Double minValue = Collections.min(floatList);
+                    if (map.get(minValue + "-" + maxValue + "-" + s) == null) {
+                        map.put(minValue + "-" + maxValue + "-" + s, s1);
+                    } else {
+                        Object o = map.get(minValue + "-" + maxValue + "-" + s);
+                        map.put(minValue + "-" + maxValue + "-" + s, s1 + "," + o);
+                    }
+                }
+            }
+            System.out.println(map);
+            int size = map.size();
+            for (String s1 : map.keySet()) {
+                String o = map.get(s1).toString();
+                List<String> collect = Arrays.stream(o.split(",")).collect(Collectors.toList());
+                int size1 = -1;
+                for (String s : datas1.keySet()) {
+                    Map<String, List<HashMap<String, Object>>> o1 = (Map<String, List<HashMap<String, Object>>>) datas1.get(s);
+                    for (String s3 : o1.keySet()) {
+                        List<HashMap<String, Object>> numbers = o1.get(s3);
+                        for (String s2 : collect) {
+                            if (s3.equals(s2)) {
+                                if (numbers.size() > size1) {
+                                    size1 = numbers.size();
+                                }
+                            }
+                        }
+                        map.put(s1, o + "," + size1);
+                    }
+                }
+            }
+            System.out.println(map);
+            createWord(sonLaboratory, document, exceldata, map, insOrderFile);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            // 鍏抽棴璧勬簮
+            try {
+                if (workbook != null) {
+                    workbook.close();
+                }
+                if (fileInputStream != null) {
+                    fileInputStream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    public void createWord(String sonLaboratory, XWPFDocument document, Exceldata exceldata, HashMap<String, Object> map, InsOrderFile insOrderFile) throws IOException {
+        int size = 1;
+        XWPFParagraph paragraphs = document.createParagraph();
+        XWPFRun runs = paragraphs.createRun();
+        runs.setBold(true); // 璁剧疆鏂囨湰鍔犵矖
+        runs.setText("杈愬皠鏂瑰悜鍥惧弬鏁�");
+        for (String s : map.keySet()) {
+            Map<String, Object> dataRow = exceldata.getDataRow();
+            String result = s.substring(s.lastIndexOf("-") + 1);
+            String result1 = s.substring(0, s.lastIndexOf("-"));
+            String o = map.get(s).toString();
+            String[] split = o.split(",");
+            Integer s1 = Integer.parseInt(split[split.length - 1]);
+            Integer i1 = split.length - 1;
+            int row = 3 + s1;
+            int cell = 6 + i1;
+            XWPFTable table1 = document.createTable(2, cell);
+            mergeCellsHorizontally(table1, 1, 0, cell - 1);
+            mergeCellsHorizontally(table1, 0, 4, cell - 2);
+            table1.setInsideHBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 鍐呴儴姘村钩杈规
+            table1.setInsideVBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 鍐呴儴鍨傜洿杈规
+            table1.setBottomBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");  // 涓嬭竟妗�
+            table1.setTopBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");     // 涓婅竟妗�
+            table1.setLeftBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");    // 宸﹁竟妗�
+            table1.setRightBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");   // 鍙宠竟妗�
+            XWPFParagraph paragraph12 = table1.getRow(0).getCell(0).getParagraphArray(0);
+            paragraph12.setAlignment(ParagraphAlignment.CENTER);
+            XWPFRun run12 = paragraph12.createRun();
+            run12.setText("搴忓彿");
+            XWPFParagraph paragraph13 = table1.getRow(0).getCell(1).getParagraphArray(0);
+            paragraph13.setAlignment(ParagraphAlignment.CENTER);
+            XWPFRun run13 = paragraph13.createRun();
+            run13.setText("妫�楠岄」鐩�");
+            XWPFParagraph paragraph14 = table1.getRow(0).getCell(2).getParagraphArray(0);
+            paragraph14.setAlignment(ParagraphAlignment.CENTER);
+            XWPFRun run14 = paragraph14.createRun();
+            run14.setText("鍗曚綅");
+            XWPFParagraph paragraph15 = table1.getRow(0).getCell(3).getParagraphArray(0);
+            paragraph15.setAlignment(ParagraphAlignment.CENTER);
+            XWPFRun run15 = paragraph15.createRun();
+            run15.setText("鏍囧噯瑕佹眰");
+            XWPFParagraph paragraph16 = table1.getRow(0).getCell(cell - 1).getParagraphArray(0);
+            paragraph16.setAlignment(ParagraphAlignment.CENTER);
+            XWPFRun run16 = paragraph16.createRun();
+            run16.setText("妫�楠岀粨璁�");
+            XWPFParagraph paragraph17 = table1.getRow(0).getCell(4).getParagraphArray(0);
+            paragraph17.setAlignment(ParagraphAlignment.CENTER);
+            XWPFRun run17 = paragraph17.createRun();
+            run17.setText("妫�楠岀粨鏋�");
+            XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0);
+            paragraph18.setAlignment(ParagraphAlignment.CENTER);
+            XWPFRun run18 = paragraph18.createRun();
+            run18.setText("棰戞锛� " + result1 + "MHz " + "涓嬪�捐" + result);
+            List<String> collect = Arrays.stream(split).collect(Collectors.toList());
+            List<Map<String, Object>> list = new ArrayList<>();
+            // 瀵规墍鏈夌殑閿仛鍚�
+            Map<String, List<Map<String, Object>>> aggregatedMap = new HashMap<>();
+            Map<String, List<Map<String, Object>>> o1 = (Map<String, List<Map<String, Object>>>) dataRow.get(result);
+            for (String s2 : collect) {
+                if (s2.contains("绔彛")) {
+                    List<Map<String, Object>> mapList = o1.get(s2);
+                    list.addAll(mapList);
+                }
+            }
+            // 閬嶅巻姣忎竴涓」鐩�
+            for (Map<String, Object> item : list) {
+                for (String key : item.keySet()) {
+                    // 濡傛灉璇ラ敭鍦� aggregatedMap 涓笉瀛樺湪锛屽垯鍒涘缓涓�涓柊鐨� List
+                    aggregatedMap.putIfAbsent(key, new ArrayList<>());
+                    // 灏嗗綋鍓嶉」鐩坊鍔犲埌瀵瑰簲閿殑 List 涓�
+                    aggregatedMap.get(key).add(item);
+                }
+            }
+            for (String s2 : aggregatedMap.keySet()) {
+                if (s2.equals("绔彛") || s2.equals("棰戠巼")) {
+                    continue;
+                }
+                List<Map<String, Object>> mapList = aggregatedMap.get(s2);
+                // 鍒涘缓涓�涓〃鏍�
+                XWPFTable table = document.createTable(row, cell);
+                table.setWidth("100%");
+                //鍨傜洿
+                mergeCellsVertically(table, 0, 0, row - 1);
+                mergeCellsVertically(table, 1, 0, row - 1);
+                mergeCellsVertically(table, 2, 0, row - 1);
+                mergeCellsVertically(table, 3, 0, row - 1);
+                mergeCellsVertically(table, 4, 0, 1);
+                mergeCellsVertically(table, cell - 1, 0, 1);
+                mergeCellsVertically(table, cell - 1, 2, row - 2);
+                //姘村钩
+                mergeCellsHorizontally(table, 0, 5, cell - 2);
+                mergeCellsHorizontally(table, row - 1, 5, cell - 2);
+
+                table.setInsideHBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 鍐呴儴姘村钩杈规
+                table.setInsideVBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 鍐呴儴鍨傜洿杈规
+                table.setBottomBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");  // 涓嬭竟妗�
+                table.setTopBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");     // 涓婅竟妗�
+                table.setLeftBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");    // 宸﹁竟妗�
+                table.setRightBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000");   // 鍙宠竟妗�
+
+                // 璁剧疆鍗曞厓鏍兼枃鏈苟灞呬腑
+                XWPFParagraph paragraph = table.getRow(0).getCell(0).getParagraphArray(0);
+                paragraph.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run = paragraph.createRun();
+                run.setText(String.valueOf(size));
+                XWPFParagraph paragraph1 = table.getRow(0).getCell(1).getParagraphArray(0);
+                paragraph1.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run1 = paragraph1.createRun();
+                run1.setText(s2);
+                // 璋冪敤鏂规硶鎻愬彇绗竴涓嫭鍙峰唴鐨勫唴瀹�
+                String firstContent = extractFirstContentFromBrackets(s2);
+                if (firstContent != null) {
+                    XWPFParagraph paragraph2 = table.getRow(0).getCell(2).getParagraphArray(0);
+                    paragraph2.setAlignment(ParagraphAlignment.CENTER);
+                    XWPFRun run2 = paragraph2.createRun();
+                    run2.setText(firstContent);
+                } else {
+                    System.out.println("娌℃湁鎵惧埌鎷彿鍐呯殑鍐呭銆�");
+                }
+                XWPFParagraph paragraph3 = table.getRow(0).getCell(3).getParagraphArray(0);
+                paragraph3.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run3 = paragraph3.createRun();
+                run3.setText("/");
+                XWPFParagraph paragraph4 = table.getRow(0).getCell(4).getParagraphArray(0);
+                paragraph4.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run4 = paragraph4.createRun();
+                run4.setText("棰戠巼锛圡Hz锛�");
+                XWPFParagraph paragraph5 = table.getRow(0).getCell(5).getParagraphArray(0);
+                paragraph5.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run5 = paragraph5.createRun();
+                run5.setText("绔彛");
+                XWPFParagraph paragraph6 = table.getRow(0).getCell(cell - 1).getParagraphArray(0);
+                paragraph6.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run6 = paragraph6.createRun();
+                run6.setText("/");
+                XWPFParagraph paragraph7 = table.getRow(1).getCell(cell - 1).getParagraphArray(0);
+                paragraph7.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run7 = paragraph7.createRun();
+                run7.setText("鍚堟牸");
+                XWPFParagraph paragraph8 = table.getRow(row - 1).getCell(4).getParagraphArray(0);
+                paragraph8.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run8 = paragraph8.createRun();
+                run8.setText("骞冲潎鍊�");
+                XWPFParagraph paragraph9 = table.getRow(row - 1).getCell(cell - 1).getParagraphArray(0);
+                paragraph9.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run9 = paragraph9.createRun();
+                run9.setText("/");
+                for (int i = 0; i < collect.size(); i++) {
+                    String s3 = collect.get(i);
+                    if (s3.contains("绔彛")) {
+                        XWPFParagraph paragraph10 = table.getRow(1).getCell(5 + i).getParagraphArray(0);
+                        paragraph10.setAlignment(ParagraphAlignment.CENTER);
+                        XWPFRun run10 = paragraph10.createRun();
+                        run10.setText(s3);
+                    }
+                }
+                Map<Double, List<Map<String, Object>>> group = mapList.stream()
+                        .collect(Collectors.groupingBy(item -> (Double) item.get("棰戠巼")));
+                group = new TreeMap<>(group);
+                int hang = 2;
+                Double count = 0.0;
+                for (Double aDouble : group.keySet()) {
+                    List<Map<String, Object>> mapList1 = group.get(aDouble);
+                    for (Map<String, Object> stringObjectMap : mapList1) {
+                        String port = stringObjectMap.get("绔彛").toString();
+                        for (int i = 5; i < cell - 1; i++) {
+                            String text = table.getRow(1).getCell(i).getText();
+                            if (text.equals(port)) {
+                                XWPFParagraph paragraph10 = table.getRow(hang).getCell(i).getParagraphArray(0);
+                                paragraph10.setAlignment(ParagraphAlignment.CENTER);
+                                XWPFRun run10 = paragraph10.createRun();
+                                count = (Double) stringObjectMap.get(s2) + count;
+                                String project = stringObjectMap.get(s2).toString();
+                                run10.setText(project);
+                            }
+                        }
+                    }
+                    XWPFParagraph paragraph10 = table.getRow(hang).getCell(4).getParagraphArray(0);
+                    paragraph10.setAlignment(ParagraphAlignment.CENTER);
+                    XWPFRun run10 = paragraph10.createRun();
+                    run10.setText(String.valueOf(aDouble));
+                    hang++;
+                }
+                XWPFParagraph paragraph11 = table.getRow(row - 1).getCell(5).getParagraphArray(0);
+                paragraph11.setAlignment(ParagraphAlignment.CENTER);
+                XWPFRun run11 = paragraph11.createRun();
+                double v = count / (Double.parseDouble(s1.toString()) * Double.parseDouble(i1.toString()));
+                run11.setText(String.format("%.2f",v));
+                size++;
+            }
+        }
+        // 杈撳嚭鍒版枃浠�
+        try {
+            InsOrder insOrder = insOrderMapper.selectById(insOrderFile.getInsOrderId());
+            String[] split = insOrderFile.getFileName().split("\\.");
+            String name = insOrderFile.getFileName().substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length()));
+            FileOutputStream out = new FileOutputStream(wordUrl + "/" + insOrder.getEntrustCode() + "&" + sonLaboratory + name + "瑙f瀽鐨勮緪灏勭珯鐐规姤鍛�.docx");
+            document.write(out);
+            out.close();
+            document.close();
+            InsOrderFile orderFile = new InsOrderFile();
+            orderFile.setInsOrderId(insOrderFile.getInsOrderId());
+            orderFile.setFileUrl(insOrder.getEntrustCode() + "&" + sonLaboratory + name + "瑙f瀽鐨勮緪灏勭珯鐐规姤鍛�.docx");
+            orderFile.setType(2);
+            orderFile.setFileName(insOrder.getEntrustCode() + "&" + sonLaboratory + name + "瑙f瀽鐨勮緪灏勭珯鐐规姤鍛�.docx");
+            orderFile.setSonLaboratory(sonLaboratory);
+            insOrderFileMapper.insert(orderFile);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    // 姘村钩鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+
+        for (int i = fromCol; i <= toCol; i++) {
+            if (i == fromCol) {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+            }
+
+        }
+    }
+
+    // 鍨傜洿鍚堝苟鍗曞厓鏍�
+    private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+        for (int i = fromRow; i <= toRow; i++) {
+            if (i == fromRow) {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+            } else {
+                table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+
+    // 鎻愬彇绗竴涓嫭鍙峰唴鐨勫唴瀹�
+    public static String extractFirstContentFromBrackets(String str) {
+        // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鍖归厤鎷彿鍐呯殑鍐呭锛屽悓鏃舵敮鎸佷腑鏂囧拰鑻辨枃鎷彿
+        Pattern pattern = Pattern.compile("\\锛�(.*?)\\锛墊\\((.*?)\\)");
+        Matcher matcher = pattern.matcher(str);
+
+        // 鏌ユ壘绗竴涓尮閰嶇殑鍐呭
+        if (matcher.find()) {
+            // 鑾峰彇鎷彿鍐呯殑鍐呭锛屽垽鏂槸涓枃鎷彿杩樻槸鑻辨枃鎷彿
+            return matcher.group(1) != null ? matcher.group(1) : matcher.group(2);
+        }
+        return null; // 濡傛灉娌℃湁鎵惧埌鍖归厤椤癸紝鍒欒繑鍥瀗ull
+    }
+
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
index f1861ce..e28d68e 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
@@ -144,7 +144,8 @@
                     if (inspectionItemSubclass.contains("浜掕皟")) {
                         aa += (angles + 1) * portRow * often;
                     }
-                } else {
+                }
+                else {
                     if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�")) {
                         aa += (angles + 1) * portRow;
                     }
@@ -232,7 +233,8 @@
                             paragraphRenderDataList.add(paragraphRenderData);
                             cellRenderData.setParagraphs(paragraphRenderDataList);
                             cells.add(cellRenderData);
-                        } else {
+                        }
+                        else {
                             if (insOrderState.getVersion() == 1) {
                                 //闈炵數璋冪増鏈�(绠�鍗曠増)
                                 if (inspectionItemSubclass.contains("鐢靛帇椹绘尝姣�") && i <= 2 * portRow) {
@@ -1597,6 +1599,7 @@
         insOrderFile.setFileName(name);
         insOrderFile.setType(2);
         insOrderFile.setFileUrl(name);
+        insOrderFile.setSonLaboratory("鐢佃矾璇曢獙");
         insOrderFileMapper.insert(insOrderFile);
     }
 
@@ -1648,7 +1651,7 @@
                     .eq(InsProduct::getInsResult, 1));
             productSize3.set(productSize3.get() + Integer.parseInt(productCount3 + ""));
             //灏嗛」鐩寜鐓х珯鐐硅繘琛屽垎绫�
-            Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getLaboratory));
+            Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getSonLaboratory));
             // 鍒涘缓涓�涓� Map 灏嗙珯鐐瑰拰椤圭洰ID鐨勬槧灏勫叧绯�
             Map<String, Set<Integer>> labToDeviceMap = new HashMap<>();
             // 鑾峰彇鎵�鏈夌珯鐐圭殑椤圭洰ID 鍒楄〃
@@ -1874,6 +1877,121 @@
                 }
             }
         }
+        else {
+            //濡傛灉鍙湁鐜璇曢獙娌℃湁鐢佃矾璇曢獙
+            strings.remove("杩戝満");
+            strings.remove("杩滃満");
+            if (strings.size() > 0) {
+                Map<String, String> table2 = new HashMap<>();
+                table2.put("indexs", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+                table2.put("term", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+                table2.put("result", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+                tables.add(table2);
+
+                /*鍒涘缓鐜璇曢獙鏉′欢琛�2*(椤圭洰鏁�+1)*/
+                List<InsProduct> products = samples.stream().flatMap(sampleProductDto -> sampleProductDto.getInsProduct().stream()
+                        .filter(insProduct -> !insProduct.getInspectionItem().equals("鐢佃矾璇曢獙"))
+                        .filter(insProduct -> !insProduct.getInspectionItem().equals("杈愬皠璇曢獙")))
+                        .map(insProduct -> {
+                            InsProduct product = new InsProduct();
+                            product.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
+                            product.setTell(insProduct.getTell());
+                            return product;
+                        }).distinct().collect(Collectors.toList());
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛屾暟
+                for (int i = 0; i < products.size() + 1; i++) {
+                    RowRenderData rowRenderData = new RowRenderData();
+                    RowStyle rowStyle = new RowStyle();
+                    rowStyle.setHeight(40);
+                    rowRenderData.setRowStyle(rowStyle);
+                    List<CellRenderData> cells = new ArrayList<>();
+                    //鍒楁暟
+                    for (int j = 0; j < 2; j++) {
+                        CellRenderData cellRenderData = new CellRenderData();
+                        CellStyle cellStyle = new CellStyle();
+                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                        cellRenderData.setCellStyle(cellStyle);
+                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        ParagraphStyle paragraphStyle = new ParagraphStyle();
+                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                        paragraphRenderData.setParagraphStyle(paragraphStyle);
+                        List<RenderData> renderData = new ArrayList<>();
+                        TextRenderData textRenderData = new TextRenderData();
+                        Style style = new Style();
+                        style.setFontFamily("瀹嬩綋");
+                        style.setColor("000000");
+                        textRenderData.setStyle(style);
+                        if (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                textRenderData.setText("椤圭洰");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗簩鍒�
+                                textRenderData.setText("璇曢獙瑕佹眰");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        } else {
+                            //鍏朵綑琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                textRenderData.setText(products.get(i - 1).getInspectionItemSubclass());
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                textRenderData.setText(products.get(i - 1).getTell());
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        }
+                    }
+                    rowRenderData.setCells(cells);
+                    if (rowRenderData.getCells().size() != 0) {
+                        rows.add(rowRenderData);
+                    }
+                }
+                TableRenderData tableRenderData = new TableRenderData();
+                tableRenderData.setRows(rows);
+                int countSize = tableRenderData.getRows().get(0).getCells().size();
+                for (RowRenderData row : tableRenderData.getRows()) {
+                    if (row.getCells().size() != countSize) {
+                        throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                    }
+                }
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(4);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                Map<String, Object> table4 = new HashMap<>();
+                table4.put("table4", tableRenderData);
+                tables4.add(table4);
+            }
+        }
 
         String url;
         try {
diff --git a/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
index 3dbe7bd..eba5dc6 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
@@ -12,13 +12,19 @@
         <result column="create_time" property="createTime"/>
         <result column="update_user" property="updateUser"/>
         <result column="update_time" property="updateTime"/>
+        <result column="son_laboratory" property="sonLaboratory"/>
     </resultMap>
     <select id="getFileList" resultType="com.yuanchu.mom.pojo.InsOrderFile">
         select A.*
         from (select iof.*, name
-              from ins_order_file iof
-                       left join user u on iof.create_user = u.id
-        where ins_order_id=#{insOrderId}) A
+        from ins_order_file iof
+        left join user u on iof.create_user = u.id
+        where ins_order_id=#{insOrderId}
+        <if test="sonLaboratory!=null and sonLaboratory!=''">
+            and son_laboratory=#{sonLaboratory}
+            or son_laboratory is null
+        </if>
+        ) A
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
index 7decfe3..5db1f71 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -158,7 +158,7 @@
         A.company,
         A.`name`,
         COUNT(1)     num,
-        SUM(A.price) price
+        ROUND(SUM(A.price),2) price
         FROM (SELECT i.id,
         i.entrust_code,
         i.create_time,
@@ -349,63 +349,56 @@
         A.inspection_item,
         A.company,
         A.`name`,
-        production,
-        engineering,
-        COUNT(1) num,
-        SUM(A.price) price,
-        SUM(A.cost) cost
-        FROM
-        (SELECT
-        i.id,
+        COUNT(1)     num,
+        ROUND(SUM(A.price),2) price
+        FROM (SELECT i.id,
         i.entrust_code,
         i.create_time,
         isa.sample,
-        isa.sample_code,
         isa.model,
-        c.price,
-        c.cost,
-        c.inspection_item,
+        ins_sample_id,
+        sum(c.price * times)                                   price,
+        GROUP_CONCAT(distinct c.inspection_item SEPARATOR ',') inspection_item,
         i.company,
-        u.`name`,
-        i.create_user,
-        c.ins_sample_id,
-        production,
-        engineering
-        FROM
-        ins_order i
+        u.`name`
+        FROM ins_order i
         LEFT JOIN ins_sample isa ON isa.ins_order_id = i.id
         LEFT JOIN `user` u ON u.id = i.user_id
         left join custom cus on cus.id = u.company
-        LEFT JOIN (select SUM(b.price) price, sum(b.man_hour) cost,b.ins_sample_id,
-        GROUP_CONCAT(b.inspection_item2
-        SEPARATOR ',')
-        inspection_item from (select * ,
-        GROUP_CONCAT(CONCAT(inspection_item,'@',inspection_item_subclass) SEPARATOR ',')inspection_item2 from
-        ins_product where state = 1 and ins_result is not null and ins_result!=2 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
-        BY b.ins_sample_id) c ON c.ins_sample_id = isa.id
-        where (<!--i.state = 1 or i.state = 3 or -->i.state = 4) and c.ins_sample_id IS not NULL)A
-        GROUP BY
-        A.id,
+        LEFT JOIN (select ip.ins_sample_id,
+        ip.inspection_item,
+        ip.inspection_item_subclass,
+        ip.price,
+        sum(aowh.output_work_time) times
+        from ins_product ip
+        left join auxiliary_output_working_hours aowh on ip.id = aowh.ins_product_id
+        where state = 1
+        and ins_result is not null
+        and ins_result != 2
+        and template_id IS NOT NULL
+        group by ip.ins_sample_id,
+        ip.inspection_item,
+        ip.inspection_item_subclass,
+        ip.price) c ON c.ins_sample_id = isa.id
+        where (i.state = 4)
+        and c.ins_sample_id IS not NULL
+        group by i.id,
+        i.entrust_code,
+        i.create_time,
+        isa.sample,
+        isa.model,
+        i.company,
+        ins_sample_id,
+        u.`name`) A
+        GROUP BY A.id,
         A.entrust_code,
         A.create_time,
         A.sample,
         A.model,
         A.inspection_item,
         A.company,
-        A.`name`,
-        production,
-        engineering
-        ORDER BY
-        A.id,
-        A.entrust_code,
-        A.create_time,
-        A.sample,
-        A.model,
-        A.inspection_item,
-        A.company,
-        A.`name`,
-        production,
-        engineering) B
+        A.`name`
+        ) B
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
diff --git a/inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml b/inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml
index 056e417..84c887a 100644
--- a/inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml
+++ b/inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml
@@ -17,11 +17,12 @@
     </resultMap>
 
     <select id="getWarehouse" resultMap="WarehouseCellAndHistoryDto">
-        select wc.id, wc.row, wc.col, i.id sampleId, i.sample, i.model, i.sample_code from warehouse_cell wc
+        select wc.id, wc.row, wc.col, i.id sampleId, i.sample, i.model, i.sample_code
+        from warehouse_cell wc
         left join ins_sample i on i.cell_id = wc.id
         where wc.state = 1
         and wc.shelf_id = #{shelfId}
-        order by wc.id
+        order by wc.row ,wc.col, wc.id
     </select>
 
     <resultMap id="WarehouseCellAndHistoryDto" type="com.yuanchu.mom.dto.WarehouseCellAndSampleDto">

--
Gitblit v1.9.3