From 32a0e96bf65f7a9759bddd1848f1cd9d7006ce1e Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 06 三月 2025 16:49:49 +0800
Subject: [PATCH] 检验下单代码迁移

---
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ReportPageDto.java                             |   29 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelDto.java                                  |   19 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelV.java                                    |   22 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java                         |  107 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SheathDto.java                                 |   15 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderTemplate.java                         |   43 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/HistoryDto.java                                |   13 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/ProcessOrder1Mapper.java                    |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFiber.java                                 |   61 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelPs.java                                   |    9 
 inspect-server/src/main/resources/mapper/InsFiberMapper.xml                                       |   23 
 inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java                 |  318 +
 inspect-server/src/main/resources/mapper/InsOrderStateMapper.xml                                  |   23 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/ExportInsProductVO.java                         |  158 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportApproveConfigMapper.java           |   24 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/FibersDto.java                                 |   16 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFibers.java                                |   59 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java                                |   10 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseCell.java                            |   61 
 inspect-server/pom.xml                                                                            |    4 
 inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java                       |   58 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/InsFibersVO.java                                |   24 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleVo.java                                   |   10 
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseServiceImpl.java             |  190 
 inspect-server/src/main/resources/mapper/InsSampleMapper.xml                                      |  892 ++++
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java                        |   17 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrder.java                                 |  224 +
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/Warehouse.java                                |   44 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtils.java                             |  181 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductUserMapper.java                   |   20 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseShelfMapper.java                   |   20 
 inspect-server/src/main/resources/mapper/SampleOrderMapper.xml                                    |   62 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanDTO.java                           |   43 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java                      |  191 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseHistory.java                         |   56 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java                        |   76 
 inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml                                  |   20 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderThingDto.java                             |   48 
 inspect-server/src/main/resources/mapper/InsProductUserMapper.xml                                 |   18 
 inspect-server/src/main/resources/mapper/InsUnPassMapper.xml                                      |   28 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java                 |   24 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java                                |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsBushingMapper.java                       |   28 
 inspect-server/src/main/java/com/ruoyi/inspect/util/SheetWriteHandlerUtil.java                    |   44 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseShelf.java                           |   61 
 inspect-server/src/main/resources/mapper/InsBushingMapper.xml                                     |  109 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/CommissionFeesDto.java                         |   42 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReportApproveConfig.java                   |   46 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSampleUser.java                            |   72 
 pom.xml                                                                                           |    7 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductResult.java                         |   61 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelChecked.java                              |   59 
 inspect-server/src/main/resources/mapper/InsOrderMapper.xml                                       | 1247 ++++++
 inspect-server/src/main/resources/mapper/InsReportMapper.xml                                      |   88 
 inspect-server/src/main/resources/mapper/WarehouseHistoryMapper.xml                               |   27 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/UpInsOrderDTO.java                             |   27 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java                       |   83 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductFiberVO.java                          |   36 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnPass.java                                |   75 
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java              | 2114 ++++++++++
 inspect-server/src/main/resources/mapper/InsOrderTemplateMapper.xml                               |   22 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductUser.java                           |   40 
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderTemplateServiceImpl.java      |   70 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto.java                          |   25 
 inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderTemplateService.java               |   24 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java                         |   76 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/UnInsProductsDTO.java                          |   51 
 inspect-server/src/main/java/com/ruoyi/inspect/service/InsProductService.java                     |   54 
 inspect-server/src/main/resources/mapper/WarehouseShelfMapper.xml                                 |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductResultDTO.java                       |   30 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/UnInsProductsVO.java                            |   32 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java                            |   82 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseMapper.java                        |   25 
 inspect-server/src/main/resources/mapper/InsProductResultMapper.xml                               |   31 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java                     |   23 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ApproveConfigDTO.java                          |   17 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/TemperatureCycling.java                        |   84 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/SampleOrderMapper.java                      |   17 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessOrder.java                             |   56 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductResultDto2.java                         |   19 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java                                 |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/InsulatingDto.java                             |   17 
 inspect-server/src/main/java/com/ruoyi/inspect/controller/WarehouseController.java                |  102 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDTODL.java                        |   70 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/Schedule.java                                 |   54 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanVO.java                             |   56 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java                       |   54 
 inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseService.java                      |   42 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto3.java                         |   26 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderFile.java                             |   57 
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseCellServiceImpl.java         |   26 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductVO.java                               |   41 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/FiberDto.java                                  |   14 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProduct.java                               |  249 +
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DetailTablePolicy.java                |   12 
 inspect-server/src/main/resources/mapper/InsProductMapper.xml                                     |  210 +
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStateMapper.java                    |   21 
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java            |  719 +++
 inspect-server/src/main/java/com/ruoyi/inspect/vo/DeviceVO.java                                   |   30 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/TasksShowDto.java                              |   66 
 inspect-server/src/main/java/com/ruoyi/inspect/excel/FiberRibboGeometricalParameterExcelData.java |   69 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductThingDto.java                           |   20 
 inspect-server/src/main/resources/mapper/WarehouseMapper.xml                                      |   33 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportMapper.java                        |   35 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java                                |    6 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsChildrenVo.java                    |   17 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/BushingDto.java                                |   15 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java                             |   15 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseCellAndSampleDto.java                 |   14 
 inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml                                   |   26 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductDto.java                             |   19 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseHistoryDto.java                       |   14 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderTemplateMapper.java                 |   20 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseHistoryMapper.java                 |   27 
 inspect-server/src/main/resources/mapper/InsFibersMapper.xml                                      |   20 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanCountDTO.java                      |   36 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/ProductVo.java                                  |   22 
 inspect-server/src/main/resources/mapper/InsReportApproveConfigMapper.xml                         |   34 
 inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseCellService.java                  |   13 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReport.java                                |  107 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanTaskSwitchVo.java                   |   36 
 inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml                                  |   40 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/BatchApprovalReportDTO.java                    |   19 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOderDto.java                                |   20 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java                             |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java                             |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java                    |   20 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/CostStatisticsDto.java                         |   65 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseCellMapper.java                    |   25 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseDto.java                              |   14 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto2.java                         |   77 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/productResultDto.java                          |   16 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFiberMapper.java                         |   22 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFibersMapper.java                        |   18 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderState.java                            |   67 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java                          |   23 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java                            |   66 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsFatherVo.java                      |   17 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelMc.java                                   |   16 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java                                  |   15 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/WorkTimeDTO.java                               |   79 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java                             |   91 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsBushing.java                               |   55 
 143 files changed, 11,600 insertions(+), 1 deletions(-)

diff --git a/inspect-server/pom.xml b/inspect-server/pom.xml
index ed779d7..ecadd7d 100644
--- a/inspect-server/pom.xml
+++ b/inspect-server/pom.xml
@@ -12,6 +12,10 @@
     <artifactId>inspect-server</artifactId>
 
     <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
         <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
new file mode 100644
index 0000000..fbc26ce
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
@@ -0,0 +1,318 @@
+package com.ruoyi.inspect.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.inspect.dto.*;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsOrderTemplate;
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.service.InsOrderService;
+import com.ruoyi.inspect.service.InsOrderTemplateService;
+import com.ruoyi.inspect.service.InsProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/insOrder")
+@Api(tags="妫�楠屽崟妯″潡")
+public class InsOrderController {
+
+    private InsOrderService insOrderService;
+
+    private InsProductService insProductService;
+
+    private InsOrderTemplateService insOrderTemplateService;
+
+    //鑾峰彇妫�楠屼笅鍗曟暟鎹�
+    @ApiOperation(value = "鏌ョ湅鎵�灞炲崟浣嶆楠屽崟")
+    @GetMapping("/selectInsOrderParameter")
+    public Result selectInsOrderParameter(Page page, SampleOrderDto sampleOrderDto) {
+        return Result.success(insOrderService.selectInsOrderParameter(page, sampleOrderDto));
+    }
+
+    //鐢ㄤ簬妫�楠屼笅鍗曞尯鍒煡鐪嬫墍鏈夎鍗曞拰鍙煡鐪嬪悓涓�涓鎵樺崟浣嶇殑璁㈠崟
+    @ApiOperation(value = "鍒ゆ柇褰撳墠瀹㈡埛绱ф�ラ搴︽槸鍚︾敤瀹�")
+    @GetMapping("/hasSendUrgentOrder")
+    public Result hasSendUrgentOrder() {
+        return Result.success(insOrderService.hasSendUrgentOrder());
+    }
+
+    //鐢ㄤ簬妫�楠屼笅鍗曞尯鍒煡鐪嬫墍鏈夎鍗曞拰鍙煡鐪嬪悓涓�涓鎵樺崟浣嶇殑璁㈠崟
+    @ApiOperation(value = "鏌ョ湅鎵�鏈夋楠屽崟")
+    @PostMapping("/selectAllInsOrderParameter")
+    public Result selectAllInsOrderParameter() {
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鍒嗛厤鎸夐挳")
+    @PostMapping("/upInsOrder")
+    public Result<?> upInsOrder(@RequestBody UpInsOrderDTO upInsOrderDTO) {
+        return Result.success(insOrderService.upInsOrder(upInsOrderDTO));
+    }
+
+    @ApiOperation(value = "涓嬪崟鎸夐挳")
+    @PostMapping("/addInsOrder")
+    public Result<?> addInsOrder(String str) {
+        Map<String, Object> map = JSON.parseObject(str, Map.class);
+        JSONArray jsonArray = JSON.parseArray(map.get("list")+"");
+        List<SampleProductDto> list = jsonArray.toJavaList(SampleProductDto.class);
+        InsOrder insOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), InsOrder.class);
+        List<List<Integer>> pairing = JSON.parseArray(map.get("pairing")+"");
+        List<List<Integer>> fiberPairing = JSON.parseArray(map.get("fiberPairing")+"");//鍏夌氦閰嶇疆閲岀殑鐔旀帴閰嶅
+        return Result.success(insOrderService.addInsOrder(list, insOrder, pairing,fiberPairing));
+    }
+
+    @ApiOperation(value = "鏌ヨ璁㈠崟鏈�闀块璁℃椂闂�")
+    @PostMapping("/selectOrderManDay")
+    public Result<?> selectOrderManDay(Integer id) {
+        int day = insProductService.selectOrderManDay(id);
+        return Result.success("鎴愬姛", LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+    }
+
+    @ApiOperation(value = "鏌ヨ妫�楠屼笅鍗曞唴瀹硅鎯�")
+    @PostMapping("/getInsOrder")
+    public Result<?> getInsOrder(Integer orderId) {
+        return Result.success(insOrderService.getInsOrder(orderId));
+    }
+
+    @ApiOperation(value = "瀹℃牳鎸夐挳")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class),
+            @ApiImplicitParam(name = "state", value = "瀹℃牳缁撴灉 1:閫氳繃 2锛氫笉閫氳繃", dataTypeClass = Integer.class)
+    })
+    @PostMapping("/upInsOrderOfState")
+    public Result<?> upInsOrderOfState(@RequestBody InsOrder insOrder) {
+        return Result.success(insOrderService.upInsOrderOfState(insOrder));
+    }
+
+    @ApiOperation(value = "淇濆瓨妫�楠屾ā鏉挎寜閽�")
+    @PostMapping("/addInsOrderTemplate")
+    public Result<?> addInsOrderTemplate(@RequestBody InsOrderTemplate insOrderTemplate) {
+        return Result.success(insOrderTemplateService.addInsOrderTemplate(insOrderTemplate));
+    }
+
+    @ApiOperation(value = "鍒犻櫎妫�楠屾ā鏉挎寜閽�")
+    @PostMapping("/delInsOrderTemplate")
+    public Result<?> delInsOrderTemplate(Integer id) {
+        return Result.success(insOrderTemplateService.delInsOrderTemplate(id));
+    }
+
+    @ApiOperation(value = "鏌ヨ妫�楠屽崟妯℃澘")
+    @GetMapping("/selectInsOrderTemplate")
+    public Result<?> selectInsOrderTemplate(String company) {
+        return Result.success(insOrderTemplateService.selectInsOrderTemplate(company));
+    }
+
+    @ApiOperation(value = "閫氳繃妫�楠屽崟妯℃澘id鑾峰彇妫�楠屽崟妯℃澘鍐呭")
+    @PostMapping("/selectInsOrderTemplateById")
+    public Result<?> selectInsOrderTemplateById(Integer id) {
+        return Result.success( insOrderTemplateService.selectInsOrderTemplateById(id),"鎴愬姛");
+    }
+
+    @ApiOperation(value = "閫氳繃妫�楠屽崟鏌ヨ妫�楠屾暟鎹紙鏁版嵁鏌ョ湅锛�")
+    @PostMapping("/selectSampleAndProductByOrderId")
+    public Result<?> selectSampleAndProductByOrderId(@RequestBody Map<String, Object> data) throws Exception {
+        SampleProductDto2 sampleProductDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), SampleProductDto2.class);
+        return Result.success(insOrderService.selectSampleAndProductByOrderId(sampleProductDto));
+    }
+    //鏁版嵁鏌ョ湅涓嬬殑鏌ョ湅璇︽儏锛堝崟鏍瑰瀭鐩寸噧鐑у拰鏉惧绠�
+    @PostMapping("/viewDetails")
+    public Result<?> viewDetails(@RequestBody Map<String, Object> data)   {
+        return Result.success(insOrderService.viewDetails(data));
+    }
+
+    @ApiOperation(value = "瀵煎嚭宸叉濮旀墭鍗�")
+    @PostMapping("/exportChecked")
+    public void exportChecked(@RequestBody Map<String, Object> data, HttpServletResponse response) {
+        insOrderService.exportChecked(data,response);
+    }
+
+    @ApiOperation(value = "璐圭敤缁熻鑾峰彇鎬讳环")
+    @PostMapping("/costStatistics2")
+    public Result<?> costStatistics2(@RequestBody Map<String, Object> data) throws Exception {
+        CostStatisticsDto costStatisticsDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), CostStatisticsDto.class);
+        return Result.success(insOrderService.costStatistics2(costStatisticsDto));
+    }
+
+    @ApiOperation(value = "鎾ら攢鎸夐挳")
+    @PutMapping("/updateStatus")
+    public Result<?> updateStatus(Integer id) {
+        insOrderService.updateStatus(id);
+        return Result.success();
+    }
+
+    //寰呮鐨勬挙閿�鐨勬煡璇㈠緟妫�椤圭洰
+    @PostMapping("/selectNoProducts")
+    public Result<?> selectNoProducts(@RequestBody Map<String, Object> data,Integer orderId ,String ids) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        InsProduct insProduct = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), InsProduct.class);
+        return Result.success(insProductService.selectNoProducts(page, insProduct,orderId,ids));
+    }
+
+    /**
+     * 鏌ヨ闇�瑕佹挙閿�鐨勬楠岄」鐩牱鍝�
+     * @param orderId
+     * @return Map<String, Object>
+     */
+    @GetMapping("/selectSampleByOrderId")
+    public Result<?> selectSampleByOrderId(Integer orderId)   {
+        return Result.success(insProductService.selectSampleByOrderId(orderId));
+    }
+
+    /**
+     * 鏌ヨ妫�楠岄」鐩�
+     * @param sampleId
+     * @return Map<String, Object>
+     */
+    @GetMapping("/selectProductsBySampleId")
+    public Result<?> selectProductsBySampleId(Integer sampleId,Integer orderId)   {
+        return Result.success(insProductService.selectProductsBySampleId(sampleId,orderId));
+    }
+
+    /**
+     * 鏌ヨ妫�楠岄」鐩负娓╁害寰幆鐨勬楠屾鏁�
+     */
+    @GetMapping("/selectTemperatureByProductId")
+    public Result selectTemperatureByproductId(Integer productId) {
+        return Result.success(insProductService.selectTemperatureByProductId(productId));
+    }
+
+    /**
+     * 鏌ヨ娓╁害寰幆鐨勬鏁颁竴鑷寸殑娓╁害鐐�
+     */
+    @GetMapping("/selectTemperatureNumberByProductId")
+    public Result selectTemperatureNumberByproductId(Integer parentId,String inspectionItem) {
+        return Result.success(insProductService.selectTemperatureNumberByProductId(parentId,inspectionItem));
+    }
+
+    /**
+     * 鎾ら攢
+     * @param data
+     * @return
+     */
+    @PostMapping("/revoke")
+    public Result<?> revoke(@RequestBody Map<String, Object> data)   {
+        insProductService.revoke(data);
+        return Result.success();
+    }
+
+    /**
+     * 鏌ヨ鎾ら攢瀹℃牳鐨勬牱鍝�
+     * @param orderId
+     * @param
+     * @return
+     */
+    @GetMapping("/revokeReviewSample")
+    public Result<?> revokeReviewSample(Integer orderId)   {
+        return Result.success(insProductService.revokeReviewSample(orderId));
+    }
+
+
+    /**
+     * 鎾ら攢鐨勫惊鐜鏁颁竴鑷寸殑娓╁害鐐�
+     * @return
+     */
+    @GetMapping("/revokeReviewConsistentByProductId")
+    public Result<?> revokeReviewConsistentByProductId(Integer parentId,String inspectionItem){
+        return Result.success(insProductService.revokeReviewConsistentByProductId(parentId,inspectionItem));
+    }
+
+    /**
+     * 鎾ら攢鐨勬俯搴﹀惊鐜殑寰幆娆℃暟
+     * @return
+     */
+    @GetMapping("/revokeReviewTemperatureByProductId")
+    public Result<?> revokeReviewTemperatureByProductId(Integer productId){
+        return Result.success(insProductService.revokeReviewTemperatureByProductId(productId));
+    }
+
+    /**
+     * 鏌ヨ鎾ら攢瀹℃牳  娓╁害寰幆
+     */
+    @GetMapping("/revokeReviewProduct")
+    public Result<?> revokeReviewProduct(Integer orderId,Integer sampleId){
+        return Result.success(insProductService.revokeReviewProduct(orderId,sampleId));
+    }
+
+
+
+    /**
+     * 鎾ら攢瀹℃牳閫氳繃
+     * @param orderId
+     * @return
+     */
+    @GetMapping("/revocationPassed")
+    public Result<?> revocationPassed(Integer orderId){
+        insProductService.revocationPassed(orderId);
+        return Result.success();
+    }
+
+    /**
+     * 鎾ら攢瀹℃牳鍙栨秷
+     * @param orderId
+     * @return
+     */
+    @GetMapping("/revocationCancel")
+    public Result<?> revocationCancel(Integer orderId){
+        insProductService.revocationCancel(orderId);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "寰呮鐨勬挙閿�")
+    @PutMapping("/updateInspected")
+    public Result<?> updateInspected(Integer orderId,String ids){
+        insProductService.updateInspected(orderId,ids);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鎾ら攢瀹℃牳鎸夐挳")
+    @PostMapping("/checkUpdate")
+    public Result<?> checkUpdate(Integer orderId,Integer state){
+        insProductService.checkUpdate(orderId,state);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍囩鎵撳嵃鎸夐挳")
+    @PostMapping("/labelPrinting")
+    public Result<?> labelPrinting(String ids) {
+        return Result.success(insOrderService.labelPrinting(ids));
+    }
+
+    @ApiOperation(value = "鏌ョ湅璐圭敤缁熻鍒楄〃")
+    @PostMapping("/costStatistics")
+    public Result<?> costStatistics(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        CostStatisticsDto costStatisticsDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), CostStatisticsDto.class);
+        return Result.success(insOrderService.costStatistics(page, costStatisticsDto));
+    }
+
+    @ApiOperation(value = "鏌ョ湅缁撴灉鎸夐挳(娓╁害寰幆)")
+    @PostMapping("/getInsOrderTemList")
+    public Result getInsOrderTemList(@RequestBody Map<String, Object> data) {
+        return Result.success(insOrderService.getInsOrderTemList(data));
+    }
+
+    /**
+     * 鑾峰彇鐔旀帴鏁伴噺
+     */
+    @GetMapping("/permute")
+    public Result permute(Integer num, Boolean isValue) {
+        return Result.success(insOrderService.permute(num,isValue));
+    }
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/WarehouseController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/WarehouseController.java
new file mode 100644
index 0000000..e7ec846
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/WarehouseController.java
@@ -0,0 +1,102 @@
+package com.ruoyi.inspect.controller;
+
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.pojo.Warehouse;
+import com.ruoyi.inspect.pojo.WarehouseShelf;
+import com.ruoyi.inspect.service.WarehouseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RequestMapping("/warehouse")
+@RestController
+@AllArgsConstructor
+@Api(tags = "鏍峰搧绠$悊")
+public class WarehouseController {
+
+    private WarehouseService warehouseService;
+
+    @PostMapping("/addWarehouse")
+    @ApiOperation("娣诲姞浠撳簱")
+    public Result addWarehouse(String name) {
+        return Result.success(warehouseService.addWarehouse(name));
+    }
+
+    @GetMapping("/selectWarehouse")
+    @ApiOperation("鏌ヨ浠撳簱")
+    public Result selectWarehouse() {
+        return Result.success(warehouseService.selectWarehouse());
+    }
+
+    @PostMapping("/addShelf")
+    @ApiOperation("娣诲姞璐ф灦")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "name", name = "鍚嶇О", dataTypeClass = String.class),
+            @ApiImplicitParam(value = "row", name = "琛�", dataTypeClass = Integer.class),
+            @ApiImplicitParam(value = "col", name = "鍒�", dataTypeClass = Integer.class),
+            @ApiImplicitParam(value = "warehouseId", name = "浠撳簱id", dataTypeClass = Integer.class)
+    })
+
+    public Result addShelf(@RequestBody WarehouseShelf warehouseShelf) {
+        return Result.success(warehouseService.addShelf(warehouseShelf));
+    }
+
+    @PostMapping("/delWarehouse")
+    @ApiOperation("鍒犻櫎浠撳簱")
+    public Result delWarehouse(Integer id) {
+        return Result.success(warehouseService.delWarehouse(id));
+    }
+
+    @PostMapping("/upWarehouse")
+    @ApiOperation("淇敼浠撳簱")
+    public Result upWarehouse(@RequestBody Warehouse warehouse) {
+        return Result.success(warehouseService.upWarehouse(warehouse));
+    }
+
+    @PostMapping("/delShelf")
+    @ApiOperation("鍒犻櫎璐ф灦")
+    public Result delShelf(Integer id) {
+        return Result.success(warehouseService.delShelf(id));
+    }
+
+    @PostMapping("/upShelf")
+    @ApiOperation("淇敼璐ф灦")
+    public Result upShelf(@RequestBody WarehouseShelf warehouseShelf) {
+        return Result.success(warehouseService.upShelf(warehouseShelf));
+    }
+
+    @GetMapping("/getWarehouse")
+    @ApiOperation("鏌ヨ璐ф灦涓嬬殑瀛樻斁淇℃伅")
+    public Result getWarehouse(Integer shelfId) {
+        return Result.success(warehouseService.getWarehouse(shelfId));
+    }
+
+    @PostMapping("/inWarehouse")
+    @ApiOperation("鏍峰搧鍏ュ簱")
+    public Result inWarehouse(String trees, String sampleCode) {
+        return Result.success(warehouseService.inWarehouse(trees, sampleCode));
+    }
+
+    @PostMapping("/outWarehouse")
+    @ApiOperation("鏍峰搧鍑哄簱")
+    public Result outWarehouse(String sampleCode) {
+        return Result.success(warehouseService.outWarehouse(sampleCode));
+    }
+
+    @PostMapping("/getSampleRecord")
+    @ApiOperation("鏌ヨ鏍峰搧璇︾粏璁板綍")
+    public Result getSampleRecord(Integer id) {
+        return Result.success(warehouseService.getSampleRecord(id));
+    }
+
+    @PostMapping("/searchSampleId")
+    @ApiOperation("閫氳繃鏍峰搧缂栧彿杩涜妫�绱�")
+    public Result searchSampleId(String sampleCode) {
+        return Result.success(warehouseService.searchSampleId(sampleCode));
+    }
+
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ApproveConfigDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ApproveConfigDTO.java
new file mode 100644
index 0000000..bb80c4f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ApproveConfigDTO.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsReportApproveConfig;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class ApproveConfigDTO implements Serializable {
+
+    /**
+     * 閰嶇疆鍒楄〃
+     */
+    List<InsReportApproveConfig> configList;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/BatchApprovalReportDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/BatchApprovalReportDTO.java
new file mode 100644
index 0000000..900d535
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/BatchApprovalReportDTO.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 涓�閿鎵筪to
+ */
+@Data
+public class BatchApprovalReportDTO implements Serializable {
+
+    /**
+     * 閫変腑鐨勬姤鍛奿d鍒楄〃
+     */
+    List<Integer> ids;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/BushingDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/BushingDto.java
new file mode 100644
index 0000000..3019aab
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/BushingDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsBushing;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BushingDto extends InsBushing {
+
+    private List<FiberDto> fiber;
+
+    private List<FibersDto> fibers;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/CommissionFeesDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/CommissionFeesDto.java
new file mode 100644
index 0000000..0b6aa70
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/CommissionFeesDto.java
@@ -0,0 +1,42 @@
+package com.ruoyi.inspect.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+@Data
+@ColumnWidth(30)
+public class CommissionFeesDto {
+    @ExcelProperty("鏃ユ湡")
+    private String createTime;
+
+    @ExcelProperty("妫�楠岀紪鍙�")
+    private String entrustCode;
+
+    @ExcelProperty("鏍峰搧鍚嶇О")
+    private String sampleName;
+
+    @ExcelProperty("瑙勬牸鍨嬪彿")
+    private String sampleModel;
+
+    @ExcelProperty("鏍峰搧鏁伴噺")
+    private String sampleNum;
+
+    @ExcelProperty("鎬讳环")
+    private String totalPrice;
+
+    @ExcelProperty("璇曢獙椤圭洰")
+    private String insItem;
+
+    @ExcelProperty("鐢熶骇鍗曚綅")
+    private String production;
+
+    @ExcelProperty("濮旀墭鍗曚綅")
+    private String company;
+
+    @ExcelProperty("濮旀墭浜�")
+    private String custom;
+
+    @ExcelProperty("宸ョ▼鍚嶇О")
+    private String engineering;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/CostStatisticsDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/CostStatisticsDto.java
new file mode 100644
index 0000000..92e2cb2
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/CostStatisticsDto.java
@@ -0,0 +1,65 @@
+package com.ruoyi.inspect.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class CostStatisticsDto {
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","ZTT/QR-30-01-01","鏃ユ湡"})
+    private LocalDateTime createTime;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","ZTT/QR-30-01-01","妫�楠岀紪鍙�"})
+    private String entrustCode;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","鏍峰搧鍚嶇О"})
+    private String sample;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","瑙勬牸鍨嬪彿"})
+    private String model;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","鏍峰搧鏁伴噺"})
+    private Integer num;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","鎬讳环"})
+    private BigDecimal price;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","璇曢獙椤圭洰"})
+    private String inspectionItem;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","濮旀墭鍗曚綅"})
+    private String company;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","濮旀墭浜�"})
+    private String name;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","鐢熶骇鍗曚綅"})
+    private String production;
+
+    @ExcelProperty(value ={"涓ぉ绉戞妧妫�娴嬩腑蹇冩牱鍝佺櫥璁拌〃","宸ョ▼鍚嶇О"})
+    private String engineering;
+
+    @ExcelIgnore
+    private Integer createUser;
+
+    @ExcelIgnore
+    private Integer insSampleId;
+
+    @ExcelIgnore
+    private Double cost;//宸ユ椂
+
+    @TableField(exist = false,select = false)
+    @ExcelIgnore
+    private String dates;
+    @ExcelIgnore
+    private String laboratory;
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelChecked.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelChecked.java
new file mode 100644
index 0000000..a72c4fb
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelChecked.java
@@ -0,0 +1,59 @@
+package com.ruoyi.inspect.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.converters.localdate.LocalDateStringConverter;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ExcelChecked {
+    @ExcelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ExcelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ExcelProperty("濂楃鑹叉爣")
+    private String bushColor;
+
+    @ExcelProperty("鍏夌氦甯︾紪鍙�")
+    private String code;
+
+    @ExcelProperty("鍏夌氦鑹叉爣")
+    private String color;
+
+    @ExcelProperty("妫�楠岄」")
+    private String inspectionItem;
+
+    @ExcelProperty("妫�楠屽瓙椤�")
+    private String inspectionItemSubclass;
+
+    @ExcelProperty("璇曢獙瑕佹眰")
+    private String tell;
+
+    @ExcelProperty("妫�楠屽��")
+    private String lastValue;
+
+    @ExcelProperty("缁撴灉鍒ゅ畾")
+    private String insResult;
+
+    @ExcelProperty("鍗曚綅")
+    private String unit;
+
+    @ExcelProperty("妫�楠屼汉")
+    private String checkName;
+
+    @ExcelProperty("鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ExcelProperty("鏍峰搧鍨嬪彿")
+    private String model;
+
+    @ExcelProperty("涓嬪崟浜�")
+    private String customName;
+
+    @ExcelProperty(value = "涓嬪崟鏃堕棿",converter = LocalDateStringConverter.class)
+    private LocalDate createTime;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelDto.java
new file mode 100644
index 0000000..ca22b47
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ExcelDto implements Serializable {
+
+    Integer r;
+
+    Integer c;
+
+    Integer mc;
+
+    ExcelV v;
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelMc.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelMc.java
new file mode 100644
index 0000000..e6eb344
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelMc.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class ExcelMc {
+
+    Integer r;
+
+    Integer c;
+
+    Integer rs;
+
+    Integer cs;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelPs.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelPs.java
new file mode 100644
index 0000000..16d0e6f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelPs.java
@@ -0,0 +1,9 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class ExcelPs {
+    String value;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelV.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelV.java
new file mode 100644
index 0000000..48688f3
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelV.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class ExcelV {
+
+    String v;
+
+    String ff;
+
+    String fc;
+
+    String fs;
+
+    String ht;
+
+    ExcelMc mc;
+
+    ExcelPs ps;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java
new file mode 100644
index 0000000..a5b36d9
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FactoryDto {
+
+    private String code = "[1]";
+
+    private String label;
+
+    private String value;
+
+    private List<LaboratoryDto> children;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/FiberDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/FiberDto.java
new file mode 100644
index 0000000..02a4c44
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/FiberDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsFiber;
+import com.ruoyi.inspect.pojo.InsProduct;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FiberDto extends InsFiber {
+
+    private List<InsProduct> productList;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/FibersDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/FibersDto.java
new file mode 100644
index 0000000..e215a4d
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/FibersDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsFibers;
+import com.ruoyi.inspect.pojo.InsProduct;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FibersDto extends InsFibers {
+
+    private List<FiberDto> fiber;
+
+    private List<InsProduct> productList;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/HistoryDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/HistoryDto.java
new file mode 100644
index 0000000..8bb9834
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/HistoryDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.WarehouseHistory;
+import lombok.Data;
+
+@Data
+public class HistoryDto extends WarehouseHistory {
+
+    private String createUserName;
+
+    private String warehouseCode;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOderDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOderDto.java
new file mode 100644
index 0000000..92de0a4
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOderDto.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author gaoaoy
+ * @version 1.0.0
+ * @create 2024/3/14 16:44
+ **/
+@Data
+public class InsOderDto {
+
+    private Integer id;
+    private Integer orderName;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime date;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanCountDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanCountDTO.java
new file mode 100644
index 0000000..bfccbd1
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanCountDTO.java
@@ -0,0 +1,36 @@
+package com.ruoyi.inspect.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏌ヨ鏃堕棿鑼冨洿鍐呮楠屼换鍔¤鍒掓暟閲廌TO
+ */
+@Data
+public class InsOrderPlanCountDTO implements Serializable {
+
+    /**
+     * 瀛愬疄楠屽
+     */
+    @ApiModelProperty(value = "瀛愬疄楠屽")
+    private String sonLaboratory;
+
+    /**
+     * 寮�濮嬩笅鍙戞椂闂�
+     */
+    @ApiModelProperty(value = "寮�濮嬩笅鍙戞椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    /**
+     * 缁撴潫涓嬪彂鏃堕棿
+     */
+    @ApiModelProperty(value = "缁撴潫涓嬪彂鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanDTO.java
new file mode 100644
index 0000000..827bb90
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanDTO.java
@@ -0,0 +1,43 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class InsOrderPlanDTO implements Serializable {
+
+    @ApiModelProperty("妫�楠屼换鍔′富閿甶d")
+    private Long insSampleId;
+
+    @ApiModelProperty("鐢ㄦ埛id")
+    private Long userId;
+
+    @ApiModelProperty("鐘舵��(妫�楠屽鐞�)")
+    private Integer state;
+
+    @ApiModelProperty("瀛愬疄楠屽")
+    private String sonLaboratory;
+
+    @ApiModelProperty("妫�楠岀姸鎬�")
+    private String insState;
+
+    @ApiModelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ApiModelProperty("鏍峰搧澶х被")
+    private String sampleType;
+
+    @ApiModelProperty("涓嬪彂鏃堕棿鑼冨洿")
+    private List<LocalDateTime> sendTimeRange;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductDto.java
new file mode 100644
index 0000000..ec34dcf
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.dto;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InsProductDto {
+
+    private List<Integer> ids;
+
+    private String temperature;
+
+    private String humidity;
+
+    private Integer insOrderId;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductResultDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductResultDTO.java
new file mode 100644
index 0000000..215890f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductResultDTO.java
@@ -0,0 +1,30 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsProductResult;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class InsProductResultDTO extends InsProductResult implements Serializable {
+
+    /**
+     * 璁㈠崟id
+     */
+    @ApiModelProperty("璁㈠崟id")
+    private Integer orderId;
+
+    /**
+     *鏍峰搧id
+     */
+    @ApiModelProperty("鏍峰搧id")
+    private Integer sampleId;
+
+    /**
+     *鍘熷璁板綍妯℃澘鍚嶇О
+     */
+    @ApiModelProperty("鍘熷璁板綍妯℃澘鍚嶇О")
+    private String templateName;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsulatingDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsulatingDto.java
new file mode 100644
index 0000000..d4884c5
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsulatingDto.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsProduct;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InsulatingDto {
+
+    private Integer standardMethodListId;
+
+    private Integer num;
+
+    private List<InsProduct> insProduct;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java
new file mode 100644
index 0000000..59d088d
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class LaboratoryDto {
+
+    private String code = "[2]";
+
+    private String label;
+
+    private String value;
+
+    private List<SampleTypeDto> children;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java
new file mode 100644
index 0000000..5ed39bf
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class ModelDto {
+
+    private String code = "[5]";
+
+    private String label;
+
+    private String value;
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderThingDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderThingDto.java
new file mode 100644
index 0000000..5829a16
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderThingDto.java
@@ -0,0 +1,48 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class OrderThingDto {
+
+    @ApiModelProperty("涓婚敭id")
+    private Integer id;
+
+    @ApiModelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty("濮旀墭浜哄悕绉�")
+    private String custom;
+
+    @ApiModelProperty("濮旀墭鍗曚綅")
+    private String company;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ApiModelProperty("鏍峰搧鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鏍峰搧鏁伴噺")
+    private Double sampleNum;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("妫�楠屽崟缁撹")
+    private String insResult;
+
+    @ApiModelProperty("涓嬪崟鏃堕棿")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("妫�楠岄」鐩�")
+    private List<ProductThingDto> products;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java
new file mode 100644
index 0000000..b7e58dd
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java
@@ -0,0 +1,10 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class ProductDto {
+
+    private String name;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductResultDto2.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductResultDto2.java
new file mode 100644
index 0000000..f3beda5
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductResultDto2.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsProduct;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ProductResultDto2 extends InsProduct {
+
+    @ApiModelProperty("妫�楠岃澶�")
+    private String equipValue;
+
+    @ApiModelProperty("妫�楠屼汉")
+    private String updateUserName;
+
+    @ApiModelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductThingDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductThingDto.java
new file mode 100644
index 0000000..31efd4f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductThingDto.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductThingDto {
+
+    private Integer productId;
+
+    private String inspectionItem;
+
+    private String lastValue;
+
+    private Integer insResult;
+
+    private List<productResultDto> productResults;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/ReportPageDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ReportPageDto.java
new file mode 100644
index 0000000..cc84162
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/ReportPageDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsReport;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class ReportPageDto extends InsReport implements Serializable {
+
+    @ApiModelProperty(value = "鏄惁宸蹭笂浼�(0:鏈笂浼狅紝1:宸蹭笂浼�)")
+    private Integer isUpload;
+
+    @ApiModelProperty(value = "濮旀墭缂栧彿")
+    private String entrustCode;
+
+    private String writeUserName;
+
+    private String ratifyUser;
+
+    private String examineUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿鑼冨洿")
+    private List<LocalDateTime> createTimeRange;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java
new file mode 100644
index 0000000..68cc34a
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SampleDto {
+
+    private String code = "[4]";
+
+    private String label;
+
+    private String value;
+
+    private List<ModelDto> children;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java
new file mode 100644
index 0000000..d9df360
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java
@@ -0,0 +1,66 @@
+package com.ruoyi.inspect.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.inspect.pojo.InsOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author gaoaoy
+ * @version 1.0.0
+ * @create 2024/3/14 18:46
+ **/
+@Data
+public class SampleOrderDto extends InsOrder {
+
+    @ApiModelProperty("妫�楠屽璞�")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sampleName;
+
+    @ApiModelProperty("鏍峰搧鍨嬪彿")
+    private String sampleModel;
+
+    private String assign;
+
+    @ApiModelProperty("鏍峰搧鏁伴噺")
+    private Integer sampleNum;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty("妫�楠岃繘搴�%")
+    private String insProgress;
+
+    @ApiModelProperty("鎶ュ憡id")
+    private String reportId;
+
+    @ApiModelProperty("鏄惁鎵瑰噯")
+    private Integer isRatify;
+
+    @TableField("`url`")
+    private String url;
+
+    private String urlS;
+
+    private String name;
+
+    /**
+     * 鐢ㄤ簬鍒ゆ柇鍗曞瓙鏄惁璁ら
+     */
+    private Integer inspectId;
+
+    /**
+     * 涓嬭浇pdf鍦板潃
+     */
+    private String tempUrlPdf;
+
+    /**
+     * 鏃堕棿鑼冨洿
+     */
+    private List<String> startAndEndTime;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDTODL.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDTODL.java
new file mode 100644
index 0000000..81e419f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDTODL.java
@@ -0,0 +1,70 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鏁版嵁鏌ョ湅瀵硅薄锛堢數鍔涜瘯楠屽锛�
+ */
+@Data
+public class SampleProductDTODL implements Serializable {
+
+    private Integer id;
+
+    private Integer insProductId;
+
+    @ApiModelProperty(name = "濮旀墭鍗曞彿")
+    private String entrustCode;
+
+    @ApiModelProperty(name = "鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty(name = "鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ApiModelProperty(name = "鏍峰搧鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty(name = "妫�楠岄」")
+    private String inspectionItem;
+
+    @ApiModelProperty(name = "妫�楠屽瓙椤�")
+    private String inspectionItemSubclass;
+
+    @ApiModelProperty(name = "妫�楠岀粨鏋�")
+    private String lastValue;
+
+    @ApiModelProperty(name = "缁撴灉鍒ゅ畾")
+    private Integer insResult;
+
+    @ApiModelProperty(name = "鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty(name = "璇曢獙瑕佹眰")
+    private String tell;
+
+    @ApiModelProperty(name = "妫�楠屼汉")
+    private String checkName;
+
+    @ApiModelProperty(name = "妫�楠屾棩鏈�")
+    private String checkTime;
+
+    @ApiModelProperty(name = "璇曢獙瀹ゅ悕绉�")
+    private String sonLaboratory;
+
+//    @ApiModelProperty(value = 5, name = "鏍峰搧鐘舵��")
+    private Integer insState;
+
+    private String inspectionItemType;
+
+//    @ApiModelProperty(value = 11, name = "妫�楠屽�肩被鍨�")
+    private String inspectionValueType;
+
+    private String equipValue;
+
+    @ApiModelProperty(value = "妫�楠岃繃绋嬪��")
+    private String insValue;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto.java
new file mode 100644
index 0000000..ba9bb95
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.pojo.InsSample;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SampleProductDto extends InsSample {
+
+    private List<InsProduct> insProduct;
+
+    private List<BushingDto> bushing;
+
+    private List<SampleProductDto> childSampleList;
+
+    private InsulatingDto insulating;
+
+    private SheathDto sheath;
+
+    //妫�楠屼汉
+    private String checkName;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto2.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto2.java
new file mode 100644
index 0000000..97aa5fd
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto2.java
@@ -0,0 +1,77 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SampleProductDto2 implements Serializable {
+
+    private Integer id;
+    private Integer insProductId;
+
+    @ApiModelProperty("濮旀墭鍗曞彿")
+    private String entrustCode;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty("绠″鑹叉爣")
+    private String bushColor;
+
+    @ApiModelProperty("鍏夌氦甯︾紪鍙�")
+    private String code;
+
+    @ApiModelProperty("鍏夌氦鑹叉爣")
+    private String color;
+
+    @ApiModelProperty("妫�楠岄」")
+    private String inspectionItem;
+
+    @ApiModelProperty("妫�楠屽瓙椤�")
+    private String inspectionItemSubclass;
+
+    @ApiModelProperty("妫�楠岀粨鏋�")
+    private String lastValue;
+
+    @ApiModelProperty("缁撴灉鍒ゅ畾")
+    private Integer insResult;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("璇曢獙瑕佹眰")
+    private String tell;
+
+    @ApiModelProperty("妫�楠屼汉")
+    private String checkName;
+
+    @ApiModelProperty("妫�楠屾棩鏈�")
+    private String checkTime;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ApiModelProperty("鏍峰搧鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("璇曢獙瀹ゅ悕绉�")
+    private String sonLaboratory;
+
+//    @ApiModelProperty(value = 5, "鏍峰搧鐘舵��")
+    private Integer insState;
+
+    private String inspectionItemType;
+
+//    @ApiModelProperty(value = 11, "妫�楠屽�肩被鍨�")
+    private String inspectionValueType;
+
+    private String equipValue;
+
+    @ApiModelProperty(value = "妫�楠岃繃绋嬪��")
+    private String insValue;
+
+    private Integer insSampleId;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto3.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto3.java
new file mode 100644
index 0000000..a7f62ab
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto3.java
@@ -0,0 +1,26 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.pojo.InsSample;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SampleProductDto3 extends InsSample {
+
+    private List<InsProduct> insProduct;
+
+    private List<BushingDto> bushing;
+
+    private List<SampleProductDto3> childSampleList;
+
+    private InsulatingDto insulating;
+
+    private SheathDto sheath;
+    private String code;
+    private String ioSampleType;
+
+    private Integer isLeave;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java
new file mode 100644
index 0000000..9a85ac7
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SampleTypeDto {
+
+    private String code = "[3]";
+
+    private String label;
+
+    private String value;
+
+    private List<SampleDto> children;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/SheathDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SheathDto.java
new file mode 100644
index 0000000..646e9d9
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/SheathDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsProduct;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SheathDto {
+
+    private Integer standardMethodListId;
+
+    private List<InsProduct> insProduct;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/TasksShowDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/TasksShowDto.java
new file mode 100644
index 0000000..f93a6be
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/TasksShowDto.java
@@ -0,0 +1,66 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class TasksShowDto {
+
+    /**
+     * 濮旀墭鍗曞彿
+     */
+    private String entrustCode;
+
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String sample;
+
+    /**
+     * 濮旀墭鍗曚綅
+     */
+    private String company;
+
+    /**
+     * 濮旀墭鏃堕棿
+     */
+    private String createTime;
+
+    /**
+     * 娴嬭瘯
+     */
+    private String state;
+
+
+    /**
+     * 澶嶆牳
+     */
+    private String insState;
+
+    /**
+     * 鎶ュ憡
+     */
+    private String code;
+
+    /**
+     * 瀹℃牳
+     */
+    private String isExamine;
+
+    /**
+     * 鎵瑰噯
+     */
+    private String isRatify;
+
+
+    /**
+     * 妫�娴嬩汉
+     */
+    private String name;
+
+    /**
+     * 绱ф�ョ▼搴�
+     */
+    private String type;
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/TemperatureCycling.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/TemperatureCycling.java
new file mode 100644
index 0000000..d06e004
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/TemperatureCycling.java
@@ -0,0 +1,84 @@
+package com.ruoyi.inspect.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class TemperatureCycling {
+    @ExcelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ExcelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ExcelProperty("濂楃鑹叉爣")
+    private String bushColor;
+
+    @ExcelProperty("鍏夌氦甯︾紪鍙�")
+    private String code;
+
+    @ExcelProperty("鍏夌氦缂栧彿")
+    private String color;
+
+    @ExcelProperty("寰幆娆℃暟")
+    private String inspectionItem;
+
+    @ExcelProperty("娓╁害鐐�")
+    private String inspectionItemSubclass;
+
+    @ExcelProperty("琛板噺绯绘暟1310")
+    private String attenuationCoefficient1310;
+
+    @ExcelProperty("琛板噺宸�1")
+    private String attenuationDifference1;
+
+    @ExcelProperty("琛板噺绯绘暟1550")
+    private String attenuationCoefficient1550;
+
+    @ExcelProperty("琛板噺宸�2")
+    private String attenuationDifference2;
+
+    @ExcelProperty("琛板噺绯绘暟1625")
+    private String attenuationCoefficient1625;
+
+    @ExcelProperty("琛板噺宸�3")
+    private String attenuationDifference3;
+
+    @ExcelProperty("琛板噺1383")
+    private String attenuationCoefficient1383;
+
+    @ExcelProperty("琛板噺宸�4")
+    private String attenuationDifference4;
+
+    @ExcelProperty("琛板噺1490")
+    private String attenuationCoefficient1490;
+
+    @ExcelProperty("琛板噺宸�5")
+    private String attenuationDifference5;
+
+
+    @ExcelProperty("琛板噺宸甅ax")
+    private String attenuationDifferenceMax;
+
+    @ExcelProperty("鏄惁鍚堟牸")
+    private String insResult;
+
+
+    @ExcelProperty("妫�楠屼汉")
+    private String checkName;
+
+    @ExcelProperty(value = "妫�娴嬫椂闂�")
+    private LocalDate insTime;
+
+    @TableField(exist = false)
+    @ExcelIgnore
+    private LocalDate sendTime;
+
+    @TableField(exist = false)
+    @ExcelIgnore
+    private String sample;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnInsProductsDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnInsProductsDTO.java
new file mode 100644
index 0000000..1b3f053
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnInsProductsDTO.java
@@ -0,0 +1,51 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class UnInsProductsDTO {
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private String startDate;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private String endDate;
+
+    /**
+     * 濮旀墭缂栧彿
+     */
+    @ApiModelProperty(value = "濮旀墭缂栧彿")
+    private String entrustCode;
+
+    /**
+     * 妫�楠岀姸鎬�
+     */
+    @ApiModelProperty(value = "妫�楠岀姸鎬�")
+    private String insState;
+
+    /**
+     * 鏍峰搧缂栧彿
+     */
+    @ApiModelProperty(value = "鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    /**
+     * 鏍峰搧澶х被/鏍峰搧鍚嶇О
+     */
+    @ApiModelProperty(value = "鏍峰搧澶х被/鏍峰搧鍚嶇О")
+    private String sample;
+
+    /**
+     * 瀛愬疄楠屽
+     */
+    @ApiModelProperty(value = "瀛愬疄楠屽")
+    private String sonLaboratory;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java
new file mode 100644
index 0000000..d188fe5
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsUnPass;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author 鏈变匠鍚�
+ * @date 2024/5/8 12:38
+ */
+@Data
+public class UnPassPageDto extends InsUnPass implements Serializable {
+
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/UpInsOrderDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UpInsOrderDTO.java
new file mode 100644
index 0000000..c8da5f7
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UpInsOrderDTO.java
@@ -0,0 +1,27 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class UpInsOrderDTO implements Serializable {
+
+    @ApiModelProperty(value = "璁㈠崟id")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鏍峰搧id")
+    private Integer sampleId;
+
+    @ApiModelProperty(value = "绾﹀畾鏃堕棿")
+    private String appointed;
+
+    @ApiModelProperty(value = "鎸囨淳浜哄憳")
+    private List<Integer> userIdList;
+
+    @ApiModelProperty(value = "瀛愯瘯楠屽")
+    private String sonLaboratory;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseCellAndSampleDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseCellAndSampleDto.java
new file mode 100644
index 0000000..59f3939
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseCellAndSampleDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsSample;
+import com.ruoyi.inspect.pojo.WarehouseCell;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseCellAndSampleDto extends WarehouseCell {
+
+    private List<InsSample> samples;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseDto.java
new file mode 100644
index 0000000..180e741
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.Warehouse;
+import com.ruoyi.inspect.pojo.WarehouseShelf;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseDto extends Warehouse {
+
+    List<WarehouseShelf> warehouseShelfList;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseHistoryDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseHistoryDto.java
new file mode 100644
index 0000000..87af8b2
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseHistoryDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsSample;
+import com.ruoyi.inspect.pojo.WarehouseHistory;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseHistoryDto extends WarehouseHistory {
+
+    List<InsSample> insSamples;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/WorkTimeDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WorkTimeDTO.java
new file mode 100644
index 0000000..ace7261
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/WorkTimeDTO.java
@@ -0,0 +1,79 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.pojo.InsProductResult;
+import com.ruoyi.inspect.pojo.InsSample;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 宸ユ椂璁$畻鏁版嵁浼犺緭瀵硅薄
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class WorkTimeDTO implements Serializable {
+
+    /**
+     *鐢ㄦ埛id
+     */
+    @ApiModelProperty("鐢ㄦ埛id")
+    Integer userId;
+
+    /**
+     *璁㈠崟涓讳綋
+     */
+    @ApiModelProperty("璁㈠崟涓讳綋")
+    InsOrder insOrder;
+
+    /**
+     *鏍峰搧淇℃伅
+     */
+    @ApiModelProperty("鏍峰搧淇℃伅")
+    InsSample insSample;
+
+    /**
+     *妫�楠岄」淇℃伅
+     */
+    @ApiModelProperty("妫�楠岄」淇℃伅")
+    InsProduct insProduct;
+
+    /**
+     *鐖舵楠岄」淇℃伅
+     */
+    @ApiModelProperty("鐖舵楠岄」淇℃伅")
+    InsProduct parentInsProduct;
+
+    /**
+     *褰撳墠鏍峰搧id
+     */
+    @ApiModelProperty("褰撳墠鏍峰搧id")
+    Integer currentSampleId;
+
+    /**
+     *寰幆key,褰撳墠妫�楠岄」id
+     */
+    @ApiModelProperty("寰幆key,褰撳墠妫�楠岄」id")
+    String insProductId;
+
+    /**
+     *鏃х殑妫�楠岀粨鏋滃垪琛�
+     */
+    @ApiModelProperty("鏃х殑妫�楠岀粨鏋滃垪琛�")
+    List<InsProductResult> oldResults;
+
+    /**
+     *鏂扮殑妫�楠岀粨鏋�
+     */
+    @ApiModelProperty("鏂扮殑妫�楠岀粨鏋�")
+    InsProductResult newResult;
+    
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/productResultDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/productResultDto.java
new file mode 100644
index 0000000..de6c4e7
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/productResultDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.dto;
+
+import lombok.Data;
+
+@Data
+public class productResultDto {
+
+    private Integer id;
+
+    private String insValue;
+
+    private Integer insResult;
+
+    private String remark;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/excel/FiberRibboGeometricalParameterExcelData.java b/inspect-server/src/main/java/com/ruoyi/inspect/excel/FiberRibboGeometricalParameterExcelData.java
new file mode 100644
index 0000000..287601f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/excel/FiberRibboGeometricalParameterExcelData.java
@@ -0,0 +1,69 @@
+package com.ruoyi.inspect.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.converters.localdate.LocalDateStringConverter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * 鍏夌氦甯︾姸鍑犱綍鍙傛暟
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class FiberRibboGeometricalParameterExcelData implements Serializable {
+
+    @ExcelProperty("濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ExcelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ExcelProperty("濂楃鑹叉爣")
+    private String bushColor;
+
+    @ExcelProperty("鍏夌氦甯︾紪鍙�")
+    private String code;
+
+    @ExcelProperty("妫�楠岄」鐩垎绫�")
+    private String inspectionItemType;
+
+    @ExcelProperty("妫�楠屼汉")
+    private String inspector;
+
+    @ExcelProperty(value = "妫�楠屾椂闂�",converter = LocalDateStringConverter.class)
+    private LocalDate insTime;
+
+    @ExcelProperty("鍏夌氦甯﹀帤搴绔�")
+    private String thicknessA;
+
+    @ExcelProperty("鍏夌氦甯﹀帤搴绔�")
+    private String thicknessB;
+
+    @ExcelProperty("鍏夌氦甯﹀搴绔�")
+    private String widthA;
+
+    @ExcelProperty("鍏夌氦甯﹀搴绔�")
+    private String widthB;
+
+    @ExcelProperty("涓や晶鍏夌氦姘村钩闂磋窛A绔�")
+    private String sideSpacingA;
+
+    @ExcelProperty("涓や晶鍏夌氦姘村钩闂磋窛B绔�")
+    private String sideSpacingB;
+
+    @ExcelProperty("骞虫暣搴绔�")
+    private String evennessA;
+
+    @ExcelProperty("骞虫暣搴绔�")
+    private String evennessB;
+
+    @ExcelProperty("鐩搁偦鍏夌氦姘村钩闂磋窛A绔�")
+    private String adjacentSpacingA;
+
+    @ExcelProperty("鐩搁偦鍏夌氦姘村钩闂磋窛B绔�")
+    private String adjacentSpacingB;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsBushingMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsBushingMapper.java
new file mode 100644
index 0000000..9347de6
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsBushingMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.dto.FiberDto;
+import com.ruoyi.inspect.dto.FibersDto;
+import com.ruoyi.inspect.pojo.InsBushing;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍏夌氦閰嶇疆鐨勫绠¤〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-30 05:58:16
+ */
+@Mapper
+public interface InsBushingMapper extends BaseMapper<InsBushing> {
+
+    List<FibersDto> selectFibersByBushingId(Integer bushingId);
+
+    List<FiberDto> selectFiberByBushingId(Integer bushingId);
+
+    List<FiberDto> selectFiberByFibersId(Integer fibersId);
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFiberMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFiberMapper.java
new file mode 100644
index 0000000..1be0f69
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFiberMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsFiber;
+import com.ruoyi.inspect.pojo.InsFibers;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍏夌氦閰嶇疆鐨勫厜绾よ〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-30 05:59:01
+ */
+@Mapper
+public interface InsFiberMapper extends BaseMapper<InsFiber> {
+
+    List<InsFibers> selectInsFibersByInsFiberId(Integer id);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFibersMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFibersMapper.java
new file mode 100644
index 0000000..a4aa0b3
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFibersMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsFibers;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鍏夌氦閰嶇疆鐨勫厜绾ゅ甫琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-30 05:59:13
+ */
+@Mapper
+public interface InsFibersMapper extends BaseMapper<InsFibers> {
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java
new file mode 100644
index 0000000..9168bf9
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.InsOrderFile;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 妫�楠屽崟涓嬬殑闄勪欢鍒楄〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-06-06 10:08:21
+ */
+@Mapper
+public interface InsOrderFileMapper extends BaseMapper<InsOrderFile> {
+
+    IPage<InsOrderFile> getFileList(Page page, @Param("ew") QueryWrapper<InsOrderFile> ew, @Param("insOrderId") Integer insOrderId);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
new file mode 100644
index 0000000..512ba4d
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
@@ -0,0 +1,107 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.dto.*;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.vo.DeviceVO;
+import com.ruoyi.inspect.vo.ExportInsProductVO;
+import com.ruoyi.inspect.vo.SampleDefectsFatherVo;
+import com.ruoyi.inspect.vo.UnInsProductsVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author gaoaoy
+ * @description 閽堝琛ㄣ�恑ns_order(妫�楠屼笅鍗�)銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2024-03-12 16:17:55
+ * @Entity com.ruoyi.inspect.pojo.InsOrder
+ */
+@Mapper
+public interface InsOrderMapper extends BaseMapper<InsOrder> {
+    // 鑾峰彇妫�楠屼换鍔℃煡鐪嬬粨鏋滆〃鏍兼暟鎹�
+    List<Map<String,Object>> getInsOrderPlanList(@Param("sonLaboratory") String sonLaboratory,
+                                                 @Param("entrustCode") String entrustCode,
+                                                 @Param("sampleCode") String sampleCode,
+                                                 @Param("createUser") Integer createUser,
+                                                 @Param("startTime") String startTime,
+                                                 @Param("endTime") String endTime,
+                                                 @Param("sampleType")String sampleType);
+
+    //鍔ㄦ�佽幏鍙杢ab琛ㄥご
+    List<Map<String,Object>> getTabHeader(@Param("sonLaboratory") String sonLaboratory,@Param("sample") String sample);
+
+    //鑾峰彇妫�楠屼笅鍗曟暟鎹�
+    IPage<SampleOrderDto> selectInsOrderPage(IPage<InsOrder> page, QueryWrapper<SampleOrderDto> ew, @Param("laboratory") String laboratory,
+                                             @Param("startTime") String startTime,
+                                             @Param("endTime") String endTime,
+                                             @Param("eqState") String eqState,
+                                             @Param("neState") String neState
+    );
+
+    // 鑾峰彇瀵煎嚭宸叉楠屾暟鎹�
+    List<ExportInsProductVO> exportChecked(@Param("names") List<String> names, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+
+    //淇敼妫�楠屼笅鍗曟暟鎹�
+    int upInsOrderParameter(InsOrder itemParameter);
+
+    String getLaboratoryCode(String name);
+
+    List<SampleProductDto2> selectSampleAndProductByOrderId(@Param("ew") QueryWrapper<SampleProductDto2> ew, @Param("id") Integer id);
+
+    IPage<CostStatisticsDto> selectCostStatistics(IPage<CostStatisticsDto> page, QueryWrapper<CostStatisticsDto> ew, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("laboratory") String laboratory);
+
+    List<CostStatisticsDto> selectCostStatistics2(@Param("ew") QueryWrapper<CostStatisticsDto> ew,@Param("startTime") String startTime, @Param("endTime") String endTime,@Param("laboratory") String laboratory);
+
+    DeviceVO selectDeviceList(String name);
+    List<SampleDefectsFatherVo> selectSampleDefects(Page page, @Param("inspectionItems") String inspectionItems, @Param("orderNumber") String orderNumber);
+
+    Long getCount(@Param("inspectionItems") String inspectionItems, @Param("orderNumber") String orderNumber);
+
+    String getEnumLabelByValue(String value);
+
+    String getStandardMethodCode(Integer id);
+
+    int updateStatus( Integer id);
+
+    String selLaboratoryCode(String laboratory);
+
+    List<Map<Integer, Object>> selectReportModelByOrderId(@Param("id") Integer id, @Param("laboratory") String laboratory);
+
+    String seldepLimsId(int depLimsId);
+    // 鑾峰彇閮ㄩ棬
+    String getDepartment(Integer id);
+
+    /**
+     * 濮旀墭璐圭敤
+     */
+    List<CommissionFeesDto> selectCommissionFees(@Param("laboratory") String laboratory, @Param("company") String company, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    List<UnInsProductsVO> selectUnInsProducts(@Param("laboratory")String laboratory,
+                                              @Param("startDateTime")LocalDateTime startDateTime,
+                                              @Param("endDateTime")LocalDateTime endDateTime,
+                                              @Param("dto") UnInsProductsDTO unInsProductsDTO);
+
+    IPage<TasksShowDto> getTasksShow(Page page, @Param("sonLaboratory") String sonLaboratory);
+
+    Map<String,Object> selectCurrentCompanyUrgentQuota(Integer userId);
+
+    int selectPlanCountBySonLaboratory(
+            @Param("sonLaboratory") String sonLaboratory,
+            @Param("startOfMonth")LocalDateTime startOfMonth,
+            @Param("endOfMonth")LocalDateTime endOfMonth);
+
+    List<ExportInsProductVO> getInsOrderTemList(@Param("entrustCode") String entrustCode,
+                                                @Param("sampleCode") String sampleCode,
+                                                @Param("startTime") String startTime,
+                                                @Param("endTime") String endTime,
+                                                @Param("checkName") String checkName
+    );
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStateMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStateMapper.java
new file mode 100644
index 0000000..a3afa32
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStateMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsOrderState;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author admin
+* @description 閽堝琛ㄣ�恑ns_order_state銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-04-01 11:44:50
+* @Entity com.ruoyi.inspect.pojo.InsOrderState
+*/
+@Mapper
+public interface InsOrderStateMapper extends BaseMapper<InsOrderState> {
+
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderTemplateMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderTemplateMapper.java
new file mode 100644
index 0000000..9923e6e
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderTemplateMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsOrderTemplate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_order_template銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-18 14:14:54
+* @Entity com.ruoyi.inspect.pojo.InsOrderTemplate
+*/
+@Mapper
+public interface InsOrderTemplateMapper extends BaseMapper<InsOrderTemplate> {
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java
new file mode 100644
index 0000000..e491d44
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java
@@ -0,0 +1,54 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.dto.ProductResultDto2;
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.vo.InsProductFiberVO;
+import com.ruoyi.inspect.vo.InsProductVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_product(妫�楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-08 09:45:03
+* @Entity com.ruoyi.inspect.pojo.InsProduct
+*/
+@Mapper
+public interface InsProductMapper extends BaseMapper<InsProduct> {
+
+    int selectOrderManDay(Integer orderId);
+
+    Map<String, String> selectUserById(Integer userId);
+
+    List<ProductResultDto2> getProductAndResult(Integer sampleId);
+
+    int updateInspected(@Param("id") Integer id);
+
+    List<InsProduct> selectFiberInsProduct(List<Integer> ids, String laboratory);
+
+    IPage<InsProduct> selectNoProducts(Page page, Integer orderId);
+
+    int selectInsProductCountByOrderId(Integer orderId);
+
+    List<InsProduct> findSagTemperatureProducts(Integer sampleId, String inspectionItem);
+
+    List<InsProductVO> selectProductByOrderId(Integer orderId,String sonLaboratory);
+
+    List<InsProductFiberVO> selectInsProductInsFiberList(Integer sampleId);
+
+    List<InsProductFiberVO> selectInsProductInsBushList(Integer sampleId);
+
+    List<InsProductFiberVO> selectInsProductInsFibersList(Integer sampleId);
+
+    List<InsProductFiberVO> selectProductBySampleId(Integer sampleId);
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java
new file mode 100644
index 0000000..8f3bcce
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsProductResult;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_product_result(妫�楠岄」鐩殑缁撴灉)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-28 10:29:37
+* @Entity com.ruoyi.inspect.pojo.InsProductResult
+*/
+@Mapper
+public interface InsProductResultMapper extends BaseMapper<InsProductResult> {
+
+    List<InsProductResult> selDetail(@Param("ips") List<Integer> ips);
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductUserMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductUserMapper.java
new file mode 100644
index 0000000..1691d74
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductUserMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsProductUser;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恑ns_product_user(妫�楠岄」鐩殑浜哄憳妫�楠岃褰�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-04-17 13:42:44
+* @Entity com.ruoyi.inspect.pojo.InsProductUser
+*/
+@Mapper
+public interface InsProductUserMapper extends BaseMapper<InsProductUser> {
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportApproveConfigMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportApproveConfigMapper.java
new file mode 100644
index 0000000..2d547e4
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportApproveConfigMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsReportApproveConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Map;
+
+/**
+* @author 27233
+* @description 閽堝琛ㄣ�恑ns_report_approve_config(鎶ュ憡瀹℃壒绛惧悕閰嶇疆)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-12-10 09:36:10
+* @Entity com.ruoyi.inspect.pojo.InsReportApproveConfig
+*/
+@Mapper
+public interface InsReportApproveConfigMapper extends BaseMapper<InsReportApproveConfig> {
+
+    Map<String,Object> selectApprovalConfigByLaboratory(String laboratory);
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportMapper.java
new file mode 100644
index 0000000..0ee1257
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.inspect.dto.ReportPageDto;
+import com.ruoyi.inspect.pojo.InsReport;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_report(妫�楠屾姤鍛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-17 22:10:02
+* @Entity com.ruoyi.inspect.pojo.InsReport
+*/
+@Mapper
+public interface InsReportMapper extends BaseMapper<InsReport> {
+
+    IPage<ReportPageDto> pageInsReport(IPage<ReportPageDto> page,
+                                       @Param("ew") QueryWrapper<ReportPageDto> ew,
+                                       @Param("laboratory") String laboratory);
+
+    String getLaboratoryByName(String name);
+
+    List<ReportPageDto> findReportCountInfo(@Param("ew") QueryWrapper<ReportPageDto> reportPageDtoQueryWrapper,
+                            @Param("laboratory") String laboratory,
+                            @Param("queryField") String queryField);
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java
new file mode 100644
index 0000000..e5f1577
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java
@@ -0,0 +1,76 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.dto.InsOrderPlanDTO;
+import com.ruoyi.inspect.dto.SampleProductDto;
+import com.ruoyi.inspect.dto.SampleProductDto3;
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.pojo.InsSample;
+import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
+import com.ruoyi.inspect.vo.InsOrderPlanVO;
+import com.ruoyi.inspect.vo.SampleVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_sample(妫�楠屾牱鍝�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-14 17:14:57
+* @Entity com.ruoyi.inspect.pojo.InsSample
+*/
+@Mapper
+public interface InsSampleMapper extends BaseMapper<InsSample> {
+
+    IPage<InsOrderPlanVO> findInsSampleAndOrder(Page page,
+                                                @Param("userName") String userName,
+                                                @Param("checkName") String checkName,
+                                                @Param("sonLaboratory") String sonLaboratory,
+                                                @Param("sample") String sample,
+                                                @Param("sampleCode") String sampleCode,
+                                                @Param("laboratory") String laboratory,
+                                                @Param("entrustCode") String entrustCode,
+                                                @Param("insState") String insState,
+                                                @Param("ew") QueryWrapper<InsOrderPlanDTO> ew,
+                                                @Param("sendTimeRange") List<LocalDateTime> sendTimeRange);
+
+    IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, @Param("ew") QueryWrapper<InsOrderPlanDTO> ew, @Param("userId") Integer userId, @Param("sonLaboratory") String sonLaboratory, @Param("laboratory") String laboratory);
+
+    List<SampleProductDto> selectSampleProductListByOrderId(Integer id);
+
+    List<SampleProductDto> selectSampleProductListByOrderId2(Integer id);
+
+    List<SampleProductDto3> selectSampleProductListByOrderId3(List<Integer> ids);
+
+    List<SampleProductDto> getInsOrderAndSample(Integer id, String laboratory);
+
+    String getSampleEn(String sample);
+
+    List<InsProduct> getInsProduct1(Integer id, String laboratory);
+
+    List<InsProduct> getInsProduct5(Integer id, String laboratory);
+
+    List<InsProduct> getInsProduct2(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
+
+    List<InsProduct> getInsProduct3(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
+
+    List<InsProduct> getInsProduct6(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
+
+    List<InsProduct> getInsProduct4(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
+
+    List<Map<String, Object>> getReportModel(@Param("orderId") Integer orderId, @Param("id") Integer id, @Param("laboratory") String laboratory);
+
+    SampleVo getDetailById(Integer sampleId);
+
+    String selMethodById(Integer sampleId);
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java
new file mode 100644
index 0000000..e1ebacc
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsSampleUser;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_sample_user(鏍峰搧璐熻矗浜鸿褰�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-03-14 17:12:02
+* @Entity com.ruoyi.inspect.pojo.InsSampleUser
+*/
+@Mapper
+public interface InsSampleUserMapper extends BaseMapper<InsSampleUser> {
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java
new file mode 100644
index 0000000..e4e04a7
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.inspect.dto.UnPassPageDto;
+import com.ruoyi.inspect.pojo.InsUnPass;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author 鏈变匠鍚�
+ * @date 2024/5/8 13:05
+ */
+@Mapper
+public interface InsUnPassMapper extends BaseMapper<InsUnPass> {
+    IPage<UnPassPageDto> pageInsUnPass(IPage<UnPassPageDto> page, QueryWrapper<UnPassPageDto> ew);
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/ProcessOrder1Mapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/ProcessOrder1Mapper.java
new file mode 100644
index 0000000..8990456
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/ProcessOrder1Mapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.ProcessOrder;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * <p>
+ * 瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 03:06:20
+ */
+@Mapper
+public interface ProcessOrder1Mapper extends BaseMapper<ProcessOrder> {
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/SampleOrderMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/SampleOrderMapper.java
new file mode 100644
index 0000000..ba13115
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/SampleOrderMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.dto.SampleOrderDto;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author gaoaoy
+ * @version 1.0.0
+ * @create 2024/3/14 18:54
+ **/
+@Mapper
+public interface SampleOrderMapper extends BaseMapper<SampleOrderDto> {
+    List<SampleOrderDto> selectSampleOrderList();
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseCellMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseCellMapper.java
new file mode 100644
index 0000000..ad95d30
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseCellMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.dto.WarehouseCellAndSampleDto;
+import com.ruoyi.inspect.pojo.WarehouseCell;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恮arehouse_cell(璐ф灦鍗曞厓鏍�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-04-06 12:12:12
+* @Entity com.ruoyi.inspect.pojo.WarehouseCell
+*/
+@Mapper
+public interface WarehouseCellMapper extends BaseMapper<WarehouseCell> {
+
+    List<WarehouseCellAndSampleDto> getWarehouse(Integer shelfId);
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseHistoryMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseHistoryMapper.java
new file mode 100644
index 0000000..d8f8967
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseHistoryMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.dto.HistoryDto;
+import com.ruoyi.inspect.pojo.WarehouseHistory;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恮arehouse_history(鍑哄叆搴撹褰�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-04-06 12:12:12
+* @Entity com.ruoyi.inspect.pojo.WarehouseHistory
+*/
+@Mapper
+public interface WarehouseHistoryMapper extends BaseMapper<WarehouseHistory> {
+
+    String getUserNameById(Integer userId);
+
+    List<HistoryDto> getHistoryListBySampleId(Integer sampleId);
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseMapper.java
new file mode 100644
index 0000000..caae846
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.dto.WarehouseDto;
+import com.ruoyi.inspect.pojo.Warehouse;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恮arehouse(浠撳簱)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-04-06 12:12:12
+* @Entity com.ruoyi.inspect.pojo.Warehouse
+*/
+@Mapper
+public interface WarehouseMapper extends BaseMapper<Warehouse> {
+
+    List<WarehouseDto> selectWarehouseList();
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseShelfMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseShelfMapper.java
new file mode 100644
index 0000000..d03309c
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseShelfMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.WarehouseShelf;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恮arehouse_shelf(璐ф灦)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-04-06 12:12:12
+* @Entity com.ruoyi.inspect.pojo.WarehouseShelf
+*/
+@Mapper
+public interface WarehouseShelfMapper extends BaseMapper<WarehouseShelf> {
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsBushing.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsBushing.java
new file mode 100644
index 0000000..a68e107
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsBushing.java
@@ -0,0 +1,55 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍏夌氦閰嶇疆鐨勫绠¤〃
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-30 05:58:16
+ */
+@Getter
+@Setter
+@TableName("ins_bushing")
+@ApiModel(value = "InsBushing瀵硅薄", description = "鍏夌氦閰嶇疆鐨勫绠¤〃")
+public class InsBushing implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("绠¤壊鏍�")
+    private String color;
+
+    @ApiModelProperty("鏍囬噺")
+    private Integer standNum;
+
+    @ApiModelProperty("娴嬭瘯閲�")
+    private Integer testNum;
+
+    @ApiModelProperty("鍏宠仈 鏍峰搧id")
+    private Integer insSampleId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false,select = false)
+    private Integer state;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFiber.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFiber.java
new file mode 100644
index 0000000..2af6ea1
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFiber.java
@@ -0,0 +1,61 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍏夌氦閰嶇疆鐨勫厜绾よ〃
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-30 05:59:01
+ */
+@Getter
+@Setter
+@TableName("ins_fiber")
+@ApiModel(value = "InsFiber瀵硅薄", description = "鍏夌氦閰嶇疆鐨勫厜绾よ〃")
+public class InsFiber implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("绠″鑹叉爣")
+    private String bushColor;
+
+    @ApiModelProperty("鍏夌氦鑹叉爣")
+    private String color;
+
+    @ApiModelProperty("鍏夌氦瑙勬牸")
+    private String model;
+
+    @ApiModelProperty("鍙傝�冩爣鍑�")
+    private String standard;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍏宠仈 濂楃琛╥d")
+    private Integer insBushingId;
+
+    @ApiModelProperty("鍏宠仈 鍏夌氦甯﹁〃id")
+    private Integer insFibersId;
+
+    @TableField(exist = false,select = false)
+    private Integer state;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFibers.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFibers.java
new file mode 100644
index 0000000..9a7dce7
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFibers.java
@@ -0,0 +1,59 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鍏夌氦閰嶇疆鐨勫厜绾ゅ甫琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-30 05:59:13
+ */
+@Getter
+@Setter
+@TableName("ins_fibers")
+@ApiModel(value = "InsFibers瀵硅薄", description = "鍏夌氦閰嶇疆鐨勫厜绾ゅ甫琛�")
+public class InsFibers implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鍏夌氦甯︾紪鍙�")
+    private String code;
+
+    @ApiModelProperty("鍏夌氦甯﹁鏍�")
+    private String model;
+
+    @ApiModelProperty("鍙傝�冩爣鍑�")
+    private String standard;
+
+    @ApiModelProperty("鍏夌氦妫�娴嬮噺")
+    private String num;
+
+    @ApiModelProperty("鍏宠仈  濂楃琛╥d")
+    private Integer insBushingId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false,select = false)
+    private Integer state;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrder.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrder.java
new file mode 100644
index 0000000..34e487d
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrder.java
@@ -0,0 +1,224 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+* 妫�楠屼笅鍗�
+* @TableName ins_order
+*/
+@Data
+@TableName("ins_order")
+@AllArgsConstructor
+@NoArgsConstructor
+public class InsOrder implements Serializable {
+
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+    * 濮旀墭缂栧彿
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty(value = "濮旀墭缂栧彿")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String entrustCode;
+
+    /**
+     * 澶栭儴濮旀墭缂栧彿
+     */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty(value = "澶栭儴濮旀墭缂栧彿")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String outEntrustCode;
+
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty(value = "妫�楠岀被鍒�")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String orderType;
+
+    /**
+    * 涓嬪崟瀹㈡埛
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鍒跺崟浜�")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String custom;
+
+    /**
+    * 涓嬪崟鍗曚綅
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("濮旀墭鍗曚綅")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String company;
+
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鑱旂郴鏂瑰紡")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String phone;
+
+    /**
+    * 宸ュ巶鍩�
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("宸ュ巶鍩�")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String code;
+
+    /**
+    * 绱ф�ョ▼搴� 锛�0鏅�� 1浼樺厛 2绱ф�ワ級
+    */
+    @ApiModelProperty("绱ф�ョ▼搴� 锛�0鏅�� 1浼樺厛 2绱ф�ワ級")
+    private Integer type;
+
+    /**
+    * 绾﹀畾鏃堕棿
+    */
+    @ApiModelProperty("绾﹀畾鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate appointed;
+
+    @ApiModelProperty("妫�楠岀粨鏋�")
+    private Integer insResult;
+
+    @ApiModelProperty("鏍峰搧澶勭悊鏂瑰紡")
+    private Integer processing;
+
+    @ApiModelProperty("鏄惁鐣欐牱")
+    private Integer isLeave;
+
+    /**
+    * 1锛氭楠屽鐞� 0锛氬緟瀹℃牳 2锛氶��鍥� 3锛氭挙閿�
+    */
+    @ApiModelProperty("鐘舵��")
+    private Integer state;
+
+    /**
+    * 澶囨敞
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("澶囨敞")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String remark;
+
+    /**
+    * OTC璁㈠崟鍙�
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("OTC璁㈠崟鍙�")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String otcCode;
+
+//    @ValueTableShow(11)
+    @ApiModelProperty("涓嬪崟浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+    /**
+     *
+     */
+    @ApiModelProperty("涓嬪崟鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("涓嬪彂鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime sendTime;
+
+    /**
+     *鏇存柊浜�
+     */
+    @ApiModelProperty("鏇存柊浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    /**
+     *
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    private Integer userId;
+
+    private Integer mating;
+
+    @ApiModelProperty("妫�楠岀姸鎬�(0锛氬緟妫�楠� 1:妫�楠屼腑 2:宸叉楠� 3锛氬緟澶嶆牳 4锛氬鏍告湭閫氳繃 5锛氬鏍搁�氳繃)")
+    private Integer insState;
+
+    /**
+     * 妫�楠屽伐鍘�
+     */
+    private String factory;
+
+    /**
+     * 瀹為獙瀹ゅ悕绉�
+     */
+    private String laboratory;
+
+    /**
+     * 鏍峰搧绫诲瀷
+     */
+    private String sampleType;
+
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String sample;
+
+    @ApiModelProperty("妫�楠屾椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime insTime;
+
+    private String tell;
+
+    private Integer send;
+
+    private String formType;
+
+    @ApiModelProperty("瀹℃牳鏃堕棿")
+    private LocalDateTime examineTime;
+
+    private String engineering;
+
+    private String engineeringEn;
+
+    private String production;
+
+    private String productionEn;
+
+    private Long companyId;
+
+    private String prepareUser;
+
+    @ApiModelProperty("鏄惁瀹℃牳鎾ら攢")
+    private Integer isRevocation;
+
+    @ApiModelProperty("瀹℃牳鎾ら攢鐨勯」鐩甶d")
+    private String revocationInsProductIds;
+
+    @ApiModelProperty("绛惧彂鏃ユ湡")
+    private LocalDateTime issuingDate;
+
+    @ApiModelProperty("鎾ら攢鏃ユ湡")
+    private LocalDateTime revocationTime;
+
+
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderFile.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderFile.java
new file mode 100644
index 0000000..fab1430
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderFile.java
@@ -0,0 +1,57 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 妫�楠屽崟涓嬬殑闄勪欢鍒楄〃
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-06-06 10:08:21
+ */
+@Getter
+@Setter
+@TableName("ins_order_file")
+@ApiModel(value = "InsOrderFile瀵硅薄", description = "妫�楠屽崟涓嬬殑闄勪欢鍒楄〃")
+public class InsOrderFile implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鍏宠仈 妫�楠屽崟澶栭敭id")
+    private Integer insOrderId;
+
+    @ApiModelProperty("绫诲瀷")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("涓婁紶浜�")
+    @TableField(exist = false, select = false)
+    private String name;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty("涓婁紶鏃堕棿")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderState.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderState.java
new file mode 100644
index 0000000..34f72f1
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderState.java
@@ -0,0 +1,67 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 
+ * @TableName ins_order_state
+ */
+@TableName(value ="ins_order_state")
+@Data
+public class InsOrderState implements Serializable {
+    /**
+     * 
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 澶栭敭锛歩ns_order琛╥d
+     */
+    @TableField(value = "ins_order_id")
+    private Integer insOrderId;
+
+    /**
+     * 瀹為獙瀹�
+     */
+    @TableField(value = "laboratory")
+    private String laboratory;
+
+    /**
+     * 妫�楠岀姸鎬�(0锛氬緟妫�楠�1:妫�楠屼腑 2:宸叉楠�3锛氬緟澶嶆牳4锛氬鏍告湭閫氳繃 5锛氬鏍搁�氳繃)
+     */
+    @TableField(value = "ins_state")
+    private Integer insState;
+
+    @ApiModelProperty("妫�楠屾椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime insTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("澶嶆牳浜�")
+    private Integer verifyUser;
+
+    @ApiModelProperty("澶嶆牳鐞嗙敱")
+    private String verifyTell;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderTemplate.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderTemplate.java
new file mode 100644
index 0000000..19fd5fe
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderTemplate.java
@@ -0,0 +1,43 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 
+ * @TableName ins_order_template
+ */
+@TableName(value ="ins_order_template")
+@Data
+public class InsOrderTemplate implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 妯℃澘鍚嶇О
+     */
+    @ApiModelProperty("妯℃澘鍚嶇О")
+    private String name;
+
+    /**
+     * 妯℃澘鍐呭
+     */
+    @ApiModelProperty("妯℃澘鍐呭")
+    private String thing;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProduct.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProduct.java
new file mode 100644
index 0000000..2f5cfe4
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProduct.java
@@ -0,0 +1,249 @@
+package com.ruoyi.inspect.pojo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妫�楠岄」鐩�
+ *
+ * @TableName ins_product
+ */
+@TableName(value = "ins_product")
+@Data
+public class InsProduct implements Serializable {
+    /**
+     * 涓婚敭id
+     */
+    @TableId(type = IdType.AUTO)
+
+    private Integer id;
+
+    @TableField(exist = false,select = false)
+    private String sampleCode;
+
+    /**
+     * 妫�楠岄」
+     */
+    private String inspectionItem;
+
+    private String inspectionItemEn;
+
+    /**
+     * 妫�楠岄」鍒嗙被
+     */
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被")
+    private String inspectionItemClass;
+
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被EN")
+    private String inspectionItemClassEn;
+
+    /**
+     * 妫�楠岄」瀛愮被
+     */
+    private String inspectionItemSubclass;
+
+    private String inspectionItemSubclassEn;
+
+    /**
+     * 宸ュ巶
+     */
+    private String factory;
+
+    /**
+     * 瀹為獙瀹�
+     */
+    private String laboratory;
+
+    /**
+     * 鏍峰搧鍒嗙被
+     */
+    private String sampleType;
+
+    /**
+     * 鏍峰搧
+     */
+    private String sample;
+
+    /**
+     * 鍨嬪彿
+     */
+    private String model;
+
+    private String methodS;
+
+    /**
+     * 瀛愬疄楠屽
+     */
+    private String sonLaboratory;
+
+    /**
+     * 璁¢噺鍗曚綅
+     */
+    private String unit;
+
+    /**
+     * 鍗曚环(鍏�)
+     */
+    private BigDecimal price;
+
+    /**
+     * 宸ユ椂(H)
+     */
+    private Double manHour;
+
+    /**
+     * 宸ユ椂鍒嗙粍
+     */
+    private String manHourGroup;
+
+    /**
+     * 妫�楠岄」绫诲瀷
+     */
+    private String inspectionItemType;
+
+    /**
+     * 妫�楠屽�肩被鍨�
+     */
+    private String inspectionValueType;
+
+    /**
+     * 璁惧缁�
+     */
+    private String deviceGroup;
+
+    /**
+     * 妫�楠屾鏁�
+     */
+    private Integer checkoutNumber;
+
+    /**
+     * 鍖洪棿
+     */
+    private String section;
+
+    /**
+     * 鍙栧�肩被鍨�
+     */
+    private String valueType;
+
+    /**
+     * 鏂规硶
+     */
+    private String method;
+
+    /**
+     * 棰勮鏃堕棿(h)
+     */
+    private Integer manDay;
+
+    /**
+     * 鐗规畩鏍囪瘑
+     */
+    private String bsm;
+
+    /**
+     * 瑕佹眰鍊�
+     */
+    private String ask;
+
+    /**
+     * 瑕佹眰鎻忚堪
+     */
+    private String tell;
+
+    /**
+     * 鏈�缁堝��
+     */
+    @TableField("`last_value`")
+    private String lastValue;
+
+    /**
+     * 1锛氬悎鏍� 0锛氫笉鍚堟牸 2:寰呭畾 3:涓嶅垽瀹�
+     */
+    private Integer insResult;
+
+    /**
+     * 1锛氭湁鏁� 0锛氭棤鏁�
+     */
+    private Integer state;
+
+    /**
+     * 澶栭敭锛歩ns_sample琛╥d
+     */
+    private Integer insSampleId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 澶栭敭锛歴tandard_template琛╥d
+     */
+    private Integer templateId;
+
+    @TableField(exist = false)
+    private List<JSONObject> template;
+
+    @TableField(exist = false)
+    private Map<String, Object> style;
+
+    @TableField(exist = false)
+    private InsProductResult insProductResult;
+
+    @TableField(exist = false)
+    private String templateName;
+
+    private String dic;
+    //娓╁害
+    private String temperature;
+    //婀垮害
+    private String humidity;
+
+    private Integer insFiberId;
+
+    private Integer insFibersId;
+
+    private Integer insBushId;
+
+    private Integer standardMethodListId;
+
+    /**
+     * 鐗规畩绗﹀彿鏇挎崲鍊�
+     */
+    private String specialValue;
+
+    /**
+     * 鐗规畩椤圭洰鐖秈d
+     */
+    private Integer specialItemParentId;
+
+    //杩斿洖鐨�20搴﹀父娓╃殑璁$畻鍊�(娓╁害寰幆)
+    @TableField(exist = false ,select = false)
+    private String complue;
+
+    /**
+     * 寮规�фā閲�
+     */
+    private String elasticityModulus;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductResult.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductResult.java
new file mode 100644
index 0000000..388377d
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductResult.java
@@ -0,0 +1,61 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠岄」鐩殑缁撴灉
+ * @TableName ins_product_result
+ */
+@TableName(value ="ins_product_result")
+@Data
+public class InsProductResult implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 澶栭敭锛氭楠岄」鐩甶d
+     */
+    private Integer insProductId;
+
+    /**
+     * 妫�楠屽��
+     */
+    private String insValue;
+
+    /**
+     * 璁$畻鍊�
+     */
+    private String comValue;
+
+    /**
+     * 璁惧鍊�
+     */
+    private String equipValue;
+
+    private String equipName;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductUser.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductUser.java
new file mode 100644
index 0000000..931bf31
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductUser.java
@@ -0,0 +1,40 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠岄」鐩殑浜哄憳妫�楠岃褰�
+ * @TableName ins_product_user
+ */
+@TableName(value ="ins_product_user")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class InsProductUser implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 澶栭敭锛歩ns_product琛╥d
+     */
+    private Integer insProductId;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReport.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReport.java
new file mode 100644
index 0000000..eb5b503
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReport.java
@@ -0,0 +1,107 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 妫�楠屾姤鍛�
+ * @TableName ins_report
+ */
+@TableName(value ="ins_report")
+@Data
+public class InsReport implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鎶ュ憡缂栧彿")
+    private String code;
+
+    /**
+     * 澶栭敭锛氭楠屽崟id
+     */
+    private Integer insOrderId;
+
+    /**
+     * 绯荤粺鐢熸垚鎶ュ憡鍦板潃
+     */
+    private String url;
+
+    /**
+     * 鎵嬪姩涓婁紶鎶ュ憡鍦板潃
+     */
+    private String urlS;
+
+    /**
+     * 1锛氭壒鍑� 0锛氫笉鎵瑰噯
+     */
+    private Integer isRatify;
+
+    private String ratifyTell;
+
+    /**
+     * 1锛氬鏍搁�氳繃 0锛氬鏍镐笉閫氳繃
+     */
+    private Integer isExamine;
+
+    private String examineTell;
+
+    /**
+     * 澶栭敭锛氱敤鎴穒d锛堟彁浜や汉锛�
+     */
+    private Integer writeUserId;
+
+    /**
+     * 澶栭敭锛氱敤鎴穒d锛堟壒鍑嗕汉锛�
+     */
+    private Integer ratifyUserId;
+
+    /**
+     * 澶栭敭锛氱敤鎴穒d锛堝鏍镐汉锛�
+     */
+    private Integer examineUserId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 1锛氬凡鎻愪氦 0锛氬緟鎻愪氦
+     */
+    private Integer state;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime writeTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime examineTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime ratifyTime;
+
+    /**
+     * 涓存椂鎶ュ憡鍦板潃
+     */
+    private String tempUrlPdf;
+
+
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReportApproveConfig.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReportApproveConfig.java
new file mode 100644
index 0000000..962ef8a
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReportApproveConfig.java
@@ -0,0 +1,46 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鎶ュ憡瀹℃壒绛惧悕閰嶇疆
+ * @TableName ins_report_approve_config
+ */
+@TableName(value ="ins_report_approve_config")
+@Data
+public class InsReportApproveConfig implements Serializable {
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 缂栧埗浜�
+     */
+    private Integer editor;
+
+    /**
+     * 瀹℃牳浜�
+     */
+    private Integer examiner;
+
+    /**
+     * 鎵瑰噯浜�
+     */
+    private Integer approver;
+
+    /**
+     * 瀹為獙瀹�
+     */
+    private String laboratory;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java
index f3657e4..ae45b48 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java
@@ -120,4 +120,10 @@
     @TableField(select = false,exist = false)
     private Integer num=1;
 
+    /**
+     * 鏄惁涓虹啍鎺ユ崯鑰楃壒娈婇」鐢熸垚鐨勬牱鍝佺粍鍚�(0:鍚� 1:鏄�)
+     */
+    @ApiModelProperty("鏄惁涓虹啍鎺ユ崯鑰楃壒娈婇」鐢熸垚鐨勬牱鍝佺粍鍚�(0:鍚� 1:鏄�)")
+    private String isPairing;
+
 }
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSampleUser.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSampleUser.java
new file mode 100644
index 0000000..8c88185
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSampleUser.java
@@ -0,0 +1,72 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍峰搧璐熻矗浜鸿褰�
+ * @TableName ins_sample_user
+ */
+@TableName(value ="ins_sample_user")
+@Data
+@NoArgsConstructor
+public class InsSampleUser implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 澶栭敭锛氭楠屾牱鍝乮ns_sample琛╥d
+     */
+    private Integer insSampleId;
+
+    /**
+     * 澶栭敭锛氱敤鎴穒d 璐熻矗浜�
+     */
+    private Integer userId;
+
+    /**
+     * 1锛氱‘璁� 0锛氭湭纭
+     */
+    //1鏄鏍镐汉 0鏄楠屼汉
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 瀛愯瘯楠屽
+     * @param insSampleId
+     * @param userId
+     * @param state
+     */
+    private String sonLaboratory;
+
+    public InsSampleUser(Integer insSampleId, Integer userId, Integer state,String sonLaboratory) {
+        this.insSampleId = insSampleId;
+        this.userId = userId;
+        this.state = state;
+        this.sonLaboratory = sonLaboratory;
+    }
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnPass.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnPass.java
new file mode 100644
index 0000000..a82b9da
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnPass.java
@@ -0,0 +1,75 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author 鏈变匠鍚�
+ * @date 2024/5/8 14:11
+ */
+@Data
+@TableName("ins_un_pass")
+public class InsUnPass implements Serializable {
+    /**
+     * 涓嶅悎鏍糹d
+     */
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String model;
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String sample;
+    /**
+     * 妫�娴嬮」
+     */
+    private String inspectionItem;
+    /**
+     * 妫�娴嬪瓙椤�
+     */
+    private String inspectionItemSubclass;
+    /**
+     * 妫�娴嬬粨鏋�
+     */
+    @TableField("`last_value`")
+    private String lastValue;
+    /**
+     * 澶勭悊鎰忚
+     */
+    private String handleSuggestion;
+    /**
+     * 濮旀墭缂栧彿
+     */
+    private String entrustCode;
+    /**
+     * 鐢ㄦ埛鍚�
+     */
+    private String name;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessOrder.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessOrder.java
new file mode 100644
index 0000000..17d4797
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessOrder.java
@@ -0,0 +1,56 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ * 瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 03:06:20
+ */
+@Getter
+@Setter
+@TableName("cnas_process_order")
+@ApiModel(value = "ProcessOrder瀵硅薄", description = "瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫")
+public class ProcessOrder implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鍏宠仈澶栭敭(妫�楠屽崟id)")
+    private Integer insOrderId;
+
+    @ApiModelProperty("鍒ゅ畾瑙勫垯:涓嶈�冭檻涓嶇‘瀹氬害/鑰冭檻涓嶇‘瀹氬害(%)")
+    private String rule;
+
+    @ApiModelProperty("缁煎悎瀹ょ鍚嶄汉")
+    private Integer comprehensiveUser;
+
+    @TableField(select = false,exist = false)
+    private String comprehensiveUserUrl;
+
+    @ApiModelProperty("鎺ユ敹鏃ユ湡")
+    private LocalDate comprehensiveTime;
+
+    @ApiModelProperty("棰嗘牱鍛�")
+    private Integer issueUser;
+
+    @TableField(select = false,exist = false)
+    private String issueUserUrl;
+
+    @ApiModelProperty("棰嗘牱鏃ユ湡")
+    private LocalDate issueTime;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java
new file mode 100644
index 0000000..b88c923
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java
@@ -0,0 +1,82 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-05 08:58:39
+ */
+@Getter
+@Setter
+@TableName("cnas_process_report")
+@ApiModel(value = "ProcessReport瀵硅薄", description = "妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃")
+public class ProcessReport implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("妫�楠屾姤鍛婄紪鍙�")
+    private String insReportCode;
+
+    @ApiModelProperty("椤垫暟")
+    private String pages;
+
+    @ApiModelProperty("鍙戦�佷唤鏁�")
+    private String number;
+
+    @ApiModelProperty("鍙戝線浣曞")
+    private String send;
+
+    @ApiModelProperty("鍙戦�佹柟寮�")
+    private String method;
+
+    @ApiModelProperty("鍙戦�佹棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate sendTime;
+
+    @ApiModelProperty("鍙戦�佷汉")
+    private Integer sendUser;
+
+    @ApiModelProperty("鍙戦�佷汉鍚嶇О")
+    @TableField(select = false,exist = false)
+    private String sendUserName;
+
+    @ApiModelProperty("绛炬敹浜�")
+    private String signatory;
+
+    @TableField(select = false,exist = false)
+    private String signatoryUrl;
+
+    @ApiModelProperty("绛炬敹浜哄悕绉�")
+    @TableField(select = false,exist = false)
+    private String signatoryName;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/Schedule.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/Schedule.java
new file mode 100644
index 0000000..d1f3e79
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/Schedule.java
@@ -0,0 +1,54 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("schedule")
+public class Schedule implements Serializable {
+
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "鍏宠仈鐢ㄦ埛id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "鏃ョ▼鍐呭")
+    private String text;
+
+    @ApiModelProperty(value = "鏃ョ▼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime scheduleTime;
+
+
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鏇存柊鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java
new file mode 100644
index 0000000..5b6a799
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java
@@ -0,0 +1,83 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯鏍戜笅鐨勬爣鍑嗗垪琛�
+ * @TableName standard_method_list
+ */
+@TableName(value ="standard_method_list")
+@Data
+public class StandardMethodList implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鏍囧噯缂栧彿
+     */
+    @ApiModelProperty("鏍囧噯缂栧彿")
+    private String code;
+
+    /**
+     * 鏍囧噯鍚嶇О
+     */
+    @ApiModelProperty("鏍囧噯绉板彿")
+    private String name;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("宸ュ巶")
+    private String factory;
+
+    @ApiModelProperty("瀹為獙瀹�")
+    private String laboratory;
+
+    @ApiModelProperty("鏍峰搧鍒嗙被")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧")
+    private String sample;
+
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(exist = false)
+    private String createUserName;
+    /**
+     *
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     *
+     */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+     *
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java
new file mode 100644
index 0000000..a5127b0
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java
@@ -0,0 +1,191 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯鏍戜笅鐨勬楠岄」鐩�
+ * @TableName standard_product_list
+ */
+@TableName(value ="standard_product_list")
+@Data
+public class StandardProductList implements Serializable {
+    /**
+     * 涓婚敭id
+     */
+    @TableId(value = "id",type = IdType.ASSIGN_ID)
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 妫�楠岄」
+     */
+    @ApiModelProperty("妫�楠岄」")
+    private String inspectionItem;
+
+    @ApiModelProperty("妫�楠岄」EN")
+    private String inspectionItemEn;
+
+    /**
+     * 妫�楠岄」灏忕被
+     */
+    @ApiModelProperty("妫�楠岄」灏忕被")
+    private String inspectionItemSubclass;
+
+    @ApiModelProperty("妫�楠岄」灏忕被EN")
+    private String inspectionItemSubclassEn;
+
+    /**
+     * 瀹為獙瀹�
+     */
+    @ApiModelProperty("瀹為獙瀹�")
+    private String laboratory;
+
+    @ApiModelProperty("瀛愬疄楠屽")
+    private String sonLaboratory;
+
+    /**
+     * 璁¢噺鍗曚綅
+     */
+    @ApiModelProperty("璁¢噺鍗曚綅")
+    private String unit;
+
+    /**
+     * 鍗曚环(鍏�)
+     */
+    @ApiModelProperty("鍗曚环")
+    private String price;
+
+    /**
+     * 宸ユ椂(H)
+     */
+    @ApiModelProperty("宸ユ椂")
+    private String manHour;
+
+    /**
+     * 宸ユ椂鍒嗙粍
+     */
+    @ApiModelProperty("宸ユ椂鍒嗙粍")
+    private String manHourGroup;
+
+    /**
+     * 妫�楠岄」绫诲瀷
+     */
+    @ApiModelProperty("妫�楠岄」绫诲瀷")
+    private String inspectionItemType;
+
+    /**
+     * 妫�楠屽�肩被鍨�
+     */
+    @ApiModelProperty("妫�楠屽�肩被鍨�")
+    private String inspectionValueType;
+
+    /**
+     * 妫�楠屾鏁�
+     */
+    @ApiModelProperty("妫�楠屾鏁�")
+    private Integer checkoutNumber;
+
+    /**
+     * 鍖洪棿
+     */
+    @ApiModelProperty("鍖洪棿")
+    private String section;
+
+    /**
+     * 鏂规硶
+     */
+    @ApiModelProperty("鏂规硶鍒楄〃")
+    private String method;
+
+    @ApiModelProperty("鏂规硶")
+    private String methodS;
+
+    /**
+     * 棰勮鏃堕棿(澶�)
+     */
+    @ApiModelProperty("棰勮鏃堕棿")
+    private Integer manDay;
+
+    /**
+     * 鐗规畩鏍囪瘑
+     */
+    @ApiModelProperty("鐗规畩鏍囪瘑")
+    private String bsm;
+
+    /**
+     * 瑕佹眰鍊�
+     */
+    @ApiModelProperty("瑕佹眰鍊�")
+    private String ask;
+
+    @ApiModelProperty("瑕佹眰鎻忚堪")
+    private String tell;
+
+    /**
+     * 澶栭敭锛氭爣鍑嗘柟娉昳d
+     */
+    @ApiModelProperty("鏍囧噯鏂规硶id")
+    private Integer standardMethodListId;
+
+    @ApiModelProperty("宸ュ巶")
+    private String factory;
+
+    @ApiModelProperty("鏍峰搧鍒嗙被")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧")
+    private String sample;
+
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鍨嬪彿")
+    private Integer templateId;
+
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+    /**
+     *
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     *
+     */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+     *
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("1锛氭湁鏁� 0锛氭棤鏁�")
+    private Integer state;
+
+    private String dic;
+
+    private String tree;
+
+    private Integer structureItemParameterId;
+
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被")
+    private String inspectionItemClass;
+
+    @ApiModelProperty(value = "妫�楠岄」鍒嗙被EN")
+    private String inspectionItemClassEn;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java
new file mode 100644
index 0000000..1a4557f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java
@@ -0,0 +1,76 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏍囧噯妯℃澘
+ * @TableName standard_template
+ */
+@TableName(value ="standard_template")
+@Data
+public class StandardTemplate implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 妯℃澘鍚嶇О
+     */
+    @ApiModelProperty("妯℃澘鍚嶇О")
+    private String name;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    /**
+     * 妯℃澘缁撴瀯
+     */
+    private String thing;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+    /**
+     *
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     *
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+     *
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鐢ㄦ埛")
+    @TableField(exist = false)
+    private String createUserName;
+
+    @ApiModelProperty("鏇存柊鐢ㄦ埛")
+    @TableField(exist = false)
+    private String updateUserName;
+
+    /**
+     * 妯℃澘缂栧彿
+     */
+    @ApiModelProperty("妯℃澘缂栧彿")
+    private String number;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java
new file mode 100644
index 0000000..a30372e
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java
@@ -0,0 +1,91 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+* 鏍囧噯鏍�
+* @TableName standard_tree
+*/
+@TableName(value ="standard_tree")
+@Data
+public class StandardTree implements Serializable {
+
+    /**
+    * 
+    */
+    @NotNull(message="[]涓嶈兘涓虹┖")
+    @ApiModelProperty("")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+    /**
+    * 宸ュ巶
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("宸ュ巶")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String factory;
+    /**
+    * 瀹為獙瀹�
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("瀹為獙瀹�")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String laboratory;
+    /**
+    * 鏍峰搧澶х被
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鏍峰搧澶х被")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String sampleType;
+    /**
+    * 鏍峰搧
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鏍峰搧")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String sample;
+    /**
+    * 鍨嬪彿
+    */
+    @Size(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    @ApiModelProperty("鍨嬪彿")
+    @Length(max= 255,message="缂栫爜闀垮害涓嶈兘瓒呰繃255")
+    private String model;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+    /**
+    * 
+    */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+    /**
+    * 
+    */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/Warehouse.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/Warehouse.java
new file mode 100644
index 0000000..c77d629
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/Warehouse.java
@@ -0,0 +1,44 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 浠撳簱
+ * @TableName warehouse
+ */
+@TableName(value ="warehouse")
+@Data
+public class Warehouse implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 浠撳簱鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseCell.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseCell.java
new file mode 100644
index 0000000..c0686d3
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseCell.java
@@ -0,0 +1,61 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 璐ф灦鍗曞厓鏍�
+ * @TableName warehouse_cell
+ */
+@TableName(value ="warehouse_cell")
+@Data
+public class WarehouseCell implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 琛�
+     */
+    @TableField("`row`")
+    private Integer row;
+
+    /**
+     * 鍒�
+     */
+    @TableField("`col`")
+    private Integer col;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 鏄惁鏈夋晥 1锛氭湁鏁� 0锛氭棤鏁�
+     */
+    private Integer state;
+
+    /**
+     * 澶栨锛氳揣鏋秈d
+     */
+    private Integer shelfId;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseHistory.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseHistory.java
new file mode 100644
index 0000000..b9929f7
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseHistory.java
@@ -0,0 +1,56 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鍑哄叆搴撹褰�
+ * @TableName warehouse_history
+ */
+@TableName(value ="warehouse_history")
+@Data
+public class WarehouseHistory implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    private String warehouseCode;
+
+    /**
+     * 澶栭敭锛氭牱鍝乮d
+     */
+    private Integer insSampleId;
+
+    /**
+     * 鐘舵�侊細1锛氬叆搴� 2锛氬嚭搴�
+     */
+    private Integer state;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 澶栭敭锛氬崟鍏冩牸id
+     */
+    private Integer cellId;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseShelf.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseShelf.java
new file mode 100644
index 0000000..9ce3d47
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseShelf.java
@@ -0,0 +1,61 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 璐ф灦
+ * @TableName warehouse_shelf
+ */
+@TableName(value ="warehouse_shelf")
+@Data
+public class WarehouseShelf implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 璐ф灦鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 琛�
+     */
+    @TableField("`row`")
+    private Integer row;
+
+    /**
+     * 鍒�
+     */
+    @TableField("`col`")
+    private Integer col;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 澶栭敭锛氫粨搴搃d
+     */
+    private Integer warehouseId;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java
new file mode 100644
index 0000000..e585141
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java
@@ -0,0 +1,58 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.*;
+import com.ruoyi.inspect.pojo.InsOrder;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author gaoaoy
+ * @description 閽堝琛ㄣ�恑ns_order(妫�楠屼笅鍗�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2024-03-12 16:17:55
+ */
+public interface InsOrderService extends IService<InsOrder> {
+
+    //鑾峰彇鍗曚綅妫�楠屼笅鍗曟暟鎹�
+    Map<String, Object> selectInsOrderParameter(Page<InsOrder> page, SampleOrderDto sampleOrderDto);
+
+    //淇敼妫�楠屼笅鍗曟暟鎹�
+    int upInsOrder(UpInsOrderDTO upInsOrderDTO);
+
+    int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing,List<List<Integer>> fiberPairing);
+
+    Map<String, Object> getInsOrder(Integer id);
+
+    int upInsOrderOfState(InsOrder insOrder);
+
+    Map<String, Object> getInsOrderAndSample(Integer id, String laboratory);
+
+    Map<String, Object> selectSampleAndProductByOrderId(SampleProductDto2 sampleProductDto);
+    List<Map<String, Object>> viewDetails(Map<String,Object> map);
+
+    void exportChecked(Map<String,Object> data, HttpServletResponse response);
+
+    Map<String, Object> costStatistics(IPage<CostStatisticsDto> page, CostStatisticsDto costStatisticsDto);
+
+    Map<String, Object> costStatistics2(CostStatisticsDto costStatisticsDto);
+
+    Map<String, Object> selectSampleDefects(Page page, String inspectionItems, String orderNumber);
+
+    int updateStatus(Integer id);
+
+    List<SampleProductDto3> labelPrinting(String ids);
+
+    void export(CostStatisticsDto costStatisticsDto,HttpServletResponse response)throws IOException, ServletException;
+
+    Boolean hasSendUrgentOrder();
+
+    List<Map<String,Object>> getInsOrderTemList(Map<String,Object> data);
+
+    Map<String,Object> permute(Integer num,Boolean isValue);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderTemplateService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderTemplateService.java
new file mode 100644
index 0000000..c80a430
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderTemplateService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.InsOrderTemplate;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_order_template銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-03-18 14:14:54
+*/
+public interface InsOrderTemplateService extends IService<InsOrderTemplate> {
+
+    int addInsOrderTemplate(InsOrderTemplate insOrderTemplate);
+
+    List<InsOrderTemplate> selectInsOrderTemplate(String company);
+
+    Map<String,Object> selectInsOrderTemplateById(Integer id);
+
+    int delInsOrderTemplate(Integer id);
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsProductService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsProductService.java
new file mode 100644
index 0000000..4ec492e
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsProductService.java
@@ -0,0 +1,54 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.InsProductDto;
+import com.ruoyi.inspect.pojo.InsProduct;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_product(妫�楠岄」鐩�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-03-17 23:57:39
+*/
+public interface InsProductService extends IService<InsProduct> {
+
+    int selectOrderManDay(Integer orderId);
+
+    int updateInspected(Integer id,String ids);
+
+    boolean write(InsProductDto insProductDto);
+
+    Map<String,Object> selectNoProducts(Page page, InsProduct insProduct,Integer orderId,String ids);
+
+    List<Map<String,Object>> selectSampleByOrderId(Integer orderId);
+
+    List<Map<String,Object>> selectProductsBySampleId(Integer sampleId,Integer orderId);
+
+    List<Map<String,Object>> selectTemperatureByProductId(Integer productId);
+
+
+    List<Map<String,Object>> selectTemperatureNumberByProductId(Integer parentId,String inspectionItem);
+
+    void revoke(Map<String,Object> data);
+
+    List<Map<String,Object>> revokeReviewSample(Integer orderId);
+
+    List<Map<String,Object>> revokeReviewTemperatureByProductId(Integer productId);
+
+
+    List<Map<String,Object>> revokeReviewProduct(Integer orderId,Integer sampleId);
+
+    List<Map<String,Object>> revokeReviewConsistentByProductId(Integer parentId,String inspectionItem);
+
+    void revocationPassed(Integer id);
+
+    void revocationCancel(Integer orderId);
+
+    void checkUpdate(Integer orderId,Integer state);
+
+    int write2(Integer id, String elasticityModulus);
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseCellService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseCellService.java
new file mode 100644
index 0000000..ce04742
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseCellService.java
@@ -0,0 +1,13 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.WarehouseCell;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恮arehouse(浠撳簱)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-04-06 12:13:57
+*/
+public interface WarehouseCellService extends IService<WarehouseCell> {
+
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseService.java
new file mode 100644
index 0000000..4987ad4
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseService.java
@@ -0,0 +1,42 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.WarehouseCellAndSampleDto;
+import com.ruoyi.inspect.dto.WarehouseDto;
+import com.ruoyi.inspect.pojo.Warehouse;
+import com.ruoyi.inspect.pojo.WarehouseShelf;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恮arehouse(浠撳簱)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2024-04-06 12:13:57
+*/
+public interface WarehouseService extends IService<Warehouse> {
+
+    int addWarehouse(String name);
+
+    List<WarehouseDto> selectWarehouse();
+
+    int addShelf(WarehouseShelf warehouseShelf);
+
+    int delWarehouse(Integer id);
+
+    int upWarehouse(Warehouse warehouse);
+
+    int delShelf(Integer id);
+
+    int upShelf(WarehouseShelf warehouseShelf);
+
+    List<WarehouseCellAndSampleDto> getWarehouse(Integer shelfId);
+
+    int inWarehouse(String trees, String sampleCode);
+
+    int outWarehouse(String sampleCode);
+
+    Map<String, Object> getSampleRecord(Integer id);
+
+    int searchSampleId(String sampleCode);
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DetailTablePolicy.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DetailTablePolicy.java
new file mode 100644
index 0000000..e6a2b0e
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DetailTablePolicy.java
@@ -0,0 +1,12 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.deepoove.poi.policy.DynamicTableRenderPolicy;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+
+public class DetailTablePolicy extends DynamicTableRenderPolicy {
+    @Override
+    public void render(XWPFTable xwpfTable, Object data) throws Exception {
+        if (null == data) return;
+
+    }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
new file mode 100644
index 0000000..3f1c275
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -0,0 +1,2114 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.core.domain.entity.Custom;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.domain.entity.User;
+
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.common.utils.EasyExcelUtils;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.*;
+import com.ruoyi.inspect.excel.FiberRibboGeometricalParameterExcelData;
+import com.ruoyi.inspect.mapper.*;
+import com.ruoyi.inspect.pojo.*;
+import com.ruoyi.inspect.service.InsOrderService;
+import com.ruoyi.inspect.service.InsProductService;
+import com.ruoyi.inspect.vo.ExportInsProductVO;
+import com.ruoyi.inspect.vo.SampleDefectsFatherVo;
+import com.ruoyi.system.mapper.CustomMapper;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.ISysDictTypeService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @author gaoaoy
+ * @description 閽堝琛ㄣ�恑ns_order(妫�楠屼笅鍗�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-03-12 16:17:55
+ */
+@Service
+@Slf4j
+@AllArgsConstructor
+public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
+        implements InsOrderService {
+
+    private InsOrderMapper insOrderMapper;
+
+    private InsSampleMapper insSampleMapper;
+
+    private InsProductMapper insProductMapper;
+
+    private InsProductService insProductService;
+
+    private InsProductUserMapper insProductUserMapper;
+
+    private NumberGenerator<InsOrder> numberGenerator;
+
+    private InsSampleUserMapper insSampleUserMapper;
+
+    private InsOrderStateMapper insOrderStateMapper;
+
+    UserMapper userMapper;
+
+    private InsBushingMapper insBushingMapper;
+
+    private InsFibersMapper insFibersMapper;
+
+    private InsFiberMapper insFiberMapper;
+
+    private InsProductResultMapper insProductResultMapper;
+
+    CustomMapper customMapper;
+
+    private ISysDictTypeService dictTypeService;
+
+    private ProcessOrder1Mapper processOrderMapper;
+
+
+    //鑾峰彇妫�楠屼笅鍗曟暟鎹�
+    @Override
+    public Map<String, Object> selectInsOrderParameter(Page<InsOrder> page, SampleOrderDto sampleOrderDto) {
+        page.setOptimizeCountSql(false);
+        List<String> startAndEndTime = sampleOrderDto.getStartAndEndTime();
+        String startTime = "";
+        String endTime = "";
+        if (CollectionUtils.isNotEmpty(startAndEndTime)) {
+            startTime = startAndEndTime.get(0) + " 00:00:00";
+            endTime = startAndEndTime.get(1) + " 23:59:59";
+        }
+
+        Map<String, Object> map = new HashMap<>();
+////        map.put("head", PrintChina.printChina(SampleOrderDto.class));
+//        //鍒ゆ柇鍏ㄩ儴,涓汉,缁勭粐鐨勬潈闄�
+//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+//        User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
+//        Integer roleId = user.getRoleId();
+//        //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id
+//        String departLimsId = user.getDepartLimsId();
+        String laboratory = null;
+//        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) {
+//            String[] split = departLimsId.split(",");
+//            //鏌ヨ瀵瑰簲鏋舵瀯鍚嶇О(閫氫俊瀹為獙瀹�,鐢靛姏瀹為獙瀹�,妫�娴嬪姙)
+//            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
+//            if (departLims.contains("瀹為獙瀹�")) {
+//                laboratory = departLims;
+//            }
+//        }
+//        //鍒ゆ柇鏄惁鏄叏閮ㄦ潈闄�
+//        Power power = powerMapper.selectOne(Wrappers.<Power>lambdaQuery().eq(Power::getRoleId, roleId).eq(Power::getMenuMethod, "selectAllInsOrderParameter"));
+//        if (ObjectUtils.isEmpty(power)) {
+//            if (map1.get("look") == 1) {
+//                //涓汉
+//                sampleOrderDto.setCreateUser(map1.get("userId"));
+//            } else {
+//                //缁勭粐
+//                try {
+//                    sampleOrderDto.setCompany(customMapper.selectById(user.getCompany()).getCompany());
+//                } catch (NullPointerException e) {
+//                    throw new ErrorException("鎵句笉鍒版墍灞炲崟浣�");
+//                }
+//            }
+//        }
+        Integer state = sampleOrderDto.getState();
+        sampleOrderDto.setState(null);
+        IPage<SampleOrderDto> sampleOrderDtoIPage = insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory, startTime, endTime, String.valueOf(state), null);
+        if (sampleOrderDtoIPage.getRecords().isEmpty() && (StringUtils.isNotBlank(sampleOrderDto.getEntrustCode()) || StringUtils.isNotBlank(sampleOrderDto.getOutEntrustCode()))) {
+            QueryWrapper<SampleOrderDto> wrapper = QueryWrappers.queryWrappers(sampleOrderDto);
+            IPage<InsOrder> orderPage = new Page<>();
+            BeanUtil.copyProperties(page, orderPage);
+            IPage<SampleOrderDto> otherPage = insOrderMapper.selectInsOrderPage(orderPage, wrapper, laboratory, startTime, endTime, null, String.valueOf(state));
+            if (1 == otherPage.getRecords().size()) {
+                sampleOrderDtoIPage = otherPage;
+            }
+        }
+        sampleOrderDtoIPage.getRecords().parallelStream().forEach(i -> {
+            if (ObjectUtils.isNotEmpty(i.getSampleCode()) && i.getSampleCode().contains("锛�")) {
+                String[] split = i.getSampleCode().split("锛�");
+                i.setSampleCode(split[0]);
+            }
+        });
+        map.put("body", sampleOrderDtoIPage);
+        return map;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int upInsOrder(UpInsOrderDTO upInsOrderDTO) {
+        InsOrder insOrder = new InsOrder();
+        insOrder.setId(upInsOrderDTO.getOrderId());
+        insOrder.setAppointed(LocalDate.parse(upInsOrderDTO.getAppointed()));
+        insOrder.setSendTime(LocalDateTime.now());
+        insOrderMapper.updateById(insOrder);
+        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, upInsOrderDTO.getOrderId()).select(InsSample::getId));
+        List<Integer> ids = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .in(InsProduct::getInsSampleId, ids)
+                .eq(InsProduct::getState, 1)
+//                .isNull(InsProduct::getInsFibersId)
+//                .isNull(InsProduct::getInsFiberId)
+                .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
+        //鏌ヨins_order_state,娌℃湁鎵嶆柊澧�
+        long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, upInsOrderDTO.getOrderId()));
+        if (count == 0) {
+            for (InsProduct insProduct : insProducts) {
+                InsOrderState insOrderState = new InsOrderState();
+                insOrderState.setInsOrderId(upInsOrderDTO.getOrderId());
+                try {
+                    insOrderState.setLaboratory(insProduct.getSonLaboratory());
+                } catch (NullPointerException e) {
+                    throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
+                }
+                insOrderState.setInsState(0);
+                insOrderStateMapper.insert(insOrderState);
+            }
+        }
+        //娣诲姞鏍峰搧妫�楠屼汉鍛�
+        if (CollectionUtils.isNotEmpty(upInsOrderDTO.getUserIdList())) {
+            upInsOrderDTO.getUserIdList().forEach(userId -> {
+                InsSampleUser insSampleUser = new InsSampleUser();
+                insSampleUser.setState(0);
+                insSampleUser.setUserId(userId);
+                insSampleUser.setInsSampleId(upInsOrderDTO.getOrderId());
+                insSampleUser.setSonLaboratory(upInsOrderDTO.getSonLaboratory());
+                insSampleUserMapper.insert(insSampleUser);
+            });
+        }
+        return 1;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing, List<List<Integer>> fiberPairing) {
+        insOrder.setState(0);
+        //鍒ゆ柇閫夋嫨鐨勫鎵樺崟浣嶄笌鍒跺崟浜虹殑濮旀墭鍗曚綅鏄惁涓�鑷�
+        Integer userId = 1;
+        String company = userMapper.selectById(userId).getCompany();
+        if (!company.equals(insOrder.getCompanyId() + "")) {
+            //濡傛灉涓嶄竴鑷撮偅涔堝鎵樹汉瀛楁蹇呭~
+            if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
+                throw new ErrorException("濮旀墭浜轰笉鑳戒负绌�");
+            }
+        } else {
+            //濡傛灉涓�鑷�,閭d箞鍒跺崟浜哄氨鏄鎵樹汉
+            insOrder.setPrepareUser(insOrder.getCustom());
+        }
+        //瀹㈡埛浠e彿
+        Custom custom = customMapper.selectById(insOrder.getCompanyId());
+        String customCode = custom.getCode2();
+        if (!custom.getCompany().equals(insOrder.getCompany())) {
+            Custom one = customMapper.selectOne(Wrappers.<Custom>lambdaQuery().eq(Custom::getCompany, insOrder.getCompany()));
+            insOrder.setCompanyId(one.getId());
+            customCode = one.getCode2();
+        }
+        //瀹為獙瀹ょ紪鍙�
+        String laboratoryCode = baseMapper.selLaboratoryCode(insOrder.getLaboratory());
+        if (StringUtils.isEmpty(laboratoryCode)) {
+            laboratoryCode = "";
+        }
+        //澶栭儴濮旀墭缂栧彿
+        String outEntrustCodePrefix = getOutEntrustCodePrefix(customCode, laboratoryCode);
+        String outEntrustCode = numberGenerator.generateNumberWithPrefix(5, outEntrustCodePrefix, InsOrder::getOutEntrustCode);
+        insOrder.setOutEntrustCode(outEntrustCode);
+//        String giveCode = this.giveCode.giveCode("JCZX-" + customCode + "-", "ins_sample", "", "yyMMdd");
+        String giveCode = "";
+//        insOrder.setOutEntrustCode(giveCode.giveCode3("ZT/" + code2 + "-" + code + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
+//        String giveCode = this.giveCode.giveCode("JCZX-" + code + "-", "ins_sample", "", "yyMMdd");
+        insOrderMapper.insert(insOrder);
+        AtomicInteger count = new AtomicInteger();
+        List<FiberDto> fiberList = new ArrayList<>();
+        list.forEach(a -> {
+            count.getAndIncrement();
+            a.setId(null);
+            a.setInsOrderId(insOrder.getId());
+            if (StrUtil.isEmpty(a.getSampleCode())) {
+                a.setSampleCode(giveCode.split("-")[2] + "-" + count.get());
+            } else {
+                //鍘婚櫎鎵嬭緭鐨勬牱鍝佺紪鍙蜂腑棣栧熬鍙兘鍖呭惈鐨勭┖鏍�
+                a.setSampleCode(a.getSampleCode().trim());
+            }
+            insSampleMapper.insert(a);
+            if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
+                addInsProductMethod(a.getId(), a.getInsProduct(), null, 0, false);
+                if (ObjectUtil.isNotEmpty(a.getBushing())) {
+                    for (BushingDto bushingDto : a.getBushing()) {
+                        bushingDto.setInsSampleId(a.getId());
+                        insBushingMapper.insert(bushingDto);
+                        //鍏夌氦涓嶄负绌�
+                        if (!bushingDto.getFiber().isEmpty()) {
+                            fiberList.addAll(bushingDto.getFiber());
+                            for (FiberDto fiberDto : bushingDto.getFiber()) {
+                                fiberDto.setInsBushingId(bushingDto.getId());
+                                insFiberMapper.insert(fiberDto);
+                                addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
+                                addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                            }
+                        }
+                        //鍏夌氦甯︿笉涓虹┖
+                        if (!bushingDto.getFibers().isEmpty()) {
+                            for (FibersDto fibersDto : bushingDto.getFibers()) {
+                                fibersDto.setInsBushingId(bushingDto.getId());
+                                if (StringUtils.isBlank(fibersDto.getCode())) {
+//                                    fibersDto.setCode(this.giveCode.giveCode("", "ins_fibers", "", "yyMMdd"));
+                                    fibersDto.setCode("");
+                                }
+                                insFibersMapper.insert(fibersDto);
+                                for (FiberDto fiberDto : fibersDto.getFiber()) {
+                                    fiberDto.setInsFibersId(fibersDto.getId());
+                                    insFiberMapper.insert(fiberDto);
+                                    addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
+                                    addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                                }
+                                //addInsProductMethod(a.getId(), a.getInsProduct(), fibersDto.getId(), 1);
+                                addInsProductMethod(a.getId(), fibersDto.getProductList(), fibersDto.getId(), 1, false);
+                            }
+                        }
+                        //閮戒负绌� 鍙厤缃簡濂楃 杩欑鎯呭喌鍙檺浜庨」鐩垨瀛愰」鏄惈鏈夋澗濂楃鐨�
+                        if (StringUtils.isNotBlank(bushingDto.getColor())) {
+                            //妫�楠岄」鎷兼帴瀛楃
+                            String insItem = a.getInsProduct().stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.joining(","));
+                            //妫�楠屽瓙椤规嫾鎺ュ瓧绗�
+                            String insItemSubclass = a.getInsProduct().stream().map(InsProduct::getInspectionItemSubclass).distinct().collect(Collectors.joining(","));
+                            if (insItem.contains("鏉惧绠�") || insItemSubclass.contains("鏉惧绠�")) {
+                                //鑾峰彇妫�楠岄」鐩悎鎴栧瓙椤逛腑鍖呭惈鏉惧绠$殑妫�楠岄」鐩�
+                                List<InsProduct> products = a.getInsProduct().stream()
+                                        .filter(insProduct -> insProduct.getInspectionItem().contains("鏉惧绠�") ||
+                                                insProduct.getInspectionItemSubclass().contains("鏉惧绠�"))
+                                        .collect(Collectors.toList());
+                                for (InsProduct product : products) {
+                                    product.setInsBushId(bushingDto.getId());
+                                    product.setId(null);
+                                    product.setCreateTime(null);
+                                    product.setCreateUser(null);
+                                    product.setUpdateTime(null);
+                                    product.setUpdateUser(null);
+                                    product.setInsSampleId(a.getId());
+                                    if (product.getInspectionItemSubclass() == null) {
+                                        product.setInspectionItemSubclass("");
+                                    }
+                                    insProductMapper.insert(product);
+                                }
+                            }
+//                            else {
+//                                throw new ErrorException("鏍峰搧鐨勫厜绾ら厤缃俊鎭噷闈㈡病鏈夐厤缃厜绾ゅ甫淇℃伅涔熸病鏈夊厜绾や俊鎭�,璇烽噸鏂伴厤缃繚瀛樺啀鎻愪氦涓嬪崟!!!");
+//                            }
+                        }
+                    }
+                }
+            }
+            if (ObjectUtil.isNotEmpty(a.getInsulating())) {
+                List<InsProduct> ip2 = new ArrayList<>();
+                for (Integer i = 0; i < a.getInsulating().getNum(); i++) {
+                    ip2.addAll(a.getInsulating().getInsProduct());
+                }
+                for (InsProduct product : ip2) {
+                    product.setStandardMethodListId(a.getInsulating().getStandardMethodListId());
+                }
+                addInsProductMethod(a.getId(), ip2, null, 0, false);
+            }
+            if (ObjectUtil.isNotEmpty(a.getSheath())) {
+                for (InsProduct product : a.getSheath().getInsProduct()) {
+                    product.setStandardMethodListId(a.getSheath().getStandardMethodListId());
+                }
+                addInsProductMethod(a.getId(), a.getSheath().getInsProduct(), null, 0, false);
+            }
+            if (ObjectUtil.isNotEmpty(a.getChildSampleList())) {
+                for (SampleProductDto b : a.getChildSampleList()) {
+                    for (int i = 0; i < b.getNum(); i++) {
+                        b.setId(null);
+                        b.setInsOrderId(insOrder.getId());
+                        b.setParentId(a.getId());
+                        if (StrUtil.isEmpty(b.getSampleCode())) {
+//                            b.setSampleCode(this.giveCode.giveCode("", "ins_sample", "", "yyMMdd"));
+                            b.setSampleCode("");
+                        }
+                        insSampleMapper.insert(b);
+                        if (ObjectUtil.isNotEmpty(b.getInsProduct())) {
+                            addInsProductMethod(b.getId(), b.getInsProduct(), null, 0, false);
+                        }
+                    }
+                }
+            }
+            if (ObjectUtil.isEmpty(a.getInsProduct()) && ObjectUtil.isNotEmpty(a.getBushing())) {
+                for (BushingDto bushingDto : a.getBushing()) {
+                    bushingDto.setInsSampleId(a.getId());
+                    insBushingMapper.insert(bushingDto);
+                    if (!bushingDto.getFiber().isEmpty()) {
+                        fiberList.addAll(bushingDto.getFiber());
+                        for (FiberDto fiberDto : bushingDto.getFiber()) {
+                            fiberDto.setInsBushingId(bushingDto.getId());
+                            insFiberMapper.insert(fiberDto);
+                            addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                        }
+                    } else {
+                        for (FibersDto fibersDto : bushingDto.getFibers()) {
+                            fibersDto.setInsBushingId(bushingDto.getId());
+                            fibersDto.setCode("");
+                            insFibersMapper.insert(fibersDto);
+                            for (FiberDto fiberDto : fibersDto.getFiber()) {
+                                fiberDto.setInsFibersId(fibersDto.getId());
+                                insFiberMapper.insert(fiberDto);
+                                addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                            }
+                            addInsProductMethod(a.getId(), fibersDto.getProductList(), fibersDto.getId(), 1, false);
+                        }
+                    }
+                }
+            }
+        });
+        //鏈夊厜绾ゆ帴澶存崯鑰楃壒娈婇」鐨勬牱鍝佹墠娣诲姞涓や袱缁勫悎
+        for (List<Integer> i : pairing) {
+            SampleProductDto sample = JSON.parseObject(JSON.toJSONString(list.get(i.get(0) - 1)), SampleProductDto.class);
+            List<InsProduct> insProducts = sample.getInsProduct().stream().filter(a -> Objects.equals(a.getInspectionItem(), "鍏夌氦鎺ュご鎹熻��")).collect(Collectors.toList());
+            if (!insProducts.isEmpty()) {
+                sample.setSampleCode(list.get(i.get(0) - 1).getSampleCode() + "/" + list.get(i.get(1) - 1).getSampleCode());
+                sample.setId(null);
+                sample.setIsPairing("1");
+                insSampleMapper.insert(sample);
+                try {
+                    for (InsProduct insProduct : insProducts) {
+                        insProduct.setId(null);
+                        insProduct.setInsSampleId(sample.getId());
+                        insProductMapper.insert(insProduct);
+                    }
+                } catch (Exception e) {
+                }
+            }
+        }
+        //鍏夌氦閰嶇疆鐨勭啍鎺ラ厤瀵�
+        if (!fiberPairing.isEmpty()) {
+            for (List<Integer> integers : fiberPairing) {
+                StringBuilder code1 = new StringBuilder(list.get(0).getSampleCode() + "-");
+                StringBuilder code2 = new StringBuilder(list.get(1).getSampleCode() + "-");
+                //閰嶅鐨勪袱涓厜绾よ壊鏍�
+                FiberDto fiberDto1 = fiberList.get(integers.get(0) - 1);
+                code1.append(fiberDto1.getBushColor()).append("-").append(fiberDto1.getColor());
+                FiberDto fiberDto2 = fiberList.get(integers.get(1) - 1);
+                code2.append(fiberDto2.getBushColor()).append("-").append(fiberDto2.getColor());
+                //鍕鹃�夌殑鍏夌氦鎺ュご鎹熻�楁楠岄」
+                //List<InsProduct> insProducts = fiberDto1.getProductList().stream().filter(a -> Objects.equals(a.getInspectionItem(), "鍏夌氦鎺ュご鎹熻��")).collect(Collectors.toList());
+
+                //閰嶅鍚庣殑鏍峰搧
+                InsSample insSample = new InsSample();
+                BeanUtil.copyProperties(list.get(0), insSample);
+                insSample.setSampleCode(code1 + "/" + code2);
+                insSample.setId(null);
+                insSample.setIsPairing("1");
+                insSampleMapper.insert(insSample);
+
+
+                // 濡傛灉鏄厜绾ら厤缃殑鐔旀帴閰嶅锛屽彧闇�瑕佽幏鍙杔ist鐨刡ushing灏辫锛岀敓鎴愮殑鏍峰搧涓暟涓庝笅鍗曠晫闈㈡牱鍝佷釜鏁版棤鍏�
+                // 涓�涓牱鍝佷笅闈㈠彧闇�瑕佹坊鍔犱竴娆roduct 鍙坊鍔犲厜绾ゆ帴澶存崯鑰楃殑妫�楠岄」
+                // 娣诲姞濂楃
+                List<BushingDto> bushing = list.get(0).getBushing();
+                if (CollectionUtils.isNotEmpty(bushing)) {
+                    for (int j = 0; j < bushing.size(); j++) {
+                        bushing.get(j).setId(null);
+                        bushing.get(j).setInsSampleId(insSample.getId());
+                        insBushingMapper.insert(bushing.get(j));
+                        Integer bushingId = bushing.get(j).getId();
+                        // 娣诲姞鍏夌氦甯�
+                        List<FibersDto> fibers = bushing.get(j).getFibers();
+                        if (CollectionUtils.isNotEmpty(fibers)) {
+                            fibers.forEach(item -> {
+                                item.setId(null);
+                                item.setInsBushingId(bushingId); // 濂楃id
+                                insFibersMapper.insert(item);
+                                // 灏嗘楠岄」鐨勫厜绾ゅ甫id璧嬪��
+                                if (CollectionUtils.isNotEmpty(item.getProductList())) {
+                                    item.getProductList().forEach(insProduct -> {
+                                        if (insProduct.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) {
+                                            insProduct.setInsFibersId(item.getId()); // 鍏夌氦甯d
+                                            insProduct.setInsSampleId(insSample.getId()); // 鏍峰搧id
+                                            insProduct.setId(null);
+                                            insProductMapper.insert(insProduct);
+                                        }
+                                    });
+                                }
+                                // 鏄惁鍚湁鍏夌氦
+                                if (CollectionUtils.isNotEmpty(item.getFiber())) {
+                                    List<FiberDto> fiber = item.getFiber();
+                                    fiber.forEach(f -> {
+                                        f.setId(null);
+                                        f.setInsBushingId(bushingId); // 濂楃id
+                                        insFiberMapper.insert(f);
+                                        f.getProductList().forEach(insProduct -> {
+                                            if (insProduct.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) {
+                                                insProduct.setInsFiberId(f.getId()); // 鍏夌氦id
+                                                insProduct.setInsSampleId(insSample.getId()); // 鏍峰搧id
+                                                insProduct.setId(null);
+                                                insProductMapper.insert(insProduct);
+                                            }
+                                        });
+                                    });
+                                }
+
+                            });
+                        }
+                        // 鍙湁鍏夌氦鐨勬儏鍐典笅
+                        else {
+                            bushing.get(j).getFiber().forEach(f -> {
+                                f.setInsBushingId(bushingId); // 濂楃id
+                                f.setId(null);
+                                insFiberMapper.insert(f);
+                                f.getProductList().forEach(insProduct -> {
+                                    if (insProduct.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) {
+                                        insProduct.setInsFiberId(f.getId()); // 鍏夌氦id
+                                        insProduct.setInsSampleId(insSample.getId()); // 鏍峰搧id
+                                        insProduct.setId(null);
+                                        insProductMapper.insert(insProduct);
+                                    }
+                                });
+                            });
+                        }
+                    }
+                }
+
+                // 娌℃湁杩涜鍏夌氦閰嶇疆鐨勭啍鎺ラ厤瀵癸紝鐩存帴娣诲姞鏍峰搧
+//                try {
+//                    for (InsProduct insProduct : insProducts) {
+//                        insProduct.setId(null);
+//                        insProduct.setInsSampleId(insSample.getId());
+//                        insProductMapper.insert(insProduct);
+//                    }
+//                } catch (Exception e) {
+//                }
+            }
+        }
+        return insOrder.getId();
+    }
+
+    /**
+     * 鐢熸垚澶栭儴濮旀墭缂栧彿鍓嶇紑锛歓T/TX-01-2411XXXXX
+     *
+     * @param customCode 瀹㈡埛浠e彿
+     * @param labCode    璇曢獙瀹や唬鍙�
+     * @return
+     */
+    private static String getOutEntrustCodePrefix(String customCode, String labCode) {
+        String currentMonth = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMM"));
+        return "ZT/" + labCode + "-" + customCode + "-" + currentMonth;
+    }
+
+    /**
+     * 鐢熸垚妫�娴嬩腑蹇冨鎵樼紪鍙峰墠缂�锛欽CZX/TX-01-2411XXXXX
+     *
+     * @param customCode 瀹㈡埛浠e彿
+     * @param labCode    璇曢獙瀹や唬鍙�
+     * @return
+     */
+    private static String getEntrustCodePrefix(String customCode, String labCode) {
+        String currentMonth = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMM"));
+        return "JCZX/" + labCode + "-" + customCode + "-" + currentMonth;
+    }
+
+    private void addInsProductMethod(Integer sampleId, List<InsProduct> productList, Integer id, Integer type, Boolean is) {
+        InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(sampleId).getInsOrderId());
+        String name = insSampleMapper.selMethodById(sampleId);
+        for (InsProduct product : productList) {
+            if (product.getInspectionItem().contains("鏉惧绠�") || (!Objects.isNull(product.getInspectionItemSubclass()) && product.getInspectionItemSubclass().contains("鏉惧绠�"))) {
+                continue;
+            }
+            if (product.getState() == 1 && !product.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) {
+                //鍒ゆ柇鍏夌紗鐨勬俯搴﹀惊鐜」鐩坊鍔�
+                if (insOrder.getSampleType().equals("鍏夌紗") && product.getInspectionItem().equals("娓╁害寰幆") && type != 0) {
+                    //鍒ゆ柇閫夋嫨鐨勬爣鍑嗘柟娉曟槸濮旀墭瑕佹眰杩樻槸鍏朵粬鏍囧噯鏂规硶
+                    if (!name.equals("濮旀墭瑕佹眰")) {
+                        //鍒ゆ柇鏍囧噯鏂规硶鐨勬俯搴﹀惊鐜殑瑕佹眰鎻忚堪鏄惁鏈夊~鍐�
+                        if (ObjectUtils.isEmpty(product.getTell()) || product.getTell().isEmpty()) {
+                            throw new ErrorException("鍏夌紗鐨勬俯搴﹀惊鐜殑瑕佹眰鎻忚堪涓虹┖,闇�瑕佸湪鏍囧噯搴撻厤缃姹傛弿杩�!!!");
+                        } else {
+                            //瑙f瀽(娓╁害鑼冨洿锛�20鈩冿紝-40鈩冿紝65鈩冿紱淇濇俯鏃堕棿锛�12h锛� 寰幆娆℃暟锛�2娆★紱 鍏夌氦锛�1310nm锛�1550nm锛夐檮鍔犺“鍑忎笉澶т簬0.03dB/km)
+                            String tell = product.getTell().replace("锛�", ")")
+                                    .replace("(", "锛�")
+                                    .replace(")", "锛�")
+                                    .replace("锛�", ",")
+                                    .replace("锛�", ":")
+                                    .replace("锛�", ";")
+                                    .replace("涓嶅ぇ浜�", "鈮�")
+                                    .replace("涓嶅皬浜�", "鈮�")
+                                    .replace("澶т簬", ">")
+                                    .replace("灏忎簬", "<")
+                                    .replace("绛変簬", "=");
+                            String[] message = null;
+                            String[] nm = null;
+                            String ask = null;
+                            String count = null;
+                            try {
+                                String[] strings = tell.split(";");
+                                //娓╁害
+                                String temperature = strings[0];
+                                String[] split = temperature.split(":");
+                                message = split[1].split(",");
+                                //寰幆娆℃暟
+                                count = strings[2].split(":")[1].split("娆�")[0];
+                                //鍏夌氦椤圭洰鍜岃姹傚��
+                                String string = strings[3];
+                                nm = string.split("锛�")[1].split("锛�")[0].split(",");
+                                ask = string.split("琛板噺")[1].split("dB")[0];
+                            } catch (Exception e) {
+                                throw new ErrorException("娓╁害寰幆鐨勮姹傛弿杩版牸寮忓紓甯�,璇峰弬鐓ф俯搴﹁寖鍥达細20鈩冿紝-40鈩冿紝65鈩冿紱淇濇俯鏃堕棿锛�12h锛� 寰幆娆℃暟锛�2娆★紱 鍏夌氦锛�1310nm锛�1550nm锛夐檮鍔犺“鍑忎笉澶т簬0.03dB/km");
+                            }
+                            //鎷兼帴
+                            String s = "";
+                            for (int i = 0; i < nm.length; i++) {
+                                s += "20鈩�(甯告俯)," + nm[i] + ",null;";
+                                for (int j = 0; j < message.length; j++) {
+                                    s += message[j] + "," + nm[i] + "," + ask + ";";
+                                }
+                            }
+                            s += count;
+                            product.setAsk(s);
+                            insProductMapper.updateById(product);
+                            dealWithTemperatureLoop(type, id, sampleId, product);
+                        }
+                    } else {
+                        //20鈩�(甯告俯),1310nm,null;-40鈩�,1310nm,鈮�0.2;75鈩�,1310nm,<0.3;20鈩�,1310nm,鈮�0.1;20鈩�(甯告俯),1550nm,null;-40鈩�,1550nm,鈮�0.2;75鈩�,1550nm,<0.3;20鈩�,1550nm,鈮�0.1;3
+                        dealWithTemperatureLoop(type, id, sampleId, product);
+                    }
+                }
+                //鍒ゆ柇鐑惊鐜」鐩殑娣诲姞鍜屾俯鍗囪瘯楠岄」鐩殑娣诲姞
+                else if (product.getInspectionItem().equals("鐑惊鐜�") || product.getInspectionItem().equals("娓╁崌璇曢獙")) {
+                    List<InsProduct> insProductess = new ArrayList<>();
+                    product.setId(null);
+                    product.setInsSampleId(sampleId);
+                    insProductMapper.insert(product);
+//                    insProductess.add(product);
+                    List<InsProduct> insProductes = new ArrayList<>();
+                    List<InsProduct> insProducts = new ArrayList<>();
+                    String[] strings = product.getAsk().split(";");
+                    //寰幆娆℃暟
+                    int count = Integer.parseInt(strings[strings.length - 1]);
+                    for (int i = 0; i < strings.length - 1; i++) {
+                        String[] split = strings[i].split(",");
+                        InsProduct insProduct = new InsProduct();
+                        insProduct.setInspectionItem("1");//妫�楠岀埗椤�--寰幆娆℃暟
+                        insProduct.setInspectionItemSubclass(split[0]);//妫�楠屽瓙椤�--鐜娓╁害/瀵肩嚎娓╁害/鑰愬紶娓╁害/鎺ョ画娓╁害
+                        insProduct.setInspectionItemSubclassEn(split[1]);//妫�楠屽瓙椤硅嫳鏂�--鐜娓╁害/瀵肩嚎娓╁害/鑰愬紶娓╁害/鎺ョ画娓╁害
+                        insProduct.setAsk(null);//妫�楠岃姹�
+                        insProduct.setTell(null);//妫�楠屾弿杩�
+                        insProduct.setInsSampleId(sampleId);
+                        insProduct.setState(1);
+                        insProduct.setFactory(product.getFactory());
+                        insProduct.setLaboratory(product.getLaboratory());
+                        insProduct.setSampleType(product.getSampleType());
+                        insProduct.setSample(product.getSample());
+                        insProduct.setModel(product.getModel());
+                        insProduct.setSonLaboratory(product.getSonLaboratory());
+                        insProduct.setUnit("鈩�");//鍗曚綅
+                        insProduct.setManHour(product.getManHour());//宸ユ椂
+                        insProduct.setManHourGroup(product.getManHourGroup());
+                        insProduct.setInspectionItemType("0");
+                        insProduct.setInspectionValueType("1");
+                        insProduct.setTemplateId(product.getTemplateId());//娣诲姞妯℃澘id
+                        insProduct.setSpecialItemParentId(product.getId());//鐗规畩椤圭埗id
+                        if (product.getInspectionItem().equals("鐑惊鐜�")) {
+                            insProduct.setInspectionItemClass("鐩存祦鐢甸樆");//妫�楠屽瓙瀛愰」--鐩存祦鐢甸樆
+                            insProduct.setInspectionItemClassEn("DC resistance");//妫�楠屽瓙瀛愰」鑻辨枃--鐩存祦鐢甸樆
+                            insProduct.setUnit("惟/km");//鍗曚綅
+                        }
+                        insProducts.add(insProduct);
+                        insProductes.add(insProduct);
+                        insProductess.add(insProduct);
+                    }
+                    //鐑惊鐜墠鏈夊娆″惊鐜鏁�
+                    if (count > 1) {
+                        //寰幆瓒呰繃1娆�
+                        for (int j = 2; j <= count; j++) {
+                            for (InsProduct insProduct : insProductes) {
+                                InsProduct insProduct1 = new InsProduct();
+                                BeanUtils.copyProperties(insProduct, insProduct1);
+                                insProduct1.setInspectionItem(j + "");//寰幆娆℃暟
+                                insProductess.add(insProduct1);
+                            }
+                        }
+                    }
+                    insProductService.saveBatch(insProductess);
+                }
+                //寮у瀭鐗规畩椤�
+                else if (product.getInspectionItem().contains("寮у瀭")) {
+                    product.setId(null);
+                    product.setInsSampleId(sampleId);
+                    insProductMapper.insert(product);
+                    //闇�瑕佹坊鍔犵殑瀛愰」
+                    List<Map<String, Object>> childrenMapList = initChildrenList();
+                    //瀛愰」
+                    List<InsProduct> childrenProducts = new ArrayList<>();
+                    for (Map<String, Object> map : childrenMapList) {
+                        InsProduct insProduct = new InsProduct();
+                        insProduct.setInspectionItem(product.getInspectionItem());
+                        insProduct.setInspectionItemSubclass(map.get("inspectionItem").toString());
+                        insProduct.setUnit(map.get("unit").toString());
+                        insProduct.setAsk(null);//妫�楠岃姹�
+                        insProduct.setTell(null);//妫�楠屾弿杩�
+                        insProduct.setInsSampleId(sampleId);
+                        insProduct.setState(1);
+                        insProduct.setFactory(product.getFactory());
+                        insProduct.setLaboratory(product.getLaboratory());
+                        insProduct.setSampleType(product.getSampleType());
+                        insProduct.setSample(product.getSample());
+                        insProduct.setModel(product.getModel());
+                        insProduct.setSonLaboratory(product.getSonLaboratory());
+                        insProduct.setManHour(product.getManHour());//宸ユ椂
+                        insProduct.setManHourGroup(product.getManHourGroup());
+                        insProduct.setInspectionItemType("0");
+                        insProduct.setInspectionValueType("1");
+                        insProduct.setTemplateId(product.getTemplateId());//娣诲姞妯℃澘id
+                        insProduct.setSpecialItemParentId(product.getId());//鐗规畩椤圭埗id
+                        childrenProducts.add(insProduct);
+                    }
+                    insProductService.saveBatch(childrenProducts);
+                } else {
+                    if (!is) {
+                        switch (type) {
+                            case 1:
+                                product.setInsFibersId(id);
+                                break;
+                            case 2:
+                                product.setInsFiberId(id);
+                                break;
+                        }
+                        product.setId(null);
+                        product.setCreateTime(null);
+                        product.setCreateUser(null);
+                        product.setUpdateTime(null);
+                        product.setUpdateUser(null);
+                        product.setInsSampleId(sampleId);
+                        if (product.getInspectionItemSubclass() == null) {
+                            product.setInspectionItemSubclass("");
+                        }
+                        // 鏅�氶」鐩� 濡傛灉ask鍖呭惈浜� % 灏卞幓闄�
+                        if(product.getAsk().contains("%")) {
+                            String ask = product.getAsk().replace("%", "").trim();
+                            product.setAsk(ask);
+                        }
+                        insProductMapper.insert(product);
+                    }
+                }
+            }
+
+
+        }
+    }
+
+    /**
+     * 鍒濆鍖栧姬鍨傜壒娈婇」鐩瓙椤�
+     * 鍥哄畾瀛愰」锛氶瀹氭媺鏂姏锛岃法璺濋暱搴︼紝杞借嵎锛岄珮搴︼紝寮у瀭锛屽绾挎俯搴︼紝瀹ゆ俯锛屽紶鍔�
+     *
+     * @return
+     */
+    private List<Map<String, Object>> initChildrenList() {
+        List<Map<String, Object>> maps = new ArrayList<>();
+        Map<String, Object> map1 = new HashMap<>();
+        map1.put("inspectionItem", "棰濆畾鎷夋柇鍔�");
+        map1.put("unit", "kN");
+        Map<String, Object> map2 = new HashMap<>();
+        map2.put("inspectionItem", "璺ㄨ窛闀垮害");
+        map2.put("unit", "m");
+        Map<String, Object> map3 = new HashMap<>();
+        map3.put("inspectionItem", "杞借嵎");
+        map3.put("unit", "kN");
+        Map<String, Object> map5 = new HashMap<>();
+        map5.put("inspectionItem", "寮у瀭");
+        map5.put("unit", "mm");
+        Map<String, Object> map6 = new HashMap<>();
+        map6.put("inspectionItem", "瀵肩嚎娓╁害");
+        map6.put("unit", "鈩�");
+        Map<String, Object> map7 = new HashMap<>();
+        map7.put("inspectionItem", "瀹ゆ俯");
+        map7.put("unit", "鈩�");
+        Map<String, Object> map8 = new HashMap<>();
+        map8.put("inspectionItem", "寮犲姏");
+        map8.put("unit", "kN");
+
+        maps.add(map1);
+        maps.add(map2);
+        maps.add(map3);
+        maps.add(map5);
+        maps.add(map6);
+        maps.add(map7);
+        maps.add(map8);
+
+        return maps;
+    }
+
+    //娓╁害寰幆鐨勫鐞�
+    private void dealWithTemperatureLoop(Integer type, Integer id, Integer sampleId, InsProduct product) {
+        List<InsProduct> insProductes = new ArrayList<>();
+        List<InsProduct> insProducts = new ArrayList<>();
+        String[] strings = product.getAsk().split(";");
+        for (int i = 0; i < strings.length; i++) {
+            int count = Integer.parseInt(strings[strings.length - 1]);
+            if (i != strings.length - 1) {
+                InsProduct insProduct = new InsProduct();
+                switch (type) {
+                    case 1:
+                        insProduct.setInsFibersId(id);
+                        break;
+                    case 2:
+                        insProduct.setInsFiberId(id);
+                        break;
+                }
+                String[] split = strings[i].split(",");
+                if (split[0].equals("20鈩�")) {
+                    insProduct.setInspectionItem(count + "");//妫�楠岄」--寰幆娆℃暟
+                } else {
+                    insProduct.setInspectionItem("1");//妫�楠岄」--寰幆娆℃暟
+                }
+                insProduct.setInspectionItemSubclass(split[0]);//妫�楠岄」--娓╁害
+                insProduct.setInspectionItemClass(split[1]);//妫�楠岄」--鍏夌氦椤圭洰
+                insProduct.setAsk(split[2]);//妫�楠岃姹�
+                insProduct.setTell(strings[i]);//妫�楠屾弿杩�
+                insProduct.setInsSampleId(sampleId);
+                insProduct.setState(1);
+                insProduct.setFactory(product.getFactory());
+                insProduct.setLaboratory(product.getLaboratory());
+                insProduct.setSampleType(product.getSampleType());
+                insProduct.setSample(product.getSample());
+                insProduct.setModel(product.getModel());
+                insProduct.setSonLaboratory(product.getSonLaboratory());
+                insProduct.setUnit(product.getUnit());
+                insProduct.setManHourGroup(product.getManHourGroup());
+                insProduct.setManHour(product.getManHour());
+                insProduct.setInspectionItemType("0");
+                insProduct.setInspectionValueType("1");
+                insProduct.setTemplateId(product.getTemplateId());//娣诲姞妯℃澘id
+                insProduct.setSpecialItemParentId(product.getId());//鐗规畩椤圭埗id
+                insProducts.add(insProduct);
+                insProductes.add(insProduct);
+            } else {
+                //鏈�鍚庝竴涓暟鎹槸璇存槑浼氬惊鐜灏戞
+                if (count > 1) {
+                    //寰幆瓒呰繃1娆�
+                    for (int j = 2; j <= count; j++) {
+                        for (InsProduct insProduct : insProducts) {
+                            if (!insProduct.getInspectionItemSubclass().equals("20鈩�") && !insProduct.getInspectionItemSubclass().equals("20鈩�(甯告俯)")) {
+                                InsProduct insProduct1 = new InsProduct();
+                                BeanUtils.copyProperties(insProduct, insProduct1);
+                                insProduct1.setInspectionItem(j + "");
+                                insProductes.add(insProduct1);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        insProductService.saveBatch(insProductes);
+    }
+
+    @Override
+    public Map<String, Object> getInsOrder(Integer id) {
+        Map<String, Object> map = new HashMap<>();
+        InsOrder insOrder = insOrderMapper.selectById(id);
+        List<SampleProductDto> list = insSampleMapper.selectSampleProductListByOrderId2(id);
+        // 濡傛灉鏄厜绾ら厤缃帴澶存崯鑰楀彧闇�灞曠ずA绔�丅绔�佸钩鍧囧��
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (SampleProductDto dto : list) {
+                // 鑾峰彇妫�楠岄」鐩�
+                List<InsProduct> insProducts = dto.getInsProduct();
+                if (CollectionUtils.isNotEmpty(insProducts)) {
+                    // 杩囨护鍑哄厜绾ら厤缃殑鍏夌氦鎺ュご鎹熻�楁楠岄」鐩�
+                    List<InsProduct> productList = insProducts.stream().filter(item -> item.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")
+                            && (!Objects.isNull(item.getInsFiberId()) || !Objects.isNull(item.getInsFibersId()))).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(productList)) {
+                        // 鍙繑鍥炲厜绾よ澶存崯鑰楁楠岄」鐩� 涓� 鍙睍绀轰竴娆�
+                        // 鏍规嵁妫�楠岄」杩涜鍒嗙粍
+                        Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
+                        List<InsProduct> productList2 = new ArrayList<>();
+                        Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
+                        while (iterator.hasNext()) {
+                            Map.Entry<String, List<InsProduct>> entry = iterator.next();
+                            productList2.add(entry.getValue().get(0));
+                        }
+                        dto.setInsProduct(productList2);
+                    }
+
+                }
+            }
+        }
+        map.put("insOrder", insOrder);
+        map.put("sampleProduct", list);
+        return map;
+    }
+
+    @Override
+    public int upInsOrderOfState(InsOrder insOrder) {
+        InsOrder order = insOrderMapper.selectById(insOrder.getId());
+        insOrder.setCompany(order.getCompany());
+        insOrder.setExamineTime(LocalDateTime.now());
+        if (insOrder.getState() == 1) {
+            //瀹℃牳閫氳繃鎵嶄細鐢熸垚濮旀墭缂栧彿
+            String laboratoryCode = baseMapper.selLaboratoryCode(insOrder.getLaboratory());
+            if (StringUtils.isEmpty(laboratoryCode)) {
+                laboratoryCode = "";
+            }
+            Custom custom = customMapper.selectById(order.getCompanyId());
+//            System.out.println("============="+custom.getCompany());
+//            System.out.println("-------------"+order.getCompany());
+            String customCode = custom.getCode2();
+            if (!custom.getCompany().equals(order.getCompany())) {
+                Custom one = customMapper.selectOne(Wrappers.<Custom>lambdaQuery().eq(Custom::getCompany, order.getCompany()));
+                insOrder.setCompanyId(one.getId());
+                customCode = one.getCode2();
+            }
+            String entrustCodePrefix = getEntrustCodePrefix(customCode, laboratoryCode);
+            String entrustCode = numberGenerator.generateNumberWithPrefix(4, entrustCodePrefix, InsOrder::getEntrustCode);
+            insOrder.setEntrustCode(entrustCode);
+//            insOrder.setEntrustCode(giveCode.giveCode2("JCZX/" + code + "-" + code2 + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
+            /*瀹℃牳閫氳繃杩橀渶瑕佹柊澧炰竴鏉nas瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫*/
+            ProcessOrder processOrder = new ProcessOrder();
+            processOrder.setInsOrderId(insOrder.getId());
+            processOrderMapper.insert(processOrder);
+        }
+        return insOrderMapper.updateById(insOrder);
+    }
+
+    @Override
+    public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
+        Map<String, Object> map = new HashMap<>();
+        InsOrder insOrder = insOrderMapper.selectById(id);
+        Integer insState = insOrderStateMapper.selectOne(new LambdaQueryWrapper<InsOrderState>().eq(InsOrderState::getLaboratory, laboratory).eq(InsOrderState::getInsOrderId, id)).getInsState();
+        List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
+        for (SampleProductDto sampleProductDto : list) {
+            List<Integer> ids = sampleProductDto.getInsProduct().stream().map(InsProduct::getId).collect(Collectors.toList());
+            List<InsProductUser> insProductUsers = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery()
+                    .in(InsProductUser::getInsProductId, ids));
+            if (CollectionUtils.isNotEmpty(insProductUsers)) {
+                List<Integer> userIds = insProductUsers.stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
+                String collect = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
+                sampleProductDto.setCheckName(collect);
+            }
+        }
+        map.put("insOrder", insOrder);
+        map.put("sampleProduct", list);
+        map.put("insState", insState);
+        //鏌ヨ鎵�鏈夎褰曟ā鐗堝幓閲�
+        List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
+        map.put("reportModel", list2);
+        return map;
+    }
+
+    @Override
+    public Map<String, Object> selectSampleAndProductByOrderId(SampleProductDto2 sampleProductDto) {
+        Map<String, Object> map = new HashMap<>();
+        List<Map<String, Object>> headList = new ArrayList<>();
+        List<SampleProductDto2> SampleProductDto2S = null;
+        if (!Objects.isNull(sampleProductDto.getId())) {
+            String laboratory = insOrderMapper.selectById(sampleProductDto.getId()).getLaboratory();
+            if (laboratory.equals("鐢靛姏浜у搧瀹為獙瀹�")) {
+                //鐢靛姏璇曢獙瀹ょ殑鏁版嵁鏌ョ湅锛屽垹闄ゅ厜绾ら厤缃浉鍏冲瓧娈�
+//                headList = PrintChina.printChina(SampleProductDTODL.class);
+                SampleProductDto2S = insOrderMapper.selectSampleAndProductByOrderId(
+                        QueryWrappers.queryWrappers(sampleProductDto).orderByAsc("ins_product_id"),
+                        sampleProductDto.getId());
+            } else {
+//                headList = PrintChina.printChina(SampleProductDto2.class);
+                SampleProductDto2S = insOrderMapper.selectSampleAndProductByOrderId(
+                        QueryWrappers.queryWrappers(sampleProductDto)
+                                .orderByAsc("son_laboratory"),
+//                                .orderByAsc("inspection_item")
+//                                .orderByAsc("inspection_item_subclass"),
+                        sampleProductDto.getId());
+                List<SampleProductDto2> collect = SampleProductDto2S
+                        .stream()
+                        .filter(item -> item.getInspectionItem().contains("鏉惧绠�") || item.getInspectionItemSubclass()
+                                .contains("鏉惧绠�")).collect(Collectors.toList());
+                // 鏍峰搧涓嬬殑鏉惧绠�
+                Map<String, List<SampleProductDto2>> collect1 = collect
+                        .stream()
+                        .collect(Collectors.groupingBy(item -> item.getSampleCode() + '@' + item.getInspectionItemSubclass() + '@' + item.getInspectionItem()));
+                Iterator<Map.Entry<String, List<SampleProductDto2>>> iterator = collect1.entrySet().iterator();
+                ArrayList<SampleProductDto2> list = new ArrayList<>();
+                while (iterator.hasNext()) {
+                    SampleProductDto2 sampleProductDto2 = new SampleProductDto2();
+                    double avg = 0.0;
+                    double count = 0.0;
+                    boolean flag = true;
+                    Map.Entry<String, List<SampleProductDto2>> next = iterator.next();
+                    for (SampleProductDto2 s : next.getValue()) {
+                        if (StringUtils.isNotEmpty(s.getLastValue()) && (NumberUtil.isNumber(s.getLastValue()))) {
+                            count += Double.parseDouble(s.getLastValue());
+                        } else if (!NumberUtil.isNumber(s.getLastValue()) && StringUtils.isNotEmpty(s.getLastValue())) {
+                            flag = false;
+                        }
+                    }
+                    BeanUtil.copyProperties(next.getValue().get(0), sampleProductDto2);
+                    sampleProductDto2.setBushColor("");
+                    List<SampleProductDto2> collect2 = next.getValue().stream().filter(item -> Objects.nonNull(item.getInsResult()) && item.getInsResult().equals(0)).collect(Collectors.toList()); // 涓嶅悎鏍�
+                    List<SampleProductDto2> collect3 = next.getValue().stream().filter(item -> Objects.nonNull(item.getInsResult()) && item.getInsResult().equals(3)).collect(Collectors.toList()); // 涓嶅垽瀹�
+                    List<SampleProductDto2> collect4 = next.getValue().stream().filter(item -> StringUtils.isNotEmpty(item.getLastValue())).collect(Collectors.toList()); // 涓嶅垽瀹�
+                    if (CollectionUtils.isNotEmpty(collect2)) {
+                        sampleProductDto2.setInsResult(0);
+                        sampleProductDto2.setLastValue(collect2.get(0).getLastValue());
+                    } else if (CollectionUtils.isNotEmpty(collect3)) {
+                        sampleProductDto2.setInsResult(3);
+                    } else if (CollectionUtils.isNotEmpty(collect4)) {
+                        sampleProductDto2.setInsResult(1);
+                    } else {
+                        sampleProductDto2.setInsResult(null);
+                    }
+                    if (flag) {
+                        avg = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(next.getValue().size()), 4, RoundingMode.HALF_UP).doubleValue();
+                        if (avg == 0.0) {
+                            sampleProductDto2.setLastValue("");
+                        } else {
+                            sampleProductDto2.setLastValue(String.valueOf(avg));
+                        }
+                    }
+                    sampleProductDto2.setInspectionItem(next.getKey().split("@")[2]);
+                    sampleProductDto2.setInspectionItemSubclass(next.getKey().split("@")[1]);
+                    list.add(sampleProductDto2);
+                }
+                // 杩囨护鍑轰笉鍖呭惈涓烘澗濂楃涓斾笉涓哄厜绾ゆ帴澶存崯鑰楃殑鏁版嵁
+                List<SampleProductDto2> collect2 = SampleProductDto2S
+                        .stream()
+                        .filter(item -> !item.getInspectionItem().contains("鏉惧绠�") && !item.getInspectionItemSubclass()
+                                .contains("鏉惧绠�") && !item.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")).collect(Collectors.toList());
+                // 濡傛灉鏄厜绾ゆ帴澶存崯鑰� 涓�涓牱鍝佸彧鍙栧叾涓竴涓殑A绔�丅绔�佸钩鍧囧��
+                Map<String, List<SampleProductDto2>> fiberMap = SampleProductDto2S
+                        .stream()
+                        .filter(item -> item.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��"))
+                        .collect(Collectors.groupingBy(e -> e.getSampleCode() + e.getInspectionItem() + e.getInspectionItemSubclass()));
+                Iterator<Map.Entry<String, List<SampleProductDto2>>> iterator1 = fiberMap.entrySet().iterator();
+                while (iterator1.hasNext()) {
+                    Map.Entry<String, List<SampleProductDto2>> entry = iterator1.next();
+                    list.add(entry.getValue().get(0));
+                }
+                collect2.addAll(list);
+                SampleProductDto2S = collect2;
+//                SampleProductDto2S.sort(new CustomComparator(enumService));
+            }
+        }
+        for (SampleProductDto2 record : SampleProductDto2S) {
+            List<String> values = new ArrayList<>();
+            //鍏夌氦甯︾紪鍙蜂笉涓虹┖&&妫�楠岃繃绋嬪�间笉涓虹┖
+            if (StringUtils.isNotBlank(record.getCode()) && (StringUtils.isNotBlank(record.getInsValue()) || Objects.equals(record.getInsValue(), "[]"))) {
+                JSONArray insValueJsonArray = JSON.parseArray(record.getInsValue());
+                for (Object o : insValueJsonArray) {
+                    JSONObject insValue = JSON.parseObject(JSON.toJSONString(o));
+                    if (StringUtils.isNotBlank(insValue.get("v").toString())) {
+                        values.add(insValue.get("v").toString());
+                    }
+                }
+                record.setLastValue(String.join(",", values));
+            }
+        }
+        map.put("head", headList);
+        map.put("body", SampleProductDto2S);
+        return map;
+    }
+
+    @Override
+    public List<Map<String, Object>> viewDetails(Map<String, Object> map) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        String inspectionItem = map.get("inspectionItem").toString(); // 妫�楠岄」
+        if (inspectionItem.equals("鍗曟牴鍨傜洿鐕冪儳")) {
+            ArrayList<Integer> numbers = new ArrayList<>();
+            InsProduct insProduct = insProductMapper.selectById(Integer.parseInt(map.get("insProductId").toString()));
+            String[] split = insProduct.getTell().split(",");
+            Pattern pattern = Pattern.compile("-?\\d+");
+            Matcher matcher = pattern.matcher(split[1]);
+            while (matcher.find()) {
+                String numberStr = matcher.group();
+                numbers.add(Integer.parseInt(numberStr));
+            }
+            InsProductResult result = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
+                    .eq(InsProductResult::getInsProductId, Integer.parseInt(map.get("insProductId").toString())));
+
+
+            for (int i = 0; i < numbers.get(0); i++) {
+                HashMap<String, Object> map1 = new HashMap<>();
+                map1.put("entrustCode", map.get("entrustCode")); // 濮旀墭缂栧彿
+                map1.put("sampleCode", map.get("sampleCode")); // 鏍峰搧缂栧彿
+                map1.put("color", ""); // 濂楃
+                map1.put("inspectionItem", inspectionItem); // 妫�楠岄」
+                if (!Objects.isNull(result)) {
+                    List<Map> maps = JSONArray.parseArray(result.getInsValue(), Map.class);
+                    if (maps.size() - 1 < i) {
+                        map1.put("insValue", ""); // 妫�楠岀粨鏋�
+                    } else {
+                        map1.put("insValue", maps.get(i).get("v")); // 妫�楠岀粨鏋�
+                    }
+                }
+                list.add(map1);
+            }
+        } else if (inspectionItem.equals("鎶楁媺寮哄害")) {
+            InsProduct insProduct = insProductMapper.selectById(Integer.parseInt(map.get("insProductId").toString()));
+            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
+                    .eq(InsProductResult::getInsProductId, insProduct.getId()));
+            if(Objects.isNull(insProductResult)) {
+                return list;
+            }
+            List<Map<String, Object>> values = JSON.parseObject(insProductResult.getInsValue(), new TypeReference<List<Map<String, Object>>>() {
+            });
+            // 杩涜鎺掑簭 鏍规嵁鍧愭爣
+            values.sort((o1, o2) -> {
+                int i = Integer.parseInt(o1.get("r").toString());
+                int i1 = Integer.parseInt(o2.get("r").toString());
+                return Integer.compare(i,i1);
+            });
+            // 灏嗗緱鍒扮殑瀹藉害銆佸帤搴︺�佹楠屽�煎垎鍒繘琛屽瓨鍌�
+            Map<Object, List<Map<String, Object>>> group = values.stream().collect(Collectors.groupingBy(item -> item.get("r")));
+            Iterator<Map.Entry<Object, List<Map<String, Object>>>> iterator = group.entrySet().iterator();
+            List<String> widths = new ArrayList<>();
+            List<String> thickness = new ArrayList<>();
+            List<String> testValue = new ArrayList<>();
+            Integer count = 0;
+            while (iterator.hasNext()) {
+                Map.Entry<Object, List<Map<String, Object>>> entry = iterator.next();
+                List<Map<String, Object>> value = entry.getValue();
+                for(Map<String,Object> m : value) {
+                    if(count == 0) {
+                        widths.add(m.get("v").toString());
+                    }else if(count == 1) {
+                        thickness.add(m.get("v").toString());
+                    }else {
+                        testValue.add(m.get("v").toString());
+                    }
+                }
+                count++;
+            }
+            // 杩涜灏佽杩斿洖
+            // 鎵惧埌鏈�闀跨殑閭d釜闆嗗悎
+            List<Integer> list1 = Arrays.asList(widths.size(), thickness.size(), testValue.size());
+            list1.sort((a1, a2) -> {
+                return Integer.compare(a2,a1);
+            });
+            for (int i = 0; i < list1.get(0); i++) {
+                HashMap<String, Object> map1 = new HashMap<>();
+                map1.put("inspectionItem",insProduct.getInspectionItem()); // 妫�楠岄」
+                map1.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // 妫�楠屽瓙椤�
+                map1.put("width",""); // 瀹藉害
+                map1.put("thickness",""); // 鍘氬害
+                map1.put("testValue",""); // 妫�楠屽��
+                if(i < widths.size() ) {
+                    map1.put("width",widths.get(i));
+                }
+                if(i < thickness.size()) {
+                    map1.put("thickness",thickness.get(i));
+                }
+                if(i < testValue.size()) {
+                    map1.put("testValue",testValue.get(i));
+                }
+                list.add(map1);
+            }
+
+        } else if(inspectionItem.equals("鏂浼搁暱鐜�")) {
+            InsProduct insProduct = insProductMapper.selectById(Integer.parseInt(map.get("insProductId").toString()));
+            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
+                    .eq(InsProductResult::getInsProductId, insProduct.getId()));
+            if(Objects.isNull(insProductResult)) {
+                return list;
+            }
+            List<Map<String, Object>> values = JSON.parseObject(insProductResult.getInsValue(), new TypeReference<List<Map<String, Object>>>() {
+            });
+            HashMap<String, Object> map1 = new HashMap<>();
+            map1.put("inspectionItem",insProduct.getInspectionItem()); // 妫�椤归」
+            map1.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // 妫�椤瑰瓙椤�
+            ArrayList<Map<String, Object>> tableHeader = new ArrayList<>();
+            for (int i = 0; i < values.size(); i++) {
+                HashMap<String, Object> map2 = new HashMap<>();
+                map2.put("testValue" + i,values.get(i).get("v")); // 妫�椤瑰��  琛ㄥご
+                tableHeader.add(map2);
+                map1.put("testValue" + i,values.get(i).get("v"));
+            }
+            map1.put("tableHeader",tableHeader);
+            list.add(map1);
+        } else {
+            // 鏉惧绠� 杩囨护鍑烘楠岄」鍚嶇О涓�鑷寸殑鏁版嵁
+            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                            .eq(InsProduct::getInsSampleId, Integer.parseInt(map.get("insSampleId").toString())))
+                    .stream()
+                    .filter(item -> item.getInspectionItem().equals(inspectionItem))
+                    .collect(Collectors.toList());
+            for (InsProduct product : productList) {
+                HashMap<String, Object> map2 = new HashMap<>();
+                map2.put("entrustCode", map.get("entrustCode")); // 濮旀墭缂栧彿
+                map2.put("sampleCode", map.get("sampleCode")); // 鏍峰搧缂栧彿
+                map2.put("inspectionItem", product.getInspectionItem()); // 妫�楠岄」
+                map2.put("insValue", product.getLastValue()); // 妫�楠岀粨鏋�
+                // 鎷垮埌鐩稿簲鐨勫绠�
+                String color = "";
+                if (!Objects.isNull(product.getInsBushId())) {
+                    color = insBushingMapper.selectById(product.getInsBushId()).getColor(); // 濂楃
+                }
+                map2.put("color", color); // 濂楃棰滆壊
+//                InsProductResult result = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
+//                        .eq(InsProductResult::getInsProductId, product.getId()));
+//                if(!Objects.isNull(result)) {
+//                    List<Map> maps = JSONArray.parseArray(result.getInsValue(), Map.class);
+//                    map2.put("insValue",maps.get(0).get("v").toString()); // 妫�楠岀粨鏋�
+//                }
+                list.add(map2);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 瀵煎嚭宸叉濮旀墭鍗�
+     *
+     * @param data
+     * @param response
+     */
+    @Override
+    public void exportChecked(Map<String, Object> data, HttpServletResponse response) {
+//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        Integer userId = Integer.valueOf(String.valueOf(SecurityUtils.getLoginUser().getUserId()));
+        User user = userMapper.selectById(userId);
+        List<String> names = null;
+        String startTime = "";
+        String endTime = "";
+        if (data.containsKey("startTime")) {
+            startTime = data.get("startTime").toString() + " 00:00:00";
+        }
+        if (data.containsKey("endTime")) {
+            endTime = data.get("endTime").toString() + " 23:59:59";
+        }
+        List<ExcelChecked> list = new ArrayList<>();
+
+        // 濡傛灉鏄娴嬩腑蹇冧汉鍛樺彲浠ュ鍏ユ墍鏈夊鎴蜂笅鐨勫崟 锛� 濡傛灉鏄鎴凤紝鍙互瀵煎嚭璇ュ崟浣嶆墍鏈夌殑鍗�
+        if (user.getIsCustom().equals(0)) {
+            names = new ArrayList<>();
+        } else {
+            String company = user.getCompany();
+            List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
+                    .eq(User::getCompany, company)
+                    .eq(User::getIsCustom, 1)
+                    .eq(User::getStatus, 0));
+            if (CollectionUtils.isNotEmpty(users)) {
+                names = users.stream().map(item -> item.getName()).collect(Collectors.toList());
+            }
+        }
+        //鎬荤殑妫�楠岀粨鏋�
+        List<ExportInsProductVO> exportInsProductVOS = insOrderMapper.exportChecked(names, startTime, endTime);
+        //鎺掗櫎鍏夌氦甯﹀嚑浣曞弬鏁�(灏哄鍙傛暟)锛屾俯搴﹀惊鐜殑妫�楠岀粨鏋�
+//        List<ExcelChecked> excelCheckeds = exportInsProductVOS.stream().map(e -> {
+//            ExcelChecked excelChecked = new ExcelChecked();
+//            BeanUtil.copyProperties(e, excelChecked);
+//            return excelChecked;
+//        }).collect(Collectors.toList());
+        // 鎺掗櫎鍏夌氦甯﹀嚑浣曞弬鏁�(灏哄鍙傛暟)锛屾俯搴﹀惊鐜殑妫�楠岀粨鏋�
+        List<ExportInsProductVO> excelCheckeds = exportInsProductVOS.stream().filter(e -> !e.getInspectionItem().equals("娓╁害寰幆")
+                        && !(NumberUtil.isInteger(e.getInspectionItem()) && Objects.nonNull(e.getSpecialItemParentId()))
+                        && !(e.getInspectionItem().equals("灏哄鍙傛暟")
+                        && e.getSampleType().equals("鍏夌氦甯�")))
+                .collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(excelCheckeds)) {
+            for (ExportInsProductVO a : excelCheckeds) {
+                ExcelChecked excelChecked = new ExcelChecked();
+                BeanUtil.copyProperties(a, excelChecked);
+                list.add(excelChecked);
+            }
+        }
+        //杩囨护鍑哄厜绾ゅ甫鍑犱綍鍙傛暟鐨勬楠岀粨鏋�
+        List<ExportInsProductVO> sizeParameter = exportInsProductVOS.stream().filter(e ->
+                        e.getInspectionItem().equals("灏哄鍙傛暟")
+                                && e.getSampleType().equals("鍏夌氦甯�"))
+                .collect(Collectors.toList());
+        List<FiberRibboGeometricalParameterExcelData> fiberList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(sizeParameter)) {
+            // 鏍规嵁濮旀墭鍗曞彿銆佹牱鍝佺紪鍙枫�佸绠°�佸厜绾ゅ甫缂栧彿杩涜鍒嗙粍
+            Map<String, List<ExportInsProductVO>> groupData = sizeParameter.stream().sorted(Comparator.comparing(ExportInsProductVO::getSampleCode))
+                    .collect(Collectors.toMap(e ->
+                                    e.getEntrustCode() + '@' + e.getSampleCode() + '@' + e.getBushColor() + '@' + e.getCode(),
+                            Collections::singletonList,
+                            (left, right) -> {
+                                ArrayList<ExportInsProductVO> list1 = new ArrayList<>(left);
+                                list1.addAll(right);
+                                return list1;
+                            },
+                            TreeMap::new));
+            Iterator<Map.Entry<String, List<ExportInsProductVO>>> iterator = groupData.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<String, List<ExportInsProductVO>> entry = iterator.next();
+                FiberRibboGeometricalParameterExcelData fiber = new FiberRibboGeometricalParameterExcelData();
+                ExportInsProductVO exportInsProductVO = entry.getValue().get(0);
+                fiber.setEntrustCode(exportInsProductVO.getEntrustCode()); // 濮旀墭鍗曞彿
+                fiber.setSampleCode(exportInsProductVO.getSampleCode()); // 鏍峰搧缂栧彿
+                fiber.setBushColor(exportInsProductVO.getBushColor()); // 濂楃鑹叉爣
+                fiber.setCode(exportInsProductVO.getCode()); // 鍏夌氦甯︾紪鍙�
+                fiber.setInspectionItemType("鍏夌氦鍑犱綍鍙傛暟"); // 妫�楠岄」
+                fiber.setInspector(exportInsProductVO.getCheckName()); // 妫�楠屼汉
+
+                for (ExportInsProductVO a : entry.getValue()) {
+                    if (Objects.isNull(fiber.getInsTime())) {
+                        if (Objects.nonNull(a.getCheckTime())) {
+                            String format = a.getCheckTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                            fiber.setInsTime(LocalDate.parse(format)); // 妫�楠屾椂闂�
+                        }
+                    }
+                    switch (a.getInspectionItemSubclass()) {
+                        case "瀹藉害":
+                            List<Map> maps1 = getInsValueList(a.getInsValue());
+                            if (CollectionUtils.isNotEmpty(maps1)) {
+                                if (maps1.size() >= 2) {
+                                    fiber.setWidthA(maps1.get(0).get("v").toString());
+                                    fiber.setWidthB(maps1.get(1).get("v").toString());
+                                } else {
+                                    fiber.setWidthA(maps1.get(0).get("v").toString());
+                                }
+                            }
+                            break;
+                        case "鍘氬害":
+                            List<Map> maps2 = getInsValueList(a.getInsValue());
+                            if (CollectionUtils.isNotEmpty(maps2)) {
+                                if (maps2.size() >= 2) {
+                                    fiber.setThicknessA(maps2.get(0).get("v").toString());
+                                    fiber.setThicknessB(maps2.get(1).get("v").toString());
+                                } else {
+                                    fiber.setThicknessA(maps2.get(0).get("v").toString());
+                                }
+                            }
+                            break;
+                        case "鐩搁偦鍏夌氦姘村钩闂磋窛":
+                            List<Map> maps3 = getInsValueList(a.getInsValue());
+                            if (CollectionUtils.isNotEmpty(maps3)) {
+                                if (maps3.size() >= 2) {
+                                    fiber.setAdjacentSpacingA(maps3.get(0).get("v").toString());
+                                    fiber.setAdjacentSpacingB(maps3.get(1).get("v").toString());
+                                } else {
+                                    fiber.setAdjacentSpacingA(maps3.get(0).get("v").toString());
+                                }
+                            }
+                            break;
+                        case "涓や晶鍏夌氦姘村钩闂磋窛":
+                            List<Map> maps4 = getInsValueList(a.getInsValue());
+                            if (CollectionUtils.isNotEmpty(maps4)) {
+                                if (maps4.size() >= 2) {
+                                    fiber.setSideSpacingA(maps4.get(0).get("v").toString());
+                                    fiber.setSideSpacingB(maps4.get(1).get("v").toString());
+                                } else {
+                                    fiber.setSideSpacingA(maps4.get(0).get("v").toString());
+                                }
+                            }
+                            break;
+                        case "骞虫暣搴�":
+                            List<Map> maps5 = getInsValueList(a.getInsValue());
+                            if (CollectionUtils.isNotEmpty(maps5)) {
+                                if (maps5.size() >= 2) {
+                                    fiber.setEvennessA(maps5.get(0).get("v").toString());
+                                    fiber.setEvennessB(maps5.get(1).get("v").toString());
+                                } else {
+                                    fiber.setEvennessA(maps5.get(0).get("v").toString());
+                                }
+                            }
+                            break;
+                    }
+                }
+                fiberList.add(fiber);
+            }
+        }
+
+        //杩囨护鍑烘俯搴﹀惊鐜�
+        List<ExportInsProductVO> temperatureCycling = exportInsProductVOS.stream().filter(e ->
+                        NumberUtil.isInteger(e.getInspectionItem()) && Objects.nonNull(e.getSpecialItemParentId()) && e.getSonLaboratory().equals("鍏夌氦璇曢獙瀹�"))
+                .collect(Collectors.toList());
+
+        List<TemperatureCycling> temperatureCyclingList = getTemList(temperatureCycling);
+        try {
+            String fileName = URLEncoder.encode("宸叉濮旀墭鍗�", "UTF-8");
+            response.setContentType("application/vnd.ms-excel");
+            response.setCharacterEncoding("UTF-8");
+            response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
+            HorizontalCellStyleStrategy arveStyleStrategy = EasyExcelUtils.getStyleStrategy();
+            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(arveStyleStrategy).build();
+            WriteSheet build = EasyExcel.writerSheet().sheetName("Sheet1").head(ExcelChecked.class).build();
+            excelWriter.write(list, build);
+            if (CollectionUtils.isNotEmpty(fiberList)) {
+                WriteSheet build1 = EasyExcel.writerSheet().sheetName("鍏夌氦鍑犱綍鍙傛暟").head(FiberRibboGeometricalParameterExcelData.class).build();
+                excelWriter.write(fiberList, build1);
+            }
+            if (CollectionUtils.isNotEmpty(temperatureCycling)) {
+                WriteSheet build2 = EasyExcel.writerSheet().sheetName("娓╁害寰幆").head(TemperatureCycling.class).build();
+                excelWriter.write(temperatureCyclingList, build2);
+            }
+            excelWriter.finish();
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("瀵煎嚭澶辫触" + e.getMessage());
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getInsOrderTemList(Map<String, Object> data) {
+        String entrustCode = data.get("entrustCode").toString();
+        Integer createUser = null;
+        String name= "";
+        if (StringUtils.isNotBlank(data.get("createUser").toString())) {
+            createUser = Integer.parseInt(data.get("createUser").toString());
+//            name = userMapper.selectByCreaterUser(createUser);
+        }
+        String sampleCode = data.get("sampleCode").toString();
+        String startTime = "";
+        String endTime = "";
+        List<Map<String, Object>> maps = new ArrayList<>();
+        ObjectMapper objectMapper = new ObjectMapper();
+        try {
+            if (StringUtils.isNotBlank(data.get("insTime").toString()) && !Objects.isNull(data.get("insTime"))) {
+                List insTime = objectMapper.readValue(JSONUtil.toJsonStr(data.get("insTime")), List.class);
+                startTime = insTime.get(0).toString();
+                endTime = insTime.get(1).toString();
+            }
+            List<ExportInsProductVO> insOrderTemList = insOrderMapper.getInsOrderTemList(entrustCode, sampleCode, startTime, endTime,name);
+            List<TemperatureCycling> temList = getTemList(insOrderTemList);;
+//            if (StringUtils.isEmpty(name)) {
+//                temList = getTemList(insOrderTemList);
+//            } else {
+//                temList = getTemList(insOrderTemList).stream()
+//                        .filter(tl -> name.equals(tl.getCheckName()))
+//                        .collect(Collectors.toList());
+//            }
+            maps = new ArrayList<>(temList.size());
+            for (TemperatureCycling map : temList) {
+                Map<String, Object> resultMap = new HashMap<>();
+                resultMap.put("entrustCode", map.getEntrustCode()); //濮旀墭鍗曞彿
+                resultMap.put("sampleCode", map.getSampleCode()); //鏍峰搧缂栧彿
+                resultMap.put("bushing", map.getBushColor()); //濂楃
+                resultMap.put("fiber", map.getColor()); //鍏夌氦
+                resultMap.put("fibers", map.getCode()); //鍏夌氦甯�
+                resultMap.put("userName", map.getCheckName()); //妫�楠屼汉
+                resultMap.put("insTime", map.getInsTime()); //妫�娴嬫椂闂�
+                resultMap.put("sendTime", map.getSendTime()); //涓嬪彂鏃堕棿
+//                resultMap.put("inspectionItem", map.getSample()); //妫�楠岄」鐩�
+                //娓╁害寰幆瀛愰」
+                resultMap.put("inspectionItems", map.getInspectionItem());
+                resultMap.put("inspectionItemSubclass", map.getInspectionItemSubclass());
+                resultMap.put("attenuationCoefficient1310", map.getAttenuationCoefficient1310());
+                resultMap.put("attenuationDifference1", map.getAttenuationDifference1());
+                resultMap.put("attenuationCoefficient1550", map.getAttenuationCoefficient1550());
+                resultMap.put("attenuationDifference2", map.getAttenuationDifference2());
+                resultMap.put("attenuationCoefficient1625", map.getAttenuationCoefficient1625());
+                resultMap.put("attenuationDifference3", map.getAttenuationDifference3());
+                resultMap.put("attenuationCoefficient1383", map.getAttenuationCoefficient1383());
+                resultMap.put("attenuationDifference4", map.getAttenuationDifference4());
+                resultMap.put("attenuationCoefficient1490", map.getAttenuationCoefficient1490());
+                resultMap.put("attenuationDifference5", map.getAttenuationDifference5());
+                resultMap.put("attenuationDifferenceMax", map.getAttenuationDifferenceMax());
+                resultMap.put("insResult", map.getInsResult());
+                maps.add(resultMap);
+            }
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+        return maps;
+    }
+
+    @Override
+    public Map<String,Object> permute(Integer num,Boolean isValue) {
+        HashMap<String, Object> map = new HashMap<>();
+        ArrayList<Integer> integers = new ArrayList<>();
+        for (int i = 1; i <= num; i++) { // 浣跨敤杈冨皬鐨勬暟瀛楄寖鍥磋繘琛屾祴璇�
+            integers.add(i);
+        }
+        List<List<Integer>> result = permutes(integers);
+        if(isValue) {
+            map.put("resultData",result);
+        }else {
+            map.put("resultData",result.size());
+        }
+        return map;
+    }
+
+    private static List<List<Integer>> permutes(List<Integer> nums) {
+        List<List<Integer>> result = new ArrayList<>();
+        backtrack(new ArrayList<>(), nums, result);
+        return result;
+    }
+
+    private static void backtrack(List<Integer> temp, List<Integer> nums, List<List<Integer>> result) {
+        if (temp.size() == 2) {
+            result.add(new ArrayList<>(temp)); // 娣诲姞褰撳墠缁勫悎鍒扮粨鏋滃垪琛�
+            return;
+        }
+
+        for (int i = 0; i < nums.size(); i++) {
+            // 瑙勫畾椤哄簭锛岄伩鍏嶉噸澶嶇粍鍚�
+            if (temp.size() > 0 && nums.get(i) < temp.get(temp.size() - 1)) continue;
+            temp.add(nums.get(i)); // 娣诲姞褰撳墠鏁板瓧鍒颁复鏃剁粍鍚�
+            backtrack(temp, nums, result); // 閫掑綊璋冪敤
+            temp.remove(temp.size() - 1); // 鎭㈠鐘舵��
+        }
+    }
+
+    public List<TemperatureCycling> getTemList(List<ExportInsProductVO> temperatureCycling) {
+        List<TemperatureCycling> temperatureCyclingList = new ArrayList<>();
+        List<TemperatureCycling> newTemperatureCyclingList = new ArrayList<>(); // 杩斿洖鐨勬俯搴﹀惊鐜暟鎹�
+        if (CollectionUtils.isNotEmpty(temperatureCycling)) {
+            // 鏍规嵁濮旀墭鍗曞彿銆佹牱鍝佺紪鍙枫�佸绠°�佸厜绾胯壊鏍囥�佸惊鐜殑娆℃暟杩涜鍒嗙粍
+            List<ExportInsProductVO> collect = temperatureCycling.stream()
+                    .sorted(Comparator.comparing(ExportInsProductVO::getInspectionItem)).collect(Collectors.toList());
+            Map<String, List<ExportInsProductVO>> temperatureGroup = collect.stream()
+                    .sorted(Comparator.comparing(t -> getInspectionItemSubclassOrder(t.getInspectionItemSubclass()))).collect(Collectors.groupingBy(e ->
+                                    e.getEntrustCode() + "@" + e.getSampleCode() + "@" + e.getBushColor() + "@" + e.getColor() + "@" + e.getInspectionItem() + "@" + e.getInspectionItemSubclass(),
+                            TreeMap::new,
+                            Collectors.toList()));
+            // 鑾峰彇20鈩冪殑鏁版嵁 鏉ヨ繘琛屽樊鍊肩殑杩愮畻 鍙幏鍙栫涓�娆$殑20鈩冨父娓╃殑鏁版嵁,鏍规嵁鍗曞彿銆佹牱鍝佺紪鍙峰ソ銆佸绠″拰鍏夌氦鏉ワ紙浼氬瓨鍦ㄥ涓崟瀛愬涓牱鍝侊級
+            Map<String, BigDecimal> map = new HashMap<>();
+            for (ExportInsProductVO a : collect) {
+                if (a.getInspectionItem().equals("1") && a.getInspectionItemSubclass().equals("20鈩�(甯告俯)")) {
+                    switch (a.getInspectionItemClass()) {
+                        case "1310nm":
+                            List<Map> insValue = getInsValueList(a.getComValue());
+                            BigDecimal decay1310 = BigDecimal.ZERO;
+                            if (CollectionUtils.isNotEmpty(insValue)) {
+                                decay1310 = new BigDecimal(isNumber(insValue.get(0).get("v").toString()));
+
+                            }
+                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1310);
+                            break;
+                        case "1550nm":
+                            List<Map> insValue1 = getInsValueList(a.getComValue());
+                            BigDecimal decay1550 = BigDecimal.ZERO;
+                            if (CollectionUtils.isNotEmpty(insValue1)) {
+                                decay1550 = new BigDecimal(isNumber(insValue1.get(0).get("v").toString()));
+                            }
+                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1550);
+                            break;
+                        case "1625nm":
+                            List<Map> insValue2 = getInsValueList(a.getComValue());
+                            BigDecimal decay1625 = BigDecimal.ZERO;
+                            if (CollectionUtils.isNotEmpty(insValue2)) {
+                                decay1625 = new BigDecimal(isNumber(insValue2.get(0).get("v").toString()));
+                            }
+                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1625);
+                            break;
+                        case "1383nm":
+                            List<Map> insValue3 = getInsValueList(a.getComValue());
+                            BigDecimal decay1383 = BigDecimal.ZERO;
+                            if (CollectionUtils.isNotEmpty(insValue3)) {
+                                decay1383 = new BigDecimal(isNumber(insValue3.get(0).get("v").toString()));
+                            }
+                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1383);
+                            break;
+                        case "1490nm":
+                            List<Map> insValue4 = getInsValueList(a.getComValue());
+                            BigDecimal decay1490 = BigDecimal.ZERO;
+                            if (CollectionUtils.isNotEmpty(insValue4)) {
+                                decay1490 = new BigDecimal(isNumber(insValue4.get(0).get("v").toString()));
+                            }
+                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1490);
+                            break;
+                    }
+                }
+            }
+
+            // 鏍规嵁濮旀墭缂栧彿銆佹牱鍝佺紪鍙枫�佸惊鐜鏁般�佹俯搴︾偣杩涜鍒嗙粍
+            Map<String, List<ExportInsProductVO>> collect1 = temperatureCycling.stream()
+                    .collect(Collectors.groupingBy(e -> e.getEntrustCode() + "@" + e.getSampleCode() + "@" + e.getInspectionItem() + "@" + e.getInspectionItemSubclass()));
+
+
+            // 灏嗗樊鍊间繚瀛�
+            Map<String, List<BigDecimal>> map1 = new HashMap<>();
+            Set<String> strings = new HashSet<>();
+            Iterator<Map.Entry<String, List<ExportInsProductVO>>> iterator1 = collect1.entrySet().iterator();
+            while (iterator1.hasNext()) {
+                Map.Entry<String, List<ExportInsProductVO>> entry = iterator1.next();
+                for (ExportInsProductVO a : entry.getValue()) {
+                    // 灏嗗緱鍒扮殑琛板噺绯绘暟淇濆瓨 鍚庨潰瑕佺敤鍒�
+                    strings.add(a.getInspectionItemClass());
+                    switch (a.getInspectionItemClass()) {
+                        case "1310nm":
+                        case "1490nm":
+                        case "1383nm":
+                        case "1550nm":
+                        case "1625nm":
+                            List<Map> insValue = getInsValueList(a.getComValue());
+                            if (CollectionUtils.isNotEmpty(insValue)) {
+                                ArrayList<BigDecimal> bigDecimals = new ArrayList<>();
+                                BigDecimal bigDecimal = new BigDecimal(isNumber(insValue.get(0).get("v").toString()));// 褰撳墠琛板噺鍊�
+                                BigDecimal bigDecimal1 = map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass());// 20鈩冪殑琛板噺鍊�
+                                BigDecimal v = bigDecimal.subtract(bigDecimal1);
+                                bigDecimals.add(v.abs());
+                                if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass())) {
+                                    map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass()).addAll(bigDecimals);
+                                } else {
+                                    map1.put(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass(), bigDecimals);
+                                }
+                            } else {
+                                if (!map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass())) {
+                                    map1.put(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass(), new ArrayList<>());
+                                }
+                            }
+                            break;
+                    }
+                }
+            }
+
+
+            Iterator<Map.Entry<String, List<ExportInsProductVO>>> iterator = temperatureGroup.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<String, List<ExportInsProductVO>> entry = iterator.next();
+                TemperatureCycling temperature = new TemperatureCycling();
+                for (ExportInsProductVO a : entry.getValue()) {
+                    BeanUtils.copyProperties(a, temperature);
+                    // 鏃堕棿鏍煎紡鍖�
+                    if (Objects.nonNull(a.getCheckTime())) {
+                        String format = a.getCheckTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                        LocalDate parse = LocalDate.parse(format);
+                        temperature.setInsTime(parse);
+                    }
+                    // 琛板噺绯绘暟鑾峰彇璁$畻鍊�
+                    List<Map> insValue = getInsValueList(a.getComValue());
+                    if (CollectionUtils.isNotEmpty(insValue)) {
+                        switch (a.getInspectionItemClass()) {
+                            case "1310nm":
+                                temperature.setAttenuationCoefficient1310(isNumber(insValue.get(0).get("v").toString()));
+                                // 20鈩�(甯告俯)鐨勬槸娌℃湁宸�肩殑
+                                if (!a.getInspectionItemSubclass().contains("20鈩�(甯告俯)")) {
+                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
+                                    String attenuationDifference = v.abs().toString();
+                                    temperature.setAttenuationDifference1(attenuationDifference);
+                                }
+                                break;
+                            case "1550nm":
+                                temperature.setAttenuationCoefficient1550(isNumber(insValue.get(0).get("v").toString()));
+                                // 20鈩�(甯告俯)鐨勬槸娌℃湁宸�肩殑
+                                if (!a.getInspectionItemSubclass().contains("20鈩�(甯告俯)")) {
+                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
+                                    String attenuationDifference = v.abs().toString();
+                                    temperature.setAttenuationDifference2(attenuationDifference);
+                                }
+                                break;
+                            case "1625nm":
+                                temperature.setAttenuationCoefficient1625(isNumber(insValue.get(0).get("v").toString()));
+                                // 20鈩�(甯告俯)鐨勬槸娌℃湁宸�肩殑
+                                if (!a.getInspectionItemSubclass().contains("20鈩�(甯告俯)")) {
+                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
+                                    String attenuationDifference = v.abs().toString();
+                                    temperature.setAttenuationDifference3(attenuationDifference);
+                                }
+                                break;
+                            case "1383nm":
+                                temperature.setAttenuationCoefficient1383(isNumber(insValue.get(0).get("v").toString()));
+                                // 20鈩�(甯告俯)鐨勬槸娌℃湁宸�肩殑
+                                if (!a.getInspectionItemSubclass().contains("20鈩�(甯告俯)")) {
+                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
+                                    String attenuationDifference = v.abs().toString();
+                                    temperature.setAttenuationDifference4(attenuationDifference);
+                                }
+                                break;
+                            case "1490nm":
+                                temperature.setAttenuationCoefficient1490(isNumber(insValue.get(0).get("v").toString()));
+                                // 20鈩�(甯告俯)鐨勬槸娌℃湁宸�肩殑
+                                if (!a.getInspectionItemSubclass().contains("20鈩�(甯告俯)")) {
+                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
+                                    String attenuationDifference = v.abs().toString();
+                                    temperature.setAttenuationDifference5(attenuationDifference);
+                                }
+                                break;
+                        }
+                        // 杩涜琛板噺宸�肩殑鏈�澶у�艰祴鍊�
+                        StringBuffer value = new StringBuffer();
+                        if (strings.contains("1310nm")) {
+                            BigDecimal bigDecimal = BigDecimal.ZERO;
+                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1310nm")) {
+                                bigDecimal = Optional.ofNullable(map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1310nm"))
+                                        .orElse(Collections.emptyList()) // 濡傛灉鍊间负 null锛岃繑鍥炵┖鍒楄〃
+                                        .stream()
+                                        .sorted(Comparator.reverseOrder()) // 闄嶅簭鎺掑簭
+                                        .findFirst() // 鑾峰彇绗竴涓厓绱狅紙鏈�澶у�硷級
+                                        .orElse(BigDecimal.ZERO); // 濡傛灉鍒楄〃涓虹┖锛岃繑鍥為粯璁ゅ�硷紙渚嬪 BigDecimal.ZERO锛�
+                            }
+                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
+                                value.append("|鈭喩憒1310nm max").append(bigDecimal.abs()).append("dB/km");
+                            }
+                        }
+                        if (strings.contains("1550nm")) {
+                            BigDecimal bigDecimal = BigDecimal.ZERO;
+                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1550nm")) {
+                                List<BigDecimal> valuesList = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1550nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
+                                bigDecimal = valuesList.isEmpty() ? BigDecimal.ZERO : valuesList.get(0);
+                            }
+                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
+                                value.append("|鈭喩憒1550nm max").append(bigDecimal.abs()).append("dB/km");
+                            }
+                        }
+                        if (strings.contains("1625nm")) {
+                            BigDecimal bigDecimal = BigDecimal.ZERO;
+                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1625nm")) {
+                                bigDecimal = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1625nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).get(0);
+                            }
+                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
+                                value.append("|鈭喩憒1625nm max").append(bigDecimal.abs()).append("dB/km");
+                            }
+                        }
+
+                        if (strings.contains("1383nm")) {
+                            BigDecimal bigDecimal = BigDecimal.ZERO;
+                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1383nm")) {
+                                bigDecimal = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1383nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).get(0);
+                            }
+                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
+                                value.append("|鈭喩憒1383nm max").append(bigDecimal.abs()).append("dB/km");
+                            }
+                        }
+
+                        if (strings.contains("1490nm")) {
+                            BigDecimal bigDecimal = BigDecimal.ZERO;
+                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1490nm")) {
+                                bigDecimal = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1490nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).get(0);
+                            }
+                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
+                                value.append("|鈭喩憒1490nm max").append(bigDecimal.abs()).append("dB/km");
+                            }
+                        }
+                        if (StringUtils.isNotEmpty(value.toString())) {
+                            value.insert(0, a.getInspectionItemSubclass() + " ");
+                        }
+                        temperature.setAttenuationDifferenceMax(value.toString());
+                    }
+                    temperatureCyclingList.add(temperature);
+                }
+            }
+        }
+        temperatureCyclingList = temperatureCyclingList.stream().distinct().collect(Collectors.toList());
+        //鏌ヨ鍏ㄨ壊璋憋紝杩囨护鑹叉爣骞舵帓搴�
+        List<String> colorList = dictTypeService.selectDictDataByType("color_type").stream()
+                .sorted(Comparator.comparing(SysDictData::getDictSort))
+                .map(SysDictData::getDictLabel)
+                .collect(Collectors.toList());
+        Map<String, List<TemperatureCycling>> collect = temperatureCyclingList.stream().collect(Collectors.groupingBy(TemperatureCycling::getEntrustCode));
+        Iterator<Map.Entry<String, List<TemperatureCycling>>> iterator = collect.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, List<TemperatureCycling>> entry = iterator.next();
+            //娓╁害寰幆鏍规嵁鑹叉爣鎺掑簭
+            entry.getValue().sort((o1, o2) -> {
+                //鏍规嵁濂楃鑹叉爣浠ュ強鍏夌氦鑹叉爣鎺掑簭
+                if (StringUtils.isNotBlank(o1.getBushColor()) && StringUtils.isNotBlank(o2.getBushColor())) {
+                    //鍏堟寜鏍峰搧缂栧彿鍗囧簭
+                    if (!Objects.equals(o1.getSampleCode(), o2.getSampleCode())) {
+                        if (containsOnlyDigits(o1.getSampleCode()) && containsOnlyDigits(o2.getSampleCode())) {
+                            Long o1Num = Long.parseLong(o1.getSampleCode());
+                            Long o2Num = Long.parseLong(o2.getSampleCode());
+                            return o1Num.compareTo(o2Num);
+                        }
+                        return o1.getSampleCode().compareTo(o2.getSampleCode());
+                    }
+                    //寰幆娆℃暟鎺掑簭
+                    if (StringUtils.isNotBlank(o1.getInspectionItem()) && StringUtils.isNotBlank(o2.getInspectionItem())) {
+                        if (!Objects.equals(o1.getInspectionItem(), o2.getInspectionItem())) {
+                            Integer o1Index = Integer.parseInt(o1.getInspectionItem());
+                            Integer o2Index = Integer.parseInt(o2.getInspectionItem());
+                            return o1Index.compareTo(o2Index);
+                        }
+                    }
+                    //濂楃鑹叉爣鎺掑簭
+                    if (!Objects.equals(o1.getBushColor(), o2.getBushColor())) {
+                        Integer o1Index = colorList.indexOf(o1.getBushColor());
+                        Integer o2Index = colorList.indexOf(o2.getBushColor());
+                        return o1Index.compareTo(o2Index);
+                    }
+                    //鍏夌氦甯︽帓搴�
+                    if (StringUtils.isNotBlank(o1.getCode()) && StringUtils.isNotBlank(o2.getCode())) {
+                        if (!Objects.equals(o1.getCode(), o2.getCode())) {
+                            return o1.getCode().compareTo(o2.getCode());
+                        }
+                    }
+                    //鍏夌氦鑹叉爣鎺掑簭
+                    if (StringUtils.isNotBlank(o1.getColor()) && StringUtils.isNotBlank(o2.getColor())) {
+                        if (!Objects.equals(o1.getColor(), o2.getColor())) {
+                            Integer o1Index = colorList.indexOf(o1.getColor());
+                            Integer o2Index = colorList.indexOf(o2.getColor());
+                            return o1Index.compareTo(o2Index);
+                        }
+                    }
+                }
+                return 0;
+            });
+            newTemperatureCyclingList.addAll(entry.getValue());
+        }
+        //娓╁害寰幆鏍规嵁鑹叉爣鎺掑簭
+//        temperatureCyclingList.sort((o1, o2) -> {
+//            // 澶勭悊 null 鍊�
+//            if (o1 == null && o2 == null) return 0;
+//            if (o1 == null) return -1;
+//            if (o2 == null) return 1;
+//
+//            // ---------------------- 1. 鎸夋牱鍝佺紪鍙锋帓搴� ----------------------
+//            int sampleCodeCompare = compareSampleCode(o1.getSampleCode(), o2.getSampleCode());
+//            if (sampleCodeCompare != 0) return sampleCodeCompare;
+//
+//            // ---------------------- 2. 鎸夊绠¤壊鏍囨帓搴� ----------------------
+//            int bushColorCompare = compareColor(o1.getBushColor(), o2.getBushColor(), colorList);
+//            if (bushColorCompare != 0) return bushColorCompare;
+//
+//            // ---------------------- 3. 鎸夊厜绾ゅ甫鎺掑簭 ----------------------
+//            int codeCompare = compareNullableString(o1.getCode(), o2.getCode());
+//            if (codeCompare != 0) return codeCompare;
+//
+//            // ---------------------- 4. 鎸夊厜绾よ壊鏍囨帓搴� ----------------------
+//            return compareColor(o1.getColor(), o2.getColor(), colorList);
+//        });
+        return newTemperatureCyclingList;
+    }
+
+    //1: 鏍峰搧缂栧彿姣旇緝锛堟敮鎸佹暟瀛楀拰瀛楃涓叉贩鍚堟帓搴忥級
+    private static int compareSampleCode(String code1, String code2) {
+        if (Objects.equals(code1, code2)) return 0;
+
+        boolean isCode1Numeric = containsOnlyDigits(code1);
+        boolean isCode2Numeric = containsOnlyDigits(code2);
+
+        // 濡傛灉閮芥槸鏁板瓧锛岃浆涓� Long 姣旇緝
+        if (isCode1Numeric && isCode2Numeric) {
+            return Long.compare(Long.parseLong(code1), Long.parseLong(code2));
+        }
+
+        // 濡傛灉涓�涓槸鏁板瓧锛屽彟涓�涓笉鏄紝鏁板瓧浼樺厛
+        if (isCode1Numeric != isCode2Numeric) {
+            return isCode1Numeric ? -1 : 1;
+        }
+
+        // 鍏朵粬鎯呭喌鎸夊瓧绗︿覆姣旇緝
+        return code1.compareTo(code2);
+    }
+
+    //2: 鑹叉爣姣旇緝锛堝鐞嗕笉鍦� colorList 涓殑鎯呭喌锛�
+    private static int compareColor(String color1, String color2, List<String> colorList) {
+        if (Objects.equals(color1, color2)) return 0;
+
+        // 澶勭悊 colorList 涓殑绱㈠紩
+        int index1 = colorList.indexOf(color1);
+        int index2 = colorList.indexOf(color2);
+
+        // 灏嗕笉鍦ㄥ垪琛ㄤ腑鐨勮壊鏍囩粺涓�鎺掑簭鍒版渶鍚庯紙璧嬩簣鏈�澶у�硷級
+        index1 = index1 == -1 ? Integer.MAX_VALUE : index1;
+        index2 = index2 == -1 ? Integer.MAX_VALUE : index2;
+
+        return Integer.compare(index1, index2);
+    }
+
+    //3: 澶勭悊鍙兘涓虹┖鐨勫瓧绗︿覆姣旇緝
+    private static int compareNullableString(String str1, String str2) {
+        if (Objects.equals(str1, str2)) return 0;
+
+        // 绌哄瓧绗︿覆瑙嗕负杈冨皬鍊�
+        boolean isStr1Blank = StringUtils.isBlank(str1);
+        boolean isStr2Blank = StringUtils.isBlank(str2);
+
+        if (isStr1Blank && isStr2Blank) return 0;
+        if (isStr1Blank) return -1;
+        if (isStr2Blank) return 1;
+
+        // 闈炵┖鏃舵寜鑷劧椤哄簭姣旇緝
+        return str1.compareTo(str2);
+    }
+
+    public List<Map> getInsValueList(String insValue) {
+        List<Map> list = new ArrayList<>();
+        if (StringUtils.isNotBlank(insValue)) {
+            List<Map> maps = JSONArray.parseArray(insValue, Map.class);
+            list.addAll(maps);
+        }
+        return list;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鍙互杞暟瀛�
+     */
+    public String isNumber(String str) {
+        if (NumberUtil.isDouble(str)) {
+            return str;
+        } else {
+            return "0";
+        }
+    }
+
+    /**
+     * 鎺掑簭瑙勬牸
+     *
+     * @param t
+     * @return
+     */
+    public Integer getInspectionItemSubclassOrder(String t) {
+        switch (t) {
+            case "20鈩�(甯告俯)":
+                return 1;
+            case "20鈩�":
+                return 2;
+            case "-40鈩�":
+                return 3;
+            case "65鈩�":
+                return 4;
+            default:
+                return 5; // 鏈煡娓╁害鐐�
+        }
+    }
+
+
+    @Override
+    public Map<String, Object> costStatistics(IPage<CostStatisticsDto> page, CostStatisticsDto costStatisticsDto) {
+        String dates = costStatisticsDto.getDates();
+        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
+        costStatisticsDto.setDates(null);
+        Map<String, Object> map = new HashMap<>();
+//        map.put("head", PrintChina.printChina(CostStatisticsDto.class));
+        Map<String, Integer> map1 = new HashMap<>();
+        if (map1.get("look") == 1) costStatisticsDto.setCreateUser(map1.get("userId"));
+        // 鑾峰彇褰撳墠浜烘墍鍦ㄥ疄楠屽
+        Integer userId = 1;
+        String departLimsId = userMapper.selectById(userId).getDepartLimsId();
+        String laboratory = "";
+        if (StringUtils.isNotBlank(departLimsId)) {
+            String[] split1 = departLimsId.split(",");
+            for (String s : split1) {
+                if (StringUtils.isNotBlank(s) && (!Arrays.asList("1", "22").contains(s))) {
+                    laboratory = insOrderMapper.getDepartment(Integer.parseInt(s));
+                }
+            }
+        }
+        LocalDate today = LocalDate.parse(split[1]);
+        LocalTime end = LocalTime.of(23, 59, 59);
+        IPage<CostStatisticsDto> dtoIPage = insOrderMapper.selectCostStatistics(page, QueryWrappers.queryWrappers(costStatisticsDto), split[0], today.atTime(end).toString(), laboratory);
+        List<CostStatisticsDto> collect = dtoIPage.getRecords().stream().map(dto -> {
+            Set<String> uniqueTags = new HashSet<>();
+            if (dto.getInspectionItem().contains(",")) {
+                for (String s : dto.getInspectionItem().split(",")) {
+                    uniqueTags.add(s.split("@")[0]);
+                }
+            } else {
+                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
+            }
+            dto.setInspectionItem(uniqueTags.toString());
+            return dto;
+        }).collect(Collectors.toList());
+        dtoIPage.setRecords(collect);
+        map.put("body", dtoIPage);
+        return map;
+    }
+
+    @Override
+    public Map<String, Object> costStatistics2(CostStatisticsDto costStatisticsDto) {
+        Map<String, Object> map = new HashMap<>();
+        String dates = costStatisticsDto.getDates();
+        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
+        costStatisticsDto.setDates(null);
+        // 鑾峰彇褰撳墠浜烘墍鍦ㄥ疄楠屽
+        Integer userId = 1;
+        String departLimsId = userMapper.selectById(userId).getDepartLimsId();
+        String laboratory = "";
+        if (StringUtils.isNotBlank(departLimsId)) {
+            String[] split1 = departLimsId.split(",");
+            for (String s : split1) {
+                if (StringUtils.isNotBlank(s) && (!Arrays.asList("1", "22").contains(s))) {
+                    laboratory = insOrderMapper.getDepartment(Integer.parseInt(s));
+                }
+            }
+        }
+        LocalDate today = LocalDate.parse(split[1]);
+        LocalTime end = LocalTime.of(23, 59, 59);
+        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto), split[0], today.atTime(end).toString(), laboratory);
+//        double totalPrice = costStatisticsDtos.stream()
+//                .filter(dto -> dto.getPrice() != null) // 杩囨护鎺変环鏍间负 null 鐨勫璞�
+//                .mapToDouble(value -> value.getPrice().doubleValue() * value.getNum())
+//                .sum();
+        BigDecimal total = BigDecimal.ZERO;
+        for (CostStatisticsDto dto : costStatisticsDtos) {
+            if (Objects.isNull(dto.getPrice()) || dto.getPrice().compareTo(BigDecimal.ZERO) == 0) {
+                dto.setPrice(new BigDecimal(0));
+            }
+            total = total.add(dto.getPrice());
+        }
+        map.put("total", total);
+        return map;
+    }
+
+    @Override
+    public Map<String, Object> selectSampleDefects(Page page, String inspectionItems, String orderNumber) {
+        List<SampleDefectsFatherVo> sampleDefectsFatherVos = insOrderMapper.selectSampleDefects(page, inspectionItems, orderNumber);
+        Map<String, Object> map = new HashMap<>();
+        map.put("records", sampleDefectsFatherVos);
+        Long aLong = insOrderMapper.getCount(inspectionItems, orderNumber);
+        map.put("total", aLong);
+        return map;
+    }
+
+    @Override
+    public int updateStatus(Integer id) {
+        return insOrderMapper.updateStatus(id);
+    }
+
+    //鏍囩鎵撳嵃
+    @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public List<SampleProductDto3> labelPrinting(String ids) {
+        List<Integer> list = Arrays.stream(ids.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+        List<SampleProductDto3> sampleProductDtos = insSampleMapper.selectSampleProductListByOrderId3(list);
+        Set<String> processedCodes = new HashSet<>();
+        //榛樿鍙墦鍗扮涓�涓�:鍏夌氦銆佸厜绾ゅ甫銆侀挗缁炵嚎銆佸厜绾ょ啍鎺�
+        List<SampleProductDto3> sampleProductDto3s = sampleProductDtos.stream().filter(sampleProductDto3 -> {
+            if (!"鍏夌氦".equals(sampleProductDto3.getIoSampleType()) &&
+                    !"鍏夌氦甯�".equals(sampleProductDto3.getIoSampleType()) &&
+                    !"閽㈢粸绾�".equals(sampleProductDto3.getIoSampleType()) &&
+                    sampleProductDto3.getInsProduct().stream().noneMatch(i -> StringUtils.equals("鍏夌氦鎺ュご鎹熻��", i.getInspectionItem()))
+            ) {
+                return true;
+            }
+            if (processedCodes.contains(sampleProductDto3.getCode())) {
+                return false;
+            } else {
+                processedCodes.add(sampleProductDto3.getCode());
+                return true;
+            }
+        }).collect(Collectors.toList());
+        return sampleProductDto3s;
+    }
+
+    @Override
+    public void export(CostStatisticsDto costStatisticsDto, HttpServletResponse response) throws IOException {
+        // 鍒ゆ柇褰撳墠浜哄睘浜庣數鍔� 杩樻槸 閫氫俊  杩囨护鎺変负1
+        List<String> dept = new ArrayList<>();
+        Map<String, Integer> map1 = new HashMap<>();
+        User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
+        String departLimsId = user.getDepartLimsId();
+        String laboratory = "";
+        if (StringUtils.isNotBlank(departLimsId) && Objects.nonNull(departLimsId)) {
+            String[] split = departLimsId.split(",");
+            for (int i = 0; i < split.length; i++) {
+                if (StringUtils.isNotBlank(split[i])) {
+                    if (split[i].equals("1") || split[i].equals("22")) {
+                        continue;
+                    }
+                    laboratory = insOrderMapper.getDepartment(Integer.parseInt(split[i]));
+                    dept.add(insOrderMapper.getDepartment(Integer.parseInt(split[i])));
+                }
+            }
+        }
+        //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
+        String dates = costStatisticsDto.getDates();
+        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
+        costStatisticsDto.setDates(null);
+
+
+        LocalDate today = LocalDate.parse(split[1]);
+        LocalTime end = LocalTime.of(23, 59, 59);
+        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto), split[0], today.atTime(end).toString(), laboratory);
+        costStatisticsDtos = costStatisticsDtos.stream().map(dto -> {
+            Set<String> uniqueTags = new HashSet<>();
+            if (dto.getInspectionItem().contains(",")) {
+                for (String s : dto.getInspectionItem().split(",")) {
+                    uniqueTags.add(s.split("@")[0]);
+                }
+            } else {
+                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
+            }
+            dto.setInspectionItem(uniqueTags.toString());
+            return dto;
+        }).collect(Collectors.toList());
+
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+        String fileName = URLEncoder.encode("鏍峰搧璐圭敤缁熻瀵煎嚭", "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        Map<String, List<CostStatisticsDto>> groupByCompany =
+                costStatisticsDtos.stream().filter(e -> StrUtil.isNotEmpty(e.getCompany()))
+                        .collect(Collectors.groupingBy(CostStatisticsDto::getCompany));
+        try {
+            // 鏂板缓ExcelWriter
+            // 鏂板缓ExcelWriter
+            ExcelWriter excelWriter =
+                    EasyExcel.write(response.getOutputStream())
+                            .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
+                            .build();
+            List<CostStatisticsDto> costStatisticsDtos1 = new ArrayList<>();
+            for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) {
+                String sheetName = companyDataEntry.getKey();
+                List<CostStatisticsDto> dataList = companyDataEntry.getValue();
+                // 鏍规嵁璇ュ崟瀛愮殑瀹為獙瀹� 鏉ュ垽鏂槸鍚﹀睘浜庡綋鍓嶇櫥褰曚汉鐨勯儴闂�
+                for (CostStatisticsDto costStatisticsDto1 : dataList) {
+                    if (StringUtils.isNotBlank(costStatisticsDto1.getLaboratory()) && Objects.nonNull(costStatisticsDto1.getLaboratory())) {
+                        if (dept.contains(costStatisticsDto1.getLaboratory())) {
+                            costStatisticsDtos1.add(costStatisticsDto1);
+                        }
+                    }
+                }
+                WriteSheet mainSheet = EasyExcel.writerSheet(sheetName)
+                        .head(CostStatisticsDto.class)
+                        .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
+                        .build();
+                excelWriter.write(costStatisticsDtos1, mainSheet);
+                costStatisticsDtos1.clear();
+            }
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    public static boolean containsOnlyDigits(String str) {
+        String regex = "\\d+"; // 鍖归厤涓�涓垨澶氫釜鏁板瓧
+        return Pattern.matches(regex, str);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public Boolean hasSendUrgentOrder() {
+        Integer userId = 1;
+        //鏌ヨ褰撳墠瀹㈡埛鐨勭揣鎬ラ搴�
+        Map<String, Object> quotaMap = baseMapper.selectCurrentCompanyUrgentQuota(userId);
+        if (quotaMap == null) {
+            return false;
+        }
+        //鏌ヨ褰撳ぉ瀹㈡埛宸插垱寤虹殑绱ф�ヨ鍗�
+        long count = baseMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+                .eq(InsOrder::getCompany, quotaMap.get("company"))
+                .eq(InsOrder::getType, 2)
+                .gt(InsOrder::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
+                .lt(InsOrder::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MAX)));
+        int quota = Integer.parseInt(quotaMap.get("quota").toString());
+        return quota > count;
+    }
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderTemplateServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderTemplateServiceImpl.java
new file mode 100644
index 0000000..8f26266
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderTemplateServiceImpl.java
@@ -0,0 +1,70 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.inspect.mapper.InsOrderTemplateMapper;
+import com.ruoyi.inspect.pojo.InsOrderTemplate;
+import com.ruoyi.inspect.service.InsOrderTemplateService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恑ns_order_template銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-03-18 14:14:54
+ */
+@Service
+@AllArgsConstructor
+public class InsOrderTemplateServiceImpl extends ServiceImpl<InsOrderTemplateMapper, InsOrderTemplate>
+        implements InsOrderTemplateService {
+
+    private InsOrderTemplateMapper insOrderTemplateMapper;
+
+
+    @Override
+    public int addInsOrderTemplate(InsOrderTemplate insOrderTemplate) {
+        return insOrderTemplateMapper.insert(insOrderTemplate);
+    }
+
+    @Override
+    public List<InsOrderTemplate> selectInsOrderTemplate(String company) {
+        if (ObjectUtils.isEmpty(company) || company.equals("")) {
+            return insOrderTemplateMapper.selectList(Wrappers.<InsOrderTemplate>lambdaQuery()
+                    .select(InsOrderTemplate.class, info -> !info.getColumn().equals("thing")));
+        } else {
+            //鏍规嵁濮旀墭鍗曚綅杩涜绛涢��
+            return insOrderTemplateMapper.selectList(Wrappers.<InsOrderTemplate>lambdaQuery()
+                    .like(InsOrderTemplate::getThing,"\"company\":\""+ company+"\"")
+                    .select(InsOrderTemplate.class, info -> !info.getColumn().equals("thing")));
+        }
+    }
+
+    @Override
+    public Map<String,Object> selectInsOrderTemplateById(Integer id) {
+        Map<String,Object> map = new HashMap<>();
+        String thing = insOrderTemplateMapper.selectById(id).getThing();
+        ObjectMapper objectMapper = new ObjectMapper();
+        try {
+            map = objectMapper.readValue(thing, Map.class);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+        return map;
+    }
+
+    @Override
+    public int delInsOrderTemplate(Integer id) {
+        return insOrderTemplateMapper.deleteById(id);
+    }
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
new file mode 100644
index 0000000..1d96a2c
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
@@ -0,0 +1,719 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.util.NumberUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.InsProductDto;
+import com.ruoyi.inspect.mapper.InsOrderMapper;
+import com.ruoyi.inspect.mapper.InsOrderStateMapper;
+import com.ruoyi.inspect.mapper.InsProductMapper;
+import com.ruoyi.inspect.mapper.InsSampleMapper;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsOrderState;
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.pojo.InsSample;
+import com.ruoyi.inspect.service.InsProductService;
+import lombok.AllArgsConstructor;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@AllArgsConstructor
+public class InsProductServiceImpl extends ServiceImpl<InsProductMapper, InsProduct>
+        implements InsProductService {
+
+    private InsProductMapper insProductMapper;
+
+    private InsOrderMapper insOrderMapper;
+
+    private InsOrderStateMapper insOrderStateMapper;
+
+    private InsSampleMapper insSampleMapper;
+
+
+    @Override
+    public int selectOrderManDay(Integer orderId) {
+        return insProductMapper.selectOrderManDay(orderId);
+    }
+
+    @Override
+    public int updateInspected(Integer id, String ids) {
+        InsOrder insOrder = new InsOrder();
+        insOrder.setId(id);
+        insOrder.setIsRevocation(1);//闇�瑕佸鏍�
+        insOrder.setRevocationInsProductIds(ids);
+        return insOrderMapper.updateById(insOrder);
+    }
+
+    @Override
+    public boolean write(InsProductDto insProductDto) {
+//        List<InsProduct> insProducts = baseMapper.selectBatchIds(insProductDto.getIds());
+//        for (InsProduct insProduct : insProducts) {
+//            insProduct.setTemperature(insProductDto.getTemperature());
+//            insProduct.setHumidity(insProductDto.getHumidity());
+//        }
+        List<Integer> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+                .eq(InsSample::getInsOrderId, insProductDto.getInsOrderId())
+                .select(InsSample::getId))
+                .stream()
+                .map(InsSample::getId)
+                .collect(Collectors.toList());
+//        Integer insSampleId = baseMapper.selectById(insProductDto.getIds().get(0)).getInsSampleId();
+        return baseMapper.update(null, new LambdaUpdateWrapper<InsProduct>().in(InsProduct::getInsSampleId, insSamples)
+                .set(Strings.isNotBlank(insProductDto.getTemperature()),InsProduct::getTemperature, insProductDto.getTemperature())
+                .set(Strings.isNotBlank(insProductDto.getHumidity()),InsProduct::getHumidity, insProductDto.getHumidity()))>0;
+    }
+
+    //鏌ヨ寰呮椤圭洰
+    @Override
+    public Map<String, Object> selectNoProducts(Page page, InsProduct insProduct, Integer orderId, String ids) {
+        Map<String, Object> map = new HashMap<>();
+//        map.put("head", PrintChina.printChina(InsProduct.class));
+        IPage<InsProduct> insProductIPage = baseMapper.selectNoProducts(page, orderId);
+        if (ObjectUtils.isNotEmpty(ids)) {
+            List<Integer> collect = Arrays.asList(ids.split(",")).stream()
+                    .map(Integer::parseInt)
+                    .collect(Collectors.toList());
+            List<InsProduct> products = insProductIPage.getRecords().stream().filter(record -> collect.contains(record.getId())).collect(Collectors.toList());
+            insProductIPage.setRecords(products);
+        }
+        map.put("body", insProductIPage);
+        return map;
+    }
+
+
+    // 鏌ヨ鎾ら攢椤圭洰
+    public List<List<Integer>> selectRevocation(Integer orderId) {
+        // 鏌ヨ鎾ら攢鐘舵�佺殑鏍峰搧 浠ュ強 妫�楠岄」
+        String revocationInsProductIds = insOrderMapper.selectById(orderId).getRevocationInsProductIds();
+        List<Integer> productIds = new ArrayList<>();
+        List<Integer> sampleIds = new ArrayList<>();
+        // 濡傛灉鏄柊鐨勬暟鎹� 浼氬瓨鍦╯ample鐨刬d 浠ュ強product鐨刬d 浠鍒嗛殧
+        if(StringUtils.isNotEmpty(revocationInsProductIds)) {
+            if(revocationInsProductIds.contains("@")) {
+                List<List<Integer>> collect = Arrays.stream(revocationInsProductIds.split("@")).map(item -> {
+                    List<Integer> list = JSONArray.parseArray(item, Integer.class);
+                    return list;
+                }).collect(Collectors.toList());
+                sampleIds =  collect.get(0);
+                productIds = collect.get(1);
+            }else {
+                // 浠ュ墠鐨勬暟鎹垯鏄痯roductId锛屼互 ,鍒嗛殧
+                productIds = Arrays.stream(revocationInsProductIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+            }
+        }
+        return Arrays.asList(sampleIds,productIds);
+    }
+
+    @Override
+    public List<Map<String,Object>> selectSampleByOrderId(Integer orderId) {
+        List<List<Integer>> collect = selectRevocation(orderId);
+        List<Integer> sampleIds = collect.get(0);
+        List<Integer> productIds = collect.get(1);
+
+
+        List<Map<String,Object>> list = new ArrayList<>();
+        List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>()
+                .eq(InsSample::getInsOrderId, orderId)
+                .notIn(CollectionUtils.isNotEmpty(sampleIds), InsSample::getId,sampleIds));
+        for(InsSample insSample : insSamples) {
+            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                    .eq(InsProduct::getInsSampleId, insSample.getId())
+                    .eq(InsProduct::getState, 1)
+                    .notIn(CollectionUtils.isNotEmpty(productIds), InsProduct::getId,productIds));
+            if(CollectionUtils.isNotEmpty(productList)) {
+                HashMap<String, Object> map = new HashMap<>();
+                map.put("sampleCode", insSample.getSampleCode()); // 鏍峰搧缂栧彿
+                map.put("sampleId", insSample.getId()); // 鍓嶇闇�瑕�
+                map.put("id", insSample.getId());
+                map.put("hasChildren", true); // 鏄惁鏈夊瓙椤�
+                list.add(map);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public List<Map<String,Object>> selectProductsBySampleId(Integer sampleId,Integer orderId) {
+        List<List<Integer>> collect1 = selectRevocation(orderId);
+        List<Integer> sampleIds = collect1.get(0);
+        List<Integer> productIds = collect1.get(1);
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if(!sampleIds.contains(sampleId)) {
+            InsSample insSample = insSampleMapper.selectById(sampleId);
+            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                    .eq(InsProduct::getInsSampleId, insSample.getId())
+                    .eq(InsProduct::getState,1)
+                    .notIn(CollectionUtils.isNotEmpty(productIds), InsProduct::getId,productIds));
+            for (InsProduct insProduct : productList) {
+                // 鍖哄垎娓╁害寰幆 鍜� 鏅�氶」鐩�
+                if(Objects.isNull(insProduct.getSpecialItemParentId()) || !NumberUtil.isInteger(insProduct.getInspectionItem())) {
+                    Map<String, Object> map = new HashMap<>();
+                    // 濡傛灉鏄俯搴﹀惊鐜氨杩樺緱鍦ㄥ宓屽鍑犲眰
+                    if(insProduct.getInspectionItem().equals("娓╁害寰幆")) {
+                        map.put("sampleCode", insSample.getSampleCode()); // 鏍峰搧缂栧彿
+                        map.put("inspectionItem",insProduct.getInspectionItem()); // 妫�楠岄」鐩�
+                        map.put("sampleId", insSample.getId()); // 鏍峰搧id
+                        map.put("hasChildren",true);
+                        // 娓╁害寰幆鐗规畩鏍囪瘑
+                        map.put("temperature",true);
+                        map.put("id",insProduct.getId());
+                    }else {
+                        map.put("sampleId", insSample.getId()); // 鏍峰搧id
+                        map.put("sampleCode", insSample.getSampleCode()); // 鏍峰搧缂栧彿
+                        map.put("inspectionItem",insProduct.getInspectionItem()); // 妫�楠岄」鐩�
+
+                        map.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // 妫�楠屽瓙椤�
+                        map.put("sampleType",insProduct.getSampleType()); // 鏍峰搧鍒嗙被
+                        map.put("sample",insProduct.getSample()); // 鏍峰搧
+                        map.put("model",insProduct.getModel()); // 鍨嬪彿
+                        map.put("sonLaboratory",insProduct.getSonLaboratory()); // 瀛愬疄楠屽
+                        map.put("tell",insProduct.getTell()); // 瑕佹眰鍊�
+                        map.put("id",insProduct.getId());
+                    }
+                    list.add(map);
+                }
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public List<Map<String, Object>> selectTemperatureByProductId(Integer productId) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        List<InsProduct> productList = null;
+         // 宸茬粡鍒版挙閿�椤甸潰鐨勫氨涓嶅湪鏌ュ嚭鏉�
+        InsProduct insProduct = insProductMapper.selectById(productId);
+        InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
+        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+        List<List<Integer>> lists = selectRevocation(insOrder.getId());
+        List<Integer> productIds = lists.get(1);
+
+        productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getSpecialItemParentId, productId)
+                .notIn(CollectionUtils.isNotEmpty(productIds),InsProduct::getId,productIds));
+
+
+        if(CollectionUtils.isNotEmpty(productList)) {
+            Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
+            // 鎷垮埌寰幆娆℃暟
+            Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<String, List<InsProduct>> next = iterator.next();
+                Map<String, Object> map = new HashMap<>();
+                map.put("hasChildren",true);
+                // 娓╁害寰幆鐗规畩鏍囪瘑 寰幆娆℃暟
+                map.put("temperatureNumber",true);
+                map.put("sampleId", next.getValue().get(0).getInsSampleId()); // 鏍峰搧id
+                map.put("inspectionItem",next.getKey() + " (寰幆娆℃暟)"); // 妫�楠岄」鐩�
+                map.put("inspectionItemTwo",next.getKey()); // 鏂逛究鏌ョ湅鍏蜂綋娆℃暟 锛堜紶鍊奸渶瑕侊級
+                map.put("parentId",productId); // 鐖秈d
+                map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList()));
+                map.put("sampleCode", next.getValue().get(0).getSampleCode()); // 鏍峰搧缂栧彿
+                map.put("id",productId + Integer.parseInt(next.getKey()));
+                list.add(map);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public List<Map<String, Object>> selectTemperatureNumberByProductId(Integer parentId, String inspectionItem) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        // 宸茬粡鍒版挙閿�椤甸潰鐨勫氨涓嶅湪鏌ュ嚭鏉�
+        InsProduct ip = insProductMapper.selectById(parentId);
+        InsSample insSample = insSampleMapper.selectById(ip.getInsSampleId());
+        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+        List<List<Integer>> lists = selectRevocation(insOrder.getId());
+        List<Integer> sampleIds = lists.get(0);
+        List<Integer> productIds = lists.get(1);
+
+
+        List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getSpecialItemParentId, parentId)
+                .eq(InsProduct::getInspectionItem, inspectionItem)
+                .notIn(CollectionUtils.isNotEmpty(productIds),InsProduct::getId,productIds));
+        // 鏍规嵁妫�楠屽瓙椤瑰緱鍒版俯搴︾偣
+        Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
+        Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, List<InsProduct>> next = iterator.next();
+            InsProduct insProduct = next.getValue().get(0);
+            Map<String, Object> map = new HashMap<>();
+            map.put("sampleId", next.getValue().get(0).getInsSampleId()); // 鏍峰搧id
+            map.put("inspectionItem",""); // 妫�楠岄」鐩�
+            map.put("inspectionItemSubclass",next.getKey()); // 妫�楠屽瓙椤�
+            map.put("sampleType",insProduct.getSampleType()); // 鏍峰搧鍒嗙被
+            map.put("sample",insProduct.getSample()); // 鏍峰搧
+            map.put("model",insProduct.getModel()); // 鍨嬪彿
+            map.put("sonLaboratory",insProduct.getSonLaboratory()); // 瀛愬疄楠屽
+            map.put("sampleCode", next.getValue().get(0).getSampleCode()); // 鏍峰搧缂栧彿
+            map.put("tell",insProduct.getTell()); // 瑕佹眰鍊�
+            map.put("number",inspectionItem); // 寰幆娆℃暟
+            map.put("parentId",parentId); // 鐖秈d
+            map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList())); // 璇ユ俯搴︾偣鎵�鏈夌殑id
+            map.put("id",Math.random());
+            list.add(map);
+        }
+        return list;
+    }
+
+
+    @Override
+    public void revoke(Map<String, Object> data) {
+        List<List<Integer>> lists = selectRevocation(Integer.parseInt(data.get("orderId").toString()));
+        // 鏇存柊order鐨勭姸鎬� 浠ュ強娣诲姞闇�瑕佹挙閿�鐨勯」鐩�
+        Integer orderId = Integer.parseInt(data.get("orderId").toString());
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
+        insOrder.setIsRevocation(1);
+        List<Integer> sampleIds = new ArrayList<>();
+        List<Integer> productIds = new ArrayList<>();
+        if(data.containsKey("sampleIds")) {
+            sampleIds = JSONArray.parseArray(data.get("sampleIds").toString(), Integer.class);
+        }
+        if(data.containsKey("productIds")) {
+            productIds = JSONArray.parseArray(data.get("productIds").toString(), Integer.class);
+
+        }
+        sampleIds.addAll(lists.get(0));
+        productIds.addAll(lists.get(1));
+        String SampleJsonString = JSON.toJSONString(sampleIds);
+        String ProductJsonString = JSON.toJSONString(productIds);
+        insOrder.setRevocationInsProductIds(SampleJsonString + "@" + ProductJsonString);
+        insOrderMapper.updateById(insOrder);
+
+    }
+
+    @Override
+    public List<Map<String, Object>> revokeReviewSample(Integer orderId) {
+        List<Map<String,Object>> list = new ArrayList<>();
+        List<List<Integer>> lists = selectRevocation(orderId);
+        List<Integer> sampleIds = lists.get(0);
+        List<Integer> productIds = lists.get(1);
+        List<Integer> newSampleIds = new ArrayList<>();
+        // 鏍规嵁椤圭洰鏉ヨ幏鍙栨牱鍝�
+        if(CollectionUtils.isNotEmpty(productIds)) {
+            newSampleIds = insProductMapper.selectBatchIds(productIds).stream().map(InsProduct::getInsSampleId).distinct().collect(Collectors.toList());
+        }
+        // 鏌ヨ闇�瑕佹挙閿�鐨勬牱鍝�
+        if(CollectionUtils.isNotEmpty(newSampleIds)) {
+            List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>()
+                    .in(InsSample::getId, newSampleIds));
+
+            for (InsSample insSample : insSamples) {
+                List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                        .eq(InsProduct::getState, 1)
+                        .in(CollectionUtils.isNotEmpty(productIds), InsProduct::getId, productIds));
+                if(CollectionUtils.isNotEmpty(productList)) {
+                    HashMap<String, Object> map = new HashMap<>();
+                    map.put("sampleCode", insSample.getSampleCode()); // 鏍峰搧缂栧彿
+                    map.put("sampleId", insSample.getId()); // 鍓嶇闇�瑕�
+                    map.put("id", insSample.getId());
+                    map.put("hasChildren", true); // 鏄惁鏈夊瓙椤�
+                    list.add(map);
+                }
+            }
+        }
+        if(CollectionUtils.isNotEmpty(sampleIds)) {
+            List<InsSample> insSamples2 = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>()
+                    .in(InsSample::getId, sampleIds));
+            for (InsSample insSample : insSamples2) {
+                List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                        .eq(InsProduct::getState, 1));
+                if(CollectionUtils.isNotEmpty(productList)) {
+                    HashMap<String, Object> map = new HashMap<>();
+                    map.put("sampleCode", insSample.getSampleCode()); // 鏍峰搧缂栧彿
+                    map.put("sampleId", insSample.getId()); // 鍓嶇闇�瑕�
+                    map.put("id", insSample.getId());
+                    map.put("hasChildren", true); // 鏄惁鏈夊瓙椤�
+                    list.add(map);
+                }
+            }
+        }
+
+        list = list.stream().sorted(Comparator.comparing(map -> Integer.parseInt(map.get("id")+""))).collect(Collectors.toList());
+        return list;
+    }
+
+
+
+    @Override
+    public List<Map<String, Object>> revokeReviewProduct(Integer orderId, Integer sampleId) {
+        String sampleCode = insSampleMapper.selectById(sampleId).getSampleCode();
+        List<Map<String,Object>> list = new ArrayList<>();
+        List<List<Integer>> lists = selectRevocation(orderId);
+        List<Integer> sampleIds = lists.get(0);
+        List<Integer> productIds = lists.get(1);
+        List<InsProduct> productList = new ArrayList<>();
+        // 濡傛灉鏄竴鏁翠釜鏍峰搧鎾ら攢
+        if(sampleIds.contains(sampleId)) {
+            // 杩囨护鍑烘俯搴﹀惊鐜鏁扮殑鏁版嵁
+             productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                    .eq(InsProduct::getInsSampleId, sampleId).eq(InsProduct::getState,1));
+             productList = productList.stream().filter(item -> !NumberUtil.isNumber(item.getInspectionItem()) && Objects.isNull(item.getSpecialItemParentId())).collect(Collectors.toList());
+        }else {
+            // 濡傛灉鏄崟涓」鐩挙閿�
+            productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                    .eq(InsProduct::getInsSampleId, sampleId)
+                    .eq(InsProduct::getState,1)
+                    .in(InsProduct::getId, productIds));
+            // 鍒ゆ柇鏄惁鏄俯搴﹀惊鐜笅闈㈢殑娓╁害鐐�
+            // 1.杩囨护鍑轰笉鏄俯搴︾偣鐨勬暟鎹�
+            List<InsProduct> collect = productList.stream().filter(item -> Objects.isNull(item.getSpecialItemParentId())
+                    || !NumberUtil.isInteger(item.getInspectionItem())).collect(Collectors.toList());
+            if(productList.size() != collect.size()) {
+                // 2.杩斿洖娓╁害寰幆鏁版嵁鍗冲彲
+                List<InsProduct> collect1 = productList.stream().filter(item -> Objects.nonNull(item.getSpecialItemParentId())
+                        && NumberUtil.isInteger(item.getInspectionItem())).collect(Collectors.toList());
+                InsProduct insProduct = insProductMapper.selectById(collect1.get(0).getSpecialItemParentId());
+                collect.add(insProduct);
+                productList =collect.stream().distinct().collect(Collectors.toList());
+            }
+
+        }
+        for (InsProduct insProduct : productList) {
+            Map<String, Object> map = new HashMap<>();
+            if(insProduct.getInspectionItem().equals("娓╁害寰幆")) {
+                map.put("sampleCode", sampleCode); // 鏍峰搧缂栧彿
+                map.put("inspectionItem",insProduct.getInspectionItem()); // 妫�楠岄」鐩�
+                map.put("sampleId", sampleId); // 鏍峰搧id
+                map.put("hasChildren",true);
+                // 娓╁害寰幆鐗规畩鏍囪瘑
+                map.put("temperature",true);
+                map.put("id",insProduct.getId());
+            }else {
+                map.put("sampleId", sampleId); // 鏍峰搧id
+                map.put("sampleCode", sampleCode); // 鏍峰搧缂栧彿
+                map.put("inspectionItem",insProduct.getInspectionItem()); // 妫�楠岄」鐩�
+                map.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // 妫�楠屽瓙椤�
+                map.put("sampleType",insProduct.getSampleType()); // 鏍峰搧鍒嗙被
+                map.put("sample",insProduct.getSample()); // 鏍峰搧
+                map.put("model",insProduct.getModel()); // 鍨嬪彿
+                map.put("sonLaboratory",insProduct.getSonLaboratory()); // 瀛愬疄楠屽
+                map.put("tell",insProduct.getTell()); // 瑕佹眰鍊�
+                map.put("id",insProduct.getId());
+            }
+            list.add(map);
+        }
+        return list;
+    }
+
+
+    @Override
+    public List<Map<String, Object>> revokeReviewTemperatureByProductId(Integer productId) {
+        // 鏍规嵁娓╁害寰幆id 鏌ユ壘order 浠ュ強 sample
+        List<Map<String, Object>> list = new ArrayList<>();
+        InsProduct insProduct = insProductMapper.selectById(productId);
+        InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
+        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+        List<List<Integer>> lists = selectRevocation(insOrder.getId());
+        List<Integer> sampleIds = lists.get(0);
+        List<Integer> productIds = lists.get(1);
+        // 濡傛灉褰撳墠鏍峰搧鏄暣涓挙閿�
+        if(sampleIds.contains(insSample.getId())) {
+            list = selectTemperatureByProductId(productId);
+        }else {
+            // 鎾ら攢鐨勬槸妫�楠岄」
+            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                    .eq(InsProduct::getState, 1)
+                    .eq(InsProduct::getSpecialItemParentId,productId)
+                    .in(InsProduct::getId, productIds));
+            Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
+            // 鎷垮埌寰幆娆℃暟
+            Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<String, List<InsProduct>> next = iterator.next();
+                Map<String, Object> map = new HashMap<>();
+                map.put("hasChildren",true);
+                // 娓╁害寰幆鐗规畩鏍囪瘑 寰幆娆℃暟
+                map.put("temperatureNumber",true);
+                map.put("sampleId", next.getValue().get(0).getInsSampleId()); // 鏍峰搧id
+                map.put("inspectionItem",next.getKey() + " (寰幆娆℃暟)"); // 妫�楠岄」鐩�
+                map.put("inspectionItemTwo",next.getKey()); // 鏂逛究鏌ョ湅鍏蜂綋娆℃暟 锛堜紶鍊奸渶瑕侊級
+                map.put("parentId",productId); // 鐖秈d
+                map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList()));
+                map.put("sampleCode", next.getValue().get(0).getSampleCode()); // 鏍峰搧缂栧彿
+                map.put("id",productId + Integer.parseInt(next.getKey()));
+                list.add(map);
+            }
+
+        }
+
+
+        return list;
+    }
+
+    @Override
+    public List<Map<String, Object>> revokeReviewConsistentByProductId(Integer parentId, String inspectionItem) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        InsProduct insProduct = insProductMapper.selectById(parentId);
+        InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
+        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+        List<List<Integer>> lists = selectRevocation(insOrder.getId());
+        List<Integer> sampleIds = lists.get(0);
+        List<Integer> productIds = lists.get(1);
+        // 濡傛灉鏄綋鍓嶆牱鍝佹挙閿� 鏌ヨ鎵�鏈�
+        if(sampleIds.contains(insSample.getId())) {
+             list = selectTemperatureNumberByProductId(parentId, inspectionItem);
+        }else {
+            // 鏌ヨ鎾ら攢鐨勬俯搴︾偣
+            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                    .eq(InsProduct::getState, 1)
+                    .eq(InsProduct::getSpecialItemParentId, parentId)
+                    .eq(InsProduct::getInspectionItem, inspectionItem)
+                    .in(InsProduct::getId, productIds));
+            // 鏍规嵁妫�楠屽瓙椤瑰緱鍒版俯搴︾偣
+            Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
+            Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<String, List<InsProduct>> next = iterator.next();
+                InsProduct ip = next.getValue().get(0);
+                Map<String, Object> map = new HashMap<>();
+                map.put("sampleId", next.getValue().get(0).getInsSampleId()); // 鏍峰搧id
+                map.put("inspectionItem",""); // 妫�楠岄」鐩�
+                map.put("inspectionItemParent",inspectionItem + " (寰幆娆℃暟)"); // 妫�楠岀埗椤圭洰
+                map.put("inspectionItemSubclass",next.getKey()); // 妫�楠屽瓙椤�
+                map.put("sampleType",ip.getSampleType()); // 鏍峰搧鍒嗙被
+                map.put("sample",ip.getSample()); // 鏍峰搧
+                map.put("model",ip.getModel()); // 鍨嬪彿
+                map.put("sonLaboratory",ip.getSonLaboratory()); // 瀛愬疄楠屽
+                map.put("sampleCode", next.getValue().get(0).getSampleCode()); // 鏍峰搧缂栧彿
+                map.put("tell",ip.getTell()); // 瑕佹眰鍊�
+                map.put("parentId",parentId); // 鐖秈d
+                map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList())); // 璇ユ俯搴︾偣鎵�鏈夌殑id
+                map.put("id",Math.random());
+                list.add(map);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public void revocationPassed(Integer id) {
+        List<List<Integer>> lists = selectRevocation(id);
+        List<Integer> sampleIds = lists.get(0);
+        List<Integer> productIds = lists.get(1);
+        if(CollectionUtils.isNotEmpty(sampleIds)) {
+            insProductMapper.update(null,new LambdaUpdateWrapper<InsProduct>()
+                    .set(InsProduct::getState,0)
+                    .in(InsProduct::getInsSampleId,sampleIds));
+        }
+        if(CollectionUtils.isNotEmpty(productIds)) {
+            insProductMapper.update(null,new LambdaUpdateWrapper<InsProduct>()
+                    .set(InsProduct::getState,0)
+                    .in(InsProduct::getId,productIds));
+            // 鎷垮埌鐨刾roductId
+            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                    .in(InsProduct::getId, productIds));
+            if(CollectionUtils.isNotEmpty(productList)) {
+                // 寰楀垽鏂竴涓� 鏄惁鍚湁娓╁害寰幆椤圭洰
+                List<InsProduct> collect2 = productList.stream().filter(item -> Objects.nonNull(item.getSpecialItemParentId())
+                        && NumberUtil.isInteger(item.getInspectionItem())).collect(Collectors.toList());
+                if(CollectionUtils.isNotEmpty(collect2)) {
+                    // 灏辨槸鏈夋俯搴﹀惊鐜殑
+                    Map<Integer, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getSpecialItemParentId));
+                    // 鑾峰彇娓╁害寰幆鐨刬d
+                    for(Map.Entry<Integer,List<InsProduct>> entry1 : collect.entrySet()) {
+                        String number = "";
+                        Integer parentId = entry1.getKey();
+                        // 鏌ヨ璇ユ俯搴﹀惊鐜� 寰楀埌寰幆娆℃暟
+                        List<InsProduct> productList2 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                                .eq(InsProduct::getSpecialItemParentId, parentId)
+                                .eq(InsProduct::getState, 1));
+                        if(CollectionUtils.isNotEmpty(productList2)) {
+                            Map<String, List<InsProduct>> group = productList2.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
+                            number = group.size() + "";
+                        }
+                        // 鎾ら攢鐨勬俯搴﹀惊鐜悇涓俯搴︾偣
+                        List<InsProduct> productList1 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                                .eq(InsProduct::getState, 0)
+                                .eq(InsProduct::getSpecialItemParentId, parentId)
+                                .in(InsProduct::getId, productIds));
+                        // 鏍规嵁娓╁害鐐硅繘琛屽垎缁�
+                        Map<String, List<InsProduct>> collect1 = productList1.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
+                        Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect1.entrySet().iterator();
+                        while (iterator.hasNext()) {
+                            Map.Entry<String, List<InsProduct>> entry = iterator.next();
+                            String key = entry.getKey();
+                            // 鎷垮埌娓╁害寰幆鐨刟sk
+                            InsProduct insProduct = insProductMapper.selectById(parentId);
+                            String ask = insProduct.getAsk();
+                            String newAsk = "";
+                            String[] split = ask.split(";");
+                            // 鍙湁寰幆鐨勬鏁� 閮戒笉鍖呭惈璇ユ俯搴︾偣鎵嶉渶瑕佹洿鏀�
+                            List<InsProduct> productList3 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
+                                    .eq(InsProduct::getSpecialItemParentId, parentId)
+                                    .eq(InsProduct::getInspectionItemSubclass, key)
+                                    .eq(InsProduct::getState, 1));
+                            if(CollectionUtils.isEmpty(productList3)) {
+                                if(key.equals("20鈩�")) {
+                                    newAsk = Arrays.stream(split).filter(item -> (!item.contains(key) || item.contains("20鈩�(甯告俯)")) && !NumberUtil.isInteger(item.trim())).collect(Collectors.joining(";"))  + ";" + number;
+                                }else {
+                                    newAsk = Arrays.stream(split).filter(item -> !item.contains(key) && !NumberUtil.isInteger(item)).collect(Collectors.joining(";"))  + ";" + number;
+
+                                }
+                            }else {
+                                newAsk = Arrays.stream(split).filter(item -> !NumberUtil.isInteger(item)).collect(Collectors.joining(";")) + ";" + number;
+                            }
+                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
+                                    .set(InsProduct::getAsk, newAsk)
+                                    .eq(InsProduct::getId, parentId));
+
+                        }
+                    }
+                }
+            }
+
+        }
+        insOrderMapper.update(null,new LambdaUpdateWrapper<InsOrder>().set(InsOrder::getIsRevocation,0).eq(InsOrder::getId,id));
+        // 濡傛灉妫�楠岄」鐩叏閮ㄦ挙閿�鍒欓渶瑕佹挙閿�妫�楠屽崟
+        InsOrder insOrder = insOrderMapper.selectById(id);
+        insOrder.setRevocationTime(LocalDateTime.now());
+        //鏌ヨ璇ュ鎵樺崟涓嬪彂鐨勮瘯楠屽
+        List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, id));
+        List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>().eq(InsSample::getInsOrderId, id));
+        List<Integer> collect = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
+        List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, collect));
+        if(CollectionUtils.isEmpty(insProducts)) {
+            insOrder.setState(3);
+            insOrderMapper.updateById(insOrder);
+        }else{
+            //閬嶅巻鍚勮瘯楠屽锛屽鏋滆瘯楠屽涓嬬殑椤圭洰涓虹┖锛屽垯鍒犻櫎璇ヨ瘯楠屽涓嬬殑璁㈠崟
+            insOrderStates.forEach(insOrderState -> {
+                //杩囨护璇曢獙瀹や笅鐨勯」鐩�
+                long productCount = insProducts.stream().filter(insProduct -> insProduct.getSonLaboratory().equals(insOrderState.getLaboratory())).count();
+                if(productCount == 0){
+                    insOrderStateMapper.delete(new LambdaUpdateWrapper<InsOrderState>().eq(InsOrderState::getId, insOrderState.getId()));
+                }
+            });
+        }
+    }
+
+    @Override
+    public void revocationCancel(Integer orderId) {
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
+        insOrder.setIsRevocation(0);
+        insOrder.setRevocationInsProductIds("");
+        insOrderMapper.updateById(insOrder);
+    }
+
+
+//    public List<Map<String,Object>> selectProductsByOrderId(Integer orderId) {
+//        List<Map<String,Object>> list = new ArrayList<>();
+//        List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>().eq(InsSample::getInsOrderId, orderId));
+//        if(CollectionUtils.isNotEmpty(insSamples)) {
+//            for (InsSample insSample : insSamples) {
+//                List<Map<String, Object>> lists = new ArrayList<>();
+//                List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>().eq(InsProduct::getInsSampleId, insSample.getId()));
+//                Map<String, Object> map = new HashMap<>();
+//                map.put("label", insSample.getSampleCode());
+//                map.put("value", insSample.getId());
+//                if(CollectionUtils.isNotEmpty(insProducts)) {
+//                    Map<String, List<InsProduct>> collect = insProducts.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
+//                    Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
+//                    while (iterator.hasNext()) {
+//                        Map.Entry<String, List<InsProduct>> entry = iterator.next();
+//                        lists.add(getInspectionItem(entry.getKey(), entry.getValue()));
+//                    }
+//                    map.put("children", lists);
+//                }
+//                list.add(map);
+//            }
+//        }
+//        return list;
+//    }
+
+    public Map<String, Object> getInspectionItem(String inspectionItem, List<InsProduct> insProducts) {
+        List<Integer> ids = new ArrayList<>();
+        List<Map<String, Object>> list = new ArrayList<>();
+        Map<String, Object> map = new HashMap<>();
+        map.put("label", inspectionItem);
+        for (InsProduct insProduct : insProducts) {
+            ids.add(insProduct.getId());
+            list.add(getProductsSubclass(insProduct));
+        }
+        map.put("value", ids);
+        map.put("children", list);
+        return map;
+    }
+    public Map<String, Object> getProductsSubclass(InsProduct insProduct) {
+        Map<String, Object> map = new HashMap<>();
+        if(StringUtils.isNotEmpty(insProduct.getInspectionItemSubclass())) {
+            map.put("label",insProduct.getInspectionItemSubclass());
+        }else {
+            map.put("label",insProduct.getInspectionItem());
+        }
+        map.put("value",insProduct.getId());
+        return map;
+    }
+
+
+    //瀹℃牳寰呮鎾ら攢
+    @Override
+    public void checkUpdate(Integer orderId, Integer state) {
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
+        if (state == 1) {
+            List<String> list = new ArrayList<>();
+            try {
+                list = Arrays.asList(insOrder.getRevocationInsProductIds().split(","));
+            } catch (Exception e) {
+                throw new ErrorException("杩樻病鏈夐�夋嫨搴旇瑕佹挙閿�鐨勬楠岄」鐩�");
+            }
+            List<Integer> ids = list.stream()
+                    .map(Integer::parseInt)
+                    .collect(Collectors.toList());
+            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
+            List<Integer> collect = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
+            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, collect));
+            if (insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()).equals(ids)) {
+                //濡傛灉璇ユ楠屽崟涓嬬殑鎵�鏈夐」鐩叏閮ㄩ兘鎾ら攢,閭d箞杩欎釜鍗曞瓙涔熼渶瑕佹挙閿�
+                insOrder.setState(3);
+            } else {
+                List<InsProduct> products = insProductMapper.selectBatchIds(ids);
+                //棣栧厛鏍规嵁閫夋嫨鐨勯」鐩甶d杩涜鎾ら攢椤圭洰
+                updateBatchById(products.stream().map(insProduct -> {
+                    insProduct.setState(0);
+                    return insProduct;
+                }).collect(Collectors.toList()));
+            }
+            //insProductMapper.updateInspected(id);
+        }
+        //涓嶉�氳繃
+        insOrder.setIsRevocation(0);
+        insOrderMapper.updateById(insOrder);
+
+    }
+
+    @Override
+    public int write2(Integer id, String elasticityModulus) {
+        InsProduct insProduct = new InsProduct();
+        insProduct.setId(id);
+        insProduct.setElasticityModulus(elasticityModulus);
+        insProductMapper.updateById(insProduct);
+        return 0;
+    }
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseCellServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseCellServiceImpl.java
new file mode 100644
index 0000000..333aa18
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseCellServiceImpl.java
@@ -0,0 +1,26 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.WarehouseCellMapper;
+import com.ruoyi.inspect.pojo.WarehouseCell;
+import com.ruoyi.inspect.service.WarehouseCellService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_sample_user(鏍峰搧璐熻矗浜鸿褰�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2024-03-14 17:12:02
+*/
+@Service
+@AllArgsConstructor
+public class WarehouseCellServiceImpl extends ServiceImpl<WarehouseCellMapper, WarehouseCell>
+    implements WarehouseCellService {
+
+
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseServiceImpl.java
new file mode 100644
index 0000000..4ec0346
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseServiceImpl.java
@@ -0,0 +1,190 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.HistoryDto;
+import com.ruoyi.inspect.dto.WarehouseCellAndSampleDto;
+import com.ruoyi.inspect.dto.WarehouseDto;
+import com.ruoyi.inspect.mapper.*;
+import com.ruoyi.inspect.pojo.*;
+import com.ruoyi.inspect.service.WarehouseCellService;
+import com.ruoyi.inspect.service.WarehouseService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恑ns_sample_user(鏍峰搧璐熻矗浜鸿褰�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2024-03-14 17:12:02
+*/
+@Service
+@AllArgsConstructor
+public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse>
+    implements WarehouseService {
+
+    private WarehouseMapper warehouseMapper;
+
+    private WarehouseShelfMapper warehouseShelfMapper;
+
+    private WarehouseCellMapper warehouseCellMapper;
+
+    private WarehouseHistoryMapper warehouseHistoryMapper;
+
+    private WarehouseCellService warehouseCellService;
+
+    private InsSampleMapper insSampleMapper;
+
+    private InsProductMapper insProductMapper;
+
+    @Override
+    public int addWarehouse(String name) {
+        Warehouse warehouse = new Warehouse();
+        warehouse.setName(name);
+        return warehouseMapper.insert(warehouse);
+    }
+
+    @Override
+    public List<WarehouseDto> selectWarehouse() {
+        return warehouseMapper.selectWarehouseList();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addShelf(WarehouseShelf warehouseShelf) {
+        warehouseShelfMapper.insert(warehouseShelf);
+        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());
+                cells.add(cell);
+            }
+        }
+        warehouseCellService.saveBatch(cells);
+        return 1;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int delWarehouse(Integer id) {
+        warehouseShelfMapper.delete(Wrappers.<WarehouseShelf>lambdaUpdate().eq(WarehouseShelf::getWarehouseId, id));
+        return warehouseMapper.deleteById(id);
+    }
+
+    @Override
+    public int upWarehouse(Warehouse warehouse) {
+        return warehouseMapper.updateById(warehouse);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int delShelf(Integer id) {
+        warehouseCellMapper.update(null ,Wrappers.<WarehouseCell>lambdaUpdate().eq(WarehouseCell::getShelfId, id).set(WarehouseCell::getState, 0));
+        return warehouseShelfMapper.deleteById(id);
+    }
+
+    @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));
+        warehouseShelfMapper.updateById(warehouseShelf);
+        return 0;
+    }
+
+    @Override
+    public List<WarehouseCellAndSampleDto> getWarehouse(Integer shelfId) {
+        return warehouseCellMapper.getWarehouse(shelfId);
+    }
+
+    @Override
+    public int inWarehouse(String trees, String sampleCode) {
+        String[] tree = trees.split("-");
+        if(tree.length < 4){
+            throw new ErrorException("搴撲綅閫夋嫨閿欒");
+        }
+        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode).select(InsSample::getId,InsSample::getCellId));
+        if(samples.size()!=1){
+            throw new ErrorException("鏍峰搧缂栧彿杈撳叆鏈夎");
+        }
+        if(samples.get(0).getCellId()!=null){
+            throw new ErrorException("鏍峰搧 " + sampleCode + " 鏈嚭搴�");
+        }
+        WarehouseCell cell = warehouseCellMapper.selectOne(Wrappers.<WarehouseCell>lambdaQuery().eq(WarehouseCell::getShelfId, tree[1]).eq(WarehouseCell::getRow, tree[2]).eq(WarehouseCell::getCol, tree[3]).eq(WarehouseCell::getState, 1).select(WarehouseCell::getId,WarehouseCell::getRow,WarehouseCell::getCol));
+        WarehouseShelf shelf = warehouseShelfMapper.selectById(tree[1]);
+        Warehouse warehouse = warehouseMapper.selectById(tree[0]);
+        WarehouseHistory history = new WarehouseHistory();
+        history.setCellId(cell.getId());
+        history.setState(1);
+        history.setInsSampleId(samples.get(0).getId());
+        history.setWarehouseCode(warehouse.getName()+"-"+shelf.getName()+"-"+cell.getRow()+"-"+cell.getCol());
+        samples.get(0).setCellId(cell.getId());
+        insSampleMapper.updateById(samples.get(0));
+        return warehouseHistoryMapper.insert(history);
+    }
+
+    @Override
+    public int outWarehouse(String sampleCode) {
+        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode).select(InsSample::getId,InsSample::getCellId));
+        if(samples.size()!=1){
+            throw new ErrorException("鏍峰搧缂栧彿杈撳叆鏈夎");
+        }
+        if(samples.get(0).getCellId()==null){
+            throw new ErrorException("鏍峰搧 " + sampleCode + " 鏈叆搴�");
+        }
+        WarehouseHistory history = new WarehouseHistory();
+        history.setState(2);
+        history.setInsSampleId(samples.get(0).getId());
+        history.setCellId(samples.get(0).getCellId());
+        history.setWarehouseCode(warehouseHistoryMapper.selectOne(Wrappers.<WarehouseHistory>lambdaQuery().eq(WarehouseHistory::getInsSampleId, samples.get(0).getId()).select(WarehouseHistory::getWarehouseCode).orderByDesc(WarehouseHistory::getId).last("limit 1")).getWarehouseCode());
+        insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate().eq(InsSample::getId, samples.get(0).getId()).set(InsSample::getCellId, null));
+        return warehouseHistoryMapper.insert(history);
+    }
+
+    @Override
+    public Map<String, Object> getSampleRecord(Integer id) {
+        InsSample insSample = insSampleMapper.selectById(id);
+        List<HistoryDto> histories = warehouseHistoryMapper.getHistoryListBySampleId(id);
+        Map<String, Object> map = new HashMap<>();
+        Map<String, String> sampleHistory = new HashMap<>();
+        WarehouseHistory history = histories.get(histories.size() - 1);
+        if(history.getState() == 1){
+            sampleHistory.put("date", history.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            sampleHistory.put("user", warehouseHistoryMapper.getUserNameById(history.getCreateUser()));
+            sampleHistory.put("code", history.getWarehouseCode());
+        }
+        map.put("sampleHistory", sampleHistory);
+        map.put("insSample", insSample);
+        map.put("histories", histories);
+        map.put("products", insProductMapper.getProductAndResult(id));
+        return map;
+    }
+
+    @Override
+    public int searchSampleId(String sampleCode) {
+        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode).select(InsSample::getId));
+        if(samples.size()!=1){
+            throw new ErrorException("鏍峰搧缂栧彿杈撳叆鏈夎");
+        }
+        return samples.get(0).getId();
+    }
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/util/SheetWriteHandlerUtil.java b/inspect-server/src/main/java/com/ruoyi/inspect/util/SheetWriteHandlerUtil.java
new file mode 100644
index 0000000..a9f274d
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/util/SheetWriteHandlerUtil.java
@@ -0,0 +1,44 @@
+package com.ruoyi.inspect.util;
+
+import com.alibaba.excel.write.handler.SheetWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+public class SheetWriteHandlerUtil implements SheetWriteHandler {
+    private final String title;
+    private final Integer header;
+
+    public SheetWriteHandlerUtil(String title, Integer header) {
+        this.title = title;
+        this.header = header;
+    }
+
+    @Override
+    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
+
+    }
+
+    @Override
+    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
+        Workbook workbook = writeWorkbookHolder.getWorkbook();
+        Sheet sheet = workbook.getSheetAt(0);
+        //璁剧疆鏍囬
+        Row row1 = sheet.createRow(0);
+        row1.setHeight((short) 700);
+        Cell cell = row1.createCell(0);
+        //璁剧疆鍗曞厓鏍煎唴瀹�
+        cell.setCellValue(title);
+        CellStyle cellStyle = workbook.createCellStyle();
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        Font font = workbook.createFont();
+        font.setBold(true);
+        font.setFontHeight((short) 450);
+        cellStyle.setFont(font);
+        cell.setCellStyle(cellStyle);
+        // 绗竴琛屽ぇ鏍囬鍗犱綅璁剧疆
+        sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, header-1));
+    }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/DeviceVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/DeviceVO.java
new file mode 100644
index 0000000..22fb3b0
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/DeviceVO.java
@@ -0,0 +1,30 @@
+package com.ruoyi.inspect.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class DeviceVO implements Serializable {
+
+    /**
+     * 璁惧鍚嶇О
+     */
+    private String deviceName;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String specificationModel;
+
+    /**
+     * 璁惧绠$悊缂栧彿
+     */
+    private String managementNumber;
+
+    /**
+     * 璁惧鏈夋晥鏍″噯鏃ユ湡
+     */
+    private String latestTraceability;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/ExportInsProductVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/ExportInsProductVO.java
new file mode 100644
index 0000000..461f4d8
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/ExportInsProductVO.java
@@ -0,0 +1,158 @@
+package com.ruoyi.inspect.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+public class ExportInsProductVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓嬪崟鏃堕棿
+     */
+    @ApiModelProperty("涓嬪崟鏃堕棿")
+    private LocalDate createTime;
+
+    /**
+     *瀹㈡埛鍚嶇О
+     */
+    @ApiModelProperty("瀹㈡埛鍚嶇О")
+    private String customName;
+
+    /**
+     *濮旀墭鍗曞彿
+     */
+    @ApiModelProperty("濮旀墭鍗曞彿")
+    private String entrustCode;
+
+    /**
+     *鏍峰搧缂栧彿
+     */
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    /**
+     *鏍峰搧澶х被
+     */
+    @ApiModelProperty("鏍峰搧澶х被")
+    private String sampleType;
+
+    /**
+     *鏍峰搧鍚嶇О
+     */
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sample;
+
+    /**
+     *鍨嬪彿
+     */
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+    /**
+     *鍗曚綅
+     */
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    /**
+     *妫�楠岄」
+     */
+    @ApiModelProperty("妫�楠岄」")
+    private String inspectionItem;
+
+    /**
+     *妫�楠屽瓙椤�
+     */
+    @ApiModelProperty("妫�楠屽瓙椤�")
+    private String inspectionItemSubclass;
+
+    /**
+     *瀛愯瘯楠屽
+     */
+    @ApiModelProperty("瀛愯瘯楠屽")
+    private String sonLaboratory;
+
+    /**
+     *鏍囧噯瑕佹眰
+     */
+    @ApiModelProperty("鏍囧噯瑕佹眰")
+    private String tell;
+
+    /**
+     *妫�楠岀粨鏋�
+     */
+    @ApiModelProperty("妫�楠岀粨鏋�")
+    private String lastValue;
+
+    /**
+     *缁撴灉鍒ゅ畾
+     */
+    @ApiModelProperty("缁撴灉鍒ゅ畾")
+    private String insResult;
+
+    /**
+     *鍏夌氦甯︾紪鍙�
+     */
+    @ApiModelProperty("鍏夌氦甯︾紪鍙�")
+    private String code;
+
+    /**
+     *妫�楠岃繃绋嬪��
+     */
+    @ApiModelProperty("妫�楠岃繃绋嬪��")
+    private String insValue;
+
+    /**
+     *妫�楠屾椂闂�
+     */
+    @ApiModelProperty("妫�楠屾椂闂�")
+    private LocalDateTime checkTime;
+
+    /**
+     *妫�楠屼汉
+     */
+    @ApiModelProperty("妫�楠屼汉")
+    private String checkName;
+
+    /**
+     *濂楃鑹叉爣
+     */
+    @ApiModelProperty("濂楃鑹叉爣")
+    private String bushColor;
+
+    /**
+     * 鍏夌氦鑹叉爣
+     */
+    @ApiModelProperty("鍏夌氦鑹叉爣")
+    private String color;
+
+    /**
+     *鐗规畩椤圭埗id
+     */
+    @ApiModelProperty("鐗规畩椤圭埗id")
+    private Integer specialItemParentId;
+
+
+    /**
+     * 娓╁害寰幆 妫�楠岄」鍒嗙被
+     */
+    @ApiModelProperty("娓╁害寰幆 妫�楠岄」鍒嗙被")
+    private String inspectionItemClass;
+
+
+    /**
+     * 璁$畻鍊�
+     */
+    @ApiModelProperty("璁$畻鍊�")
+    private String comValue;
+
+    @TableField(exist = false)
+    private LocalDate sendTime;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsFibersVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsFibersVO.java
new file mode 100644
index 0000000..622e6d5
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsFibersVO.java
@@ -0,0 +1,24 @@
+package com.ruoyi.inspect.vo;
+
+import com.ruoyi.inspect.pojo.InsFibers;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class InsFibersVO extends InsFibers implements Serializable {
+
+    /**
+     * 濂楃鑹叉爣
+     */
+    @ApiModelProperty(value = "濂楃鑹叉爣")
+    private String bushingColor;
+
+    /**
+     * 鏄惁瀛樺湪妫�楠岄」鐩�
+     */
+    @ApiModelProperty(value = "鏄惁瀛樺湪妫�楠岄」鐩�")
+    private Boolean isExistProduct;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanTaskSwitchVo.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanTaskSwitchVo.java
new file mode 100644
index 0000000..9504e33
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanTaskSwitchVo.java
@@ -0,0 +1,36 @@
+package com.ruoyi.inspect.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class InsOrderPlanTaskSwitchVo {
+    private String id;
+
+    @ApiModelProperty(name = "濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty(name = "妫�楠屽璞�")
+    private String sampleType;
+
+    @ApiModelProperty(name = "绱ф�ョ▼搴�")
+    private String type;
+
+    @ApiModelProperty(name = "鐘舵��")
+    private String insState;
+
+    @ApiModelProperty(name = "绾﹀畾鏃堕棿")
+    private String appointed;
+
+    @ApiModelProperty(name = "涓嬪彂鏃堕棿")
+    private String sendTime;
+
+    private Integer userId;
+
+    private String sonLaboratory;
+    private String laboratory;
+
+    private Integer orderUserId;
+
+    private Integer verifyUser;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanVO.java
new file mode 100644
index 0000000..821a4c6
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanVO.java
@@ -0,0 +1,56 @@
+package com.ruoyi.inspect.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class InsOrderPlanVO {
+
+
+    private String id;
+
+    @ApiModelProperty(name = "濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty(name = "濮旀墭鍗曚綅")
+    private String company;
+
+    @ApiModelProperty(name = "鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ApiModelProperty(name = "鏍峰搧鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty(name = "绱ф�ョ▼搴�")
+    private String type;
+
+    @ApiModelProperty(name = "鐘舵��")
+    private String insState;
+
+    @ApiModelProperty(name = "妫�楠屼汉")
+    private String userName;
+    @ApiModelProperty(name = "澶嶆牳浜�")
+    private String checkName;
+
+    private Integer userId;
+
+    @ApiModelProperty(name = "妫�楠屽紑濮嬫椂闂�")
+    private String insTime;
+
+    @ApiModelProperty(name = "绾﹀畾鏃堕棿")
+    private String appointed;
+
+    @ApiModelProperty(name = "涓嬪彂鏃堕棿")
+    private String sendTime;
+
+    @ApiModelProperty(name = "鐞嗙敱")
+    private String verifyTell;
+
+
+    private String sonLaboratory;
+
+    private Integer orderUserId;
+
+    private Integer verifyUser;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductFiberVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductFiberVO.java
new file mode 100644
index 0000000..50d57c4
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductFiberVO.java
@@ -0,0 +1,36 @@
+package com.ruoyi.inspect.vo;
+
+import com.ruoyi.inspect.pojo.InsProduct;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class InsProductFiberVO extends InsProduct implements Serializable {
+
+    /**
+     * 濂楃鑹叉爣
+     */
+    @ApiModelProperty("濂楃鑹叉爣")
+    private String bushColor;
+
+    /**
+     * 鍏夌氦鑹叉爣
+     */
+    @ApiModelProperty("鍏夌氦鑹叉爣")
+    private String color;
+
+    /**
+     * 鍏夌氦甯︾紪鍙�
+     */
+    @ApiModelProperty("鍏夌氦甯︾紪鍙�")
+    private String code;
+
+    /**
+     * 妫�楠岃繃绋嬪��
+     */
+    @ApiModelProperty("妫�楠岃繃绋嬪��")
+    private String insValue;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductVO.java
new file mode 100644
index 0000000..3cb2113
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductVO.java
@@ -0,0 +1,41 @@
+package com.ruoyi.inspect.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class InsProductVO implements Serializable {
+
+    @ApiModelProperty(value = "妫�楠岄」鐩甶d")
+    private Integer id;
+
+    @ApiModelProperty(value = "鏍峰搧id")
+    private Integer sampleId;
+
+    @ApiModelProperty(value = "鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty(value = "鏍峰搧鐘舵��")
+    private Integer state;
+
+    @ApiModelProperty(value = "鏍峰搧鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty(value = "妫�楠岄」")
+    private String testItem;
+
+    @ApiModelProperty(value = "妫�楠屽瓙椤�")
+    private String testItemChildren;
+
+    @ApiModelProperty(value = "璇曢獙鏂规硶")
+    private String testMethod;
+
+    @ApiModelProperty(value = "鏍囧噯瑕佹眰")
+    private String requirement;
+
+    @ApiModelProperty(value = "妫�楠屼汉")
+    private String inspectName;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/ProductVo.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/ProductVo.java
new file mode 100644
index 0000000..bb99385
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/ProductVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.vo;
+
+import com.ruoyi.inspect.pojo.InsProduct;
+import lombok.Data;
+
+@Data
+public class ProductVo  {
+
+    //绠¤壊鏍�
+    private String bushColor;
+
+    //鍏夌氦鑹叉爣
+    private String color;
+
+    //鍏夌氦甯︾紪鍙�
+    private String code;
+
+    //妫�楠岄」鐩�
+    private InsProduct insProduct;
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsChildrenVo.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsChildrenVo.java
new file mode 100644
index 0000000..466ac2e
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsChildrenVo.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SampleDefectsChildrenVo {
+    private String entrust_code;//濮旀墭缂栫爜
+    private String inspection_item;//妫�楠岄」
+    private String name;//妫�楠屼汉
+    private LocalDateTime create_time;//妫�楠屾棩鏈�
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsFatherVo.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsFatherVo.java
new file mode 100644
index 0000000..c9e8d24
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsFatherVo.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SampleDefectsFatherVo {
+    private Integer id;//鏍峰搧id
+    private String sample;//鏍峰搧鍚嶇О
+
+    private List<SampleDefectsChildrenVo> children;//瀛愮被
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleVo.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleVo.java
new file mode 100644
index 0000000..90e0429
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleVo.java
@@ -0,0 +1,10 @@
+package com.ruoyi.inspect.vo;
+
+import com.ruoyi.inspect.pojo.InsSample;
+import lombok.Data;
+
+@Data
+public class SampleVo extends InsSample {
+    //璇曢獙鏂规硶
+    private  String methodName;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java
new file mode 100644
index 0000000..4a93e85
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.inspect.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鏌ヨ鏍囧噯搴撻厤缃伐鏃惰繑鍥炲璞�
+ */
+@Data
+public class StandardProductVO implements Serializable {
+
+    @ApiModelProperty(value = "宸ユ椂(H)")
+    private String manHour;
+
+    @ApiModelProperty(value = "宸ユ椂鍒嗙粍")
+    private String manHourGroup;
+
+    @ApiModelProperty(value = "鍖洪棿璁剧疆")
+    private String section;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/UnInsProductsVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/UnInsProductsVO.java
new file mode 100644
index 0000000..7407055
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/UnInsProductsVO.java
@@ -0,0 +1,32 @@
+package com.ruoyi.inspect.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ColumnWidth(25)
+public class UnInsProductsVO {
+
+    @ExcelProperty("鏃ユ湡")
+    @ApiModelProperty(value = "鏃ユ湡")
+    private String sendTime;
+
+    @ExcelProperty("濮旀墭鍗曞彿")
+    @ApiModelProperty(value = "濮旀墭鍗曞彿")
+    private String entrustCode;
+
+    @ExcelProperty("鏍峰搧鍚嶇О")
+    @ApiModelProperty(value = "鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ExcelProperty("鏍峰搧缂栧彿")
+    @ApiModelProperty(value = "鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ExcelProperty("寰呮椤圭洰")
+    @ApiModelProperty(value = "寰呮椤圭洰")
+    private String unInsProduct;
+
+}
diff --git a/inspect-server/src/main/resources/mapper/InsBushingMapper.xml b/inspect-server/src/main/resources/mapper/InsBushingMapper.xml
new file mode 100644
index 0000000..814801a
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsBushingMapper.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsBushingMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsBushing">
+        <id column="id" property="id" />
+        <result column="color" property="color" />
+        <result column="stand_num" property="standNum" />
+        <result column="test_num" property="testNum" />
+        <result column="ins_sample_id" property="insSampleId" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+    <select id="selectFibersByBushingId" resultMap="FibersDto">
+        select
+            fs.id, fs.code, fs.model, fs.standard, fs.num, fs.ins_bushing_id,
+            p.id pid, p.inspection_item, p.inspection_item_subclass, p.factory, p.laboratory, p.sample_type, p.sample, p.model pmodel, p.son_laboratory, p.unit, p.price, p.man_hour, p.man_hour_group, p.inspection_item_type, p.inspection_value_type, p.device_group, p.checkout_number, p.section, p.value_type, p.method, p.man_day, p.bsm, p.ask, p.tell, p.`last_value`, p.ins_result, p.state, p.ins_sample_id, p.template_id, p.dic, p.method_s,
+            ipr.ins_value,ipr.com_value,ipr.equip_value,ipr.equip_name
+        from ins_fibers fs
+        left join ins_product p on p.ins_fibers_id = fs.id
+        left join ins_product_result ipr on p.id = ipr.ins_product_id
+        where fs.ins_bushing_id = #{bushingId}
+    </select>
+
+    <select id="selectFiberByBushingId" resultMap="FiberDto">
+        select f.id, f.bush_color, f.color, f.model, f.standard, f.ins_bushing_id,
+            p.id pid, p.inspection_item, p.inspection_item_subclass, p.factory, p.laboratory, p.sample_type, p.sample, p.model pmodel, p.son_laboratory, p.unit, p.price, p.man_hour, p.man_hour_group, p.inspection_item_type, p.inspection_value_type, p.device_group, p.checkout_number, p.section, p.value_type, p.method, p.man_day, p.bsm, p.ask, p.tell, p.`last_value`, p.ins_result, p.state, p.ins_sample_id, p.template_id, p.dic, p.method_s,
+               ipr.ins_value,ipr.com_value,ipr.equip_value,ipr.equip_name
+        from ins_fiber f
+        left join ins_product p on p.ins_fiber_id = f.id
+        left join ins_product_result ipr on p.id = ipr.ins_product_id
+        where f.ins_bushing_id = #{bushingId}
+    </select>
+
+    <select id="selectFiberByFibersId" resultMap="FiberDto">
+        select f.id, f.bush_color, f.color, f.model, f.standard, f.ins_bushing_id,
+               p.id pid, p.inspection_item, p.inspection_item_subclass, p.factory, p.laboratory, p.sample_type, p.sample, p.model pmodel, p.son_laboratory, p.unit, p.price, p.man_hour, p.man_hour_group, p.inspection_item_type, p.inspection_value_type, p.device_group, p.checkout_number, p.section, p.value_type, p.method, p.man_day, p.bsm, p.ask, p.tell, p.`last_value`, p.ins_result, p.state, p.ins_sample_id, p.template_id, p.dic, p.method_s,
+               ipr.ins_value,ipr.com_value,ipr.equip_value,ipr.equip_name
+        from ins_fiber f
+        left join ins_product p on p.ins_fiber_id = f.id
+        left join ins_product_result ipr on p.id = ipr.ins_product_id
+        where f.ins_fibers_id = #{fibersId}
+    </select>
+
+    <resultMap id="FibersDto" type="com.ruoyi.inspect.dto.FibersDto">
+        <id property="id" column="id"/>
+        <result property="code" column="code"/>
+        <result property="insBushingId" column="ins_bushing_id"/>
+        <result property="model" column="model"/>
+        <result property="standard" column="standard"/>
+        <result property="num" column="num"/>
+        <collection property="productList" resultMap="product"/>
+    </resultMap>
+
+    <resultMap id="FiberDto" type="com.ruoyi.inspect.dto.FiberDto">
+        <id property="id" column="id"/>
+        <result property="bushColor" column="bush_color"/>
+        <result property="insBushingId" column="ins_bushing_id"/>
+        <result property="model" column="model"/>
+        <result property="standard" column="standard"/>
+        <result property="color" column="color"/>
+        <collection property="productList" resultMap="product"/>
+    </resultMap>
+
+    <resultMap id="product" type="com.ruoyi.inspect.pojo.InsProduct">
+        <id property="id" column="pid" jdbcType="INTEGER"/>
+        <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
+        <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
+        <result property="factory" column="factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
+        <result property="model" column="pmodel" jdbcType="VARCHAR"/>
+        <result property="sonLaboratory" column="son_laboratory" jdbcType="VARCHAR"/>
+        <result property="unit" column="unit" jdbcType="VARCHAR"/>
+        <result property="price" column="price" jdbcType="DECIMAL"/>
+        <result property="manHour" column="man_hour" jdbcType="DOUBLE"/>
+        <result property="manHourGroup" column="man_hour_group" jdbcType="VARCHAR"/>
+        <result property="inspectionItemType" column="inspection_item_type" jdbcType="VARCHAR"/>
+        <result property="inspectionValueType" column="inspection_value_type" jdbcType="VARCHAR"/>
+        <result property="deviceGroup" column="device_group" jdbcType="VARCHAR"/>
+        <result property="checkoutNumber" column="checkout_number" jdbcType="INTEGER"/>
+        <result property="section" column="section" jdbcType="VARCHAR"/>
+        <result property="valueType" column="value_type" jdbcType="VARCHAR"/>
+        <result property="method" column="method" jdbcType="VARCHAR"/>
+        <result property="manDay" column="man_day" jdbcType="INTEGER"/>
+        <result property="bsm" column="bsm" jdbcType="VARCHAR"/>
+        <result property="ask" column="ask" jdbcType="VARCHAR"/>
+        <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
+        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+        <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
+        <result property="templateId" column="template_id" jdbcType="INTEGER"/>
+        <result property="methodS" column="method_s"/>
+        <result property="tell" column="tell"/>
+        <result property="dic" column="dic"/>
+        <collection property="insProductResult" resultMap="insProductResult"/>
+    </resultMap>
+
+    <resultMap id="insProductResult" type="com.ruoyi.inspect.pojo.InsProductResult">
+        <result property="insValue" column="ins_value" jdbcType="VARCHAR"/>
+        <result property="comValue" column="com_value" jdbcType="VARCHAR"/>
+        <result property="equipValue" column="equip_value" jdbcType="VARCHAR"/>
+        <result property="equipName" column="equip_name" jdbcType="VARBINARY"/>
+    </resultMap>
+
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsFiberMapper.xml b/inspect-server/src/main/resources/mapper/InsFiberMapper.xml
new file mode 100644
index 0000000..1b9aa18
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsFiberMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsFiberMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsFiber">
+        <id column="id" property="id" />
+        <result column="bush_color" property="bushColor" />
+        <result column="color" property="color" />
+        <result column="model" property="model" />
+        <result column="standard" property="standard" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="ins_bushing_id" property="insBushingId" />
+        <result column="ins_fibers_id" property="insFibersId" />
+    </resultMap>
+    <select id="selectInsFibersByInsFiberId" resultType="com.ruoyi.inspect.pojo.InsFibers">
+
+    </select>
+
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsFibersMapper.xml b/inspect-server/src/main/resources/mapper/InsFibersMapper.xml
new file mode 100644
index 0000000..d8ea016
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsFibersMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsFibersMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsFibers">
+        <id column="id" property="id" />
+        <result column="code" property="code" />
+        <result column="model" property="model" />
+        <result column="standard" property="standard" />
+        <result column="num" property="num" />
+<!--        <result column="ins_product_id" property="insProductId" />-->
+        <result column="ins_bushing_id" property="insBushingId" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
new file mode 100644
index 0000000..945a4b3
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsOrderFileMapper">
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrderFile">
+        <id column="id" property="id"/>
+        <result column="ins_order_id" property="insOrderId"/>
+        <result column="type" property="type"/>
+        <result column="file_url" property="fileUrl"/>
+        <result column="file_name" property="fileName"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+    <select id="getFileList" resultType="com.ruoyi.inspect.pojo.InsOrderFile">
+        select A.*
+        from (select iof.*, name
+              from ins_order_file iof
+                       left join user u on iof.create_user = u.id
+              where iof.ins_order_id = #{insOrderId}) A
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
new file mode 100644
index 0000000..d6baaef
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -0,0 +1,1247 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsOrderMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrder">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="entrustCode" column="entrust_code" jdbcType="VARCHAR"/>
+        <result property="outEntrustCode" column="out_entrust_code" jdbcType="VARCHAR"/>
+        <result property="custom" column="custom" jdbcType="VARCHAR"/>
+        <result property="company" column="company" jdbcType="VARCHAR"/>
+        <result property="code" column="code" jdbcType="VARCHAR"/>
+        <result property="type" column="type" jdbcType="INTEGER"/>
+        <result property="appointed" column="appointed" jdbcType="TIMESTAMP"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+        <result property="remark" column="remark" jdbcType="VARCHAR"/>
+        <result property="otcCode" column="otc_code" jdbcType="VARCHAR"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="revocationInsProductIds" column="revocation_ins_product_ids" />
+        <result property="isRevocation" column="is_revocation" />
+    </resultMap>
+
+    <resultMap id="OrderThingDto" type="com.ruoyi.inspect.dto.OrderThingDto">
+        <result property="id" column="id"/>
+        <result property="company" column="company"/>
+        <result property="entrustCode" column="entrust_code"/>
+        <result property="sampleCode" column="sample_code"/>
+        <result property="custom" column="custom"/>
+        <result property="sample" column="sample"/>
+        <result property="model" column="model"/>
+        <result property="sampleNum" column="sample_num"/>
+        <result property="remark" column="remark"/>
+        <result property="insResult" column="ins_result"/>
+        <result property="createTime" column="create_time"/>
+        <collection property="products" resultMap="ProductThingDto"/>
+    </resultMap>
+
+    <resultMap id="ProductThingDto" type="com.ruoyi.inspect.dto.ProductThingDto">
+        <result property="productId" column="id"/>
+        <result property="inspectionItem" column="inspection_item"/>
+        <result property="lastValue" column="last_value"/>
+        <result property="insResult" column="ins_result"/>
+        <collection property="productResults" resultMap="productResultDto"/>
+    </resultMap>
+
+    <resultMap id="productResultDto" type="com.ruoyi.inspect.dto.productResultDto">
+        <result property="id" column="id"/>
+        <result property="insValue" column="ins_value"/>
+        <result property="insResult" column="ins_result"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+    <resultMap id="selectSampleDefectsMap" type="com.ruoyi.inspect.vo.SampleDefectsFatherVo">
+        <id column="id" property="id"/>
+        <result column="sample" property="sample"/>
+        <association property="children" resultMap="SampleDefectsChildrenMap" javaType="java.util.List"/>
+    </resultMap>
+    <select id="getInsOrderPlanList" resultType="map">
+        SELECT
+            io.id,
+            io.entrust_code As entrustCode,
+            isa.sample_code As sampleCode,
+            ip.inspection_item As inspectionItem,
+            ip.inspection_item_subclass As inspectionItemSubclass,
+            ip.last_value As lastValue,
+            ips.create_user As createUser,
+            (SELECT `name` FROM `user` u WHERE u.id = ips.create_user) AS userName,
+            io.send_time As sendTime,
+            ios.ins_time As insTime,
+            CASE
+                when ifi.bush_color is not null then ifi.bush_color
+                when ib.color is not null then ib.color
+            else '-'
+            END AS bushing,
+            CASE
+                when ifi.color is not null then ifi.color
+            else '-'
+            END AS fiber,
+            '-' as fibers
+        FROM
+            ins_order io
+                LEFT JOIN ins_sample isa ON io.id = isa.ins_order_id
+                LEFT JOIN ins_product ip ON isa.id = ip.ins_sample_id
+                LEFT JOIN ins_product_result ips ON ip.id = ips.ins_product_id
+                LEFT JOIN ins_order_state ios ON ios.ins_order_id = io.id
+                left join ins_fiber ifi on ip.ins_fiber_id = ifi.id
+                LEFT JOIN ins_bushing ib ON ip.ins_bush_id = ib.id
+        WHERE  ip.ins_result IN (0,1,3)
+          AND ip.son_laboratory = #{sonLaboratory}
+        AND ios.laboratory = #{sonLaboratory}
+          AND ip.sample_type = #{sampleType}
+        AND ip.special_item_parent_id IS NULL
+        <if test="entrustCode != null and entrustCode != ''">
+            AND io.entrust_code like concat('%',#{entrustCode},'%')
+        </if>
+        <if test="sampleCode != null and sampleCode != ''">
+            AND isa.sample_code like concat('%',#{sampleCode},'%')
+        </if>
+        <if test="createUser != null and createUser != ''">
+            AND ips.create_user = #{createUser}
+        </if>
+        <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+            AND ios.ins_time between #{startTime} and #{endTime}
+        </if>
+
+    </select>
+
+    <select id="getTabHeader" resultType="map">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    A.id,
+                    laboratory,
+                    sample,
+                    son_laboratory AS sonLaboratory,
+                    inspection_item AS inspectionItem,
+                    inspection_item_subclass AS inspectionItemSubclass
+                FROM
+                    (
+                        SELECT
+                            *,
+                            CASE
+
+                                WHEN INSTR( sample, ',' ) > 0 THEN
+                                    SUBSTRING_INDEX( SUBSTRING_INDEX( sample, '","', 1 ), '"', - 1 )
+                                WHEN sample = '[""]' THEN
+                                    NULL
+                                WHEN sample = '[]' THEN
+                                    NULL ELSE TRIM(
+                                    BOTH '["]'
+                                    FROM
+                                    SUBSTRING_INDEX( REPLACE ( sample, '[["', '' ), '"]]', 1 ))
+                                END AS samples
+                        FROM
+                            structure_item_parameter
+                    ) A
+                        LEFT JOIN structure_test_object sto ON samples = specimen_name
+                WHERE son_laboratory = #{sonLaboratory}
+                <if test="sample != null and sample != ''">
+                    AND sample like concat('%',#{sample},'%')
+                </if>
+            )B ORDER BY id
+    </select>
+    <select id="selectInsOrderPage" resultType="com.ruoyi.inspect.dto.SampleOrderDto">
+        select
+        id,
+        entrust_code,
+        custom,
+        company,
+        code,
+        type,
+        appointed,
+        state,
+        tell,
+        remark,
+        otc_code,
+        user_id,
+        mating,
+        create_user,
+        create_time,
+        update_user,
+        update_time,
+        send_time,
+        ins_state,
+        factory,
+        laboratory,
+        sample_type,
+        sample,
+        ins_result,
+        ins_time,
+        processing,
+        is_leave,
+        order_type,
+        send,
+        form_type,
+        phone,
+        examine_time,
+        engineering,
+        engineering_en,
+        production,
+        production_en,
+        company_id,
+        prepare_user,
+        out_entrust_code,
+        is_revocation,
+        revocation_ins_product_ids,
+        revocation_time,
+        issuing_date,
+        assign,
+        inspect_id,
+        report_id,
+        is_ratify,
+        url,
+        url_s,
+        temp_url_pdf,
+        sample_num,
+        insProgress,
+        sample_code,
+        sample_name,
+        sample_model,
+        name
+        from (
+        SELECT
+        io.id,
+        io.entrust_code,
+        io.custom,
+        io.company,
+        io.code,
+        io.type,
+        io.appointed,
+        io.state,
+        io.tell,
+        io.remark,
+        io.otc_code,
+        io.user_id,
+        io.mating,
+        io.create_user,
+        io.create_time,
+        io.update_user,
+        io.update_time,
+        io.send_time,
+        io.ins_state,
+        io.factory,
+        io.laboratory,
+        io.sample_type,
+        io.sample,
+        io.ins_result,
+        io.ins_time,
+        io.processing,
+        io.is_leave,
+        io.order_type,
+        io.send,
+        io.form_type,
+        io.phone,
+        io.examine_time,
+        io.engineering,
+        io.engineering_en,
+        io.production,
+        io.production_en,
+        io.company_id,
+        io.prepare_user,
+        io.out_entrust_code,
+        io.is_revocation,
+        io.revocation_ins_product_ids,
+        io.revocation_time,
+        io.issuing_date,
+        COUNT(iot.id) assign,
+        isau.id as inspect_id,
+        ir.id report_id,
+        ir.is_ratify,
+        ir.url,
+        ir.url_s,
+        ir.temp_url_pdf,
+        total_product_counts.sample_num,
+        CONCAT(ROUND(total_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
+--         sample_counts.sample_num,
+--         CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
+        GROUP_CONCAT(DISTINCT isa.sample_code SEPARATOR '锛�') AS sample_code,
+        GROUP_CONCAT(DISTINCT isa.sample SEPARATOR ' ') AS sample_name,
+        GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
+        u.name
+        FROM
+        ins_order io
+        LEFT JOIN
+        ins_sample isa ON io.id = isa.ins_order_id
+        LEFT JOIN
+        ins_sample_user isau ON isau.ins_sample_id = io.id
+        LEFT JOIN
+        ins_order_state iot ON iot.ins_order_id = io.id
+        LEFT JOIN
+        ins_report ir ON io.id = ir.ins_order_id
+        LEFT JOIN
+        user u ON io.create_user = u.id
+        LEFT JOIN (
+        SELECT ins_sample.ins_order_id,
+        COUNT(DISTINCT ins_sample_id) as sample_num,
+        COUNT(ins_product.id) AS total_count,
+        COUNT(CASE WHEN ins_product.ins_result is not null and ins_product.ins_result !='2' THEN ins_product.ins_result END) AS approved_count
+        FROM ins_product
+        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
+        WHERE ins_product.state = 1
+        GROUP BY ins_sample.ins_order_id
+        ) total_product_counts
+        ON io.id = total_product_counts.ins_order_id
+--         LEFT JOIN
+--         (
+--         SELECT
+--         ins_order_id,
+--         COUNT(*) AS sample_num
+--         FROM ins_sample
+--         WHERE
+--         id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id = ip.ins_sample_id where ip.id is not null)s )
+--         GROUP BY ins_order_id
+--         ) sample_counts ON io.id = sample_counts.ins_order_id
+--         LEFT JOIN
+--         (SELECT ins_sample.ins_order_id, COUNT(*) AS total_count
+--         FROM ins_product
+--         JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
+--         WHERE ins_product.state = 1
+--         GROUP BY ins_sample.ins_order_id) total_product_counts ON io.id = total_product_counts.ins_order_id
+--         LEFT JOIN
+--         (SELECT ins_sample.ins_order_id, COUNT(*) AS approved_count
+--         FROM ins_product
+--         JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
+--         WHERE ins_product.state = 1 AND ins_product.ins_result is not null AND ins_product.ins_result != '2'
+--         GROUP BY ins_sample.ins_order_id) approved_product_counts ON io.id = approved_product_counts.ins_order_id
+          <where>
+              <if test="laboratory!=null and laboratory!=''">
+                  AND io.laboratory=#{laboratory}
+              </if>
+              <if test="eqState!=null and eqState!=''">
+                  AND io.state=#{eqState}
+              </if>
+              <if test="neState!=null and neState!=''">
+                  AND io.state != #{neState}
+              </if>
+              <if test="startTime != '' and startTime != null and endTime != null and endTime != ''">
+                  AND io.create_time between #{startTime} and #{endTime}
+              </if>
+          </where>
+        GROUP BY io.id,type
+        order by type desc,io.id desc
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="exportChecked" resultType="com.ruoyi.inspect.vo.ExportInsProductVO">
+        SELECT
+            i.create_time,
+            i.custom AS custom_name,
+            i.id,
+            i.entrust_code,
+            isa.id ins_sample_id,
+            isa.sample_code,
+            isa.sample,
+            isa.model,
+            isa.ins_state,
+            ip.id ins_product_id,
+            ip.state,
+            ip.unit,
+            ip.sample_type,
+            ip.inspection_item,
+            ip.inspection_item_subclass,
+            ip.son_laboratory,
+            ip.inspection_item_type,
+            ip.inspection_value_type,
+            ip.special_item_parent_id,
+            ip.tell,
+            ip.`last_value`,
+            case
+                WHEN ip.ins_result = 0 THEN '涓嶅悎鏍�'
+                WHEN ip.ins_result = 1 THEN '鍚堟牸'
+                WHEN ip.ins_result = 3 THEN '涓嶅垽瀹�'
+            ELSE ''
+            END AS ins_result,
+            ipr.equip_value,
+        ipr.com_value,
+        ip.inspection_item_class,
+            ifis.CODE,
+            ipr.ins_value,
+            ipr.create_time AS check_time,
+            u.NAME AS check_name,
+            CASE
+                WHEN ifi.bush_color IS NOT NULL THEN
+                    ifi.bush_color
+                WHEN ib1.color IS NOT NULL THEN
+                    ib1.color
+                WHEN ib2.color IS NOT NULL THEN
+                    ib2.color ELSE ''
+                END AS bush_color,
+            ifi.color
+        FROM
+            ins_sample isa
+                LEFT JOIN ins_order i ON isa.ins_order_id = i.id
+                LEFT JOIN ins_product ip ON isa.id = ip.ins_sample_id
+                LEFT JOIN ins_product_result ipr ON ip.id = ipr.ins_product_id
+                LEFT JOIN ins_fiber ifi ON ip.ins_fiber_id = ifi.id
+                LEFT JOIN ins_fibers ifis ON ip.ins_fibers_id = ifis.id
+        LEFT JOIN ins_bushing ib1 ON ip.ins_bush_id = ib1.id
+        LEFT JOIN ins_bushing ib2 ON ib2.id = ifis.ins_bushing_id
+                LEFT JOIN USER u ON u.id = ipr.create_user
+        WHERE
+            ip.state = 1 	AND
+            (i.state = 4 or i.state = 1)
+          <if test="startTime != '' and startTime != null and endTime != null and endTime != ''">
+              AND i.create_time BETWEEN #{startTime} AND #{endTime}
+          </if>
+        <if test="names != null and names.size > 0">
+                AND   i.custom in
+        <foreach collection="names" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+            </if>
+        ORDER BY
+            i.create_time,
+            ins_product_id ASC
+    </select>
+
+
+
+    <resultMap id="SampleDefectsChildrenMap" type="com.ruoyi.inspect.vo.SampleDefectsChildrenVo">
+        <result column="entrust_code" property="entrust_code"/>
+        <result column="inspection_item" property="inspection_item"/>
+        <result column="name" property="name"/>
+        <result column="create_time" property="create_time"/>
+    </resultMap>
+    <select id="selectInsOrderParameter" resultType="com.ruoyi.inspect.pojo.InsOrder">
+        select *
+        from (
+        select
+        id,
+        appointed,
+        user_id,
+        create_user,
+        otc_code,
+        code,
+        custom,
+        update_user,
+        update_time,
+        type,
+        entrust_code,
+        company,
+        remark,
+        create_time,
+        state
+        from ins_order
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <select id="getLaboratoryCode" resultType="java.lang.String">
+        select laboratory_number
+        from laboratory
+        where laboratory_name = #{name}
+    </select>
+    <select id="selectSampleAndProductByOrderId" resultType="com.ruoyi.inspect.dto.SampleProductDto2">
+        select *
+        from (
+        select
+        i.id,
+        i.entrust_code,
+        isa.id ins_sample_id,
+        isa.sample_code,
+        isa.sample,
+        isa.model,
+        isa.ins_state,
+        ip.id ins_product_id,
+        ip.state,
+        ip.unit,
+        ip.inspection_item,
+        ip.inspection_item_subclass,
+        ip.son_laboratory,
+        ip.inspection_item_type,
+        ip.inspection_value_type,
+        ip.tell,
+        ip.`last_value`,
+        ip.ins_result,
+        ipr.equip_value,
+        ifis.code,
+        ipr.ins_value,
+        ipr.create_time as check_time,
+        u.name as check_name,
+        CASE
+            when ifi.bush_color is not null then ifi.bush_color
+            when ib1.color is not null then ib1.color
+            when ib2.color is not null then ib2.color
+            else ''
+        END AS bush_color,
+        ifi.color
+        from ins_sample isa
+        left join ins_order i on isa.ins_order_id = i.id
+        left join ins_product ip on isa.id = ip.ins_sample_id
+        left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        left join ins_fiber ifi on ip.ins_fiber_id = ifi.id
+        LEFT JOIN ins_fibers ifis ON ip.ins_fibers_id = ifis.id
+--         LEFT JOIN ins_bushing ib ON ip.ins_bush_id = ib.id or ib.id = ifis.ins_bushing_id
+            LEFT join ins_bushing ib1 on ip.ins_bush_id = ib1.id
+            LEFT JOIN ins_bushing ib2 on  ib2.id = ifis.ins_bushing_id
+        LEFT JOIN user u ON u.id = ipr.update_user
+        where ip.state = 1
+        and i.id=#{id}
+        order by case
+        when ip.man_hour_group is NULL then 1
+        when ip.man_hour_group = '' then 1
+        else 0 end,
+        CASE
+        WHEN ip.man_hour_group REGEXP '^[0-9]' THEN CAST(ip.man_hour_group AS UNSIGNED) -- 濡傛灉浠ユ暟瀛楀紑澶达紝鍒欐寜鐓ф暟瀛楀ぇ灏忔帓搴�
+        WHEN ip.man_hour_group REGEXP '[0-9]+'
+        THEN CAST(SUBSTRING(ip.man_hour_group, 2) AS UNSIGNED) END -- 鎻愬彇瀛楁瘝鍚庨潰鐨勬暟瀛楅儴鍒�
+        , ins_product_id asc
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <select id="selectCostStatistics" resultType="com.ruoyi.inspect.dto.CostStatisticsDto">
+        select * from (
+        SELECT
+        A.id,
+        A.entrust_code,
+        A.create_time,
+        A.sample,
+        A.model,
+        A.inspection_item,
+        A.company,
+        A.`name`,
+        COUNT( 1 ) num,
+        SUM( A.price ) price,
+        SUM( A.cost ) cost
+        FROM
+        (
+        SELECT
+        i.id,
+        i.laboratory,
+        i.entrust_code,
+        i.create_time,
+        isa.sample,
+        isa.sample_code,
+        isa.model,
+        c.price,
+        c.cost,
+        c.inspection_item,
+        i.company,
+        u.`name`,
+        i.create_user,
+        c.ins_sample_id
+        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
+        ip.ins_sample_id,
+        ip.man_hour,
+        ip.man_hour_group,
+        case
+        WHEN LOCATE('[', spl.price)>0 THEN
+        REPLACE(JSON_EXTRACT(spl.price, REPLACE(JSON_SEARCH(spl.section, 'one', ip.section), '"', '')),'"','')
+        ELSE spl.price
+        END AS price ,
+        GROUP_CONCAT( CONCAT( ip.inspection_item, '@', ip.inspection_item_subclass ) SEPARATOR ',' ) inspection_item2
+        FROM
+        ins_product ip
+        LEFT JOIN standard_product_list spl ON ip.laboratory = spl.laboratory
+        AND ip.sample_type = spl.sample_type
+        AND ip.sample = spl.sample
+        AND  ip.model = spl.model
+        AND ip.inspection_item = spl.inspection_item
+        AND ip.inspection_item_subclass = spl.inspection_item_subclass
+        AND ip.son_laboratory = spl.son_laboratory
+        AND ip.standard_method_list_id = spl.standard_method_list_id
+        WHERE
+        ip.state = 1
+          AND  ip.create_time between #{startTime} and #{endTime}
+        AND ip.template_id IS NOT NULL
+        GROUP BY
+        ip.ins_sample_id,
+        ip.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
+        where 1 = 1
+        <if test="laboratory != '' and laboratory != null">
+           AND A.laboratory = #{laboratory}
+        </if>
+        GROUP BY
+        A.id,
+        A.entrust_code,
+        A.create_time,
+        A.sample,
+        A.model,
+        A.inspection_item,
+        A.company,
+        A.`name`
+        )B
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <select id="selectDeviceList" resultType="com.ruoyi.inspect.vo.DeviceVO">
+        select
+        d.device_name,
+        d.specification_model,
+        d.management_number,
+        date_format(CASE
+            WHEN dmr.next_calibration_date is not null THEN dmr.next_calibration_date
+            WHEN d.next_calibration_date > CURDATE() THEN d.next_calibration_date
+        END,'%Y-%m-%d') AS latest_traceability
+        from device d left join
+        device_metric_record dmr on d.id = dmr.device_id
+        where d.management_number = #{name}
+        order by latest_traceability desc
+        limit 1
+    </select>
+
+    <update id="upInsOrderParameter" parameterType="com.ruoyi.inspect.pojo.InsOrder">
+        UPDATE ins_order
+        <set>
+            <if test="appointed!=null and appointed!='' ">
+                appointed=#{appointed},
+            </if>
+            <if test="userId!=null  ">
+                user_id=#{userId},
+            </if>
+            <if test="createUser!=null  ">
+                create_user=#{createUser}
+            </if>
+            <if test="otcCode!=null  ">
+                otc_code=#{otcCode}
+            </if>
+            <if test="code!=null  ">
+                code=#{code}
+            </if>
+            <if test="custom!=null  ">
+                custom=#{custom}
+            </if>
+            <if test="updateUser!=null  ">
+                update_user=#{updateUser}
+            </if>
+            <if test="updateTime!=null  ">
+                update_time=#{updateTime}
+            </if>
+            <if test="type!=null  ">
+                type=#{type}
+            </if>
+            <if test="entrustCode!=null  ">
+                entrust_code=#{entrustCode}
+            </if>
+            <if test="company!=null  ">
+                company=#{company}
+            </if>
+            <if test="remark!=null  ">
+                remark=#{remark}
+            </if>
+            <if test="createTime!=null  ">
+                create_time=#{createTime}
+            </if>
+            <if test="state!=null  ">
+                state=#{state}
+            </if>
+        </set>
+        <where>
+            id=#{id}
+        </where>
+    </update>
+    <update id="updateStatus">
+        update ins_order
+        set state=3
+        where id = #{id}
+    </update>
+
+    <select id="selectSampleDefects" resultMap="selectSampleDefectsMap">
+        SELECT io.entrust_code,sam.sample,ip.inspection_item,u.name,b.create_time, sam.id
+        from ins_order io
+        left JOIN ins_sample sam on io.id=sam.ins_order_id
+        LEFT JOIN ins_product ip on ip.ins_sample_id=sam.id
+        LEFT JOIN
+        (SELECT create_time,create_user,ins_product_id FROM
+        (select * FROM ins_product_user ORDER BY ins_product_user.create_time DESC) a
+        GROUP BY a.ins_product_id) b
+        on b.ins_product_id=ip.id
+        left JOIN `user` u on u.id=b.create_user
+        WHERE (ip.ins_result=0 OR ip.state=0)
+        <if test="inspectionItems != null and inspectionItems != ''">
+            and inspection_item like concat('%', #{inspectionItems}, '%')
+        </if>
+        <if test="orderNumber != null and orderNumber != ''">
+            and io.entrust_code like concat('%', #{orderNumber}, '%')
+        </if>
+    </select>
+
+    <select id="getCount" resultType="long">
+        select count(1)
+        from (
+        SELECT io.entrust_code,sam.sample,ip.inspection_item,u.name,b.create_time, sam.id
+        from ins_order io
+        left JOIN ins_sample sam on io.id=sam.ins_order_id
+        LEFT JOIN ins_product ip on ip.ins_sample_id=sam.id
+        LEFT JOIN
+        (SELECT create_time,create_user,ins_product_id FROM (select * FROM ins_product_user ORDER BY
+        ins_product_user.create_time DESC) a GROUP BY a.ins_product_id) b
+        on b.ins_product_id=ip.id
+        left JOIN `user` u on u.id=b.create_user
+        where (ip.ins_result=0 OR ip.state=0)
+        <if test="inspectionItems != null and inspectionItems != ''">
+            and inspection_item like concat('%', #{inspectionItems}, '%')
+        </if>
+        <if test="orderNumber != null and orderNumber != ''">
+            and io.entrust_code like concat('%', #{orderNumber}, '%')
+        </if>
+        ) temp
+    </select>
+    <select id="getEnumLabelByValue" resultType="java.lang.String">
+        select label
+        from enums
+        where value = #{value}
+    </select>
+    <select id="getStandardMethodCode" resultType="java.lang.String">
+        select code
+        from standard_method
+        where id = #{id}
+    </select>
+    <select id="selLaboratoryCode" resultType="java.lang.String">
+        select laboratory_code
+        from laboratory
+        where laboratory_name = #{laboratory}
+    </select>
+    <select id="selectReportModelByOrderId" resultType="java.util.Map">
+        select distinct id, name
+        from standard_template
+        where id in (select template_id
+                     from ins_product
+                     where son_laboratory = #{laboratory}
+                       and ins_sample_id in
+                           (select id from ins_sample where ins_order_id = #{id}))
+    </select>
+
+    <select id="selectCostStatistics2" resultType="com.ruoyi.inspect.dto.CostStatisticsDto">
+        select * from (
+        SELECT
+        A.id,
+        A.entrust_code,
+        A.create_time,
+        A.sample,
+        A.model,
+        A.inspection_item,
+        A.company,
+        A.`name`,
+        COUNT( 1 ) num,
+        SUM( A.price ) price,
+        SUM( A.cost ) cost
+        FROM
+        (
+        SELECT
+        i.id,
+        i.laboratory,
+        i.entrust_code,
+        i.create_time,
+        isa.sample,
+        isa.sample_code,
+        isa.model,
+        c.price,
+        c.cost,
+        c.inspection_item,
+        i.company,
+        u.`name`,
+        i.create_user,
+        c.ins_sample_id
+        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
+        ip.ins_sample_id,
+        ip.man_hour,
+        ip.man_hour_group,
+        case
+        WHEN LOCATE('[', spl.price)>0 THEN
+        REPLACE(JSON_EXTRACT(spl.price, REPLACE(JSON_SEARCH(spl.section, 'one', ip.section), '"', '')),'"','')
+        ELSE spl.price
+        END AS price ,
+        GROUP_CONCAT( CONCAT( ip.inspection_item, '@', ip.inspection_item_subclass ) SEPARATOR ',' ) inspection_item2
+        FROM
+        ins_product ip
+        LEFT JOIN standard_product_list spl ON ip.laboratory = spl.laboratory
+        AND ip.sample_type = spl.sample_type
+        AND ip.sample = spl.sample
+        AND  ip.model = spl.model
+        AND ip.inspection_item = spl.inspection_item
+        AND ip.inspection_item_subclass = spl.inspection_item_subclass
+        AND ip.son_laboratory = spl.son_laboratory
+        AND ip.standard_method_list_id = spl.standard_method_list_id
+        WHERE
+        ip.state = 1
+        AND  ip.create_time between #{startTime} and #{endTime}
+        AND ip.template_id IS NOT NULL
+        GROUP BY
+        ip.ins_sample_id,
+        ip.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
+        where 1 = 1
+        <if test="laboratory != '' and laboratory != null">
+            AND A.laboratory = #{laboratory}
+        </if>
+        GROUP BY
+        A.id,
+        A.entrust_code,
+        A.create_time,
+        A.sample,
+        A.model,
+        A.inspection_item,
+        A.company,
+        A.`name`
+
+
+
+
+
+        ) B
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="seldepLimsId" resultType="java.lang.String">
+        select name
+        from department_lims
+        where id = #{depLimsId}
+    </select>
+
+    <select id="getDepartment" resultType="string">
+        select name from department_lims where id = #{id}
+    </select>
+
+    <select id="getLaboratory" resultType="string">
+        select distinct laboratory from ins_product where ins_sample_id = #{id}
+    </select>
+
+
+    <select id="selectCommissionFees" resultType="com.ruoyi.inspect.dto.CommissionFeesDto">
+<!--        SELECT-->
+<!--        date_format(create_time, '%Y-%m-%d') AS create_time,-->
+<!--        entrust_code,-->
+<!--        sample_name,-->
+<!--        sample_model,-->
+<!--        sample_num,-->
+<!--        ins_item,-->
+<!--        production,-->
+<!--        company,-->
+<!--        custom,-->
+<!--        engineering,-->
+<!--        total_price-->
+<!--        FROM-->
+<!--        (-->
+<!--        SELECT-->
+<!--        io.*,-->
+<!--        sample_counts.sample_num,-->
+<!--        GROUP_CONCAT( DISTINCT isa.sample SEPARATOR '銆�' ) AS sample_name,-->
+<!--        GROUP_CONCAT( DISTINCT isa.model SEPARATOR '銆�' ) AS sample_model,-->
+<!--        total_product_counts.ins_item,-->
+<!--        total_price-->
+<!--        FROM-->
+<!--        ins_order io-->
+<!--        LEFT JOIN ins_sample isa ON io.id = isa.ins_order_id-->
+<!--        LEFT JOIN ins_sample_user isau ON isau.ins_sample_id = io.id-->
+<!--        LEFT JOIN ins_order_state iot ON iot.ins_order_id = io.id-->
+<!--        LEFT JOIN ins_report ir ON io.id = ir.ins_order_id-->
+<!--        AND ir.is_ratify = 1-->
+<!--        LEFT JOIN USER u ON io.create_user = u.id-->
+<!--        LEFT JOIN (-->
+<!--        SELECT-->
+<!--        ins_order_id,-->
+<!--        COUNT(*) AS sample_num-->
+<!--        FROM-->
+<!--        ins_sample-->
+<!--        WHERE-->
+<!--        id IN (-->
+<!--        SELECT-->
+<!--        id1-->
+<!--        FROM-->
+<!--        (-->
+<!--        SELECT-->
+<!--        is2.id id1,-->
+<!--        ip.id-->
+<!--        FROM-->
+<!--        ins_sample is2-->
+<!--        LEFT JOIN ins_product ip ON is2.id = ip.ins_sample_id-->
+<!--        WHERE-->
+<!--        ip.id IS NOT NULL-->
+<!--        ) s-->
+<!--        )-->
+<!--        GROUP BY-->
+<!--        ins_order_id-->
+<!--        ) sample_counts ON io.id = sample_counts.ins_order_id-->
+<!--        LEFT JOIN (-->
+<!--        SELECT-->
+<!--        SUM( price ) AS total_price,-->
+<!--        sample_id,-->
+<!--        ins_order_id,-->
+<!--        man_hour_group,-->
+<!--        ins_item-->
+<!--        FROM-->
+<!--        (-->
+<!--        SELECT-->
+<!--        ins_sample.id AS sample_id,-->
+<!--        ins_sample.ins_order_id,-->
+<!--        ins_product.man_hour_group,-->
+<!--        GROUP_CONCAT( DISTINCT inspection_item SEPARATOR ',' ) AS ins_item,-->
+<!--        price-->
+<!--        FROM-->
+<!--        ins_product-->
+<!--        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id-->
+<!--        WHERE-->
+<!--        ins_product.state = 1-->
+<!--        GROUP BY-->
+<!--        ins_sample.ins_order_id,-->
+<!--        ins_sample.id,-->
+<!--        ins_product.man_hour_group-->
+<!--        ) b-->
+<!--        GROUP BY-->
+<!--        ins_order_id-->
+<!--        ) total_product_counts ON io.id = total_product_counts.ins_order_id-->
+<!--        WHERE-->
+<!--        <if test="laboratory!=null and laboratory!=''">-->
+<!--            io.laboratory=#{laboratory} AND-->
+<!--        </if>-->
+<!--        io.create_time between #{startTime} and #{endTime}-->
+<!--        AND-->
+<!--        io.state NOT IN ( 0, 2, 3 )-->
+<!--        GROUP BY-->
+<!--        io.id,-->
+<!--        type-->
+<!--        ORDER BY-->
+<!--        type DESC,-->
+<!--        io.id DESC-->
+<!--        ) a-->
+
+
+
+        SELECT
+        A.entrust_code,
+        A.engineering,
+        date_format(A.create_time, '%Y-%m-%d') AS create_time,
+        A.sample as sample_name,
+        A.model as sample_model,
+        A.inspection_item as ins_item,
+        A.company,
+        A.`name` as custom,
+        A.production,
+        COUNT( 1 ) sample_num,
+        SUM( A.price ) total_price
+        FROM
+        (
+        SELECT
+        i.id,
+        i.engineering,
+        i.production,
+        i.laboratory,
+        i.entrust_code,
+        i.create_time,
+        isa.sample,
+        isa.sample_code,
+        isa.model,
+        c.price,
+        c.cost,
+        c.inspection_item,
+        i.company,
+        u.`name`,
+        i.create_user,
+        c.ins_sample_id
+        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
+        ip.ins_sample_id,
+        ip.man_hour,
+        ip.man_hour_group,
+        case
+        WHEN LOCATE('[', spl.price)>0 THEN
+        REPLACE(JSON_EXTRACT(spl.price, REPLACE(JSON_SEARCH(spl.section, 'one', ip.section), '"', '')),'"','')
+        ELSE spl.price
+        END AS price ,
+        ip.inspection_item,
+        ip.inspection_item_subclass,
+        GROUP_CONCAT( CONCAT( ip.inspection_item, '@', ip.inspection_item_subclass ) SEPARATOR ',' ) inspection_item2
+        FROM
+        ins_product ip
+        LEFT JOIN standard_product_list spl ON ip.laboratory = spl.laboratory
+        AND ip.sample_type = spl.sample_type
+        AND ip.sample = spl.sample
+        AND  ip.model = spl.model
+        AND ip.inspection_item = spl.inspection_item
+        AND ip.inspection_item_subclass = spl.inspection_item_subclass
+        AND ip.son_laboratory = spl.son_laboratory
+        AND ip.standard_method_list_id = spl.standard_method_list_id
+        WHERE
+        ip.state = 1
+          AND ip.create_time between #{startTime} and #{endTime}
+        AND ip.template_id IS NOT NULL
+        GROUP BY
+        ip.ins_sample_id,
+        ip.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
+        where  A.entrust_code != '' AND A.entrust_code is not null
+            <if test="laboratory != '' and laboratory != null">
+                and   A.laboratory = #{laboratory}
+            </if>
+        <if test="company != null and company != ''">
+            and A.company = #{company}
+        </if>
+        GROUP BY
+        A.entrust_code,
+        A.create_time,
+        A.sample,
+        A.model,
+        A.inspection_item,
+        A.company,
+        A.`name`
+    </select>
+    <select id="selectUnInsProducts" resultType="com.ruoyi.inspect.vo.UnInsProductsVO">
+        select
+        date_format(io.send_time,'%Y-%m-%d') as send_time,
+        io.entrust_code,
+        isa.sample,
+        group_concat(distinct isa.sample_code SEPARATOR '銆�') sample_code,
+        group_concat(distinct IF(ip.inspection_item_subclass!='' and ip.inspection_item_subclass is not null,ip.inspection_item_subclass,ip.inspection_item) SEPARATOR '銆�') un_ins_product
+        from ins_order io
+        left join ins_sample isa on io.id = isa.ins_order_id
+        left join ins_product ip on isa.id = ip.ins_sample_id
+        left join ins_order_state ios on io.id=ios.ins_order_id
+        <where>
+            <if test="laboratory!=null and laboratory!=''">
+                AND io.laboratory=#{laboratory}
+            </if>
+            <if test="dto.insState!=null and dto.insState!=''">
+                AND ios.ins_state=#{dto.insState}
+            </if>
+            <if test="dto.sonLaboratory!=null and dto.sonLaboratory!=''">
+                AND ip.son_laboratory=#{dto.sonLaboratory}
+            </if>
+            <if test="dto.sampleCode!=null and dto.sampleCode!=''">
+                AND isa.sample_code like concat('%',#{dto.sampleCode},'%')
+            </if>
+            <if test="dto.sample!=null and dto.sample!=''">
+                AND (isa.sample like concat('%',#{dto.sample},'%') or ip.sample_type like concat('%',#{dto.sample},'%'))
+            </if>
+            and io.send_time between #{startDateTime} and #{endDateTime}
+            AND io.state = 1
+            AND ip.state = 1
+            AND (ip.ins_result = 2 or ip.ins_result is null)
+        </where>
+        group by io.entrust_code
+        order by send_time desc
+    </select>
+    
+    
+    <select id="getTasksShow" resultType="com.ruoyi.inspect.dto.TasksShowDto">
+        SELECT
+            io.entrust_code,
+            iss.sample,
+            io.company,
+            DATE_FORMAT(io.send_time,'%Y/%m/%d') AS create_time,
+            CASE
+                WHEN ios.ins_state = 0 THEN '寰呮'
+                WHEN ios.ins_state = 1 THEN '鍦ㄦ'
+                ELSE '宸叉'
+                END AS state,
+            CASE
+                WHEN ios.ins_state = 3 THEN '寰呭鏍�'
+                WHEN ios.ins_state = 4 THEN '闇�澶嶆牳'
+                WHEN ios.ins_state = 5 THEN '宸插鏍�'
+                ELSE '-'
+                END AS ins_state,
+            CASE
+                --                 WHEN ios.ins_state=5 and (ir.`code` IS NULL OR ir.`code` = '') THEN '寰呯敓鎴�'
+--                 WHEN ir.`code` is not null THEN '宸茬敓鎴�'
+--                 ELSE '-'
+                WHEN ir.state = 1 THEN '宸茬敓鎴�'
+                WHEN ir.state = 0 THEN '寰呯敓鎴�'
+                ELSE '-'
+                END `code`,
+            CASE
+                WHEN ir.is_examine = 1 THEN '閫氳繃'
+                WHEN ir.is_examine = 0 THEN '鏈�氳繃'
+                WHEN ir.is_examine = -9 THEN '寰呭鏍�'
+                ELSE '-'
+                END AS is_examine,
+            CASE
+                when ir.is_ratify = 1 THEN '宸叉壒鍑�'
+                when ir.is_ratify = 0 THEN '涓嶆壒鍑�'
+                WHEN ir.is_ratify = -9 THEN '寰呮壒鍑�'
+                ELSE '-'
+                END AS is_ratify,
+            GROUP_CONCAT( DISTINCT TRIM( u.`name` ) SEPARATOR '銆�' ) AS `name`,
+                CASE
+                    WHEN io.type = 0 THEN '鏅��'
+                    WHEN io.type = 1 THEN '浼樺厛'
+                    WHEN io.type = 2 THEN '绱ф��'
+                    END AS `type`
+        FROM
+            ins_order io
+                LEFT JOIN ins_order_state ios ON ios.ins_order_id = io.id
+                LEFT JOIN ins_sample iss ON io.id = iss.ins_order_id
+                LEFT JOIN ins_product ip ON ip.ins_sample_id = iss.id
+                LEFT JOIN ins_product_result ips ON ip.id = ips.ins_product_id
+                LEFT JOIN ins_report ir ON io.id = ir.ins_order_id
+                LEFT JOIN `user` u ON ips.update_user = u.id
+        WHERE
+            io.entrust_code IS NOT NULL
+          AND u.state = 1
+          AND io.state in  (1,4)
+          AND IFNULL(ir.is_ratify,-1) != 1
+          AND ios.laboratory = #{sonLaboratory}
+          AND ip.son_laboratory = #{sonLaboratory}
+        GROUP BY
+            io.id
+        ORDER BY
+            CASE
+                WHEN iss.ins_state = 0 THEN 0  -- 寰呮
+                WHEN iss.ins_state = 1 THEN 1  -- 鍦ㄦ
+                ELSE 2                        -- 宸叉
+            END,
+            io.type desc,
+            io.id desc
+    </select>
+    <select id="selectCurrentCompanyUrgentQuota" resultType="map">
+        select c.num as quota,c.company from user u left join custom c on u.company = c.id where u.id = #{userId}
+    </select>
+    <select id="selectPlanCountBySonLaboratory" resultType="java.lang.Integer">
+        select
+            count(io.id)
+        from ins_order io
+            left join ins_order_state ios on io.id = ios.ins_order_id
+        where
+            ios.laboratory = #{sonLaboratory}
+          and io.state in (1,4)
+          AND io.send_time between #{startOfMonth} and #{endOfMonth}
+    </select>
+    <select id="getInsOrderTemList" resultType="com.ruoyi.inspect.vo.ExportInsProductVO">
+        SELECT
+        i.create_time,
+        i.custom AS custom_name,
+        i.id,
+        i.entrust_code,
+        isa.id ins_sample_id,
+        isa.sample_code,
+        isa.sample,
+        isa.model,
+        isa.ins_state,
+        ip.id ins_product_id,
+        ip.state,
+        ip.unit,
+        ip.sample_type,
+        ip.inspection_item,
+        ip.inspection_item_subclass,
+        ip.son_laboratory,
+        ip.inspection_item_type,
+        ip.inspection_value_type,
+        ip.special_item_parent_id,
+        ip.tell,
+        ip.`last_value`,
+        case
+        WHEN ip.ins_result = 0 THEN '涓嶅悎鏍�'
+        WHEN ip.ins_result = 1 THEN '鍚堟牸'
+        WHEN ip.ins_result = 3 THEN '涓嶅垽瀹�'
+        ELSE ''
+        END AS ins_result,
+        ipr.equip_value,
+        ipr.com_value,
+        ip.inspection_item_class,
+        ifis.CODE,
+        ipr.ins_value,
+        ipr.create_time AS check_time,
+        u.NAME AS check_name,
+        CASE
+        WHEN ifi.bush_color IS NOT NULL THEN
+        ifi.bush_color
+        WHEN ib1.color IS NOT NULL THEN
+        ib1.color
+        WHEN ib2.color IS NOT NULL THEN
+        ib2.color ELSE ''
+        END AS bush_color,
+        i.send_time As sendTime,
+        ifi.color
+        FROM
+        ins_sample isa
+        LEFT JOIN ins_order i ON isa.ins_order_id = i.id
+        LEFT JOIN ins_product ip ON isa.id = ip.ins_sample_id
+        LEFT JOIN ins_product_result ipr ON ip.id = ipr.ins_product_id
+        LEFT JOIN ins_fiber ifi ON ip.ins_fiber_id = ifi.id
+        LEFT JOIN ins_fibers ifis ON ip.ins_fibers_id = ifis.id
+        LEFT JOIN ins_bushing ib1 ON ip.ins_bush_id = ib1.id
+        LEFT JOIN ins_bushing ib2 ON ib2.id = ifis.ins_bushing_id
+        LEFT JOIN USER u ON u.id = ipr.create_user
+        WHERE
+        ip.state = 1 	AND
+        (i.state = 4 or i.state = 1)
+        AND ip.special_item_parent_id IS NOT NULL
+        AND ip.son_laboratory = '鍏夌氦璇曢獙瀹�'
+        <if test="entrustCode != null and entrustCode != ''">
+            AND i.entrust_code like concat('%',#{entrustCode},'%')
+        </if>
+        <if test="sampleCode != null and sampleCode != ''">
+            AND isa.sample_code like concat('%',#{sampleCode},'%')
+        </if>
+        <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+            AND i.ins_time between #{startTime} and #{endTime}
+        </if>
+        <if test="checkName != '' and checkName != null">
+            AND u.name = #{checkName}
+        </if>
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderStateMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderStateMapper.xml
new file mode 100644
index 0000000..6593006
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsOrderStateMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsOrderStateMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrderState">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
+            <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+            <result property="insState" column="ins_state" jdbcType="INTEGER"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,ins_order_id,laboratory,
+        ins_state,create_user,create_time,
+        update_user,update_time
+    </sql>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderTemplateMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderTemplateMapper.xml
new file mode 100644
index 0000000..eac788a
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsOrderTemplateMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsOrderTemplateMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrderTemplate">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="thing" column="thing" jdbcType="VARCHAR"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,thing,
+        create_user,update_user,create_time,
+        update_time
+    </sql>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsProductMapper.xml b/inspect-server/src/main/resources/mapper/InsProductMapper.xml
new file mode 100644
index 0000000..528c007
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsProductMapper.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsProductMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsProduct">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
+        <result property="inspectionItemClassify" column="inspection_item_classify" jdbcType="VARCHAR"/>
+        <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
+        <result property="factory" column="factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
+        <result property="sample" column="sample" jdbcType="VARCHAR"/>
+        <result property="model" column="model" jdbcType="VARCHAR"/>
+        <result property="sonLaboratory" column="son_laboratory" jdbcType="VARCHAR"/>
+        <result property="unit" column="unit" jdbcType="VARCHAR"/>
+        <result property="price" column="price" jdbcType="DECIMAL"/>
+        <result property="manHour" column="man_hour" jdbcType="DOUBLE"/>
+        <result property="manHourGroup" column="man_hour_group" jdbcType="VARCHAR"/>
+        <result property="inspectionItemType" column="inspection_item_type" jdbcType="VARCHAR"/>
+        <result property="inspectionValueType" column="inspection_value_type" jdbcType="VARCHAR"/>
+        <result property="deviceGroup" column="device_group" jdbcType="VARCHAR"/>
+        <result property="checkoutNumber" column="checkout_number" jdbcType="INTEGER"/>
+        <result property="section" column="section" jdbcType="VARCHAR"/>
+        <result property="valueType" column="value_type" jdbcType="VARCHAR"/>
+        <result property="method" column="method" jdbcType="VARCHAR"/>
+        <result property="manDay" column="man_day" jdbcType="INTEGER"/>
+        <result property="bsm" column="bsm" jdbcType="VARCHAR"/>
+        <result property="ask" column="ask" jdbcType="VARCHAR"/>
+        <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
+        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+        <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="templateId" column="template_id" jdbcType="INTEGER"/>
+    </resultMap>
+    <update id="updateInspected">
+        UPDATE ins_product p
+        SET p.state=0
+        WHERE EXISTS(
+                      SELECT 1
+                      FROM ins_sample s
+                      WHERE s.ins_order_id IN (
+                          SELECT o.id
+                          FROM ins_order o
+                          WHERE o.id = #{id}
+                      )
+                        AND p.ins_sample_id = s.id
+                        AND p.state = 1
+                        AND p.ins_result IS NULL
+                  );
+    </update>
+
+    <select id="selectOrderManDay" resultType="java.lang.Integer">
+        select coalesce(max(ip.man_day), 0)
+        from ins_order io
+                 left join ins_sample isa on io.id = isa.ins_order_id
+                 left join ins_product ip on isa.id = ip.ins_sample_id
+        where io.id = #{orderId}
+    </select>
+    <select id="selectUserById" resultType="java.util.Map">
+        select name, company, phone, address, name_en
+        from user
+        where id = #{userId}
+    </select>
+    <select id="getProductAndResult" resultType="com.ruoyi.inspect.dto.ProductResultDto2">
+        select ip.id,
+               ip.inspection_item,
+               ip.inspection_item_subclass,
+               ip.laboratory,
+               ip.unit,
+               ipr.equip_name equipValue,
+               io.entrust_code,
+               ipr.update_time,
+               ip.ins_result,
+               u.name         updateUserName
+        from ins_product ip
+                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
+                 left join ins_sample isa on isa.id = ip.ins_sample_id
+                 left join ins_order io on io.id = isa.ins_order_id
+                 left join user u on u.id = ipr.update_user
+        where ip.ins_sample_id = #{sampleId}
+          and ip.ins_result is not null
+          and template_id is not null
+    </select>
+    <select id="selectFiberInsProduct" resultType="com.ruoyi.inspect.pojo.InsProduct">
+        select * from ins_product
+        where state = 1
+        and (ins_fibers_id is not null or ins_fiber_id is not null)
+        and ins_result is null
+        and son_laboratory = #{laboratory}
+        and ins_sample_id in
+        <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+    <select id="selectNoProducts" resultType="com.ruoyi.inspect.pojo.InsProduct">
+        select *
+        from (select ip.*, sample_code
+              from ins_product ip
+                       left join ins_sample is2 on ip.ins_sample_id = is2.id
+              where ip.ins_result is null
+                and state = 1
+                and is2.ins_order_id = #{orderId}) A
+    </select>
+    <select id="selectInsProductCountByOrderId" resultType="java.lang.Integer">
+        select COUNT(1)
+        from ins_product ip
+                 left join ins_sample isa on ip.ins_sample_id = isa.id
+                 left join ins_order io on isa.ins_order_id = io.id
+        where io.id = #{orderId}
+          and (ip.ins_result is null or ip.ins_result = 2)
+          and ip.state = 1
+    </select>
+    <select id="findSagTemperatureProducts" resultType="com.ruoyi.inspect.pojo.InsProduct">
+        select
+            *
+        from ins_product
+        where
+            ins_sample_id = #{sampleId}
+          and
+            inspection_item = '寮у瀭-娓╁害'
+          and
+            special_item_parent_id is not null
+          and
+            state = 1
+    </select>
+    <select id="selectProductByOrderId" resultType="com.ruoyi.inspect.vo.InsProductVO">
+        select
+            ip.id,
+            isa.id as sample_id,
+            isa.sample_code,
+            isa.model,
+            ip.inspection_item as test_item,
+            ip.inspection_item_subclass as test_item_children,
+            ip.method_s as test_method,
+            ip.tell as requirement,
+            u.name as inspect_name
+        from
+            ins_order io
+        left join
+            ins_sample isa
+        on
+            io.id = isa.ins_order_id
+        left join
+            ins_product ip
+        on
+            isa.id = ip.ins_sample_id
+        left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        left join user u on ipr.create_user = u.id
+        <if test="orderId!=null and orderId!=''">
+            <where>
+                io.id = #{orderId}
+                <if test="sonLaboratory!='' and sonLaboratory!=null">
+                    AND ip.son_laboratory=#{sonLaboratory}
+                </if>
+            </where>
+        </if>
+    </select>
+    <select id="selectInsProductInsFiberList" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
+        select ip.*,ifi.bush_color,ifi.color from ins_product ip
+            left join ins_fiber ifi on ip.ins_fiber_id = ifi.id
+        where ip.state=1
+        AND ip.ins_fiber_id is not null
+        AND (ip.inspection_item_class is null or ip.inspection_item_class='')
+        AND ip.ins_sample_id=#{sampleId}
+    </select>
+    <select id="selectInsProductInsBushList" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
+        select ip.*,
+               ib.color as bush_color,
+               '/' as color
+        from ins_product ip
+            left join ins_bushing ib on ip.ins_bush_id = ib.id
+        where ip.state=1
+        AND ip.ins_bush_id is not null
+        AND (ip.inspection_item_class is null or ip.inspection_item_class='')
+        AND ip.ins_sample_id=#{sampleId}
+    </select>
+    <select id="selectInsProductInsFibersList" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
+        select ip.*,
+               ips.ins_value,
+               ib.color as bush_color,
+               ifs.code
+        from ins_product ip
+            inner join ins_product_result ips on ip.id = ips.ins_product_id
+            left join ins_fibers ifs on ip.ins_fibers_id = ifs.id
+            left join ins_bushing ib on ifs.ins_bushing_id = ib.id
+        where ip.state=1
+        AND ip.ins_fibers_id is not null
+        AND (ip.inspection_item_class is null or ip.inspection_item_class='')
+        AND ip.ins_sample_id=#{sampleId}
+    </select>
+    <select id="selectProductBySampleId" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
+        select ip.*,
+               ips.ins_value,
+               ib.color as bush_color,
+               ifs.code
+        from ins_product ip
+                 inner join ins_product_result ips on ip.id = ips.ins_product_id
+                 left join ins_fibers ifs on ip.ins_fibers_id = ifs.id
+                 left join ins_bushing ib on ifs.ins_bushing_id = ib.id
+        where ip.state=1
+          AND (ip.inspection_item_class is null or ip.inspection_item_class='')
+          AND ip.ins_sample_id=#{sampleId}
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsProductResultMapper.xml b/inspect-server/src/main/resources/mapper/InsProductResultMapper.xml
new file mode 100644
index 0000000..5c01e4d
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsProductResultMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsProductResultMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsProductResult">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="insProductId" column="ins_product_id" jdbcType="INTEGER"/>
+        <result property="insValue" column="ins_value" jdbcType="VARCHAR"/>
+        <result property="comValue" column="com_value" jdbcType="VARCHAR"/>
+        <result property="equipValue" column="equip_value" jdbcType="VARCHAR"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <select id="selDetail" resultMap="BaseResultMap">
+        select *
+        from ins_product_result
+        where 1=1
+            <!--and ins_product_id in (#{ips})-->
+        <if test="ips != null and ips.size > 0">
+            <!-- 浣跨敤foreach鍏冪礌鏋勫缓IN瀛愬彞 -->
+            and ins_product_id in
+            <foreach item="item" collection="ips" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsProductUserMapper.xml b/inspect-server/src/main/resources/mapper/InsProductUserMapper.xml
new file mode 100644
index 0000000..dc735d3
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsProductUserMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsProductUserMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsProductUser">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="VARCHAR"/>
+            <result property="insProductId" column="ins_product_id" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,create_user,create_time,
+        ins_product_id
+    </sql>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsReportApproveConfigMapper.xml b/inspect-server/src/main/resources/mapper/InsReportApproveConfigMapper.xml
new file mode 100644
index 0000000..3f35e5b
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsReportApproveConfigMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsReportApproveConfigMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsReportApproveConfig">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="editor" column="editor" jdbcType="INTEGER"/>
+            <result property="examiner" column="examiner" jdbcType="INTEGER"/>
+            <result property="approver" column="approver" jdbcType="INTEGER"/>
+            <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,editor,examiner,
+        approver,laboratory
+    </sql>
+    <select id="selectApprovalConfigByLaboratory" resultType="java.util.Map">
+        select
+            u1.signature_url as writeUrl,
+            u2.signature_url as examineUrl,
+            u3.signature_url as ratifyUrl,
+            u1.id as writeId,
+            u2.id as examineId,
+            u3.id as ratifyId
+        from
+            ins_report_approve_config irac
+        left join user u1 on irac.editor=u1.id
+        left join user u2 on irac.examiner=u2.id
+        left join user u3 on irac.approver=u3.id
+        where irac.laboratory = #{laboratory}
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsReportMapper.xml b/inspect-server/src/main/resources/mapper/InsReportMapper.xml
new file mode 100644
index 0000000..d55d74d
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsReportMapper.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsReportMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsReport">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
+            <result property="url" column="url" jdbcType="VARCHAR"/>
+            <result property="urlS" column="url_s" jdbcType="VARCHAR"/>
+            <result property="isRatify" column="is_ratify" jdbcType="INTEGER"/>
+            <result property="isExamine" column="is_examine" jdbcType="INTEGER"/>
+            <result property="ratifyUserId" column="ratify_user_id" jdbcType="INTEGER"/>
+            <result property="examineUserId" column="examine_user_id" jdbcType="INTEGER"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <select id="pageInsReport" resultType="com.ruoyi.inspect.dto.ReportPageDto">
+        select *
+        from (
+        select
+        ir.*,
+        io.entrust_code,
+        u.name write_user_name,
+        u1.name ratify_user,
+        u2.name examine_user,
+        io.laboratory,
+        CASE
+            WHEN (ir.url_s is null or ir.url_s='') and ir.is_ratify=-9 THEN 0
+            ELSE 1
+        END AS is_upload
+        from ins_report ir
+        left join ins_order io on io.id = ir.ins_order_id
+        left join user u on u.id = ir.write_user_id
+        left join user u1 on u1.id = ir.ratify_user_id
+        left join user u2 on u2.id = ir.examine_user_id
+        where 1=1
+        <if test="laboratory!=null and laboratory!=''">
+           and  laboratory=#{laboratory}
+        </if>
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+    <select id="getLaboratoryByName" resultType="java.lang.String">
+        select s.address from seal s
+        left join laboratory l on s.lab_id = l.id
+        where l.laboratory_name = #{name}
+        and s.type = '鎶ュ憡绫诲瀷'
+        order by s.create_time desc
+        limit 1
+    </select>
+    <select id="findReportCountInfo" resultType="com.ruoyi.inspect.dto.ReportPageDto">
+        select
+            *
+        from (
+        select
+        ir.*,
+        io.entrust_code,
+        u.name write_user_name,
+        u1.name ratify_user,
+        u2.name examine_user,
+        io.laboratory,
+        CASE
+        WHEN ir.url_s is null or ir.url_s='' THEN 0
+        ELSE 1
+        END AS is_upload
+        from ins_report ir
+        left join ins_order io on io.id = ir.ins_order_id
+        left join user u on u.id = ir.write_user_id
+        left join user u1 on u1.id = ir.ratify_user_id
+        left join user u2 on u2.id = ir.examine_user_id
+        where 1=1
+            AND (${queryField} = -9 or ${queryField} is null)
+        <if test="laboratory!=null and laboratory!=''">
+            and  laboratory=#{laboratory}
+        </if>
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsSampleMapper.xml b/inspect-server/src/main/resources/mapper/InsSampleMapper.xml
new file mode 100644
index 0000000..52b6c5b
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsSampleMapper.xml
@@ -0,0 +1,892 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsSampleMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsSample">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
+        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
+        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
+        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
+        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
+        <result property="factory" column="factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
+        <result property="sample" column="sample" jdbcType="VARCHAR"/>
+        <result property="model" column="model" jdbcType="VARCHAR"/>
+        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
+        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
+        <result property="remark" column="remark" jdbcType="VARCHAR"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="isPairing" column="is_pairing" jdbcType="CHAR"/>
+    </resultMap>
+
+    <select id="findInsSampleAndOrder" resultType="com.ruoyi.inspect.vo.InsOrderPlanVO">
+                SELECT
+                    a.appointed,
+                    a.checkName,
+                    a.company,
+                    a.entrust_code,
+                    a.id,
+                    a.ins_time,
+                    a.model,
+                    a.sample,
+                    a.send_time,
+                    a.son_laboratory,
+                    a.type,
+                    a.userName,
+                    a.ins_state,
+                    a.verify_tell,
+                    a.verify_user,
+                    a.sample_type,
+                    a.laboratory,
+                    a.sample_code
+                FROM
+                (
+                    SELECT
+                        io.id,
+                        io.entrust_code,
+                        io.company,
+                        io.type,
+                        io.appointed,
+                        io.send_time,
+                        group_concat(distinct isa.sample,' ') sample,
+                        group_concat(distinct ip.model SEPARATOR ',') model,
+                        userName,
+                        checkName,
+                        ip.son_laboratory,
+                        ios.ins_time,
+                        ios.ins_state,
+                        ios.verify_tell,
+                        ios.verify_user,
+                        isa.sample_code,
+                        io.laboratory,
+                        io.sample_type
+                    FROM
+                        ins_order io
+                    LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
+                    LEFT JOIN (
+                        SELECT ins_sample_id,
+                        GROUP_CONCAT(DISTINCT CASE WHEN u.state = 0 THEN uu.name END SEPARATOR
+                        ',')                                                           AS userName,
+                        GROUP_CONCAT(DISTINCT CASE WHEN u.state = 1 THEN uu.name END SEPARATOR
+                        ',')                                                           AS checkName
+                        FROM ins_sample_user u
+                        LEFT JOIN user uu ON u.user_id = uu.id
+                        WHERE u.son_laboratory=#{sonLaboratory}
+                        GROUP BY ins_sample_id
+                        ) isu ON isu.ins_sample_id = io.id
+            LEFT JOIN ins_product ip ON ip.ins_sample_id = isa.id AND ip.son_laboratory = #{sonLaboratory}
+            LEFT JOIN ins_order_state ios ON ios.ins_order_id = io.id AND ios.laboratory = #{sonLaboratory}
+            left join  ins_report ir on ir.ins_order_id = io.id
+            WHERE
+                io.state in  (1,4)
+                and send_time is not null
+                and COALESCE(ir.is_ratify, 0) != 1
+                AND ios.ins_state is not null
+                <if test="insState!=null and insState!=''">
+                    AND ios.ins_state = #{insState}
+                </if>
+              <if test="laboratory!=null and laboratory!=''">
+                  AND ip.laboratory=#{laboratory}
+              </if>
+              <if test="entrustCode!=null and entrustCode!=''">
+                  AND io.entrust_code LIKE concat('%',#{entrustCode},'%')
+              </if>
+              <if test="sampleCode!=null and sampleCode!=''">
+                  AND isa.sample_code LIKE concat('%',#{sampleCode},'%')
+              </if>
+              <if test="sample!=null and sample!=''">
+                  AND (ip.sample_type LIKE concat('%',#{sample},'%') OR ip.sample LIKE concat('%',#{sample},'%'))
+              </if>
+            <if test="userName !=null and userName!=''">
+                and ( (userName like CONCAT ('%', #{userName},'%') )
+                or (checkName like CONCAT ('%', #{userName},'%') ) )
+            </if>
+            <if test="checkName != null and checkName != ''">
+                and checkName like CONCAT ('%', #{checkName},'%')
+            </if>
+        <if test="sendTimeRange!=null and sendTimeRange.size()>1">
+            AND io.send_time BETWEEN #{sendTimeRange[0]} AND #{sendTimeRange[1]}
+        </if>
+            and ip.son_laboratory=#{sonLaboratory}
+            GROUP BY
+            ip.son_laboratory,
+            io.id
+            ORDER BY
+            io.type DESC,
+            io.id
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="inspectionOrderDetailsTaskSwitching" resultType="com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo">
+        select * from(
+        SELECT
+        a.*,ios.ins_state,ios.verify_tell,isu2.order_user_id,verify_user
+        FROM
+        (
+        SELECT
+        io.id,
+        io.entrust_code,
+        io.type,
+        io.appointed,
+        io.send_time,
+        group_concat(distinct isa.sample,' ') sampleType,
+        isu.user_id,
+        user.name userName,
+        ip.son_laboratory,
+        io.ins_time,
+        io.laboratory
+        FROM
+        ins_order io
+        LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
+        LEFT JOIN (
+        SELECT *
+        FROM ins_sample_user u
+        WHERE son_laboratory=#{sonLaboratory} and (ins_sample_id, id) IN (
+        SELECT ins_sample_id, MAX(id)
+        FROM ins_sample_user
+        WHERE son_laboratory=#{sonLaboratory}
+        GROUP BY ins_sample_id
+        )
+        ORDER BY ins_sample_id, id
+        ) isu ON isu.ins_sample_id = io.id
+        LEFT JOIN ins_product ip ON ip.ins_sample_id = isa.id
+        LEFT JOIN user ON isu.user_id = user.id
+        WHERE
+        io.state = 1
+        and send_time is not null
+        <if test="userId !=null and userId!=''">
+            and (isu.user_id = #{userId} OR isu.user_id is NULL )
+        </if>
+        OR isu.user_id is NULL
+        GROUP BY
+        ip.son_laboratory,
+        io.id
+        ) a
+        LEFT JOIN ins_order_state ios ON ios.ins_order_id = a.id AND ios.laboratory = a.son_laboratory
+        left join (SELECT td.user_id order_user_id, td.ins_sample_id FROM ins_sample_user td,(SELECT max(id) id FROM
+        ins_sample_user where son_laboratory=#{sonLaboratory} GROUP BY ins_sample_id) md where td.id = md.id
+        <if test="userId !=null and userId!=''">
+            and user_id = #{userId} OR user_id is NULL
+        </if>
+        OR user_id is NULL
+        ) isu2 on
+        isu2.ins_sample_id = a.id
+        where ins_state is not null
+        <if test="laboratory != null and laboratory != ''">
+            and a.laboratory=#{laboratory}
+        </if>
+        ORDER BY
+        <!--a.user_id DESC,-->
+        a.type DESC,
+        a.id
+        ) b
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="selectSampleProductListByOrderId" resultMap="sampleDto">
+        select isa.*,
+        ip.id ip_id,
+        inspection_item,
+        inspection_item_en,
+        inspection_item_class,
+        inspection_item_class_en,
+        inspection_item_subclass,
+        inspection_item_subclass_en,
+        ip.factory ip_factory,
+        ip.laboratory ip_laboratory,
+        ip.sample_type ip_sample_type,
+        ip.sample ip_sample,
+        ip.model ip_model,
+        son_laboratory,
+        ip.unit ip_unit,
+        ip.ins_bush_id,
+        ip.ins_fiber_id,
+        ip.ins_fibers_id,
+        price,
+        man_hour,
+        man_hour_group,
+        inspection_item_type,
+        inspection_value_type,
+        device_group,
+        checkout_number,
+        section,
+        value_type,
+        method,
+        man_day,
+        bsm,
+        ask,
+        tell,
+        `last_value`,
+        ip.ins_result ip_ins_result,
+        state,
+        ins_sample_id,
+        ip.create_user ip_create_user,
+        ip.update_user ip_update_user,
+        ip.create_time ip_create_time,
+        ip.update_time ip_update_time,
+        template_id,
+        ipr.ins_value,
+        ipr.id ipr_id,
+        ipr.com_value,
+        ipr.equip_value,
+        ip.method_s,
+        elasticity_modulus
+        from ins_sample isa
+        left join ins_product ip on isa.id = ip.ins_sample_id
+        left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_order_id = #{id}
+        and state = 1
+        and ip.special_item_parent_id is null
+        -- and ins_fiber_id is null
+        -- and ins_fibers_id is null
+        and <!--isa.sample_code NOT REGEXP '/'-->
+        isa.id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id =
+        ip.ins_sample_id where ip.id is not null)s )
+        order by case when man_hour_group is NULL then 1
+        when man_hour_group ='' then 1 else 0 end,
+        CASE
+        WHEN man_hour_group REGEXP '^[0-9]' THEN CAST(man_hour_group AS UNSIGNED) -- 濡傛灉浠ユ暟瀛楀紑澶达紝鍒欐寜鐓ф暟瀛楀ぇ灏忔帓搴�
+        WHEN man_hour_group REGEXP '[0-9]+' THEN CAST(SUBSTRING(man_hour_group, 2)AS UNSIGNED) END -- 鎻愬彇瀛楁瘝鍚庨潰鐨勬暟瀛楅儴鍒�
+        ,id asc
+    </select>
+    <select id="getInsOrderAndSample" resultMap="sampleDto">
+        select isa.*,
+               ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               son_laboratory,
+               ip.unit        ip_unit,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+               section,
+               value_type,
+               method,
+               man_day,
+               bsm,
+               ask,
+               `last_value`,
+               ip.ins_result  ip_ins_result,
+               state,
+               ins_sample_id,
+               ip.create_user ip_create_user,
+               ip.update_user ip_update_user,
+               ip.create_time ip_create_time,
+               ip.update_time ip_update_time,
+               template_id,
+               ipr.ins_value,
+               ipr.id ipr_id,
+               ipr.com_value,
+               ipr.equip_value,
+               ipr.equip_name,
+               ip.method_s,
+               ip.tell,
+               ip.dic,
+               ip.temperature,
+               ip.humidity,
+               elasticity_modulus
+        from ins_sample isa
+                 left join ins_product ip on isa.id = ip.ins_sample_id
+                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_order_id = #{id}
+          and state = 1
+          and ip.son_laboratory = #{laboratory}
+    </select>
+    <select id="getSampleEn" resultType="java.lang.String">
+        select name_en
+        from product
+        where name = #{sample}
+        limit 1
+    </select>
+    <select id="selectSampleProductListByOrderId2" resultMap="sampleDto">
+        select isa.*,
+               ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               son_laboratory,
+               ip.unit        ip_unit,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+               section,
+               value_type,
+               method,
+               man_day,
+               bsm,
+               ask,
+               tell,
+               `last_value`,
+               ip.ins_result  ip_ins_result,
+               state,
+               ins_sample_id,
+               ip.create_user ip_create_user,
+               ip.update_user ip_update_user,
+               ip.create_time ip_create_time,
+               ip.update_time ip_update_time,
+               template_id,
+               ipr.ins_value,
+               ipr.id ipr_id,
+               ipr.com_value,
+               ipr.equip_value,
+               ip.method_s,
+               elasticity_modulus,
+            ip.ins_fiber_id,
+            ip.ins_fibers_id
+        from ins_sample isa
+                 left join ins_product ip on isa.id = ip.ins_sample_id
+                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_order_id = #{id}
+          and ip.standard_method_list_id is not null
+          and state = 1
+        order by case
+                     when man_hour_group is NULL then 1
+                     when man_hour_group = '' then 1
+                      end,
+                 CASE
+                     WHEN man_hour_group REGEXP '^[0-9]' THEN CAST(man_hour_group AS UNSIGNED) -- 濡傛灉浠ユ暟瀛楀紑澶达紝鍒欐寜鐓ф暟瀛楀ぇ灏忔帓搴�
+                     WHEN man_hour_group REGEXP '[0-9]+'
+                         THEN CAST(SUBSTRING(man_hour_group, 2) AS UNSIGNED) END -- 鎻愬彇瀛楁瘝鍚庨潰鐨勬暟瀛楅儴鍒�
+                , id asc
+    </select>
+
+    <select id="selectSampleProductListByOrderId3" resultMap="sampleDto3">
+        select isa.id,
+        sample_code,
+        isa.sample,
+        entrust_code,
+        is_leave,
+        isa.model,
+        isa.ins_state,
+        ip.id ip_id,
+        inspection_item,
+        inspection_item_subclass,
+        io.sample_type io_sample_type,
+        ip.sample ip_sample,
+        ip.model ip_model,
+        ip.state,
+        ins_sample_id
+        from ins_sample isa
+        left join ins_product ip on isa.id = ip.ins_sample_id
+        left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        left join ins_order io on io.id = ins_order_id
+        where ip.state = 1
+        and ins_order_id in
+        <foreach collection="ids" open="(" close=")" item="id" separator=",">
+            #{id}
+        </foreach>
+        order by case when man_hour_group is NULL then 1
+        when man_hour_group ='' then 1 else 0 end,
+        CASE
+        WHEN man_hour_group REGEXP '^[0-9]' THEN CAST(man_hour_group AS UNSIGNED) -- 濡傛灉浠ユ暟瀛楀紑澶达紝鍒欐寜鐓ф暟瀛楀ぇ灏忔帓搴�
+        WHEN man_hour_group REGEXP '[0-9]+' THEN CAST(SUBSTRING(man_hour_group, 2)AS UNSIGNED) END -- 鎻愬彇瀛楁瘝鍚庨潰鐨勬暟瀛楅儴鍒�
+        ,id asc
+    </select>
+
+    <select id="getInsProduct1" resultMap="product">
+        select ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               son_laboratory,
+               ip.unit        ip_unit,
+               elasticity_modulus,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+               section,
+               value_type,
+               method,
+               man_day,
+               bsm,
+               ask,
+               `last_value`,
+               ip.ins_result  ip_ins_result,
+               state,
+               ins_sample_id,
+               ip.create_user ip_create_user,
+               ip.update_user ip_update_user,
+               ip.create_time ip_create_time,
+               ip.update_time ip_update_time,
+               template_id,
+               ipr.id ipr_id,
+               ipr.ins_value,
+               ipr.com_value,
+               ipr.equip_value,
+               ipr.equip_name,
+               ip.method_s,
+               ip.tell,
+               ip.dic
+        from ins_product ip
+                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_sample_id = #{id}
+          and state = 1
+          and ip.son_laboratory = #{laboratory}
+          <if test="laboratory!='鏉愭枡璇曢獙瀹�'">
+              and ins_fiber_id is null
+          </if>
+          and ins_fibers_id is null
+          and standard_method_list_id is not null
+    </select>
+    <select id="getInsProduct5" resultMap="product">
+        select ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               son_laboratory,
+               ip.unit        ip_unit,
+               elasticity_modulus,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+            section,
+            value_type,
+            method,
+            man_day,
+            bsm,
+            ask,
+            `last_value`,
+            ip.ins_result  ip_ins_result,
+            state,
+            ins_sample_id,
+            ip.create_user ip_create_user,
+            ip.update_user ip_update_user,
+            ip.create_time ip_create_time,
+            ip.update_time ip_update_time,
+            template_id,
+            ipr.id ipr_id,
+            ipr.ins_value,
+            ipr.com_value,
+            ipr.equip_value,
+            ipr.equip_name,
+            ip.method_s,
+            ip.tell,
+            ip.dic
+        from ins_product ip
+            left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_sample_id = #{id}
+          and state = 1
+          and ip.son_laboratory = #{laboratory}
+          and standard_method_list_id is not null
+    </select>
+    <select id="getInsProduct2" resultMap="product">
+        select ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               son_laboratory,
+               ip.unit        ip_unit,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+               section,
+               value_type,
+               method,
+               man_day,
+               bsm,
+               ask,
+               `last_value`,
+               ip.ins_result  ip_ins_result,
+               state,
+               ins_sample_id,
+               ip.create_user ip_create_user,
+               ip.update_user ip_update_user,
+               ip.create_time ip_create_time,
+               ip.update_time ip_update_time,
+               template_id,
+               ipr.ins_value,
+               ipr.com_value,
+               ipr.equip_value,
+               ipr.equip_name,
+               ip.method_s,
+               ip.tell,
+               ip.dic
+        from ins_product ip
+                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_fibers_id = #{id}
+          and ip.son_laboratory = #{sonLaboratory}
+          and state = 1
+          and ins_fiber_id is null
+          and standard_method_list_id is not null
+    </select>
+    <select id="getInsProduct3" resultMap="product">
+        select ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               son_laboratory,
+               ip.unit        ip_unit,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+               section,
+               value_type,
+               method,
+               man_day,
+               bsm,
+               ask,
+               `last_value`,
+               ip.ins_result  ip_ins_result,
+               state,
+               ins_sample_id,
+               ip.create_user ip_create_user,
+               ip.update_user ip_update_user,
+               ip.create_time ip_create_time,
+               ip.update_time ip_update_time,
+               template_id,
+               ipr.ins_value,
+               ipr.com_value,
+               ipr.equip_value,
+               ipr.equip_name,
+               ip.method_s,
+               ip.tell,
+               ip.dic
+        from ins_product ip
+                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_fiber_id = #{id}
+          and ip.son_laboratory = #{sonLaboratory}
+          and state = 1
+          and ins_fibers_id is null
+          and standard_method_list_id is not null
+    </select>
+
+    <select id="getInsProduct6" resultMap="product">
+        select ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               son_laboratory,
+               ip.unit        ip_unit,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+            section,
+            value_type,
+            method,
+            man_day,
+            bsm,
+            ask,
+            `last_value`,
+            ip.ins_result  ip_ins_result,
+            state,
+            ins_sample_id,
+            ip.create_user ip_create_user,
+            ip.update_user ip_update_user,
+            ip.create_time ip_create_time,
+            ip.update_time ip_update_time,
+            template_id,
+            ipr.ins_value,
+            ipr.com_value,
+            ipr.equip_value,
+            ipr.equip_name,
+            ip.method_s,
+            ip.tell,
+            ip.dic
+        from ins_product ip
+            left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_fibers_id = #{id}
+          and ip.son_laboratory = #{sonLaboratory}
+          and state = 1
+            and ins_fiber_id is null
+          and standard_method_list_id is not null
+    </select>
+
+    <select id="getInsProduct4" resultMap="product">
+        select ip.id          ip_id,
+               inspection_item,
+               inspection_item_en,
+               inspection_item_class,
+               inspection_item_class_en,
+               inspection_item_subclass,
+               inspection_item_subclass_en,
+               ip.factory     ip_factory,
+               ip.laboratory  ip_laboratory,
+               ip.sample_type ip_sample_type,
+               ip.sample      ip_sample,
+               ip.model       ip_model,
+               ip.ins_bush_id,
+               son_laboratory,
+               ip.unit        ip_unit,
+               price,
+               man_hour,
+               man_hour_group,
+               inspection_item_type,
+               inspection_value_type,
+               device_group,
+               checkout_number,
+               section,
+               value_type,
+               method,
+               man_day,
+               bsm,
+               ask,
+               `last_value`,
+               ip.ins_result  ip_ins_result,
+               state,
+               ins_sample_id,
+               ip.create_user ip_create_user,
+               ip.update_user ip_update_user,
+               ip.create_time ip_create_time,
+               ip.update_time ip_update_time,
+               template_id,
+               ipr.ins_value,
+               ipr.com_value,
+               ipr.equip_value,
+               ipr.equip_name,
+               ip.method_s,
+               ip.tell,
+               ip.dic
+        from ins_product ip
+                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
+        where ins_bush_id = #{id}
+          and ip.son_laboratory = #{sonLaboratory}
+          and state = 1
+          and ins_fibers_id is null
+          and standard_method_list_id is not null
+    </select>
+    <select id="getReportModel" resultType="java.util.Map">
+    </select>
+
+    <resultMap id="sampleDto" type="com.ruoyi.inspect.dto.SampleProductDto">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
+        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
+        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
+        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
+        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
+        <result property="factory" column="factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
+        <result property="sample" column="sample" jdbcType="VARCHAR"/>
+        <result property="model" column="model" jdbcType="VARCHAR"/>
+        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
+        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
+        <result property="remark" column="remark" jdbcType="VARCHAR"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="standardMethodListId" column="standard_method_list_id"/>
+        <result property="unit" column="unit"/>
+        <collection property="insProduct" resultMap="product"/>
+    </resultMap>
+
+    <resultMap id="product" type="com.ruoyi.inspect.pojo.InsProduct">
+        <id property="id" column="ip_id" jdbcType="INTEGER"/>
+        <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
+        <result property="inspectionItemEn" column="inspection_item_en" jdbcType="VARCHAR"/>
+        <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
+        <result property="inspectionItemSubclassEn" column="inspection_item_subclass_en" jdbcType="VARCHAR"/>
+        <result property="inspectionItemClass" column="inspection_item_class" jdbcType="VARCHAR"/>
+        <result property="inspectionItemClassEn" column="inspection_item_class_en" jdbcType="VARCHAR"/>
+        <result property="factory" column="ip_factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="ip_laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="ip_sample_type" jdbcType="VARCHAR"/>
+        <result property="sample" column="ip_sample" jdbcType="VARCHAR"/>
+        <result property="model" column="ip_model" jdbcType="VARCHAR"/>
+        <result property="sonLaboratory" column="son_laboratory" jdbcType="VARCHAR"/>
+        <result property="unit" column="ip_unit" jdbcType="VARCHAR"/>
+        <result property="price" column="price" jdbcType="DECIMAL"/>
+        <result property="manHour" column="man_hour" jdbcType="DOUBLE"/>
+        <result property="manHourGroup" column="man_hour_group" jdbcType="VARCHAR"/>
+        <result property="inspectionItemType" column="inspection_item_type" jdbcType="VARCHAR"/>
+        <result property="inspectionValueType" column="inspection_value_type" jdbcType="VARCHAR"/>
+        <result property="deviceGroup" column="device_group" jdbcType="VARCHAR"/>
+        <result property="checkoutNumber" column="checkout_number" jdbcType="INTEGER"/>
+        <result property="section" column="section" jdbcType="VARCHAR"/>
+        <result property="valueType" column="value_type" jdbcType="VARCHAR"/>
+        <result property="method" column="method" jdbcType="VARCHAR"/>
+        <result property="manDay" column="man_day" jdbcType="INTEGER"/>
+        <result property="bsm" column="bsm" jdbcType="VARCHAR"/>
+        <result property="ask" column="ask" jdbcType="VARCHAR"/>
+        <result property="tell" column="tell" jdbcType="VARCHAR"/>
+        <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
+        <result property="insResult" column="ip_ins_result" jdbcType="INTEGER"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+        <result property="insBushId" column="ins_bush_id" jdbcType="INTEGER"/>
+        <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
+        <result property="createUser" column="ip_create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="ip_update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="ip_create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="ip_update_time" jdbcType="TIMESTAMP"/>
+        <result property="templateId" column="template_id" jdbcType="INTEGER"/>
+        <result property="methodS" column="method_s"/>
+        <result property="tell" column="tell"/>
+        <result property="dic" column="dic"/>
+        <result property="temperature" column="temperature"/>
+        <result property="humidity" column="humidity"/>
+        <result property="elasticityModulus" column="elasticity_modulus"/>
+        <result property="insFiberId" column="ins_fiber_id"/>
+        <result property="insFibersId" column="ins_fibers_id"/>
+        <collection property="insProductResult" resultMap="insProductResult"/>
+    </resultMap>
+
+    <resultMap id="sampleDto3" type="com.ruoyi.inspect.dto.SampleProductDto3">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
+        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
+        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
+        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
+        <result property="ioSampleType" column="io_sample_type" jdbcType="VARCHAR"/>
+        <result property="code" column="entrust_code" jdbcType="VARCHAR"/>
+        <result property="isLeave" column="is_leave" jdbcType="VARCHAR"/>
+        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
+        <result property="factory" column="factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
+        <result property="sample" column="sample" jdbcType="VARCHAR"/>
+        <result property="model" column="model" jdbcType="VARCHAR"/>
+        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
+        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
+        <result property="remark" column="remark" jdbcType="VARCHAR"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="standardMethodListId" column="standard_method_list_id"/>
+        <result property="unit" column="unit"/>
+        <collection property="insProduct" resultMap="product"/>
+    </resultMap>
+
+    <resultMap id="insProductResult" type="com.ruoyi.inspect.pojo.InsProductResult">
+        <id property="id" column="ipr_id" jdbcType="INTEGER"/>
+        <result property="insValue" column="ins_value" jdbcType="VARCHAR"/>
+        <result property="comValue" column="com_value" jdbcType="VARCHAR"/>
+        <result property="equipValue" column="equip_value" jdbcType="VARCHAR"/>
+        <result property="equipName" column="equip_name" jdbcType="VARBINARY"/>
+    </resultMap>
+
+    <resultMap id="sampleVo" type="com.ruoyi.inspect.vo.SampleVo">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
+        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
+        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
+        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
+        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
+        <result property="factory" column="factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
+        <result property="sample" column="sample" jdbcType="VARCHAR"/>
+        <result property="model" column="model" jdbcType="VARCHAR"/>
+        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
+        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
+        <result property="remark" column="remark" jdbcType="VARCHAR"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="standardMethodListId" column="standard_method_list_id"/>
+        <result property="methodName" column="methodName" jdbcType="VARCHAR"/>
+        <result property="unit" column="unit"/>
+    </resultMap>
+
+    <select id="getDetailById" resultMap="sampleVo">
+        select is2.*,
+               code methodName
+        from ins_sample is2
+                 inner join standard_method sm on standard_method_list_id = sm.id
+        where is2.id = #{sampleId}
+    </select>
+
+    <select id="selMethodById" resultType="java.lang.String">
+        select code
+        from standard_method
+        where id = (select standard_method_list_id from ins_sample where id = #{sampleId})
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml b/inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml
new file mode 100644
index 0000000..b60f776
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsSampleUserMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsSampleUser">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
+            <result property="userId" column="user_id" jdbcType="INTEGER"/>
+            <result property="state" column="state" jdbcType="INTEGER"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,ins_sample_id,user_id,
+        state,create_user,create_time
+    </sql>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml b/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
new file mode 100644
index 0000000..a08d17a
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsUnPassMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsUnPass">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="sample" column="sample" jdbcType="VARCHAR"/>
+            <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
+            <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
+            <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
+            <result property="model" column="model" jdbcType="VARCHAR"/>
+            <result property="handleSuggestion" column="handle_suggestion" jdbcType="VARCHAR"/>
+            <result property="entrustCode" column="entrust_code" jdbcType="VARCHAR"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+    <select id="pageInsUnPass" resultType="com.ruoyi.inspect.dto.UnPassPageDto">
+        SELECT * FROM
+            ins_un_pass iu
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/inspect-server/src/main/resources/mapper/SampleOrderMapper.xml b/inspect-server/src/main/resources/mapper/SampleOrderMapper.xml
new file mode 100644
index 0000000..8c5c532
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/SampleOrderMapper.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.SampleOrderMapper">
+    <resultMap id="map" type="com.ruoyi.inspect.dto.SampleOrderDto">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
+        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
+        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
+        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
+        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
+        <result property="factory" column="factory" jdbcType="VARCHAR"/>
+        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
+        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
+        <result property="sample" column="sample" jdbcType="VARCHAR"/>
+        <result property="model" column="model" jdbcType="VARCHAR"/>
+        <result property="isLeave" column="is_leave" jdbcType="INTEGER"/>
+        <result property="leaveNum" column="leave_num" jdbcType="INTEGER"/>
+        <result property="insProgress" column="ins_progress" jdbcType="VARCHAR"/>
+        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
+        <result property="sendTime" column="send_time" jdbcType="TIMESTAMP"/>
+        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
+        <result property="remark" column="remark" jdbcType="VARCHAR"/>
+        <result property="appointed" column="appointed" jdbcType="TIMESTAMP"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <association property="insOrderList" javaType="com.ruoyi.inspect.pojo.InsOrder">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="entrustCode" column="entrust_code" jdbcType="VARCHAR"/>
+            <result property="custom" column="custom" jdbcType="VARCHAR"/>
+            <result property="company" column="company" jdbcType="VARCHAR"/>
+            <result property="code" column="code" jdbcType="VARCHAR"/>
+            <result property="type" column="type" jdbcType="INTEGER"/>
+            <result property="appointed" column="appointed" jdbcType="TIMESTAMP"/>
+            <result property="state" column="state" jdbcType="INTEGER"/>
+            <result property="remark" column="remark" jdbcType="VARCHAR"/>
+            <result property="otcCode" column="otc_code" jdbcType="VARCHAR"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        </association>
+    </resultMap>
+    <select id="selectSampleOrderList" resultMap="map">
+        select * from(
+        select s.id,
+        s.join_name,
+        o.create_user,
+        o.create_time,
+        o.update_user,
+        o.update_time
+        from ins_sample s
+        left join ins_order o on s.ins_order_id = o.id
+        )a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml b/inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml
new file mode 100644
index 0000000..0b7a808
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.WarehouseCellMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.WarehouseCell">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="row" column="row" jdbcType="INTEGER"/>
+        <result property="col" column="col" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+        <result property="shelfId" column="shelf_id" jdbcType="INTEGER"/>
+    </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
+        left join ins_sample i on i.cell_id = wc.id
+        where wc.state = 1
+        and wc.shelf_id = #{shelfId}
+        order by wc.id
+    </select>
+
+    <resultMap id="WarehouseCellAndHistoryDto" type="com.ruoyi.inspect.dto.WarehouseCellAndSampleDto">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="row" column="row" jdbcType="INTEGER"/>
+        <result property="col" column="col" jdbcType="INTEGER"/>
+        <collection property="samples" resultMap="InsSample"/>
+    </resultMap>
+
+    <resultMap id="InsSample" type="com.ruoyi.inspect.pojo.InsSample">
+        <id property="id" column="sampleId"/>
+        <result property="sample" column="sample"/>
+        <result property="model" column="model"/>
+        <result property="sampleCode" column="sample_code"/>
+    </resultMap>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/WarehouseHistoryMapper.xml b/inspect-server/src/main/resources/mapper/WarehouseHistoryMapper.xml
new file mode 100644
index 0000000..a428a9f
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/WarehouseHistoryMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.WarehouseHistoryMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.WarehouseHistory">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
+            <result property="state" column="state" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+            <result property="cellId" column="cell_id" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <select id="getUserNameById" resultType="java.lang.String">
+        select name from user where id = #{userId}
+    </select>
+    <select id="getHistoryListBySampleId" resultType="com.ruoyi.inspect.dto.HistoryDto">
+        select wh.*,u.name createUserName from warehouse_history wh
+        left join user u on u.id = wh.create_user
+        where wh.ins_sample_id = #{sampleId}
+        order by wh.id desc 
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/WarehouseMapper.xml b/inspect-server/src/main/resources/mapper/WarehouseMapper.xml
new file mode 100644
index 0000000..6bc4bea
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/WarehouseMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.WarehouseMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.Warehouse">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <resultMap id="Warehouse" type="com.ruoyi.inspect.dto.WarehouseDto">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <collection property="warehouseShelfList" resultMap="shelf"/>
+    </resultMap>
+
+    <resultMap id="shelf" type="com.ruoyi.inspect.pojo.WarehouseShelf">
+        <id property="id" column="sId" jdbcType="INTEGER"/>
+        <result property="name" column="sName" jdbcType="VARCHAR"/>
+        <result property="row" column="row" jdbcType="INTEGER"/>
+        <result property="col" column="col" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <select id="selectWarehouseList" resultMap="Warehouse">
+        select w.id,w.name,ws.id sId,ws.name sName,ws.row,ws.col,ws.warehouse_id from warehouse w
+        left join warehouse_shelf ws on w.id = ws.warehouse_id
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/WarehouseShelfMapper.xml b/inspect-server/src/main/resources/mapper/WarehouseShelfMapper.xml
new file mode 100644
index 0000000..ad8c5f4
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/WarehouseShelfMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.WarehouseShelfMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.WarehouseShelf">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="row" column="row" jdbcType="INTEGER"/>
+            <result property="col" column="col" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+            <result property="warehouseId" column="warehouse_id" jdbcType="INTEGER"/>
+    </resultMap>
+</mapper>
diff --git a/pom.xml b/pom.xml
index afe1213..92721e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,12 +45,17 @@
         <hutool.version>5.8.18</hutool.version>
         <easyexcel.version>3.3.2</easyexcel.version>
         <poi.tl.version>1.12.2</poi.tl.version>
+        <amqp.version>3.2.6</amqp.version>
     </properties>
 
     <!-- 渚濊禆澹版槑 -->
     <dependencyManagement>
         <dependencies>
-
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-amqp</artifactId>
+                <version>${amqp.version}</version>
+            </dependency>
             <!-- 瑕嗙洊SpringFramework鐨勪緷璧栭厤缃�-->
             <dependency>
                 <groupId>org.springframework</groupId>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtils.java
new file mode 100644
index 0000000..5a4a9fc
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtils.java
@@ -0,0 +1,181 @@
+package com.ruoyi.common.utils;
+
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+/**
+*@author: Zou, Yu
+*@description:
+*@date: 2023/9/24 0024 13:18
+**/
+public class EasyExcelUtils {
+
+    public static HorizontalCellStyleStrategy getStyleStrategy(){
+        return getStyleStrategy(IndexedColors.WHITE);
+    }
+
+    /**
+     * color鏋氫妇: IndexedColors
+     * @param color
+     * @return
+     */
+    public static HorizontalCellStyleStrategy getStyleStrategy(IndexedColors color) {
+        // 澶寸殑绛栫暐
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        // 鑳屾櫙璁剧疆涓虹伆鑹�
+        headWriteCellStyle.setFillForegroundColor(color.getIndex());
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontHeightInPoints((short) 10);
+        // 瀛椾綋鏍峰紡
+        headWriteFont.setFontName("瀹嬩綋");
+        headWriteCellStyle.setWriteFont(headWriteFont);
+        // 鑷姩鎹㈣
+        headWriteCellStyle.setWrapped(false);
+        // 姘村钩瀵归綈鏂瑰紡
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        // 鍨傜洿瀵归綈鏂瑰紡
+        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+        // 鍐呭鐨勭瓥鐣�
+        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+        // 杩欓噷闇�瑕佹寚瀹� FillPatternType 涓篎illPatternType.SOLID_FOREGROUND 涓嶇劧鏃犳硶鏄剧ず鑳屾櫙棰滆壊.澶撮粯璁や簡 FillPatternType鎵�浠ュ彲浠ヤ笉鎸囧畾
+//        contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
+//        contentWriteCellStyle.setDataFormat((short) 49);
+        // 鑳屾櫙鐧借壊
+        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
+        WriteFont contentWriteFont = new WriteFont();
+        // 瀛椾綋澶у皬
+        contentWriteFont.setFontHeightInPoints((short) 11);
+        // 瀛椾綋鏍峰紡
+        contentWriteFont.setFontName("瀹嬩綋");
+        contentWriteCellStyle.setWriteFont(contentWriteFont);
+        // 鍐呭灞呬腑瀵归綈
+        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        //鍐呭鍨傜洿灞呬腑
+        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        //杈规璁剧疆
+        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
+        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
+        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
+        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
+        // 杩欎釜绛栫暐鏄� 澶存槸澶寸殑鏍峰紡 鍐呭鏄唴瀹圭殑鏍峰紡 鍏朵粬鐨勭瓥鐣ュ彲浠ヨ嚜宸卞疄鐜�
+        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+    }
+
+    public static HorizontalCellStyleStrategy getStyleFixedStrategy() {
+        // 澶寸殑绛栫暐
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        // 鑳屾櫙璁剧疆涓虹伆鑹�
+        headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontHeightInPoints((short) 12);
+        // 瀛椾綋鏍峰紡
+        headWriteFont.setFontName("Calibri");
+        headWriteCellStyle.setWriteFont(headWriteFont);
+        // 鑷姩鎹㈣
+        headWriteCellStyle.setWrapped(false);
+        // 姘村钩瀵归綈鏂瑰紡
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        // 鍨傜洿瀵归綈鏂瑰紡
+        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        // 鍐呭鐨勭瓥鐣�
+        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+        // 杩欓噷闇�瑕佹寚瀹� FillPatternType 涓篎illPatternType.SOLID_FOREGROUND 涓嶇劧鏃犳硶鏄剧ず鑳屾櫙棰滆壊.澶撮粯璁や簡 FillPatternType鎵�浠ュ彲浠ヤ笉鎸囧畾
+//        contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
+        // 鑳屾櫙鐧借壊
+        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
+        WriteFont contentWriteFont = new WriteFont();
+        // 瀛椾綋澶у皬
+        contentWriteFont.setFontHeightInPoints((short) 10);
+        // 瀛椾綋鏍峰紡
+        contentWriteFont.setFontName("Calibri");
+        contentWriteCellStyle.setWriteFont(contentWriteFont);
+        // 鍐呭宸﹀榻�
+        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+        // 杩欎釜绛栫暐鏄� 澶存槸澶寸殑鏍峰紡 鍐呭鏄唴瀹圭殑鏍峰紡 鍏朵粬鐨勭瓥鐣ュ彲浠ヨ嚜宸卞疄鐜�
+        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+    }
+
+    public static HorizontalCellStyleStrategy getArveStyleStrategy() {
+        // 澶寸殑绛栫暐
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        // 鑳屾櫙璁剧疆涓�
+        headWriteCellStyle.setFillForegroundColor(IndexedColors.BLACK.getIndex());
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontHeightInPoints((short) 12);
+        // 瀛椾綋鏍峰紡
+        headWriteFont.setFontName("Calibri");
+        headWriteFont.setColor(IndexedColors.WHITE.getIndex());
+        headWriteCellStyle.setWriteFont(headWriteFont);
+
+        headWriteCellStyle.setBorderBottom(BorderStyle.MEDIUM);
+        headWriteCellStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex());
+        headWriteCellStyle.setRightBorderColor(IndexedColors.WHITE.getIndex());
+        // 鑷姩鎹㈣
+        headWriteCellStyle.setWrapped(true);
+        // 姘村钩瀵归綈鏂瑰紡
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+        // 鍨傜洿瀵归綈鏂瑰紡
+        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        // 鍐呭鐨勭瓥鐣�
+        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+        // 杩欓噷闇�瑕佹寚瀹� FillPatternType 涓篎illPatternType.SOLID_FOREGROUND 涓嶇劧鏃犳硶鏄剧ず鑳屾櫙棰滆壊.澶撮粯璁や簡 FillPatternType鎵�浠ュ彲浠ヤ笉鎸囧畾
+//        contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
+        // 鑳屾櫙鐧借壊
+        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
+        WriteFont contentWriteFont = new WriteFont();
+        // 瀛椾綋澶у皬
+        contentWriteFont.setFontHeightInPoints((short) 10);
+        // 瀛椾綋鏍峰紡
+        contentWriteFont.setFontName("Calibri");
+        contentWriteCellStyle.setWriteFont(contentWriteFont);
+        // 杩欎釜绛栫暐鏄� 澶存槸澶寸殑鏍峰紡 鍐呭鏄唴瀹圭殑鏍峰紡 鍏朵粬鐨勭瓥鐣ュ彲浠ヨ嚜宸卞疄鐜�
+        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+    }
+
+    /**
+     * 璁剧疆response
+     * @param response
+     * @param targetName
+     * @return
+     */
+    public static OutputStream getResponse(HttpServletResponse response, String targetName) throws IOException {
+        return getResponse(response,targetName,ExcelTypeEnum.XLS.getValue());
+    }
+
+    /**
+     * 璁剧疆response
+     * @param response
+     * @param targetName
+     * @param suffix 鏂囦欢鍚庣紑
+     * @return
+     */
+    public static OutputStream getResponse(HttpServletResponse response, String targetName,String suffix) throws IOException {
+        String fileName;
+        try {
+            fileName = targetName + suffix;
+            fileName =  URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
+            response.setContentType("application/vnd.ms-excel");
+            response.setHeader("Cache-Control", "no-cache");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+            return response.getOutputStream();
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}

--
Gitblit v1.9.3