From dda17e80a787c40c460a923cd50ac1a1f94ba157 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期一, 17 二月 2025 14:57:10 +0800
Subject: [PATCH] 移植检验下单模板

---
 inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderServiceImpl.java         | 1711 ++++++++++----------
 inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto2.java                            |  124 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Util.java                                     |   68 
 cnas-require/pom.xml                                                                               |    8 
 inspect-server/src/main/java/com/ruoyi/basic/dto/InsulatingDto.java                                |   20 
 pom.xml                                                                                            |   46 
 inspect-server/src/main/java/com/ruoyi/basic/dto/InsOrderUpdateDto.java                            |   21 
 inspect-server/src/main/java/com/ruoyi/basic/dto/CopperInsOrderDto.java                            |   37 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/WxCpUtils.java                                   |  153 +
 inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProduct.java                                  |  214 ++
 inspect-server/src/main/java/com/ruoyi/basic/pojo/InsOrder.java                                    |  214 ++
 inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProductResult.java                            |   52 
 inspect-server/src/main/java/com/ruoyi/basic/dto/RawMaterialStandardTreeDto.java                   |   33 
 inspect-server/src/main/java/com/ruoyi/basic/service/InsOrderService.java                          |  115 +
 inspect-server/src/main/java/com/ruoyi/basic/pojo/InsUnqualifiedRetestProduct.java                 |  137 +
 inspect-server/pom.xml                                                                             |   14 
 inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderTemplateService.java          |   50 
 basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java                                      |    5 
 inspect-server/src/main/java/com/ruoyi/basic/dto/IfsStockQueryDTO.java                             |  130 
 basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java                   |    2 
 basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java              |    2 
 inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto.java                             |   32 
 ruoyi-admin/pom.xml                                                                                |    5 
 inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java                                   |  246 +-
 inspect-server/src/main/java/com/ruoyi/basic/dto/CostStatisticsDto.java                            |   63 
 performance-server/pom.xml                                                                         |    5 
 inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderTemplateServiceImpl.java |  138 
 ruoyi-common/pom.xml                                                                               |   18 
 /dev/null                                                                                          |  125 -
 inspect-server/src/main/java/com/ruoyi/basic/dto/SampleOrderDto.java                               |   93 +
 inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderService.java                  |  289 +-
 inspect-server/src/main/java/com/ruoyi/basic/pojo/RawMaterialOrderTemplate.java                    |   52 
 inspect-server/src/main/java/com/ruoyi/basic/controller/RawMaterialOrderController.java            |  635 +++---
 basic-server/pom.xml                                                                               |    5 
 inspect-server/src/main/java/com/ruoyi/basic/mapper/RawMaterialOrderTemplateMapper.java            |   17 
 35 files changed, 3,147 insertions(+), 1,732 deletions(-)

diff --git a/basic-server/pom.xml b/basic-server/pom.xml
index e0f5431..b45552d 100644
--- a/basic-server/pom.xml
+++ b/basic-server/pom.xml
@@ -11,14 +11,19 @@
 
     <artifactId>basic-server</artifactId>
     <dependencies>
+        <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+
+        <!-- 鏍稿績妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-framework</artifactId>
         </dependency>
+
+        <!-- 绯荤粺妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
index db5c582..d6d48c8 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
@@ -14,7 +14,7 @@
  * @Date 2024/8/28
  */
 @Data
-public class IfsInventoryQuantityCheckDto  implements Serializable {
+public class IfsInventoryQuantityCheckDto implements Serializable {
 
     private Integer id;
 
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java
index 18fc086..886c9f7 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java
@@ -1,5 +1,6 @@
 package com.ruoyi.basic.dto;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.List;
@@ -13,11 +14,13 @@
 
     private String value;
 
+    @ApiModelProperty("闆朵欢鍙�")
     private String partNo;
 
-    // 鏍峰搧鑻辨枃
+    @ApiModelProperty("鏍峰搧鑻辨枃")
     private String sampleEn;
 
+    @ApiModelProperty("浜у搧")
     private List<ModelDto> children;
 
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
index f63a161..f83bd97 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
@@ -33,8 +33,6 @@
 @AllArgsConstructor
 public class CapacityScopeServiceImpl extends ServiceImpl<StructureItemParameterMapper, StructureItemParameter> implements CapacityScopeService {
 
-    private LaboratoryMapper laboratoryMapper;
-
     private StructureItemParameterMapper structureItemParameterMapper;
 
     private StructureTestObjectMapper structureTestObjectMapper;
diff --git a/cnas-require/pom.xml b/cnas-require/pom.xml
index 5fda62b..52aab93 100644
--- a/cnas-require/pom.xml
+++ b/cnas-require/pom.xml
@@ -18,19 +18,23 @@
     </properties>
 
     <dependencies>
+        <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+
+        <!-- 鏍稿績妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-framework</artifactId>
         </dependency>
+
+        <!--涓氬姟妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>inspect-server</artifactId>
-            <version>3.8.9</version>
         </dependency>
     </dependencies>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/inspect-server/pom.xml b/inspect-server/pom.xml
index 38a4862..c124706 100644
--- a/inspect-server/pom.xml
+++ b/inspect-server/pom.xml
@@ -12,22 +12,34 @@
     <artifactId>inspect-server</artifactId>
 
     <dependencies>
+        <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+
+        <!-- 鏍稿績妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-framework</artifactId>
         </dependency>
+
+        <!--鍩虹妯″潡-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>basic-server</artifactId>
+        </dependency>
+
+        <!-- 绯荤粺妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
         </dependency>
+
+        <!-- poi-tl鍖呯敓鎴愭姤鍛� -->
         <dependency>
             <groupId>com.deepoove</groupId>
             <artifactId>poi-tl</artifactId>
-            <version>1.12.2</version>
         </dependency>
     </dependencies>
 
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/controller/RawMaterialOrderController.java b/inspect-server/src/main/java/com/ruoyi/basic/controller/RawMaterialOrderController.java
index e913cf4..0a5e48c 100644
--- a/inspect-server/src/main/java/com/ruoyi/basic/controller/RawMaterialOrderController.java
+++ b/inspect-server/src/main/java/com/ruoyi/basic/controller/RawMaterialOrderController.java
@@ -1,318 +1,317 @@
-//package com.ruoyi.basic.controller;
-//
-//import com.alibaba.fastjson.JSON;
-//import com.alibaba.fastjson.JSONArray;
-//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-//import com.ruoyi.basic.dto.IfsInventoryQuantityCheckDto;
-//import com.ruoyi.basic.dto.IfsInventoryQuantityDto;
-//import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
-//import com.ruoyi.basic.service.RawMaterialOrderService;
-//import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
-//import com.ruoyi.common.core.domain.Result;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiOperation;
-//import lombok.AllArgsConstructor;
-//import org.springframework.web.bind.annotation.*;
-//
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.File;
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * @Author zhuo
-// * @Date 2024/7/31
-// */
-//@RequestMapping("/rawMaterialOrder")
-//@RestController
-//@AllArgsConstructor
-//@Api(tags = "鍘熸潗鏂欎笅鍗�")
-//public class RawMaterialOrderController {
-//
-//    private RawMaterialOrderService rawMaterialOrderService;
-//    private RawMaterialOrderTemplateService rawMaterialOrderTemplateService;
-//
-//    @ApiOperation(value = "鏇村叿闆朵欢鍙疯幏鍙栨爣鍑嗘爲")
-//    @GetMapping("/selectStandardTreeListByPartNo")
-//    public Result selectStandardTreeListByPartNo(String partNo) {
-//        return Result.success(rawMaterialOrderService.selectStandardTreeListByPartNo(partNo));
-//    }
-//
-//    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇唬涓嬪崟")
-//    @GetMapping("/getPurchaseOrder")
-//    public Result getPurchaseOrder(Page page, IfsInventoryQuantityCheckDto ifsInventoryQuantity){
-//        return Result.success(rawMaterialOrderService.selectIfsInventoryQuantity(page, ifsInventoryQuantity));
-//    }
-//
-//    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇㈡楠屼腑")
-//    @GetMapping("/getIfsByStateOne")
-//    public Result getIfsByStateOne(Page page, IfsInventoryQuantityDto ifsInventoryQuantityDto) throws Exception {
-//        return Result.success(rawMaterialOrderService.getIfsByStateOne(page, ifsInventoryQuantityDto));
-//    }
-//
-//    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇㈠凡妫�楠�")
-//    @GetMapping("/getIfsByOver")
-//    public Result getIfsByOver(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) throws Exception {
-//        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
-//    }
-//
-//    @ApiOperation(value = "娣诲姞鍘熸潗鏂欐楠屽崟妯℃澘")
-//    @PostMapping("/addRawMaterOrderTemplate")
-//    public Result<?> addRawMaterOrderTemplate(@RequestBody RawMaterialOrderTemplate rawMaterialOrderTemplate) {
-//        return Result.success(rawMaterialOrderTemplateService.addRawMaterOrderTemplate(rawMaterialOrderTemplate));
-//    }
-//    @ApiOperation(value = "鏌ヨ鍘熸潗鏂欐楠屽崟妯℃澘鍒楄〃")
-//    @GetMapping("/selectRawMaterOrderTemplate")
-//    public Result<?> selectRawMaterOrderTemplate(String partNo) {
-//        return Result.success(rawMaterialOrderTemplateService.selectRawMaterOrderTemplate(partNo));
-//    }
-//
-//    @ApiOperation(value = "閫氳繃鍘熸潗鏂欐楠屽崟妯℃澘id鑾峰彇妫�楠屽崟妯℃澘鍐呭")
-//    @GetMapping("/selectRawMaterOrderTemplateById")
-//    public Result<?> selectRawMaterOrderTemplateById(Integer id) {
-//        return Result.success("鎴愬姛", rawMaterialOrderTemplateService.selectRawMaterOrderTemplateById(id));
-//    }
-//
-//    @ApiOperation(value = "鍒犻櫎鍘熸潗鏂欐楠屽崟妯℃澘")
-//    @PostMapping("/delRawMaterOrderTemplate")
-//    public Result<?> delRawMaterOrderTemplate(Integer id) {
-//        return Result.success(rawMaterialOrderTemplateService.delRawMaterOrderTemplate(id));
-//    }
-//
-//
-//    /**
-//     * 鎶ユ鎵归噺
-//     * @param param 鍘熸潗鏂檌d
-//     * @return
-//     */
-//    @ApiOperation(value = "鎶ユ鎵归噺")
-//    @PostMapping("/inspectionReport")
-//    public Result<?> inspectionReport(@RequestBody Map<String, Object> param) {
-//        List<Integer> ids = (List<Integer>) param.get("ids");
-//        return Result.success(rawMaterialOrderService.inspectionReport(ids));
-//    }
-//
-//    /**
-//     * 鍙栨秷鎶ユ
-//     * @param id 鍘熸潗鏂欎笅鍗�
-//     * @return
-//     */
-//    @ApiOperation(value = "鎾ら攢鎶ユ")
-//    @PostMapping("/revokeInspectionReport")
-//    public Result<?> revokeInspectionReport(Integer id) {
-//        return Result.success(rawMaterialOrderService.revokeInspectionReport(id));
-//    }
-//
-//    /**
-//     * 鎵撳嵃鏍囩鏌ヨ
-//     * @param param 鍘熸潗鏂檌d
-//     * @return
-//     */
-//    @ApiOperation(value = "鎵撳嵃鏍囩鏌ヨ")
-//    @PostMapping("/printLabel")
-//    public Result<?> printLabel(@RequestBody Map<String, Object> param) {
-//        List<Integer> ids = (List<Integer>) param.get("ids");
-//        return Result.success(rawMaterialOrderService.printLabel(ids));
-//    }
-//
-//    /**
-//     * 鎶ユ
-//     * @param ifsInventoryQuantity 鍘熸潗鏂�
-//     * @return
-//     */
-//    @ApiOperation(value = "鎶ユ")
-//    @PostMapping("/inspectionReportOne")
-//    public Result<?> inspectionReportOne(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
-//
-//        return Result.success(rawMaterialOrderService.inspectionReportOne(ifsInventoryQuantity));
-//    }
-//
-//    /**
-//     * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
-//     * @param id 鍘熸潗鏂檌d
-//     * @return
-//     */
-//    @ApiOperation(value = "鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�")
-//    @GetMapping("/getIndustryChain")
-//    public Result<?> getIndustryChain(Integer id) {
-//        return Result.success("鎴愬姛", rawMaterialOrderService.getIndustryChain(id));
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欐挙閿�
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @ApiOperation(value = "鍘熸潗鏂欐挙閿�涓嬪崟")
-//    @PutMapping("/repealRawOrder")
-//    public Result<?> repealRawOrder(Integer ifsInventoryId){
-//        return Result.success(rawMaterialOrderService.repealRawOrder(ifsInventoryId));
-//    }
-//
-//
-//    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曞厤妫�")
-//    @PostMapping("/addExemptionOrder")
-//    public Result<?> addExemptionOrder(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);
-//        return Result.success(rawMaterialOrderService.addExemptionOrder(list, insOrder));
-//    }
-//
-//
-//    @ApiOperation(value = "浠撳簱鎶ユ鏌ヨ")
-//    @PostMapping("/getWarehouseSubmit")
-//    public Result getWarehouseSubmit(@RequestBody Map<String, Object> data) throws Exception {
-//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
-//        IfsInventoryQuantity ifsInventoryQuantity = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantity.class);
-//        return Result.success(rawMaterialOrderService.getWarehouseSubmit(page, ifsInventoryQuantity));
-//    }
-//
-//    /**
-//     * 鍙栨秷鎶ユ
-//     * @param id 鍘熸潗鏂欎笅鍗�
-//     * @return
-//     */
-//    @ApiOperation(value = "鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅")
-//    @PostMapping("/delIfsInventory")
-//    public Result<?> delIfsInventory(Integer id) {
-//        return Result.success(rawMaterialOrderService.delIfsInventory(id));
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欎笅鍗曟斁琛�
-//     * @param param
-//     * @return
-//     */
-//    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曟斁琛屽厤妫�")
-//    @PostMapping("/rawOrderRelease")
-//    public Result<?> rawOrderRelease(@RequestBody Map<String, Object> param){
-//        Integer ifsInventoryId = (Integer) param.get("ifsInventoryId");
-//        String partDetail = (String) param.get("partDetail");
-//        return Result.success(rawMaterialOrderService.rawOrderRelease(ifsInventoryId, partDetail));
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�")
-//    @GetMapping("/notificationRawOrder")
-//    public Result<?> notificationRawOrder(Integer ifsInventoryId){
-//        return Result.success(rawMaterialOrderService.notificationRawOrder(ifsInventoryId));
-//    }
-//
-//    @ValueClassify("鍘熸潗鏂欎笅鍗�")
-//    @ApiOperation(value = "鍘熸潗鏂欐姤妫�鏌ヨ鍏ㄩ儴")
-//    @PostMapping("/getIfsByAll")
-//    public Result getIfsByAll(@RequestBody Map<String, Object> data) throws Exception {
-//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
-//        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
-//        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
-//    }
-//
-//
-//    @ApiOperation(value = "鏂板鍘熸潗鏂欐姤妫�淇℃伅")
-//    @PostMapping("/addIfsInventoryQuantity")
-//    public Result addIfsInventoryQuantity(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
-//        rawMaterialOrderService.addIfsInventoryQuantity(ifsInventoryQuantity);
-//        return Result.success();
-//    }
-//
-//    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曟煡鐪嬪凡瀹屾垚淇℃伅")
-//    @PostMapping("/getIfsByFinish")
-//    public Result getIfsByFinish(@RequestBody Map<String, Object> data) throws Exception {
-//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
-//        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
-//        ifsInventoryQuantityDto.setIsFinish(1);
-//        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
-//    }
-//
-//    @ApiOperation(value = "娴嬭瘯绉诲簱")
-//    @PostMapping("/shiftingParking")
-//    public Result shiftingParking(@RequestBody List<Integer> ids){
-//        rawMaterialOrderService.shiftingParking(ids);
-//        return Result.success();
-//    }
-//
-//    @ApiOperation(value = "寰俊鍙戦�佹枃浠�")
-//    @GetMapping("/wxSend")
-//    public Result wxSend(String user, String content, String filePath) throws Exception {
-//        WxCpUtils.inform(user, content, new File(filePath));
-//        return Result.success();
-//    }
-//
-//    @ValueClassify("鍘熸潗鏂欎笅鍗�")
-//    @ApiOperation(value = "閾滃崟涓濅笅鍗曞厤妫�")
-//    @PostMapping("/addRawCopperOrderExemptionOrder")
-//    public Result<?> addRawCopperOrderExemptionOrder(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);
-//        CopperInsOrderDto CopperInsOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), CopperInsOrderDto.class);
-//        return Result.success(rawMaterialOrderService.addRawCopperOrderExemptionOrder(list, CopperInsOrder));
-//    }
-//
-//    /**
-//     * 璁╂鏀捐
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @ValueClassify("鍘熸潗鏂欎笅鍗�")
-//    @ApiOperation(value = "璁╂鏀捐")
-//    @PostMapping("/concessionRelease")
-//    public Result<?> concessionRelease(Integer ifsInventoryId){
-//        return Result.success(rawMaterialOrderService.concessionRelease(ifsInventoryId));
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
-//     * @param enterOrderId
-//     * @return
-//     */
-//    @ApiOperation(value = "鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟")
-//    @PostMapping("/repealEnterRawOrder")
-//    public Result<?> repealEnterRawOrder(Integer enterOrderId){
-//        return Result.success(rawMaterialOrderService.repealEnterRawOrder(enterOrderId));
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
-//     * @param quarterOrderId
-//     * @return
-//     */
-//    @ApiOperation(value = "鍘熸潗鏂欏搴︽挙閿�涓嬪崟")
-//    @PostMapping("/repealQuarterRawOrder")
-//    public Result<?> repealQuarterRawOrder(Integer quarterOrderId){
-//        return Result.success(rawMaterialOrderService.repealQuarterRawOrder(quarterOrderId));
-//    }
-//
-//    @ApiOperation(value = "鍏ㄩ儴淇℃伅瀵煎嚭")
-//    @PostMapping("/rawAllExport")
-//    public void rawAllExport(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception {
-//        IfsInventoryQuantitySupplierDto dto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
-//        rawMaterialOrderService.rawAllExport(dto,response);
-//    }
-//
-//    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇㈠搴︽楠�")
-//    @PostMapping("/getIfsByQuarter")
-//    public Result getIfsByQuarter(@RequestBody Map<String, Object> data) throws Exception {
-//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
-//        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
-//        return Result.success(rawMaterialOrderService.getIfsByQuarter(page, ifsInventoryQuantityDto));
-//    }
-//
-//    /**
-//     * 鎻愬墠鍏ュ簱
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @ApiOperation(value = "鎻愬墠鍏ュ簱")
-//    @PostMapping("/advancedGodown")
-//    public Result<?> advancedGodown(Integer ifsInventoryId){
-//        return Result.success(rawMaterialOrderService.advancedGodown(ifsInventoryId));
-//    }
-//
-//}
+package com.ruoyi.basic.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.*;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.basic.pojo.InsOrder;
+import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
+import com.ruoyi.basic.service.RawMaterialOrderService;
+import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.common.utils.WxCpUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author zhuo
+ * @Date 2024/7/31
+ */
+@RequestMapping("/rawMaterialOrder")
+@RestController
+@AllArgsConstructor
+@Api(tags = "鍘熸潗鏂欎笅鍗�")
+public class RawMaterialOrderController {
+
+    private RawMaterialOrderService rawMaterialOrderService;
+    private RawMaterialOrderTemplateService rawMaterialOrderTemplateService;
+
+    @ApiOperation(value = "鏇村叿闆朵欢鍙疯幏鍙栨爣鍑嗘爲")
+    @GetMapping("/selectStandardTreeListByPartNo")
+    public Result selectStandardTreeListByPartNo(String partNo) {
+        return Result.success(rawMaterialOrderService.selectStandardTreeListByPartNo(partNo));
+    }
+
+    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇唬涓嬪崟")
+    @GetMapping("/getPurchaseOrder")
+    public Result getPurchaseOrder(Page page, IfsInventoryQuantityCheckDto ifsInventoryQuantity){
+        return Result.success(rawMaterialOrderService.selectIfsInventoryQuantity(page, ifsInventoryQuantity));
+    }
+
+    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇㈡楠屼腑")
+    @GetMapping("/getIfsByStateOne")
+    public Result getIfsByStateOne(Page page, IfsInventoryQuantityDto ifsInventoryQuantityDto) throws Exception {
+        return Result.success(rawMaterialOrderService.getIfsByStateOne(page, ifsInventoryQuantityDto));
+    }
+
+    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇㈠凡妫�楠�")
+    @GetMapping("/getIfsByOver")
+    public Result getIfsByOver(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) throws Exception {
+        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
+    }
+
+    @ApiOperation(value = "娣诲姞鍘熸潗鏂欐楠屽崟妯℃澘")
+    @PostMapping("/addRawMaterOrderTemplate")
+    public Result<?> addRawMaterOrderTemplate(@RequestBody RawMaterialOrderTemplate rawMaterialOrderTemplate) {
+        return Result.success(rawMaterialOrderTemplateService.addRawMaterOrderTemplate(rawMaterialOrderTemplate));
+    }
+    @ApiOperation(value = "鏌ヨ鍘熸潗鏂欐楠屽崟妯℃澘鍒楄〃")
+    @GetMapping("/selectRawMaterOrderTemplate")
+    public Result<?> selectRawMaterOrderTemplate(String partNo) {
+        return Result.success(rawMaterialOrderTemplateService.selectRawMaterOrderTemplate(partNo));
+    }
+
+    @ApiOperation(value = "閫氳繃鍘熸潗鏂欐楠屽崟妯℃澘id鑾峰彇妫�楠屽崟妯℃澘鍐呭")
+    @GetMapping("/selectRawMaterOrderTemplateById")
+    public Result<?> selectRawMaterOrderTemplateById(Integer id) {
+        return Result.success("鎴愬姛", rawMaterialOrderTemplateService.selectRawMaterOrderTemplateById(id));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鍘熸潗鏂欐楠屽崟妯℃澘")
+    @PostMapping("/delRawMaterOrderTemplate")
+    public Result<?> delRawMaterOrderTemplate(Integer id) {
+        return Result.success(rawMaterialOrderTemplateService.delRawMaterOrderTemplate(id));
+    }
+
+
+    /**
+     * 鎶ユ鎵归噺
+     * @param param 鍘熸潗鏂檌d
+     * @return
+     */
+    @ApiOperation(value = "鎶ユ鎵归噺")
+    @PostMapping("/inspectionReport")
+    public Result<?> inspectionReport(@RequestBody Map<String, Object> param) {
+        List<Integer> ids = (List<Integer>) param.get("ids");
+        return Result.success(rawMaterialOrderService.inspectionReport(ids));
+    }
+
+    /**
+     * 鍙栨秷鎶ユ
+     * @param id 鍘熸潗鏂欎笅鍗�
+     * @return
+     */
+    @ApiOperation(value = "鎾ら攢鎶ユ")
+    @PostMapping("/revokeInspectionReport")
+    public Result<?> revokeInspectionReport(Integer id) {
+        return Result.success(rawMaterialOrderService.revokeInspectionReport(id));
+    }
+
+    /**
+     * 鎵撳嵃鏍囩鏌ヨ
+     * @param param 鍘熸潗鏂檌d
+     * @return
+     */
+    @ApiOperation(value = "鎵撳嵃鏍囩鏌ヨ")
+    @PostMapping("/printLabel")
+    public Result<?> printLabel(@RequestBody Map<String, Object> param) {
+        List<Integer> ids = (List<Integer>) param.get("ids");
+        return Result.success(rawMaterialOrderService.printLabel(ids));
+    }
+
+    /**
+     * 鎶ユ
+     * @param ifsInventoryQuantity 鍘熸潗鏂�
+     * @return
+     */
+    @ApiOperation(value = "鎶ユ")
+    @PostMapping("/inspectionReportOne")
+    public Result<?> inspectionReportOne(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
+
+        return Result.success(rawMaterialOrderService.inspectionReportOne(ifsInventoryQuantity));
+    }
+
+    /**
+     * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
+     * @param id 鍘熸潗鏂檌d
+     * @return
+     */
+    @ApiOperation(value = "鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�")
+    @GetMapping("/getIndustryChain")
+    public Result<?> getIndustryChain(Integer id) {
+        return Result.success("鎴愬姛", rawMaterialOrderService.getIndustryChain(id));
+    }
+
+    /**
+     * 鍘熸潗鏂欐挙閿�
+     * @param ifsInventoryId
+     * @return
+     */
+    @ApiOperation(value = "鍘熸潗鏂欐挙閿�涓嬪崟")
+    @PutMapping("/repealRawOrder")
+    public Result<?> repealRawOrder(Integer ifsInventoryId){
+        return Result.success(rawMaterialOrderService.repealRawOrder(ifsInventoryId));
+    }
+
+
+    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曞厤妫�")
+    @PostMapping("/addExemptionOrder")
+    public Result<?> addExemptionOrder(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);
+        return Result.success(rawMaterialOrderService.addExemptionOrder(list, insOrder));
+    }
+
+
+    @ApiOperation(value = "浠撳簱鎶ユ鏌ヨ")
+    @PostMapping("/getWarehouseSubmit")
+    public Result getWarehouseSubmit(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        IfsInventoryQuantity ifsInventoryQuantity = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantity.class);
+        return Result.success(rawMaterialOrderService.getWarehouseSubmit(page, ifsInventoryQuantity));
+    }
+
+    /**
+     * 鍙栨秷鎶ユ
+     * @param id 鍘熸潗鏂欎笅鍗�
+     * @return
+     */
+    @ApiOperation(value = "鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅")
+    @PostMapping("/delIfsInventory")
+    public Result<?> delIfsInventory(Integer id) {
+        return Result.success(rawMaterialOrderService.delIfsInventory(id));
+    }
+
+    /**
+     * 鍘熸潗鏂欎笅鍗曟斁琛�
+     * @param param
+     * @return
+     */
+    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曟斁琛屽厤妫�")
+    @PostMapping("/rawOrderRelease")
+    public Result<?> rawOrderRelease(@RequestBody Map<String, Object> param){
+        Integer ifsInventoryId = (Integer) param.get("ifsInventoryId");
+        String partDetail = (String) param.get("partDetail");
+        return Result.success(rawMaterialOrderService.rawOrderRelease(ifsInventoryId, partDetail));
+    }
+
+    /**
+     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
+     * @param ifsInventoryId
+     * @return
+     */
+    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�")
+    @GetMapping("/notificationRawOrder")
+    public Result<?> notificationRawOrder(Integer ifsInventoryId){
+        return Result.success(rawMaterialOrderService.notificationRawOrder(ifsInventoryId));
+    }
+
+
+    @ApiOperation(value = "鍘熸潗鏂欐姤妫�鏌ヨ鍏ㄩ儴")
+    @PostMapping("/getIfsByAll")
+    public Result getIfsByAll(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
+        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
+    }
+
+
+    @ApiOperation(value = "鏂板鍘熸潗鏂欐姤妫�淇℃伅")
+    @PostMapping("/addIfsInventoryQuantity")
+    public Result addIfsInventoryQuantity(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
+        rawMaterialOrderService.addIfsInventoryQuantity(ifsInventoryQuantity);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍘熸潗鏂欎笅鍗曟煡鐪嬪凡瀹屾垚淇℃伅")
+    @PostMapping("/getIfsByFinish")
+    public Result getIfsByFinish(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
+        ifsInventoryQuantityDto.setIsFinish(1);
+        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
+    }
+
+    @ApiOperation(value = "娴嬭瘯绉诲簱")
+    @PostMapping("/shiftingParking")
+    public Result shiftingParking(@RequestBody List<Integer> ids){
+        rawMaterialOrderService.shiftingParking(ids);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "寰俊鍙戦�佹枃浠舵祴璇�")
+    @GetMapping("/wxSend")
+    public Result wxSend(String user, String content, String filePath) throws Exception {
+        WxCpUtils.inform(user, content, new File(filePath));
+        return Result.success();
+    }
+
+    @ApiOperation(value = "閾滃崟涓濅笅鍗曞厤妫�")
+    @PostMapping("/addRawCopperOrderExemptionOrder")
+    public Result<?> addRawCopperOrderExemptionOrder(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);
+        CopperInsOrderDto CopperInsOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), CopperInsOrderDto.class);
+        return Result.success(rawMaterialOrderService.addRawCopperOrderExemptionOrder(list, CopperInsOrder));
+    }
+
+    /**
+     * 璁╂鏀捐
+     * @param ifsInventoryId
+     * @return
+     */
+    @ApiOperation(value = "璁╂鏀捐")
+    @PostMapping("/concessionRelease")
+    public Result<?> concessionRelease(Integer ifsInventoryId){
+        return Result.success(rawMaterialOrderService.concessionRelease(ifsInventoryId));
+    }
+
+    /**
+     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
+     * @param enterOrderId
+     * @return
+     */
+    @ApiOperation(value = "鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟")
+    @PostMapping("/repealEnterRawOrder")
+    public Result<?> repealEnterRawOrder(Integer enterOrderId){
+        return Result.success(rawMaterialOrderService.repealEnterRawOrder(enterOrderId));
+    }
+
+    /**
+     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
+     * @param quarterOrderId
+     * @return
+     */
+    @ApiOperation(value = "鍘熸潗鏂欏搴︽挙閿�涓嬪崟")
+    @PostMapping("/repealQuarterRawOrder")
+    public Result<?> repealQuarterRawOrder(Integer quarterOrderId){
+        return Result.success(rawMaterialOrderService.repealQuarterRawOrder(quarterOrderId));
+    }
+
+    @ApiOperation(value = "鍏ㄩ儴淇℃伅瀵煎嚭")
+    @PostMapping("/rawAllExport")
+    public void rawAllExport(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception {
+        IfsInventoryQuantitySupplierDto dto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
+        rawMaterialOrderService.rawAllExport(dto,response);
+    }
+
+    @ApiOperation(value = "鍘熸潗鏂欐楠屾煡璇㈠搴︽楠�")
+    @GetMapping("/getIfsByQuarter")
+    public Result getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto){
+        return Result.success(rawMaterialOrderService.getIfsByQuarter(page, ifsInventoryQuantityDto));
+    }
+
+    /**
+     * 鎻愬墠鍏ュ簱
+     * @param ifsInventoryId
+     * @return
+     */
+    @ApiOperation(value = "鎻愬墠鍏ュ簱")
+    @PostMapping("/advancedGodown")
+    public Result<?> advancedGodown(Integer ifsInventoryId){
+        return Result.success(rawMaterialOrderService.advancedGodown(ifsInventoryId));
+    }
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/CopperInsOrderDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/CopperInsOrderDto.java
new file mode 100644
index 0000000..328126f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/CopperInsOrderDto.java
@@ -0,0 +1,37 @@
+package com.ruoyi.basic.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.basic.pojo.InsOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 閾滃崟涓濅笅鍗曚俊鎭�
+ *
+ * @Author zhuo
+ * @Date 2024/9/13
+ */
+@Data
+public class CopperInsOrderDto extends InsOrder {
+
+    @ApiModelProperty("鍒拌揣鏁伴噺")
+    private BigDecimal qtyArrived;
+
+    @ApiModelProperty("鍗曚綅")
+    private String buyUnitMeas;
+
+    @ApiModelProperty("渚涘簲鍟嗗悕绉�")
+    private String supplierName;
+
+    @ApiModelProperty("鎵瑰彿")
+    private String updateBatchNo;
+
+    @ApiModelProperty("鎺ユ敹鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private LocalDateTime declareDate;
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/CostStatisticsDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/CostStatisticsDto.java
new file mode 100644
index 0000000..904619b
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/CostStatisticsDto.java
@@ -0,0 +1,63 @@
+package com.ruoyi.basic.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;
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
deleted file mode 100644
index e74a7ca..0000000
--- a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
+++ /dev/null
@@ -1,183 +0,0 @@
-//package com.ruoyi.basic.dto;
-//
-//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;
-//
-///**
-// * 鍘熸潗鏂欐煡璇�, 鎺掗櫎浜嗕緵搴斿晢
-// * @Author zhuo
-// * @Date 2024/8/28
-// */
-//@Data
-//public class IfsInventoryQuantityCheckDto implements Serializable {
-//
-//    private Integer id;
-//
-//    @ApiModelProperty("鍩�")
-//    private String contract;
-//
-//    @ApiModelProperty("璁㈠崟鍙�")
-//    private String orderNo;
-//
-//
-//    @ApiModelProperty("琛屽彿")
-//    private String lineNo;
-//
-//    @ApiModelProperty("涓嬭揪鍙�")
-//    private String releaseNo;
-//
-//    @ApiModelProperty("鎺ユ敹鍙�")
-//    private Integer receiptNo;
-//
-//    @ApiModelProperty("闆朵欢鍙�")
-//    private String partNo;
-//
-//    @ApiModelProperty("闆朵欢鎻忚堪")
-//    private String partDesc;
-//
-//    @ApiModelProperty("鐘舵�佹弿杩�")
-//    private String status;
-//
-//    @ApiModelProperty("鐘舵��")
-//    private String statusDb;
-//
-//    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
-//    private BigDecimal qtyArrived;
-//
-//    @ApiModelProperty("宸叉楠岀殑璐拱鏁伴噺")
-//    private BigDecimal qtyInspected;
-//
-//    @ApiModelProperty("瑕佹楠岀殑閲囪喘鏁伴噺")
-//    private BigDecimal qtyToInspect;
-//
-//    @ApiModelProperty("鎶佃揪鐨勫簱瀛樻暟閲�")
-//    private BigDecimal invQtyInStore;
-//
-//    @ApiModelProperty("鎶佃揪鐨勯噰璐暟閲�")
-//    private BigDecimal purQtyInStore;
-//
-//    @ApiModelProperty("閰嶇疆鏍囪瘑")
-//    private String configurationId;
-//
-//    @ApiModelProperty("鎵瑰彿")
-//    private String lotBatchNo;
-//
-//    @ApiModelProperty("wdr鍙�")
-//    private String waivDevRejNo;
-//
-//    @ApiModelProperty("娲诲姩搴忓垪")
-//    private Integer activitySeq;
-//
-//
-//    @ApiModelProperty("搴忓垪鍙�")
-//    private String serialNo;
-//
-//    @ApiModelProperty("搴撲綅鍙�")
-//    private String locationNo;
-//
-//    @ApiModelProperty("鐗堟湰鍙�")
-//    private String engChgLevel;
-//
-//    @ApiModelProperty("鎺ユ敹浜�")
-//    private String receiver;
-//
-//    @ApiModelProperty("鎺ユ敹浜哄鍚�")
-//    private String receiverName;
-//
-//    @ApiModelProperty("閲囪喘鍛�")
-//    private String buyerCode;
-//
-//    @ApiModelProperty("閲囪喘鍛樺鍚�")
-//    private String buyerName;
-//
-//    @ApiModelProperty("瀹為檯鍒拌揣鏃ユ湡")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-//    private LocalDateTime arriveDate;
-//
-//    @ApiModelProperty("瀹為檯浜よ揣鏃ユ湡")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-//    private LocalDateTime deliveryDate;
-//
-//    @ApiModelProperty("鐢熶骇鏃ユ湡")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-//    private LocalDateTime productDate;
-//
-//    @ApiModelProperty("澶辨晥鏃ユ湡")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-//    private LocalDateTime invalidDate;
-//
-//
-//    @ApiModelProperty("瀹℃壒鏃ユ湡")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-//    private LocalDateTime approvedDate;
-//
-//    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜�")
-//    private String reqCeater;
-//
-//    @ApiModelProperty("閲囪喘鐢宠鍒涘缓浜哄鍚�")
-//    private String reqCeaterName;
-//
-//    @ApiModelProperty("閲囪喘璁㈠崟琛屽娉�")
-//    private String lineRemarks;
-//
-//    @ApiModelProperty("鍗曚綅")
-//    private String buyUnitMeas;
-//
-//
-//    private Integer isSource;
-//
-//    private Integer number;
-//
-//
-//    private Integer state;
-//
-//    @ApiModelProperty("鎺ユ敹鏃堕棿")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-//    private LocalDateTime receiverDate;
-//
-//    @ApiModelProperty("鏄惁涓洪娆″嚭鐜� 0 鍚� 1 鏄�")
-//    private Integer isFirst;
-//
-//    @ApiModelProperty("鐩爣搴撲綅鍙�")
-//    private String toLocation;
-//
-//    @ApiModelProperty("鏄惁鏄姤妫� 0 鍚� 1 鏄�")
-//    private Integer isInspect;
-//
-//    @ApiModelProperty("鎶ユ浜�")
-//    private String declareUser;
-//
-//
-//    @ApiModelProperty("鎶ユ浜篿d")
-//    private Integer declareUserId;
-//
-//    @ApiModelProperty("鍗曚綅")
-//    private String partUnit;
-//
-//    @ApiModelProperty("浜т笟閾炬娴嬫暟鎹�")
-//    private String industryChain;
-//
-//    @ApiModelProperty("鎶ユ鏃堕棿")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
-//    private LocalDateTime declareDate;
-//
-//    @ApiModelProperty("鏄惁鍗″彲浠ュ搴︽楠� 0 鍚� 1 鏄�")
-//    private Integer isQuarter;
-//
-//    // 淇敼鍚庣殑
-//    @ApiModelProperty("鎵瑰彿")
-//    private String updateBatchNo;
-//
-//    @ApiModelProperty("鏄惁鏄摐鍗曚笣, 0鍚�, 1鏄�")
-//    private Integer isCopper;
-//
-//    @ValueTableShow(8)
-//    @ApiModelProperty("鐗╂枡绫诲瀷")
-//    private Integer isExpire;
-//
-//}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
deleted file mode 100644
index 8997838..0000000
--- a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
+++ /dev/null
@@ -1,82 +0,0 @@
-//package com.ruoyi.basic.dto;
-//
-//import com.fasterxml.jackson.annotation.JsonFormat;
-//import io.swagger.annotations.ApiModelProperty;
-//import lombok.Data;
-//
-//import java.time.LocalDateTime;
-//
-//@Data
-//public class IfsInventoryQuantityDto extends IfsInventoryQuantityCheckDto {
-//
-//    /**
-//     * 濮旀墭缂栧彿
-//     */
-//    @ApiModelProperty("濮旀墭缂栧彿")
-//    private String entrustCode;
-//
-//    @ApiModelProperty("妫�楠屽璞�")
-//    private String sampleType;
-//
-//    @ApiModelProperty("鏍峰搧鍚嶇О")
-//    private String sampleName;
-//
-//    @ApiModelProperty("鏍峰搧鍨嬪彿")
-//    private String sampleModel;
-//
-//    @ApiModelProperty("鏍峰搧缂栧彿")
-//    private String sampleCode;
-//
-//    // 杩涘巶
-//    @ApiModelProperty("璁㈠崟id")
-//    private Integer enterOrderId;
-//
-//    @ApiModelProperty("鎶ュ憡id")
-//    private String enterReportId;
-//
-//    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-//    private String enterUrl;
-//
-//    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-//    private String enterUrlS;
-//
-//    // 瀛e害
-//    @ApiModelProperty("璁㈠崟id")
-//    private Integer quarterOrderId;
-//
-//    @ApiModelProperty("鎶ュ憡id")
-//    private String quarterReportId;
-//
-//    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-//    private String quarterUrl;
-//
-//    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-//    private String quarterUrlS;
-//
-//    private Integer orderState;
-//
-//    @ApiModelProperty("涓嬪彂鏃堕棿")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    private LocalDateTime sendTime;
-//
-//    @ApiModelProperty("鏉愭枡鍘傚")
-//    private String supplierName;
-//
-//    @ApiModelProperty("濮旀墭浜�")
-//    private String prepareUser;
-//
-//    @ApiModelProperty("棰滆壊")
-//    private String color;
-//
-//    @ApiModelProperty("鏍囩鐘舵��")
-//    private String labelStatus;
-//
-//    @ApiModelProperty("鏍囩鏉″舰鐮�")
-//    private String labelBarCode;
-//
-//    @ApiModelProperty("鍒涘缓浜�")
-//    private Integer createUser;
-//
-//    @ApiModelProperty("妫�楠屼汉")
-//    private String userName;
-//}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
deleted file mode 100644
index 1a6acd8..0000000
--- a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
+++ /dev/null
@@ -1,125 +0,0 @@
-//package com.ruoyi.basic.dto;
-//
-//import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-//import com.alibaba.excel.annotation.ExcelProperty;
-//import com.fasterxml.jackson.annotation.JsonFormat;
-//import com.yuanchu.mom.annotation.ValueTableShow;
-//import com.yuanchu.mom.pojo.IfsInventoryQuantity;
-//import io.swagger.annotations.ApiModelProperty;
-//import lombok.Data;
-//
-//import java.time.LocalDateTime;
-//
-///**
-// * 鑳芥煡璇㈠埌渚涘簲鍟�
-// */
-//@Data
-//@ExcelIgnoreUnannotated
-//public class IfsInventoryQuantitySupplierDto extends IfsInventoryQuantity {
-//
-//    /**
-//     * 濮旀墭缂栧彿
-//     */
-//    @ExcelProperty(index = 2, value = "濮旀墭缂栧彿")
-//    @ApiModelProperty("濮旀墭缂栧彿")
-//    private String entrustCode;
-//
-//    @ApiModelProperty("鏍峰搧id")
-//    private Integer sampleId;
-//
-//    @ApiModelProperty("妫�楠屽璞�")
-//    private String sampleType;
-//
-//    @ExcelProperty(index = 7, value = "鏍峰搧鍚嶇О")
-//    @ApiModelProperty("鏍峰搧鍚嶇О")
-//    private String sampleName;
-//
-//    @ExcelProperty(index = 8, value = "鏍峰搧鍨嬪彿")
-//    @ApiModelProperty("鏍峰搧鍨嬪彿")
-//    private String sampleModel;
-//
-//    @ApiModelProperty("鏍峰搧缂栧彿")
-//    private String sampleCode;
-//
-//    // 杩涘巶
-//    @ApiModelProperty("杩涘巶璁㈠崟id")
-//    private Integer enterOrderId;
-//
-//    @ApiModelProperty("鎶ュ憡id")
-//    private String enterReportId;
-//
-//    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-//    private String enterUrl;
-//
-//    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-//    private String enterUrlS;
-//
-//    // 瀛e害
-//    @ApiModelProperty("瀛e害璁㈠崟id")
-//    private Integer quarterOrderId;
-//
-//    @ApiModelProperty("鎶ュ憡id")
-//    private String quarterReportId;
-//
-//    @ApiModelProperty("绯荤粺鐢熸垚鎶ュ憡鍦板潃")
-//    private String quarterUrl;
-//
-//    @ApiModelProperty("鎵嬪姩涓婁紶鎶ュ憡鍦板潃")
-//    private String quarterUrlS;
-//
-//    private Integer orderState;
-//
-//    @ApiModelProperty("涓嬪彂鏃堕棿")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    private LocalDateTime sendTime;
-//
-//    @ApiModelProperty("濮旀墭浜�")
-//    private String prepareUser;
-//
-//    @ApiModelProperty("棰滆壊")
-//    private String color;
-//
-//    @ApiModelProperty("鏍囩鐘舵��")
-//    private String labelStatus;
-//
-//    @ApiModelProperty("鏍囩鏉″舰鐮�")
-//    private String labelBarCode;
-//
-//    @ApiModelProperty("鍒涘缓浜�")
-//    private Integer createUser;
-//
-//    @ExcelProperty(index = 9, value = "妫�楠屼汉")
-//    @ApiModelProperty("妫�楠屼汉")
-//    private String userName;
-//
-//    @ExcelProperty(index = 10, value = "涓嬪彂鏃堕棿")
-//    private String sendTimeString;
-//
-//    @ExcelProperty(index = 14, value = "鎺ユ敹鏃堕棿")
-//    private String receiverDateString;
-//
-//    @ExcelProperty(index = 15, value = "鎶ユ鏃堕棿")
-//    private String declareDateString;
-//
-//    // 鍚堟牸鐘舵��,: 0 妫�楠屼腑, 1鍚堟牸, 2涓嶅悎鏍�, 3鏈笅鍗�,4璁╂鏀捐
-//    @ExcelProperty(index = 6, value = "妫�楠岀姸鎬�")
-//    private String inspectStatusString;
-//
-//    @ApiModelProperty("鎶ユ寮�濮嬫椂闂�")
-//    private String beginDeclareDate;
-//
-//    @ApiModelProperty("鎶ユ缁撴潫鏃堕棿")
-//    private String endDeclareDate;
-//
-//    @ApiModelProperty("涓嶅悎鏍兼弿杩�")
-//    @ExcelProperty(index = 16, value = "涓嶅悎鏍兼弿杩�")
-//    private String unqualifiedDesc;
-//
-//
-//    @ApiModelProperty("涓嶅悎鏍奸」")
-//    @ExcelProperty(index = 17, value = "涓嶅悎鏍奸」")
-//    private String unqualifiedItem;
-//
-//    @ApiModelProperty("鍏嶆")
-//    private Integer isExemption;
-//}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsStockQueryDTO.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsStockQueryDTO.java
index 1a05501..da1294c 100644
--- a/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsStockQueryDTO.java
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/IfsStockQueryDTO.java
@@ -1,65 +1,65 @@
-//package com.ruoyi.basic.dto;
-//
-//import lombok.Data;
-//
-//@Data
-//public class IfsStockQueryDTO {
-//	private String partNo;
-//	private String partDescription; // 闆朵欢鎻忚堪
-//	private String partDesc;
-//	private String locNo; // 搴撲綅鍙�
-//	private String locDesc; // 搴撲綅鎻忚堪
-//	private String lotBatchNo; // 鎵瑰彿
-//	private String wdrNo; // WDR缂栧彿
-//	private String warehouse; // 浠撳簱
-//	private String quantityFlag; // 鏁伴噺鏍囪瘑(鐜版湁鏁伴噺)
-//	private String locationGroup; // 搴撲綅缁�
-//	private String locationGroupDesc; // 搴撲綅缁勬弿杩�
-//	private String reelNumber; // 杞藉叿缂栧彿
-//	private String startMeter; // 璧峰绫虫爣
-//	private String endMeter; // 鎴绫虫爣
-//	private String outerColor; // 澶栨姢棰滆壊
-//	private String insulationColor; // 缁濈紭棰滆壊
-//	private String otcOrderNo; // 鐗╂枡灞炴�ч噷闈㈢殑OTC璁㈠崟鍙�
-//	private String mpsNo; // 鐢熶骇璁″垝鍙�
-//	private String letteringInfo; // 鍗板瓧淇℃伅
-//	private String sStockQuantity; // 搴撳瓨鏁伴噺2
-//	private String availableStockQuantity; // 鍙敤搴撳瓨鏁伴噺
-//	private String sAvailableStockQuantity; // 搴撶敤搴撳瓨鏁伴噺2
-//	private String sunit; // 鍗曚綅2
-//	private String stockSource; // 鏉ユ簮
-//	private String inspInstorageTime; // 妫�娴嬪叆搴撴棩鏈�
-//	private String testRemark; // 妫�娴嬪娉�
-//	private String grossWeight; // 姣涢噸
-//	private String netWeight; // 鍑�閲�
-//	private String packingManner; // 鍖呰鏂瑰紡
-//	private String cylinderNumber; //鎵撳湀涓暟
-//	private String systemNo; //绯荤粺鍙�
-//	private String remark; //澶囨敞
-//	private String customerName; //瀹㈡埛鍚嶇О
-//	private String reserveQuantity; //棰勭暀鏁伴噺
-//	private String lengthRequirement; // 鍒ゆ柇瑕佹眰
-//	private String inSource;//鍏ュ簱鏉ユ簮
-//	private String splitQuality;//鍒嗗壊棰勭暀鏁伴噺
-//
-//	//鎺ュ彛 getIfsStockReport 鐢ㄥ埌鐨勫瓧娈�
-//	private String attr23;//鍏ュ簱鏉ユ簮
-//	private String attr6;//otc璁㈠崟鍙�
-//	private String attr21;//瀹㈡埛鍚嶇О
-//	private String attr4;//澶栨姢棰滆壊
-//	private String attr5;//缁濈紭棰滆壊
-//	private String attr8;//鍗板瓧淇℃伅
-//	private String lot_batch_no;//鎵规鍙�
-//	private String location_no;//搴撲綅鍙�
-//	private String attr17;//鍖呰鏂瑰紡
-//	private String attr1;//杞藉叿缂栧彿
-//
-//	//鎺ュ彛queryColReservedInfoStd 鐢ㄥ埌鐨勪袱涓瓧娈�
-//	private String cotcOrderNo; // 琛ㄩ噷闈㈢殑OTC璁㈠崟鍙�
-//	private String cotcLineNo; // 琛ㄩ噷闈㈢殑OTC琛屽彿
-//
-//	private Boolean isAll;//鏄惁鏌ヨ鍏ㄩ儴搴撳瓨
-//
-//	private Long page;
-//	private Long limit;
-//}
+package com.ruoyi.basic.dto;
+
+import lombok.Data;
+
+@Data
+public class IfsStockQueryDTO {
+	private String partNo;
+	private String partDescription; // 闆朵欢鎻忚堪
+	private String partDesc;
+	private String locNo; // 搴撲綅鍙�
+	private String locDesc; // 搴撲綅鎻忚堪
+	private String lotBatchNo; // 鎵瑰彿
+	private String wdrNo; // WDR缂栧彿
+	private String warehouse; // 浠撳簱
+	private String quantityFlag; // 鏁伴噺鏍囪瘑(鐜版湁鏁伴噺)
+	private String locationGroup; // 搴撲綅缁�
+	private String locationGroupDesc; // 搴撲綅缁勬弿杩�
+	private String reelNumber; // 杞藉叿缂栧彿
+	private String startMeter; // 璧峰绫虫爣
+	private String endMeter; // 鎴绫虫爣
+	private String outerColor; // 澶栨姢棰滆壊
+	private String insulationColor; // 缁濈紭棰滆壊
+	private String otcOrderNo; // 鐗╂枡灞炴�ч噷闈㈢殑OTC璁㈠崟鍙�
+	private String mpsNo; // 鐢熶骇璁″垝鍙�
+	private String letteringInfo; // 鍗板瓧淇℃伅
+	private String sStockQuantity; // 搴撳瓨鏁伴噺2
+	private String availableStockQuantity; // 鍙敤搴撳瓨鏁伴噺
+	private String sAvailableStockQuantity; // 搴撶敤搴撳瓨鏁伴噺2
+	private String sunit; // 鍗曚綅2
+	private String stockSource; // 鏉ユ簮
+	private String inspInstorageTime; // 妫�娴嬪叆搴撴棩鏈�
+	private String testRemark; // 妫�娴嬪娉�
+	private String grossWeight; // 姣涢噸
+	private String netWeight; // 鍑�閲�
+	private String packingManner; // 鍖呰鏂瑰紡
+	private String cylinderNumber; //鎵撳湀涓暟
+	private String systemNo; //绯荤粺鍙�
+	private String remark; //澶囨敞
+	private String customerName; //瀹㈡埛鍚嶇О
+	private String reserveQuantity; //棰勭暀鏁伴噺
+	private String lengthRequirement; // 鍒ゆ柇瑕佹眰
+	private String inSource;//鍏ュ簱鏉ユ簮
+	private String splitQuality;//鍒嗗壊棰勭暀鏁伴噺
+
+	//鎺ュ彛 getIfsStockReport 鐢ㄥ埌鐨勫瓧娈�
+	private String attr23;//鍏ュ簱鏉ユ簮
+	private String attr6;//otc璁㈠崟鍙�
+	private String attr21;//瀹㈡埛鍚嶇О
+	private String attr4;//澶栨姢棰滆壊
+	private String attr5;//缁濈紭棰滆壊
+	private String attr8;//鍗板瓧淇℃伅
+	private String lot_batch_no;//鎵规鍙�
+	private String location_no;//搴撲綅鍙�
+	private String attr17;//鍖呰鏂瑰紡
+	private String attr1;//杞藉叿缂栧彿
+
+	//鎺ュ彛queryColReservedInfoStd 鐢ㄥ埌鐨勪袱涓瓧娈�
+	private String cotcOrderNo; // 琛ㄩ噷闈㈢殑OTC璁㈠崟鍙�
+	private String cotcLineNo; // 琛ㄩ噷闈㈢殑OTC琛屽彿
+
+	private Boolean isAll;//鏄惁鏌ヨ鍏ㄩ儴搴撳瓨
+
+	private Long page;
+	private Long limit;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/InsOrderUpdateDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/InsOrderUpdateDto.java
new file mode 100644
index 0000000..45c53f5
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/InsOrderUpdateDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.basic.pojo.InsOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/29
+ */
+@Data
+public class InsOrderUpdateDto {
+
+    @ApiModelProperty("璁㈠崟淇敼瀵硅薄")
+    private InsOrder insOrder;
+
+    @ApiModelProperty("妫�娴嬫牱鍝佸璞�")
+    private List<SampleProductDto> sampleProduct;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/InsulatingDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/InsulatingDto.java
new file mode 100644
index 0000000..53ced02
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/InsulatingDto.java
@@ -0,0 +1,20 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.basic.pojo.InsProduct;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InsulatingDto {
+
+    // 鏂规硶id
+    private Integer standardMethodListId;
+
+    // 鑺暟
+    private List<String> num;
+
+    // 妫�楠岄」
+    private List<InsProduct> insProduct;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/RawMaterialStandardTreeDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/RawMaterialStandardTreeDto.java
new file mode 100644
index 0000000..28fbe65
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/RawMaterialStandardTreeDto.java
@@ -0,0 +1,33 @@
+package com.ruoyi.basic.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2024/7/31
+ */
+@Data
+public class RawMaterialStandardTreeDto {
+
+    @ApiModelProperty("鏍戝悕绉�")
+    private String treeName;
+
+    @ApiModelProperty("鏍戝悕绉�")
+    private String code;
+
+    @ApiModelProperty("鏍戝悕绉�")
+    private String label;
+
+    @ApiModelProperty("鏍戝悕绉�")
+    private String value;
+
+    @ApiModelProperty("浜у搧")
+    private List<SampleDto> children1;
+
+    @ApiModelProperty("鍨嬪彿")
+    private List<ModelDto> children2;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleOrderDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleOrderDto.java
new file mode 100644
index 0000000..299b09b
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleOrderDto.java
@@ -0,0 +1,93 @@
+package com.ruoyi.basic.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.basic.pojo.InsOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author gaoaoy
+ * @version 1.0.0
+ * @create 2024/3/14 18:46
+ **/
+@Data
+@ExcelIgnoreUnannotated
+public class SampleOrderDto extends InsOrder {
+
+    @ApiModelProperty("妫�楠屽璞�")
+    private String sampleType;
+
+    @ExcelProperty(index = 2, value = "鏍峰搧鍚嶇О")
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sampleName;
+
+    @ExcelProperty(index = 3, value = "鏍峰搧鍨嬪彿")
+    @ApiModelProperty("鏍峰搧鍨嬪彿")
+    private String sampleModel;
+
+    private String assign;
+
+    @ExcelProperty(index = 4, value = "鏍峰搧鏁伴噺")
+    @ApiModelProperty("鏍峰搧鏁伴噺")
+    private Integer sampleNum;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ExcelProperty(index = 8, value = "妫�楠岃繘搴�%")
+    @ApiModelProperty("妫�楠岃繘搴�%")
+    private String insProgress;
+
+    @ApiModelProperty("鎶ュ憡id")
+    private String reportId;
+
+    @TableField("`url`")
+    private String url;
+
+    private String urlS;
+
+    private String name;
+
+    @ExcelProperty(index = 5, value = "妫�楠屼汉")
+    @ApiModelProperty("妫�楠屼汉")
+    private String testingName;
+
+    /**
+     * (鎶ュ憡瀵煎嚭)绱ф�ョ▼搴� 锛�0鏅�� 1浼樺厛 2绱ф�ワ級
+     */
+    @ExcelProperty(index = 6, value = "绱ф�ョ▼搴�")
+    @ApiModelProperty("绱ф�ョ▼搴� 锛�0鏅�� 1浼樺厛 2绱ф�ワ級")
+    private String typeString;
+
+    /**
+     * (鎶ュ憡瀵煎嚭)妫�楠岀粨鏋�
+     */
+    @ExcelProperty(index = 10, value = "妫�楠岀粨鏋�")
+    @ApiModelProperty("妫�楠岀粨鏋�")
+    private String insResultString;
+
+    /**
+     * (鎶ュ憡瀵煎嚭)涓嶅悎鏍奸」鐩�
+     */
+    @ApiModelProperty("涓嶅悎鏍奸」")
+    @ExcelProperty(index = 13, value = "涓嶅悎鏍奸」")
+    private String unqualifiedItem;
+
+    /**
+     * (鎶ュ憡瀵煎嚭)涓嬪崟鏃堕棿
+     */
+    @ExcelProperty(index = 11, value = "涓嬪崟鏃堕棿")
+    @ApiModelProperty("涓嬪崟鏃堕棿")
+    private String createTimeString;
+
+    @ApiModelProperty("瀛愬疄楠屽")
+    private String sonLaboratory;
+
+
+
+
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto.java
new file mode 100644
index 0000000..a651523
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.basic.pojo.InsProduct;
+import com.ruoyi.basic.pojo.InsSample;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SampleProductDto extends InsSample {
+
+    @ApiModelProperty("妫�楠岄」鐩�")
+    private List<InsProduct> insProduct;
+
+//    private List<BushingDto> bushing;
+
+    @ApiModelProperty("瀛愭牱鍝侀厤缃�")
+    private List<SampleProductDto> childSampleList;
+
+    @ApiModelProperty("鐢电紗閰嶇疆瀵硅薄")
+    private InsulatingDto insulating;
+
+    @ApiModelProperty("杈呭姪绾胯姱閰嶇疆")
+    private InsulatingDto auxiliaryWireCore;
+
+//    private SheathDto sheath;
+
+    @ApiModelProperty("妫�楠屼汉")
+    private String checkName;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto2.java b/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto2.java
new file mode 100644
index 0000000..7abb63b
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto2.java
@@ -0,0 +1,124 @@
+package com.ruoyi.basic.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.TreeMap;
+
+@Data
+public class SampleProductDto2 implements Serializable {
+
+    @ApiModelProperty("鏍峰搧id")
+    private Integer id;
+
+    @ApiModelProperty("妫�楠岄」id")
+    private Integer insProductId;
+
+    @ApiModelProperty("鏍峰搧缂栧彿")
+    private String sampleCode;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ApiModelProperty("妫�楠岄」鍒嗙被")
+    private String inspectionItemClass;
+
+    @ApiModelProperty("妫�楠岄」鍒嗙被鑻辨枃")
+    private String inspectionItemClassEN;
+
+    @ApiModelProperty("妫�楠岄」")
+    private String inspectionItem;
+
+    @ApiModelProperty("妫�楠岄」鑻辨枃")
+    private String inspectionItemEn;
+
+    @ApiModelProperty("妫�楠屽瓙椤�")
+    private String inspectionItemSubclass;
+
+    @ApiModelProperty("妫�楠屽瓙椤硅嫳鏂�")
+    private String inspectionItemSubclassEn;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("鏍峰搧鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鏍峰搧鐘舵��")
+    private Integer insState;
+
+    @ApiModelProperty("瀹為獙瀹�")
+    private String sonLaboratory;
+
+    @ApiModelProperty("妫�楠岄」绫诲瀷")
+    private String inspectionItemType;
+
+    @ApiModelProperty("妫�楠屽�肩被鍨�")
+    private String inspectionValueType;
+
+    @ApiModelProperty("瑕佹眰鍊�")
+    private String ask;
+
+    @ApiModelProperty("璇曢獙瑕佹眰")
+    private String tell;
+
+    @ApiModelProperty("妫�楠岀粨鏋�")
+    private String lastValue;
+
+    @ApiModelProperty("缁撴灉鍒ゅ畾")
+    private Integer insResult;
+
+    @ApiModelProperty("妫�楠屼汉")
+    private String checkName;
+
+    @ApiModelProperty("妫�楠屾棩鏈�")
+    private String checkTime;
+
+    @ApiModelProperty("璁惧鍊�")
+    private String equipValue;
+
+    @ApiModelProperty("搴忓彿")
+    private String index;
+    @ApiModelProperty("鏍峰搧鍚嶇О(鏁翠綋)")
+    private String inspectionName;
+
+    @ApiModelProperty("鏉′欢")
+    private String radius;
+
+    @ApiModelProperty("妫�楠岀粨鏋滃垪琛�")
+    private List<String> lastValueList;
+
+    @ApiModelProperty("妫�楠岀粨鏋滃垪琛�")
+    private List<Integer> insResultList;
+
+    @ApiModelProperty("鏈�缁堢粨鏋�")
+    private String finalResult;
+
+    @ApiModelProperty("鍘熸潗鏂檌d")
+    private Integer ifsInventoryId;
+
+    @ApiModelProperty("妫�楠屽崟绫诲瀷")
+    private String orderType;
+
+    @ApiModelProperty("妫�楠屽崟绫诲瀷")
+    private Integer quantity;
+
+    @ApiModelProperty("妫�楠屽崟绫诲瀷")
+    private Integer sort;
+
+    @ApiModelProperty("鐢电紗鏍囪瘑")
+    private String cableTag;
+
+    @ApiModelProperty("鍞竴缁撴灉鍊�")
+    private LinkedHashSet<String> tellSet;
+
+    @ApiModelProperty("鐢电紗鏍囪瘑鍐呭闆嗗悎")
+    private TreeMap<String, String> cableTagValueMap;
+
+    @ApiModelProperty("鐢电紗鏍囪瘑缁撴灉闆嗗悎")
+    private TreeMap<String, Integer> cableTagResultMap;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/mapper/RawMaterialOrderTemplateMapper.java b/inspect-server/src/main/java/com/ruoyi/basic/mapper/RawMaterialOrderTemplateMapper.java
new file mode 100644
index 0000000..e4e78f2
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/mapper/RawMaterialOrderTemplateMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.basic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鍘熸潗鏂欎笅鍗曟ā鏉�
+ *
+ * @author zhuo
+ * @since 2024-08-05
+ */
+@Mapper
+public interface RawMaterialOrderTemplateMapper extends BaseMapper<RawMaterialOrderTemplate> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsOrder.java b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsOrder.java
new file mode 100644
index 0000000..7d3f20f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsOrder.java
@@ -0,0 +1,214 @@
+package com.ruoyi.basic.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+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.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+* 妫�楠屼笅鍗�
+* @TableName ins_order
+*/
+@Data
+@TableName("ins_order")
+@ExcelIgnoreUnannotated
+public class InsOrder implements Serializable {
+
+
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ExcelProperty(index = 0, value = "濮旀墭缂栧彿")
+    @ApiModelProperty(value = "濮旀墭缂栧彿")
+    private String entrustCode;
+
+    @ApiModelProperty(value = "澶栭儴濮旀墭缂栧彿")
+    private String outEntrustCode;
+
+    @ApiModelProperty(value = "妫�楠岀被鍒�")
+    private String orderType;
+
+    @ApiModelProperty("涓嬪崟瀹㈡埛")
+    private String custom;
+
+    @ExcelProperty(index = 1, value = "濮旀墭鍗曚綅")
+    @ApiModelProperty("濮旀墭鍗曚綅")
+    private String company;
+
+    @ApiModelProperty("鑱旂郴鏂瑰紡")
+    private String phone;
+
+    @ApiModelProperty("宸ュ巶鍩�")
+    private String code;
+
+    @ApiModelProperty("绱ф�ョ▼搴� 锛�0鏅�� 1浼樺厛 2绱ф�ワ級")
+    private Integer type;
+
+    @ExcelProperty(index = 9, value = "绾﹀畾鏃堕棿%")
+    @ApiModelProperty("绾﹀畾鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate appointed;
+
+    @ApiModelProperty("妫�楠岀粨鏋�, 0 涓嶅悎鏍�, 1鍚堟牸")
+    private Integer insResult;
+
+    @ApiModelProperty("鏍峰搧澶勭悊鏂瑰紡")
+    private Integer processing;
+
+    @ApiModelProperty("鏄惁鐣欐牱")
+    private Integer isLeave;
+
+    @ApiModelProperty("鐘舵��:-1:鍘熸潗鏂欐挙鍥�  1锛氭楠屽鐞� 0锛氬緟瀹℃牳 2锛氶��鍥� 3锛氭挙閿�")
+    private Integer state;
+
+    @ExcelProperty(index = 7, value = "澶囨敞")
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("澶囨敞鑻辨枃")
+    private String remarkEn;
+
+    @ApiModelProperty("OTC璁㈠崟鍙�")
+    private String otcCode;
+
+    @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;
+
+    @ApiModelProperty("涓嬪崟浜篿d")
+    private Integer userId;
+
+    @ApiModelProperty("鏄惁鏈夐厤濂楁牱鍝�")
+    private Integer mating;
+
+    @ApiModelProperty("妫�楠岀姸鎬�(0锛氬緟妫�楠� 1:妫�楠屼腑 2:宸叉楠� 3锛氬緟澶嶆牳 4锛氬鏍告湭閫氳繃 5锛氬鏍搁�氳繃)")
+    private Integer insState;
+
+    @ApiModelProperty("妫�楠屽伐鍘�")
+    private String factory;
+
+    @ApiModelProperty("瀹為獙瀹ゅ悕绉�")
+    private String laboratory;
+
+    @ApiModelProperty("鏍峰搧绫诲瀷")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О")
+    private String sample;
+
+    @ApiModelProperty("妫�楠屾椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime insTime;
+
+    @ApiModelProperty("閫�鍥炵悊鐢�")
+    private String tell;
+
+    @ApiModelProperty("鎶ュ憡鍙戦�佹柟寮� 1: 鑷彇, 0:鍏朵粬")
+    private Integer send;
+
+    @ApiModelProperty("鏉ユ牱鏂瑰紡")
+    private String formType;
+
+    @ApiModelProperty("瀹℃牳鏃堕棿")
+    private LocalDateTime examineTime;
+
+    @ApiModelProperty("宸ョ▼鍚嶇О")
+    private String engineering;
+
+    @ApiModelProperty("宸ョ▼鍚嶇О鑻辨枃")
+    private String engineeringEn;
+
+    @ApiModelProperty("鐢熶骇鍗曚綅")
+    private String production;
+
+    @ApiModelProperty("鐢熶骇鍗曚綅鑻辨枃")
+    private String productionEn;
+
+    @ApiModelProperty("瀹㈡埛鍗曚綅id")
+    private Long companyId;
+
+    @ApiModelProperty("濮旀墭浜篿d")
+    private Integer prepareUserId;
+
+    @ExcelProperty(index = 12, value = "濮旀墭浜�")
+    private String prepareUser;
+
+    @ApiModelProperty(name = "濮旀墭浜鸿嫳鏂�")
+    private String prepareUserEn;
+
+    @ApiModelProperty(name = "濮旀墭浜哄伐鍙�")
+    private String prepareCode;
+
+    @ApiModelProperty("鏄惁瀹℃牳鎾ら攢")
+    private Integer isRevocation;
+
+    @ApiModelProperty("瀹℃牳鎾ら攢鐨勯」鐩甶d")
+    private String revocationInsProductIds;
+
+    @ApiModelProperty("鏄惁涓哄師鏉愭枡 1 鏄� 0 鍚�")
+    private Integer typeSource;
+
+    @ApiModelProperty("鍘熸潗鏂檌d")
+    private Integer ifsInventoryId;
+
+    @ApiModelProperty("鎶芥煡鏁伴噺")
+    private String testQuantity;
+
+    @ApiModelProperty("闆朵欢鎻忚堪")
+    private String partDetail;
+
+    @ApiModelProperty("鏄惁鏄厤妫�, 0鍚� 1鏄�" )
+    private Integer isExemption;
+
+    @ApiModelProperty("娓╁害")
+    private String temperature;
+
+    @ApiModelProperty("婀垮害")
+    private String humidity;
+
+    @ApiModelProperty("鏍峰搧鐘舵��")
+    private String sampleStatus;
+
+    @ApiModelProperty("瀛e害鎶芥牱椤圭洰id")
+    private Integer quarterItemId;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О(鎶ュ憡灞曠ず瀛楁)")
+    private String sampleView;
+
+    @ApiModelProperty("鏍峰搧鍚嶇О寮曟枃(鎶ュ憡灞曠ず瀛楁)")
+    private String sampleViewEn;
+
+    @ApiModelProperty("鏄惁鏄涓�娆℃彁浜�0鍚�1鏄�")
+    private Integer isFirstSubmit;
+
+    @ApiModelProperty("绗竴娆℃彁浜ゆ椂闂�")
+    private LocalDateTime firstSubmitDate;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProduct.java b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProduct.java
new file mode 100644
index 0000000..fae198f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProduct.java
@@ -0,0 +1,214 @@
+package com.ruoyi.basic.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;
+
+    @ApiModelProperty("椤圭洰鍙傛暟id")
+    private Integer structureItemParameterId;
+
+    @TableField(exist = false,select = false)
+    private String sampleCode;
+
+    @ApiModelProperty("妫�楠岄」")
+    private String inspectionItem;
+
+    @ApiModelProperty("妫�楠岄」鑻辨枃")
+    private String inspectionItemEn;
+
+    @ApiModelProperty("妫�楠岄」鍒嗙被")
+    private String inspectionItemClass;
+
+    @ApiModelProperty("妫�楠岄」鍒嗙被EN")
+    private String inspectionItemClassEn;
+
+    @ApiModelProperty("妫�楠岄」瀛愮被")
+    private String inspectionItemSubclass;
+
+    @ApiModelProperty("妫�楠岄」瀛愮被鑻辨枃")
+    private String inspectionItemSubclassEn;
+
+    @ApiModelProperty("宸ュ巶")
+    private String factory;
+
+    @ApiModelProperty("瀹為獙瀹�")
+    private String laboratory;
+
+    @ApiModelProperty("鏍峰搧鍒嗙被")
+    private String sampleType;
+
+    @ApiModelProperty("鏍峰搧")
+    private String sample;
+
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鏂规硶")
+    private String methodS;
+
+    @ApiModelProperty("瀛愬疄楠屽")
+    private String sonLaboratory;
+
+    @ApiModelProperty("璁¢噺鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("鍗曚环(鍏�)")
+    private BigDecimal price;
+
+    @ApiModelProperty("宸ユ椂(H)")
+    private BigDecimal manHour;
+
+    @ApiModelProperty("宸ユ椂鍒嗙粍")
+    private String manHourGroup;
+
+    @ApiModelProperty("妫�楠岄」绫诲瀷")
+    private String inspectionItemType;
+
+    @ApiModelProperty("妫�楠屽�肩被鍨�")
+    private String inspectionValueType;
+
+    @ApiModelProperty("璁惧缁�")
+    private String deviceGroup;
+
+    @ApiModelProperty("妫�楠屾鏁�")
+    private Integer checkoutNumber;
+
+    @ApiModelProperty("鍖洪棿")
+    private String section;
+
+    @ApiModelProperty("鍙栧�肩被鍨�")
+    private String valueType;
+
+    @ApiModelProperty("鏂规硶")
+    private String method;
+
+    @ApiModelProperty("棰勮鏃堕棿(h)")
+    private Integer manDay;
+
+    @ApiModelProperty("鐗规畩鏍囪瘑")
+    private String bsm;
+
+    @ApiModelProperty("瑕佹眰鍊�")
+    private String ask;
+
+    @ApiModelProperty("瑕佹眰鎻忚堪")
+    private String tell;
+
+    @ApiModelProperty("鏈�缁堝��")
+    @TableField("`last_value`")
+    private String lastValue;
+
+    @ApiModelProperty("鍚堟牸鐘舵��: 1锛氬悎鏍� 0锛氫笉鍚堟牸, 3涓嶅垽瀹�")
+    private Integer insResult;
+
+
+    @ApiModelProperty("1锛氭湁鏁� 0锛氭棤鏁�")
+    private Integer state;
+
+    @ApiModelProperty("澶栭敭锛歩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;
+
+    @ApiModelProperty("澶栭敭锛歴tandard_template琛╥d")
+    private Integer templateId;
+
+    @TableField(exist = false)
+    @ApiModelProperty("妯℃澘鍐呭")
+    private List<JSONObject> template;
+
+    @TableField(exist = false)
+    @ApiModelProperty("妯℃澘鍐呭棰滆壊")
+    private Map<String, Object> style;
+
+    @TableField(exist = false)
+    @ApiModelProperty("妫�楠岀粨鏋滃璞�")
+    private InsProductResult insProductResult;
+
+    @TableField(exist = false)
+    @ApiModelProperty("妯℃澘鍚嶇О")
+    private String templateName;
+
+    @ApiModelProperty("瀛楀吀绫诲瀷")
+    private String dic;
+
+    //娓╁害
+    private String temperature;
+    //婀垮害
+    private String humidity;
+
+    private Integer insFiberId;
+
+    private Integer insFibersId;
+
+    private Integer insBushId;
+
+    @ApiModelProperty("鏍囧噯鏂规硶id")
+    private Integer standardMethodListId;
+
+    //杩斿洖鐨�20搴﹀父娓╃殑璁$畻鍊�(娓╁害寰幆)
+    @TableField(exist = false ,select = false)
+    private String complue;
+
+    @ApiModelProperty(value = "鏉′欢")
+    private String radius;
+
+    @ApiModelProperty(value = "鏀惰垂鏍囧噯(鍏�/娆�)")
+    private String rates;
+
+    @ApiModelProperty(value = "鐢电紗閰嶇疆鏍囪瘑")
+    private String cableTag;
+
+    @ApiModelProperty(value = "鍘熸潗鏂欓厤缃爣璇�")
+    private String rawMaterialTag;
+
+    @ApiModelProperty(value = "閲嶅鏍囪瘑(涓�涓楠岄」鍙兘浼氬瓨鍦ㄥ娆�)")
+    private String repetitionTag;
+
+    @ApiModelProperty(value = "鎺掑簭")
+    private Integer sort;
+
+    // 缁戝畾鍊间笉鍙傚姞灞曠ず, 鍙弬鍔犺绠�
+    @ApiModelProperty(value = "鏄惁鏄粦瀹氬��, 0鍚�, 1鏄�")
+    private Integer isBinding;
+
+    @ApiModelProperty(value = "鑷叧鑱�(缁戝畾id)")
+    private Integer bindingProductId;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProductResult.java b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProductResult.java
new file mode 100644
index 0000000..15a5598
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProductResult.java
@@ -0,0 +1,52 @@
+package com.ruoyi.basic.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;
+
+    @ApiModelProperty("澶栭敭锛氭楠岄」鐩甶d")
+    private Integer insProductId;
+
+    @ApiModelProperty("妫�楠屽��")
+    private String insValue;
+
+    @ApiModelProperty("璁$畻鍊�")
+    private String comValue;
+
+    @ApiModelProperty("璁惧鍊�")
+    private String equipValue;
+
+    @ApiModelProperty("璁惧鍚嶇О")
+    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;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java
index 6d01fd6..fc15a45 100644
--- a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java
+++ b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java
@@ -1,123 +1,123 @@
-//package com.ruoyi.basic.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_sample
-// */
-//@TableName(value ="ins_sample")
-//@Data
-//public class InsSample implements Serializable {
-//    /**
-//     *
-//     */
-//    @TableId(type = IdType.AUTO)
-//    private Integer id;
-//
-//    /**
-//     * 1锛氬悎鏍� 0锛氫笉鍚堟牸
-//     */
-//    private Integer insResult;
-//
-//    /**
-//     * 澶栭敭锛歩ns_order琛╥d
-//     */
-//    private Integer insOrderId;
-//
-//    /**
-//     * 閰嶅鏍峰搧鍨嬪彿
-//     */
-//    private String joinModel;
-//
-//    /**
-//     * 閰嶅鏍峰搧鍚嶇О
-//     */
-//    private String joinName;
-//
-//    /**
-//     * 閰嶅鏍峰搧鏁伴噺
-//     */
-//    private Integer joinNum;
-//
-//    /**
-//     * 鏍峰搧缂栫爜
-//     */
-//    private String sampleCode;
-//
-//    /**
-//     * 妫�楠屽伐鍘�
-//     */
-//    private String factory;
-//
-//    /**
-//     * 瀹為獙瀹ゅ悕绉�
-//     */
-//    private String laboratory;
-//
-//    /**
-//     * 鏍峰搧绫诲瀷
-//     */
-//    private String sampleType;
-//
-//    /**
-//     * 鏍峰搧鍚嶇О
-//     */
-//    private String sample;
-//
-//    /**
-//     * 瑙勬牸鍨嬪彿
-//     */
-//    private String model;
-//
-//    /**
-//     * 妫�楠岀姸鎬�(0锛氬緟妫�楠�1:妫�楠屼腑 2:宸叉楠�3锛氬緟澶嶆牳4锛氬鏍告湭閫氳繃5锛氬鏍搁�氳繃)
-//     */
-//    private Integer insState;
-//
-//    /**
-//     * 澶囨敞
-//     */
-//    private String remark;
-//
-//    private Integer standardMethodListId;
-//
-//    @ApiModelProperty("鏍峰搧鍗曚綅")
-//    private String unit;
-//
-//    private Integer cellId;
-//
-//    @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;
-//
-//    private Integer parentId;
-//
-//    @ApiModelProperty("鏁伴噺")
-//    private Integer quantity;
-//
-//    @ApiModelProperty("鐗规畩鏍囧噯鏂规硶")
-//    private String specialStandardMethod;
-//
-//    @TableField(select = false,exist = false)
-//    private Integer num=1;
-//
-//}
+package com.ruoyi.basic.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_sample
+ */
+@TableName(value ="ins_sample")
+@Data
+public class InsSample implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 1锛氬悎鏍� 0锛氫笉鍚堟牸
+     */
+    private Integer insResult;
+
+    /**
+     * 澶栭敭锛歩ns_order琛╥d
+     */
+    private Integer insOrderId;
+
+    /**
+     * 閰嶅鏍峰搧鍨嬪彿
+     */
+    private String joinModel;
+
+    /**
+     * 閰嶅鏍峰搧鍚嶇О
+     */
+    private String joinName;
+
+    /**
+     * 閰嶅鏍峰搧鏁伴噺
+     */
+    private Integer joinNum;
+
+    /**
+     * 鏍峰搧缂栫爜
+     */
+    private String sampleCode;
+
+    /**
+     * 妫�楠屽伐鍘�
+     */
+    private String factory;
+
+    /**
+     * 瀹為獙瀹ゅ悕绉�
+     */
+    private String laboratory;
+
+    /**
+     * 鏍峰搧绫诲瀷
+     */
+    private String sampleType;
+
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String sample;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String model;
+
+    /**
+     * 妫�楠岀姸鎬�(0锛氬緟妫�楠�1:妫�楠屼腑 2:宸叉楠�3锛氬緟澶嶆牳4锛氬鏍告湭閫氳繃5锛氬鏍搁�氳繃)
+     */
+    private Integer insState;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+    private Integer standardMethodListId;
+
+    @ApiModelProperty("鏍峰搧鍗曚綅")
+    private String unit;
+
+    private Integer cellId;
+
+    @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;
+
+    private Integer parentId;
+
+    @ApiModelProperty("鏁伴噺")
+    private Integer quantity;
+
+    @ApiModelProperty("鐗规畩鏍囧噯鏂规硶")
+    private String specialStandardMethod;
+
+    @TableField(select = false,exist = false)
+    private Integer num=1;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsUnqualifiedRetestProduct.java b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsUnqualifiedRetestProduct.java
new file mode 100644
index 0000000..d45a196
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/pojo/InsUnqualifiedRetestProduct.java
@@ -0,0 +1,137 @@
+package com.ruoyi.basic.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 涓嶅悎鏍兼楠岄」鐩娴�
+ *
+ * @author zhuo
+ * @since 2024-09-03
+ */
+@TableName(value = "ins_unqualified_retest_product")
+@Data
+public class InsUnqualifiedRetestProduct implements Serializable {
+    /**
+     * 涓婚敭id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+    //澶栭敭锛歩ns_product琛╥d
+    private Integer insProductId;
+    //妫�楠岄」
+    private String inspectionItem;
+    //妫�楠岄」瀛愮被
+    private String inspectionItemSubclass;
+    //宸ュ巶
+    private String factory;
+    //瀹為獙瀹�
+    private String laboratory;
+    //鏍峰搧鍒嗙被
+    private String sampleType;
+    //鏍峰搧
+    private String sample;
+    //鍨嬪彿
+    private String model;
+    //瀛愬疄楠屽
+    private String sonLaboratory;
+    //璁¢噺鍗曚綅
+    private String unit;
+    //鍗曚环(鍏�)
+    private Double 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;
+    //棰勮鏃堕棿(澶�)
+    private Integer manDay;
+    //鐗规畩鏍囪瘑
+    private String bsm;
+    //瑕佹眰鍊�
+    private String ask;
+    //瑕佹眰鎻忚堪
+    private String tell;
+    //鏈�缁堝��
+    @TableField("`last_value`")
+    private String lastValue;
+    //1锛氬悎鏍� 0锛氫笉鍚堟牸 3: 涓嶅垽瀹�
+    private Integer insResult;
+    //1锛氭湁鏁� 0锛氭棤鏁�
+    private Integer state;
+    //澶栭敭锛歩ns_sample琛╥d
+    private Integer insSampleId;
+
+    // 鍒涘缓浜�
+    @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;
+    //澶栭敭锛歴tandard_template琛╥d
+    private Integer templateId;
+    //瀛楀吀绫诲瀷
+    private String dic;
+    //鏂规硶
+    private String methodS;
+    //澶栭敭
+    private Integer insFiberId;
+    //澶栭敭
+    private Integer insFibersId;
+    //妫�楠岄」EN
+    private String inspectionItemEn;
+    //妫�楠岄」灏忕被EN
+    private String inspectionItemSubclassEn;
+    //妫�楠岄」鍒嗙被
+    private String inspectionItemClass;
+    //妫�楠岄」鍒嗙被EN
+    private String inspectionItemClassEn;
+    //澶栭敭锛氭爣鍑嗘柟娉昳d
+    private Integer standardMethodListId;
+    //娓╁害
+    private String temperature;
+    //婀垮害
+    private String humidity;
+    //澶栭敭(鐩墠鍙湁鏉惧绠¢」鐩娇鐢�)
+    private Integer insBushId;
+    //鑼冨洿
+    private String radius;
+    //鐢电紗鏍囪瘑
+    private String cableTag;
+    //鍘熸潗鏂欐壒閲忔爣璇�
+    private String rawMaterialTag;
+    //澶嶆祴娆℃暟鏍囪瘑
+    private String retestTag;
+    //鎺掑簭
+    private Integer sort;
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/pojo/RawMaterialOrderTemplate.java b/inspect-server/src/main/java/com/ruoyi/basic/pojo/RawMaterialOrderTemplate.java
new file mode 100644
index 0000000..72fcf37
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/pojo/RawMaterialOrderTemplate.java
@@ -0,0 +1,52 @@
+package com.ruoyi.basic.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鍘熸潗鏂欎笅鍗曟ā鏉�
+ *
+ * @author zhuo
+ * @since 2024-08-05
+ */
+@TableName(value = "raw_material_order_template")
+@Data
+public class RawMaterialOrderTemplate {
+
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 妯℃澘鍚嶇О
+     */
+    @ApiModelProperty("妯℃澘鍚嶇О")
+    private String name;
+
+    /**
+     * 妯℃澘鍚嶇О
+     */
+    @ApiModelProperty("闆朵欢缂栧彿")
+    private String partNo;
+
+    /**
+     * 妯℃澘鍐呭
+     */
+    @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;
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/service/InsOrderService.java b/inspect-server/src/main/java/com/ruoyi/basic/service/InsOrderService.java
new file mode 100644
index 0000000..f36d69a
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/service/InsOrderService.java
@@ -0,0 +1,115 @@
+package com.ruoyi.basic.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.basic.dto.*;
+import com.ruoyi.basic.pojo.InsOrder;
+import com.ruoyi.basic.pojo.InsUnqualifiedRetestProduct;
+
+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(IPage<InsOrder> page, SampleOrderDto sampleOrderDto);
+
+
+    //淇敼妫�楠屼笅鍗曟暟鎹�
+    int upInsOrder(Integer orderId,Integer sampleId, String appointed, Integer userId,String sonLaboratory);
+
+    int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing);
+
+    Map<String, Object> getInsOrder(Integer id);
+
+    int upInsOrderOfState(InsOrder insOrder);
+
+    Map<String, Object> getInsOrderAndSample(Integer id, String laboratory);
+
+    Map<String, Object> selectSampleAndProductByOrderId(IPage<SampleProductDto2> page, SampleProductDto2 sampleProductDto);
+
+    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);
+
+
+    void export(CostStatisticsDto costStatisticsDto,HttpServletResponse response)throws IOException, ServletException;
+
+    // 鑾峰彇ifs搴撳瓨淇℃伅
+    void getIfsOrder();
+
+    /**
+     * 淇敼璁㈠崟鍗曞彿
+     * @param insOrder
+     */
+    void updateEntrustCode(InsOrder insOrder);
+
+    List<InsUnqualifiedRetestProduct> getRetestResult(Integer insProductId);
+
+
+
+    void updateIfsInventoryQuantity(Integer id);
+
+    /**
+     * 閾滄潗涓嬪崟
+     * @param list
+     * @param copperInsOrder
+     * @return
+     */
+    int addRawCopperOrder(List<SampleProductDto> list, CopperInsOrderDto copperInsOrder);
+
+    /**
+     * 淇敼濮旀墭缂栧彿
+     * @param insOrder
+     */
+    void updateOrderEntrustCode(InsOrder insOrder);
+
+
+    /**
+     * 淇敼妫�楠屼笅鍗曞唴瀹�
+     * @param insOrderUpdateDto
+     * @return
+     */
+    Boolean updateInsOrder(InsOrderUpdateDto insOrderUpdateDto);
+
+    /**
+     * 鎴愬搧鏍囩鎵撳嵃
+     * @param ids
+     * @return
+     */
+    List<InsOrderPrintingVo> labelOrderPrinting(List<Integer> ids);
+
+    /**
+     * 鏍规嵁鏍峰搧id鏌ヨ妫�楠岄」鏍�
+     * @param insSampleId
+     * @return
+     */
+    List<StandardProductList> getProductTreeBySampleId(Integer insSampleId);
+
+    /**
+     * 娣诲姞閬楁紡鐨勬楠岄」
+     * @param omitOrderProductDto
+     * @return
+     */
+    boolean addOmitOrderProduct(OmitOrderProductDto omitOrderProductDto);
+
+    /**
+     * 鎴愬搧妫�楠屽崟瀵煎嚭
+     * @param sampleOrderDto
+     * @param response
+     */
+    void rawAllInsOrderExport(SampleOrderDto sampleOrderDto, HttpServletResponse response);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderService.java b/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderService.java
index 3cdf358..1662a1d 100644
--- a/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderService.java
+++ b/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderService.java
@@ -1,143 +1,146 @@
-//package com.ruoyi.basic.service;
-//
-//import com.baomidou.mybatisplus.core.metadata.IPage;
-//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-//
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.UnsupportedEncodingException;
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * @Author zhuo
-// * @Date 2024/7/31
-// */
-//public interface RawMaterialOrderService {
-//
-//    RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo);
-//
-//    /**
-//     * 鎶ユ鏌ヨ
-//     * @param page
-//     * @param ifsInventoryQuantity
-//     * @return
-//     */
-//    Map<String,Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity);
-//
-//    /**
-//     * 鏌ヨ妫�楠屽��
-//     * @param page
-//     * @param ifsInventoryQuantityDto
-//     * @return
-//     */
-//    Map<String,Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto);
-//
-//    int inspectionReport(List<Integer> ids);
-//
-//    int revokeInspectionReport(Integer id);
-//
-//    List<IfsInventoryQuantityDto> printLabel(List<Integer> ids);
-//
-//    int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity);
-//
-//    String getIndustryChain(Integer id);
-//
-//    /**
-//     * 鍘熸潗鏂欐挙閿�涓嬪崟
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    boolean repealRawOrder(Integer ifsInventoryId);
-//
-//    /**
-//     * 娣诲姞鍏嶆璁㈠崟
-//     * @param list
-//     * @param insOrder
-//     * @return
-//     */
-//    int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder);
-//
-//    Map<String,Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity);
-//
-//    /**
-//     * 鏌ヨ宸叉楠�
-//     * @param page
-//     * @param ifsInventoryQuantityDto
-//     * @return
-//     */
-//    Map<String,Object>  getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
-//
-//    int delIfsInventory(Integer id);
-//
-//    /**
-//     * 鍘熸潗鏂欐斁琛屽厤妫�
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    boolean rawOrderRelease(Integer ifsInventoryId, String partDetail);
-//
-//    /**
-//     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    int notificationRawOrder(Integer ifsInventoryId);
-//
-//    /**
-//     * 鎵嬪姩娣诲姞鍘熸潗淇℃伅
-//     * @param ifsInventoryQuantity
-//     */
-//    void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity);
-//
-//    void shiftingParking(List<Integer> ids);
-//
-//    /**
-//     * 閾滃崟涓濅笅鍗曞厤妫�
-//     * @param list
-//     * @param copperInsOrder
-//     */
-//    int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto copperInsOrder);
-//
-//    /**
-//     * 璁╂u鏀捐
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    boolean concessionRelease(Integer ifsInventoryId);
-//
-//    /**
-//     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
-//     * @param enterOrderId
-//     * @return
-//     */
-//    boolean repealEnterRawOrder(Integer enterOrderId);
-//
-//    /**
-//     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
-//     * @param quarterOrderId
-//     * @return
-//     */
-//    boolean repealQuarterRawOrder(Integer quarterOrderId);
-//
-//    /**
-//     * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
-//     * @param dto
-//     * @param response
-//     */
-//    void rawAllExport(IfsInventoryQuantitySupplierDto dto, HttpServletResponse response) throws UnsupportedEncodingException;
-//
-//    /**
-//     * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
-//     * @param page
-//     * @param ifsInventoryQuantityDto
-//     * @return
-//     */
-//    Map<String,Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
-//
-//    /**
-//     * advancedGodown
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    boolean advancedGodown(Integer ifsInventoryId);
-//}
+package com.ruoyi.basic.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.*;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.basic.pojo.InsOrder;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author zhuo
+ * @Date 2024/7/31
+ */
+public interface RawMaterialOrderService {
+
+    RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo);
+
+    /**
+     * 鎶ユ鏌ヨ
+     * @param page
+     * @param ifsInventoryQuantity
+     * @return
+     */
+    Map<String,Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity);
+
+    /**
+     * 鏌ヨ妫�楠屽��
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    Map<String,Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto);
+
+    int inspectionReport(List<Integer> ids);
+
+    int revokeInspectionReport(Integer id);
+
+    List<IfsInventoryQuantityDto> printLabel(List<Integer> ids);
+
+    int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity);
+
+    String getIndustryChain(Integer id);
+
+    /**
+     * 鍘熸潗鏂欐挙閿�涓嬪崟
+     * @param ifsInventoryId
+     * @return
+     */
+    boolean repealRawOrder(Integer ifsInventoryId);
+
+    /**
+     * 娣诲姞鍏嶆璁㈠崟
+     * @param list
+     * @param insOrder
+     * @return
+     */
+    int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder);
+
+    Map<String,Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity);
+
+    /**
+     * 鏌ヨ宸叉楠�
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    Map<String,Object>  getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
+
+    int delIfsInventory(Integer id);
+
+    /**
+     * 鍘熸潗鏂欐斁琛屽厤妫�
+     * @param ifsInventoryId
+     * @return
+     */
+    boolean rawOrderRelease(Integer ifsInventoryId, String partDetail);
+
+    /**
+     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
+     * @param ifsInventoryId
+     * @return
+     */
+    int notificationRawOrder(Integer ifsInventoryId);
+
+    /**
+     * 鎵嬪姩娣诲姞鍘熸潗淇℃伅
+     * @param ifsInventoryQuantity
+     */
+    void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity);
+
+    void shiftingParking(List<Integer> ids);
+
+    /**
+     * 閾滃崟涓濅笅鍗曞厤妫�
+     * @param list
+     * @param copperInsOrder
+     */
+    int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto copperInsOrder);
+
+    /**
+     * 璁╂u鏀捐
+     * @param ifsInventoryId
+     * @return
+     */
+    boolean concessionRelease(Integer ifsInventoryId);
+
+    /**
+     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
+     * @param enterOrderId
+     * @return
+     */
+    boolean repealEnterRawOrder(Integer enterOrderId);
+
+    /**
+     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
+     * @param quarterOrderId
+     * @return
+     */
+    boolean repealQuarterRawOrder(Integer quarterOrderId);
+
+    /**
+     * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
+     * @param dto
+     * @param response
+     */
+    void rawAllExport(IfsInventoryQuantitySupplierDto dto, HttpServletResponse response) throws UnsupportedEncodingException;
+
+    /**
+     * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    Map<String,Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
+
+    /**
+     * advancedGodown
+     * @param ifsInventoryId
+     * @return
+     */
+    boolean advancedGodown(Integer ifsInventoryId);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderTemplateService.java b/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderTemplateService.java
index 98b3b5e..71572e0 100644
--- a/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderTemplateService.java
+++ b/inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderTemplateService.java
@@ -1,25 +1,25 @@
-//package com.ruoyi.basic.service;
-//
-//import com.baomidou.mybatisplus.extension.service.IService;
-//import com.yuanchu.mom.pojo.RawMaterialOrderTemplate;
-//
-//import java.util.List;
-//
-///**
-// * 鍘熸潗鏂欎笅鍗曟ā鏉�
-// *
-// * @author zhuo
-// * @since 2024-08-05
-// */
-//public interface RawMaterialOrderTemplateService extends IService<RawMaterialOrderTemplate> {
-//
-//    int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate);
-//
-//    List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo);
-//
-//    String selectRawMaterOrderTemplateById(Integer id);
-//
-//    int delRawMaterOrderTemplate(Integer id);
-//
-//}
-//
+package com.ruoyi.basic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
+
+import java.util.List;
+
+/**
+ * 鍘熸潗鏂欎笅鍗曟ā鏉�
+ *
+ * @author zhuo
+ * @since 2024-08-05
+ */
+public interface RawMaterialOrderTemplateService extends IService<RawMaterialOrderTemplate> {
+
+    int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate);
+
+    List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo);
+
+    String selectRawMaterOrderTemplateById(Integer id);
+
+    int delRawMaterOrderTemplate(Integer id);
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderServiceImpl.java
index 0be3f23..8bc4ca6 100644
--- a/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderServiceImpl.java
@@ -1,850 +1,861 @@
-//package com.ruoyi.basic.service.impl;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.CollectionUtil;
-//import cn.hutool.core.date.DateTime;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.alibaba.excel.EasyExcel;
-//import com.alibaba.excel.ExcelWriter;
-//import com.alibaba.excel.write.metadata.WriteSheet;
-//import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
-//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-//import com.baomidou.mybatisplus.core.metadata.IPage;
-//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.ruoyi.basic.service.RawMaterialOrderService;
-//import lombok.AllArgsConstructor;
-//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-//import org.springframework.stereotype.Service;
-//import org.springframework.transaction.annotation.Transactional;
-//
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.io.UnsupportedEncodingException;
-//import java.math.BigDecimal;
-//import java.net.URLEncoder;
-//import java.text.SimpleDateFormat;
-//import java.time.LocalDateTime;
-//import java.time.format.DateTimeFormatter;
-//import java.util.*;
-//import java.util.concurrent.atomic.AtomicInteger;
-//
-///**
-// * @Author zhuo
-// * @Date 2024/7/31
-// */
-//@Service
-//@AllArgsConstructor
-//public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
-//
-//    private StandardTreeMapper standardTreeMapper;
-//    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
-//    private GetLook getLook;
-//    private UserMapper userMapper;
-//    private InsOrderService insOrderService;
-//    private InsOrderMapper insOrderMapper;
-//    private InsSampleMapper insSampleMapper;
-//    private final NumberGenerator<InsOrder> numberGenerator;
-//    private InsReportService insReportService;
-//    private WechatProperty wechatProperty;
-//    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
-//    private InsProductMapper insProductMapper;
-//    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
-//
-//
-//    @Override
-//    public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
-//        if (StringUtils.isBlank(partNo)) {
-//            throw new ErrorException("闆朵欢鍙蜂涪澶�");
-//        }
-//        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
-//        if (CollectionUtil.isEmpty(factoryDtos)) {
-//            throw new ErrorException("闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
-//        }
-//        RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
-//        for (FactoryDto factoryDto : factoryDtos) {
-//            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
-//                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
-//                    if (sampleTypeDto.getChildren().size() == 0) {
-//                        sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
-//                    }
-//                    // 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
-//                    if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
-//                        // 娣诲姞瀵硅薄
-//                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-//                                + laboratoryDto.getValue() + "-"
-//                                + sampleTypeDto.getValue());
-//                        rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
-//                        rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
-//                        rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
-//                        rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
-//                    } else {
-//                        for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
-//                            if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
-//                                // 娣诲姞瀵硅薄
-//                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-//                                        + laboratoryDto.getValue() + "-"
-//                                        + sampleTypeDto.getValue() + "-"
-//                                        + sampleDto.getValue());
-//                                rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
-//                                rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
-//                                rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
-//                                rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
-//                            }
-//                        }
-//                    }
-//                }
-//            }
-//        }
-//        return rawMaterialStandardTreeDto;
-//    }
-//
-//    @Override
-//    public Map<String, Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
-//        Map<String, Object> map = new HashMap<>();
-//        map.put("head", PrintChina.printChina(IfsInventoryQuantity.class));
-//        map.put("body", standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
-//        return map;
-//    }
-//
-//    @Override
-//    public Map<String, Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
-//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
-//        if (map1.get("look") == 1) {
-//            //涓汉
-//            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
-//        }
-//        Map<String, Object> map = new HashMap<>();
-////        ifsInventoryQuantityDto.setOrderState(null);
-//        map.put("head", PrintChina.printChina(IfsInventoryQuantityDto.class));
-//        map.put("body", standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto)));
-//        return map;
-//    }
-//
-//
-//    /**
-//     * 鎶ユ
-//     * @param ids
-//     * @return
-//     */
-//    @Override
-//    public int inspectionReport(List<Integer> ids) {
-//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
-//        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-//                .in(IfsInventoryQuantity::getId, ids)
-//                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
-//                .set(IfsInventoryQuantity::getDeclareUserId, userId)
-//                .set(IfsInventoryQuantity::getIsInspect, 1)
-//                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
-//        );
-//        threadPoolTaskExecutor.execute(() -> {
-//            List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
-//                    .in(IfsInventoryQuantity::getId, ids));
-//            // 浼佷笟寰俊閫氱煡
-//            String message = "";
-//            message += "鏂板鎶ユ閫氱煡";
-//            for (IfsInventoryQuantity inventoryQuantity : quantityList) {
-//                message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
-//                message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
-//                message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
-//
-//                // 鍒ゆ柇鏈夋病鏈夊埌20鍚�. 鎴栬�呰兘鍚﹀厤妫�
-//                int result = notificationRawOrder(inventoryQuantity.getId());
-//                switch (result) {
-//                    case 1:
-//                        message += "\n褰撳墠鏍峰搧宸叉楠岃繃, 鍙互鍏嶆";
-//                        break;
-//                    case 2:
-//                        message += "\n褰撳墠鏍峰搧宸茶秴杩�20鍚�";
-//                        break;
-//                }
-//                message += "\n";
-//            }
-//            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
-//        });
-//        return 1;
-//    }
-//
-//    /**
-//     * 鎾ら攢鎶ユ
-//     * @param id
-//     * @return
-//     */
-//    @Override
-//    public int revokeInspectionReport(Integer id) {
-//        return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-//                .eq(IfsInventoryQuantity::getId, id)
-//                .set(IfsInventoryQuantity::getIsInspect, 0)
-//        );
-//    }
-//
-//    /**
-//     * 鎵撳嵃鏍囩鏌ヨ
-//     * @param ids
-//     * @return
-//     */
-//    @Override
-//    public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
-//        return ifsInventoryQuantityMapper.printLabel(ids);
-//    }
-//
-//    /**
-//     * 鎶ユ
-//     * @param ifsInventoryQuantity
-//     * @return
-//     */
-//    @Override
-//    public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
-//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
-//        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-//                .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
-//                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
-//                .set(IfsInventoryQuantity::getDeclareUserId, userId)
-//                .set(IfsInventoryQuantity::getIsInspect, 1)
-//                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
-//                .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
-//        );
-//
-//        threadPoolTaskExecutor.execute(() -> {
-//            IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
-//            // 浼佷笟寰俊閫氱煡
-//            String message = "";
-//            message += "鏂板鎶ユ閫氱煡";
-//            message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
-//            message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
-//            message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
-//            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
-//        });
-//        return 1;
-//    }
-//
-//    /**
-//     * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
-//     * @param id
-//     * @return
-//     */
-//    @Override
-//    public String getIndustryChain(Integer id) {
-//        return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欐挙閿�鎺ュ彛
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @Override
-//    public boolean repealRawOrder(Integer ifsInventoryId) {
-//        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
-//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-//        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
-//            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
-//            ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
-//        } else {
-//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-//                    .set(IfsInventoryQuantity::getState, 0)
-//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-//                    .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-//        }
-//
-//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-//                .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
-//                .set(InsOrder::getState, -1)
-//                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-//        return true;
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欏厤妫�涓嬪崟
-//     * @param list
-//     * @param insOrder
-//     * @return
-//     */
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
-//        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
-//            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
-//        }
-//        insOrder.setSendTime(LocalDateTime.now());
-//        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
-//        insOrder.setState(4);
-//        insOrder.setTypeSource(1);
-//
-//        String code = "Y";
-//        // 鐢熸垚缂栧彿
-//        String no = numberGenerator.generateNumberWithPrefix(3,
-//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-//                InsOrder::getEntrustCode);
-//
-//        insOrderMapper.insert(insOrder); // 涓昏〃
-//
-//        AtomicInteger count = new AtomicInteger();
-//        list.forEach(a -> {
-//            count.getAndIncrement();
-//            a.setId(null);
-//            a.setInsOrderId(insOrder.getId());
-//            if (StrUtil.isEmpty(a.getSampleCode())) {
-//                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
-//                if (list.size() != 1) {
-//                    a.setSampleCode(no + "-" + count.get());
-//                } else {
-//                    a.setSampleCode(no);
-//                }
-//            }
-//            insSampleMapper.insert(a);
-//
-//            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
-//                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
-//            }
-//        });
-//
-//        // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
-//        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
-//        User user = userMapper.selectById(declareUserId);
-//        // 渚涘簲鍟嗗悕绉�
-//        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
-//        // 濮旀墭浜哄悕绉�
-//        insOrder.setPrepareUser(user.getName());
-//        insOrder.setPhone(user.getPhone());
-//
-//        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
-//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
-//                .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
-//
-//        insOrder.setExamineTime(LocalDateTime.now());
-//
-//        insOrder.setEntrustCode(no);
-//        insOrder.setIsExemption(1);
-//
-//        insOrderMapper.updateById(insOrder);
-//
-//        // 娣诲姞宸ユ椂
-//        addAuxiliary(insOrder, ifsInventoryQuantity);
-//
-//        // todo: ifs鐩存帴绉诲簱
-//        insReportService.isRawMaterial(insOrder);
-//
-//        return insOrder.getId();
-//    }
-//
-//
-//    /**
-//     * 鏌ヨ寰呬笅鍗�
-//     * @param page
-//     * @param ifsInventoryQuantity
-//     * @return
-//     */
-//    @Override
-//    public Map<String, Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
-//        Map<String, Object> map = new HashMap<>();
-//        map.put("head", PrintChina.printChina(IfsInventoryQuantityCheckDto.class));
-//        map.put("body", standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
-//        return map;
-//    }
-//
-//    /**
-//     * 鏌ヨ宸叉楠�
-//     * @param page
-//     * @param ifsInventoryQuantityDto
-//     * @return
-//     */
-//    @Override
-//    public Map<String, Object> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
-//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
-//        if (map1.get("look") == 1) {
-//            //涓汉
-//            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
-//        }
-//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
-//        ifsInventoryQuantityDto.setEndDeclareDate(null);
-//
-//        Map<String, Object> map = new HashMap<>();
-//        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
-//        map.put("body", standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
-//        return map;
-//    }
-//
-//    /**
-//     * 鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅
-//     * @param id
-//     * @return
-//     */
-//    @Override
-//    public int delIfsInventory(Integer id) {
-//        return ifsInventoryQuantityMapper.deleteById(id);
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欐斁琛屽厤妫�
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
-//        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
-//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-//                .set(IfsInventoryQuantity::getState, 2)
-//                .set(IfsInventoryQuantity::getIsQuarter, 0)
-//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-//
-//        // 鏌ヨ鍘熸潗鏂欎俊鎭�
-//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-//        // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-//        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
-//        User user = userMapper.selectById(declareUserId);
-//
-//        InsOrder insOrder = new InsOrder();
-//        insOrder.setState(4);
-//        insOrder.setTypeSource(1);
-//        String code = "Y";
-//        // 鐢熸垚缂栧彿
-//        String no = numberGenerator.generateNumberWithPrefix(3,
-//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-//                InsOrder::getEntrustCode);
-//        insOrder.setExamineTime(LocalDateTime.now());
-//        insOrder.setEntrustCode(no);
-//        insOrder.setIsExemption(1);
-//        // 渚涘簲鍟嗗悕绉�
-//        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
-//        // 濮旀墭浜哄悕绉�
-//        insOrder.setPrepareUser(user.getName());
-//        insOrder.setPhone(user.getPhone());
-//        insOrder.setIfsInventoryId(ifsInventoryId);
-//        insOrder.setPartDetail(partDetail);
-//        insOrder.setSendTime(LocalDateTime.now());
-//        insOrder.setSample(ifsInventoryQuantity.getPartDesc());
-//        // 杩涘巶妫�楠�
-//        insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
-//
-//        insOrderMapper.insert(insOrder);
-//
-//        // 娣诲姞宸ユ椂
-//        addAuxiliary(insOrder, ifsInventoryQuantity);
-//
-//        // todo: ifs鐩存帴绉诲簱
-//        insReportService.isRawMaterial(insOrder);
-//        return true;
-//    }
-//
-//    /**
-//     * 0, 鏃犳彁绀�, 1鎻愮ず  褰撳墠鎵规鐨勬牱鍝佸凡妫�楠岃繃, 鍙互鍏嶆, 2 鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡瓒�20鍚�, 闇�瑕佸绾у娆℃楠�
-//     *
-//     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @Override
-//    public int notificationRawOrder(Integer ifsInventoryId) {
-//        IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-//        // 鏌ヨ褰撳墠鎵规, 渚涘簲鍟�, 闆朵欢鍙风殑鍘熸潗鏂欐槸鍚﹁秴杩囦簡20鍚�, 瓒呰繃浜�20鍚ㄩ渶瑕佽繘琛屽娆℃楠屾彁閱�
-//        List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
-//                .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
-//                .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
-//                .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
-//                .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
-//
-//        // 鍒ゆ柇鏄惁澶т簬20鍚�
-//        BigDecimal bigDecimal = new BigDecimal("20000");
-//        BigDecimal count = BigDecimal.ZERO;
-//        for (IfsInventoryQuantity inventoryQuantity : quantityList) {
-//            // 鍒ゆ柇鍗曚綅鏄痥g鎴栬�卼
-//            if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
-//                count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
-//            } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
-//                count = count.add(inventoryQuantity.getQtyArrived());
-//            }
-//        }
-//
-//        if (count.compareTo(bigDecimal) >= 0) {
-//            return 2;
-//        } else {
-//            // 鍒ゆ柇涔嬪墠鏄惁鍑鸿繃鎶ュ憡, 鍑鸿繃鎶ュ憡鍙互鍏嶆
-//            int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
-//            if (reportCount > 0) {
-//                return 1;
-//            }
-//        }
-//        return 0;
-//    }
-//
-//    /**
-//     * 鎶ユ鍙互鏂板鎶ユ淇℃伅
-//     * @param ifsInventoryQuantity
-//     */
-//    @Override
-//    public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
-//        ifsInventoryQuantity.setIsSource(0);
-//        ifsInventoryQuantity.setState(0);
-//        ifsInventoryQuantity.setIsFinish(0);
-//        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-//    }
-//
-//    @Override
-//    public void shiftingParking(List<Integer> ids) {
-//        for (Integer id : ids) {
-//            InsOrder order = insOrderService.getById(id);
-//            // todo: ifs鐩存帴绉诲簱
-//            insReportService.isRawMaterial(order);
-//        }
-//    }
-//
-//    /**
-//     * 閾滃崟涓濅笅鍗曞厤妫�
-//     * @param list
-//     * @param insOrder
-//     */
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
-//        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
-//            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
-//        }
-//        insOrder.setSendTime(LocalDateTime.now());
-//        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
-//        insOrder.setState(4);
-//        insOrder.setTypeSource(1);
-//
-//        String code = "Y";
-//        // 鐢熸垚缂栧彿
-//        String no = numberGenerator.generateNumberWithPrefix(3,
-//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-//                InsOrder::getEntrustCode);
-//
-//        insOrderMapper.insert(insOrder); // 涓昏〃
-//
-//        AtomicInteger count = new AtomicInteger();
-//        list.forEach(a -> {
-//            count.getAndIncrement();
-//            a.setId(null);
-//            a.setInsOrderId(insOrder.getId());
-//            if (StrUtil.isEmpty(a.getSampleCode())) {
-//                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
-//                if (list.size() != 1) {
-//                    a.setSampleCode(no + "-" + count.get());
-//                } else {
-//                    a.setSampleCode(no);
-//                }
-//            }
-//            insSampleMapper.insert(a);
-//
-//            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
-//                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
-//            }
-//        });
-//        // 娣诲姞鍘熸潗鏂欎俊鎭�
-//        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
-//        // 鍩烘湰淇℃伅
-//        ifsInventoryQuantity.setIsSource(0);
-//        ifsInventoryQuantity.setState(2);
-//        ifsInventoryQuantity.setIsInspect(1);
-//        ifsInventoryQuantity.setIsFinish(1);
-//        ifsInventoryQuantity.setIsCopper(1);
-//        ifsInventoryQuantity.setInspectStatus(1);
-//        ifsInventoryQuantity.setIsQuarter(0);
-//
-//        ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
-//        ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
-//        ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
-//        ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
-//        ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
-//
-//        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-//
-//        insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
-//        insOrder.setExamineTime(LocalDateTime.now());
-//
-//        insOrder.setEntrustCode(no);
-//        insOrder.setIsExemption(1);
-//
-//        insOrderMapper.updateById(insOrder);
-//
-//        // 娣诲姞宸ユ椂
-//        addAuxiliary(insOrder, ifsInventoryQuantity);
-//
-//        return insOrder.getId();
-//    }
-//
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public boolean concessionRelease(Integer ifsInventoryId) {
-//        // 鏌ヨ鍘熸潗鏂欎俊鎭�
-//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-//        if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
-//            throw new ErrorException("涓嶅悎鏍肩殑鍘熸潗鏂欐墠鑳借姝ユ斁琛�");
-//        }
-//
-//        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-//        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
-//
-//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-//                .set(IfsInventoryQuantity::getInspectStatus, 4)
-//                .set(IfsInventoryQuantity::getToLocation, toLocation)
-//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-//
-//        return true;
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
-//     * @param enterOrderId
-//     * @return
-//     */
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public boolean repealEnterRawOrder(Integer enterOrderId) {
-//        // 鏌ヨ璁㈠崟
-//        InsOrder order = insOrderMapper.selectById(enterOrderId);
-//
-//        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
-//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
-//        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
-//            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
-//            ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
-//        } else {
-//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-//                    .set(IfsInventoryQuantity::getState, 0)
-//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-//        }
-//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-//                .eq(InsOrder::getId, enterOrderId)
-//                .set(InsOrder::getState, -1)
-//                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-//
-//        // 娓呴櫎涔嬪墠鐨勫伐鏃�
-//        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-//                .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
-//
-//        // 娓呴櫎涔嬪墠鎶ュ憡
-//        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
-//                .eq(InsReport::getInsOrderId, enterOrderId));
-//
-//        return true;
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
-//     * @param quarterOrderId
-//     * @return
-//     */
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public boolean repealQuarterRawOrder(Integer quarterOrderId) {
-//        // 鏌ヨ璁㈠崟
-//        InsOrder order = insOrderMapper.selectById(quarterOrderId);
-//
-//        Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-//                .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
-//                .ne(InsOrder::getState, -1)
-//                .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
-//                .ne(InsOrder::getId, order.getId()));
-//        // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�, 娌℃湁闇�瑕佷慨鏀瑰師鏉愭枡淇℃伅
-//        if (count == 0) {
-//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-//                    .set(IfsInventoryQuantity::getState, 0)
-//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-//        } else {
-//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-//        }
-//
-//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-//                .eq(InsOrder::getId, quarterOrderId)
-//                .set(InsOrder::getState, -1)
-//                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-//        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-//                .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
-//        // 娓呴櫎涔嬪墠鎶ュ憡
-//        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
-//                .eq(InsReport::getInsOrderId, quarterOrderId));
-//        return true;
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
-//     * @param ifsInventoryQuantityDto
-//     * @param response
-//     */
-//    @Override
-//    public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
-//        //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
-//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
-//        ifsInventoryQuantityDto.setEndDeclareDate(null);
-//        List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
-//
-//        for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
-//            dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-//            dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-//            dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-//            switch (dto.getInspectStatus()) {
-//                case 1:
-//                    dto.setInspectStatusString("鍚堟牸");
-//                    break;
-//                case 2:
-//                    dto.setInspectStatusString("涓嶅悎鏍�");
-//                    // 鏌ヨ涓嶅悎鏍奸」
-//                    List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
-//                    dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
-//                    break;
-//                case 3:
-//                    dto.setInspectStatusString("鏈笅鍗�");
-//                    break;
-//                case 4:
-//                    dto.setInspectStatusString("璁╂鏀捐");
-//                    break;
-//                case 0:
-//                    dto.setInspectStatusString("妫�楠屼腑");
-//                    break;
-//
-//            }
-//        }
-//
-//
-//        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");
-//        try {
-//            //鏂板缓ExcelWriter
-//            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
-//            //鑾峰彇sheet0瀵硅薄
-//            WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭鍑�").head(IfsInventoryQuantitySupplierDto.class).build();
-//
-//            //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
-//            excelWriter.write(ifsByOverList, mainSheet);
-//            //鍏抽棴娴�
-//            excelWriter.finish();
-//        } catch (IOException e) {
-//            throw new RuntimeException("瀵煎嚭澶辫触");
-//        }
-//    }
-//
-//    /**
-//     * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
-//     * @param page
-//     * @param ifsInventoryQuantityDto
-//     * @return
-//     */
-//    @Override
-//    public Map<String, Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
-//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
-//        if (map1.get("look") == 1) {
-//            //涓汉
-//            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
-//        }
-//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
-//        ifsInventoryQuantityDto.setEndDeclareDate(null);
-//
-//        Map<String, Object> map = new HashMap<>();
-//        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
-//        map.put("body", standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
-//        return map;
-//    }
-//
-//    /**
-//     * 鎻愬墠鍏ュ簱
-//     * @param ifsInventoryId
-//     * @return
-//     */
-//    @Override
-//    public boolean advancedGodown(Integer ifsInventoryId) {
-//        // 鏌ヨ鍘熸潗鏂欎俊鎭�
-//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-//        if (!ifsInventoryQuantity.getInspectStatus().equals(0)
-//                && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
-//            throw new ErrorException("鏈娴嬪畬鎴愭暟鎹墠鑳芥彁鍓嶅叆搴�");
-//        }
-//
-//        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-//        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
-//
-//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-//                .set(IfsInventoryQuantity::getInspectStatus, 1)
-//                .set(IfsInventoryQuantity::getIsFinish, 1)
-//                .set(IfsInventoryQuantity::getToLocation, toLocation)
-//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-//
-//        return true;
-//    }
-//
-//
-//    /**
-//     * 娣诲姞宸ユ椂
-//     * @param insOrder
-//     * @param ifsInventoryQuantity
-//     */
-//    private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
-//        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
-//        auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "鍏嶆");//妫�娴嬮」鍒嗙被
-//        auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//鏍峰搧缂栧彿
-//        auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id
-//        auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
-//
-//        // 鍏嶆榛樿2
-//        auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//闈炲姞鐝伐鏃�
-//        auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
-//        auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂
-//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-//        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-//        auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
-//        LocalDateTime localDateTime = LocalDateTime.now();
-//        DateTime parse = DateUtil.parse(localDateTime.format(formatter));
-//        auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
-//        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
-//        auxiliaryOutputWorkingHours.setCheck(getLook.selectPowerByMethodAndUserId(null).get("userId"));//妫�娴嬩汉
-//        auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//鍗曚环
-//
-//        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
-//    }
-//
-//    public static String getWeek(String dayStr) {
-//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-//        try {
-//            Date date = sdf.parse(dayStr);
-//            Calendar calendar = Calendar.getInstance();
-//            calendar.setTime(date);
-//            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
-//            int day = calendar.get(Calendar.DAY_OF_MONTH);
-//            return getWeekDay(dayOfWeek);
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        return null;
-//    }
-//
-//    public static String getWeekDay(int dayOfWeek) {
-//        switch (dayOfWeek) {
-//            case Calendar.MONDAY:
-//                return "鍛ㄤ竴";
-//            case Calendar.TUESDAY:
-//                return "鍛ㄤ簩";
-//            case Calendar.WEDNESDAY:
-//                return "鍛ㄤ笁";
-//            case Calendar.THURSDAY:
-//                return "鍛ㄥ洓";
-//            case Calendar.FRIDAY:
-//                return "鍛ㄤ簲";
-//            case Calendar.SATURDAY:
-//                return "鍛ㄥ叚";
-//            case Calendar.SUNDAY:
-//                return "鍛ㄦ棩";
-//            default:
-//                return "鏈煡";
-//        }
-//    }
-//}
+package com.ruoyi.basic.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.ruoyi.basic.dto.FactoryDto;
+import com.ruoyi.basic.dto.LaboratoryDto;
+import com.ruoyi.basic.dto.RawMaterialStandardTreeDto;
+import com.ruoyi.basic.dto.SampleTypeDto;
+import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.basic.mapper.StandardTreeMapper;
+import com.ruoyi.basic.pojo.InsOrder;
+import com.ruoyi.basic.service.InsOrderService;
+import com.ruoyi.basic.service.RawMaterialOrderService;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @Author zhuo
+ * @Date 2024/7/31
+ */
+@Service
+@AllArgsConstructor
+public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
+
+    private StandardTreeMapper standardTreeMapper;
+    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+    private GetLook getLook;
+    private UserMapper userMapper;
+    private InsOrderService insOrderService;
+    private InsOrderMapper insOrderMapper;
+    private InsSampleMapper insSampleMapper;
+    private final NumberGenerator<InsOrder> numberGenerator;
+    private InsReportService insReportService;
+    private WechatProperty wechatProperty;
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+    private InsProductMapper insProductMapper;
+    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+
+
+    @Override
+    public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
+        if (StringUtils.isBlank(partNo)) {
+            throw new ErrorException("闆朵欢鍙蜂涪澶�");
+        }
+        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
+        if (CollectionUtil.isEmpty(factoryDtos)) {
+            throw new ErrorException("闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
+        }
+        RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
+        for (FactoryDto factoryDto : factoryDtos) {
+            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
+                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
+                    if (sampleTypeDto.getChildren().size() == 0) {
+                        sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
+                    }
+                    // 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
+                    if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
+                        // 娣诲姞瀵硅薄
+                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
+                                + laboratoryDto.getValue() + "-"
+                                + sampleTypeDto.getValue());
+                        rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
+                        rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
+                        rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
+                        rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
+                    } else {
+                        for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
+                            if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
+                                // 娣诲姞瀵硅薄
+                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
+                                        + laboratoryDto.getValue() + "-"
+                                        + sampleTypeDto.getValue() + "-"
+                                        + sampleDto.getValue());
+                                rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
+                                rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
+                                rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
+                                rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return rawMaterialStandardTreeDto;
+    }
+
+    @Override
+    public Map<String, Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(IfsInventoryQuantity.class));
+        map.put("body", standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
+        return map;
+    }
+
+    @Override
+    public Map<String, Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
+        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
+        if (map1.get("look") == 1) {
+            //涓汉
+            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
+        }
+        Map<String, Object> map = new HashMap<>();
+//        ifsInventoryQuantityDto.setOrderState(null);
+        map.put("head", PrintChina.printChina(IfsInventoryQuantityDto.class));
+        map.put("body", standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto)));
+        return map;
+    }
+
+
+    /**
+     * 鎶ユ
+     * @param ids
+     * @return
+     */
+    @Override
+    public int inspectionReport(List<Integer> ids) {
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                .in(IfsInventoryQuantity::getId, ids)
+                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
+                .set(IfsInventoryQuantity::getDeclareUserId, userId)
+                .set(IfsInventoryQuantity::getIsInspect, 1)
+                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
+        );
+        threadPoolTaskExecutor.execute(() -> {
+            List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+                    .in(IfsInventoryQuantity::getId, ids));
+            // 浼佷笟寰俊閫氱煡
+            String message = "";
+            message += "鏂板鎶ユ閫氱煡";
+            for (IfsInventoryQuantity inventoryQuantity : quantityList) {
+                message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
+                message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
+                message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
+
+                // 鍒ゆ柇鏈夋病鏈夊埌20鍚�. 鎴栬�呰兘鍚﹀厤妫�
+                int result = notificationRawOrder(inventoryQuantity.getId());
+                switch (result) {
+                    case 1:
+                        message += "\n褰撳墠鏍峰搧宸叉楠岃繃, 鍙互鍏嶆";
+                        break;
+                    case 2:
+                        message += "\n褰撳墠鏍峰搧宸茶秴杩�20鍚�";
+                        break;
+                }
+                message += "\n";
+            }
+            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
+        });
+        return 1;
+    }
+
+    /**
+     * 鎾ら攢鎶ユ
+     * @param id
+     * @return
+     */
+    @Override
+    public int revokeInspectionReport(Integer id) {
+        return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                .eq(IfsInventoryQuantity::getId, id)
+                .set(IfsInventoryQuantity::getIsInspect, 0)
+        );
+    }
+
+    /**
+     * 鎵撳嵃鏍囩鏌ヨ
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
+        return ifsInventoryQuantityMapper.printLabel(ids);
+    }
+
+    /**
+     * 鎶ユ
+     * @param ifsInventoryQuantity
+     * @return
+     */
+    @Override
+    public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
+                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
+                .set(IfsInventoryQuantity::getDeclareUserId, userId)
+                .set(IfsInventoryQuantity::getIsInspect, 1)
+                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
+                .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
+        );
+
+        threadPoolTaskExecutor.execute(() -> {
+            IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
+            // 浼佷笟寰俊閫氱煡
+            String message = "";
+            message += "鏂板鎶ユ閫氱煡";
+            message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
+            message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
+            message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
+            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
+        });
+        return 1;
+    }
+
+    /**
+     * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
+     * @param id
+     * @return
+     */
+    @Override
+    public String getIndustryChain(Integer id) {
+        return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
+    }
+
+    /**
+     * 鍘熸潗鏂欐挙閿�鎺ュ彛
+     * @param ifsInventoryId
+     * @return
+     */
+    @Override
+    public boolean repealRawOrder(Integer ifsInventoryId) {
+        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
+            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
+            ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
+        } else {
+            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+                    .set(IfsInventoryQuantity::getState, 0)
+                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+                    .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+        }
+
+        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+                .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
+                .set(InsOrder::getState, -1)
+                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+        return true;
+    }
+
+    /**
+     * 鍘熸潗鏂欏厤妫�涓嬪崟
+     * @param list
+     * @param insOrder
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
+        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
+            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
+        }
+        insOrder.setSendTime(LocalDateTime.now());
+        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
+        insOrder.setState(4);
+        insOrder.setTypeSource(1);
+
+        String code = "Y";
+        // 鐢熸垚缂栧彿
+        String no = numberGenerator.generateNumberWithPrefix(3,
+                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+                InsOrder::getEntrustCode);
+
+        insOrderMapper.insert(insOrder); // 涓昏〃
+
+        AtomicInteger count = new AtomicInteger();
+        list.forEach(a -> {
+            count.getAndIncrement();
+            a.setId(null);
+            a.setInsOrderId(insOrder.getId());
+            if (StrUtil.isEmpty(a.getSampleCode())) {
+                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
+                if (list.size() != 1) {
+                    a.setSampleCode(no + "-" + count.get());
+                } else {
+                    a.setSampleCode(no);
+                }
+            }
+            insSampleMapper.insert(a);
+
+            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
+                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
+            }
+        });
+
+        // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
+        User user = userMapper.selectById(declareUserId);
+        // 渚涘簲鍟嗗悕绉�
+        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
+        // 濮旀墭浜哄悕绉�
+        insOrder.setPrepareUser(user.getName());
+        insOrder.setPhone(user.getPhone());
+
+        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
+        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
+                .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
+
+        insOrder.setExamineTime(LocalDateTime.now());
+
+        insOrder.setEntrustCode(no);
+        insOrder.setIsExemption(1);
+
+        insOrderMapper.updateById(insOrder);
+
+        // 娣诲姞宸ユ椂
+        addAuxiliary(insOrder, ifsInventoryQuantity);
+
+        // todo: ifs鐩存帴绉诲簱
+        insReportService.isRawMaterial(insOrder);
+
+        return insOrder.getId();
+    }
+
+
+    /**
+     * 鏌ヨ寰呬笅鍗�
+     * @param page
+     * @param ifsInventoryQuantity
+     * @return
+     */
+    @Override
+    public Map<String, Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(IfsInventoryQuantityCheckDto.class));
+        map.put("body", standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
+        return map;
+    }
+
+    /**
+     * 鏌ヨ宸叉楠�
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    @Override
+    public Map<String, Object> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
+        if (map1.get("look") == 1) {
+            //涓汉
+            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
+        }
+        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+        ifsInventoryQuantityDto.setEndDeclareDate(null);
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
+        map.put("body", standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
+        return map;
+    }
+
+    /**
+     * 鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅
+     * @param id
+     * @return
+     */
+    @Override
+    public int delIfsInventory(Integer id) {
+        return ifsInventoryQuantityMapper.deleteById(id);
+    }
+
+    /**
+     * 鍘熸潗鏂欐斁琛屽厤妫�
+     * @param ifsInventoryId
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
+        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
+        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+                .set(IfsInventoryQuantity::getState, 2)
+                .set(IfsInventoryQuantity::getIsQuarter, 0)
+                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+
+        // 鏌ヨ鍘熸潗鏂欎俊鎭�
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+        // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
+        User user = userMapper.selectById(declareUserId);
+
+        InsOrder insOrder = new InsOrder();
+        insOrder.setState(4);
+        insOrder.setTypeSource(1);
+        String code = "Y";
+        // 鐢熸垚缂栧彿
+        String no = numberGenerator.generateNumberWithPrefix(3,
+                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+                InsOrder::getEntrustCode);
+        insOrder.setExamineTime(LocalDateTime.now());
+        insOrder.setEntrustCode(no);
+        insOrder.setIsExemption(1);
+        // 渚涘簲鍟嗗悕绉�
+        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
+        // 濮旀墭浜哄悕绉�
+        insOrder.setPrepareUser(user.getName());
+        insOrder.setPhone(user.getPhone());
+        insOrder.setIfsInventoryId(ifsInventoryId);
+        insOrder.setPartDetail(partDetail);
+        insOrder.setSendTime(LocalDateTime.now());
+        insOrder.setSample(ifsInventoryQuantity.getPartDesc());
+        // 杩涘巶妫�楠�
+        insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
+
+        insOrderMapper.insert(insOrder);
+
+        // 娣诲姞宸ユ椂
+        addAuxiliary(insOrder, ifsInventoryQuantity);
+
+        // todo: ifs鐩存帴绉诲簱
+        insReportService.isRawMaterial(insOrder);
+        return true;
+    }
+
+    /**
+     * 0, 鏃犳彁绀�, 1鎻愮ず  褰撳墠鎵规鐨勬牱鍝佸凡妫�楠岃繃, 鍙互鍏嶆, 2 鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡瓒�20鍚�, 闇�瑕佸绾у娆℃楠�
+     *
+     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
+     * @param ifsInventoryId
+     * @return
+     */
+    @Override
+    public int notificationRawOrder(Integer ifsInventoryId) {
+        IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+        // 鏌ヨ褰撳墠鎵规, 渚涘簲鍟�, 闆朵欢鍙风殑鍘熸潗鏂欐槸鍚﹁秴杩囦簡20鍚�, 瓒呰繃浜�20鍚ㄩ渶瑕佽繘琛屽娆℃楠屾彁閱�
+        List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+                .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
+                .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
+                .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
+                .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
+
+        // 鍒ゆ柇鏄惁澶т簬20鍚�
+        BigDecimal bigDecimal = new BigDecimal("20000");
+        BigDecimal count = BigDecimal.ZERO;
+        for (IfsInventoryQuantity inventoryQuantity : quantityList) {
+            // 鍒ゆ柇鍗曚綅鏄痥g鎴栬�卼
+            if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
+                count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
+            } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
+                count = count.add(inventoryQuantity.getQtyArrived());
+            }
+        }
+
+        if (count.compareTo(bigDecimal) >= 0) {
+            return 2;
+        } else {
+            // 鍒ゆ柇涔嬪墠鏄惁鍑鸿繃鎶ュ憡, 鍑鸿繃鎶ュ憡鍙互鍏嶆
+            int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
+            if (reportCount > 0) {
+                return 1;
+            }
+        }
+        return 0;
+    }
+
+    /**
+     * 鎶ユ鍙互鏂板鎶ユ淇℃伅
+     * @param ifsInventoryQuantity
+     */
+    @Override
+    public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
+        ifsInventoryQuantity.setIsSource(0);
+        ifsInventoryQuantity.setState(0);
+        ifsInventoryQuantity.setIsFinish(0);
+        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
+    }
+
+    @Override
+    public void shiftingParking(List<Integer> ids) {
+        for (Integer id : ids) {
+            InsOrder order = insOrderService.getById(id);
+            // todo: ifs鐩存帴绉诲簱
+            insReportService.isRawMaterial(order);
+        }
+    }
+
+    /**
+     * 閾滃崟涓濅笅鍗曞厤妫�
+     * @param list
+     * @param insOrder
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
+        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
+            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
+        }
+        insOrder.setSendTime(LocalDateTime.now());
+        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
+        insOrder.setState(4);
+        insOrder.setTypeSource(1);
+
+        String code = "Y";
+        // 鐢熸垚缂栧彿
+        String no = numberGenerator.generateNumberWithPrefix(3,
+                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+                InsOrder::getEntrustCode);
+
+        insOrderMapper.insert(insOrder); // 涓昏〃
+
+        AtomicInteger count = new AtomicInteger();
+        list.forEach(a -> {
+            count.getAndIncrement();
+            a.setId(null);
+            a.setInsOrderId(insOrder.getId());
+            if (StrUtil.isEmpty(a.getSampleCode())) {
+                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
+                if (list.size() != 1) {
+                    a.setSampleCode(no + "-" + count.get());
+                } else {
+                    a.setSampleCode(no);
+                }
+            }
+            insSampleMapper.insert(a);
+
+            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
+                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
+            }
+        });
+        // 娣诲姞鍘熸潗鏂欎俊鎭�
+        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
+        // 鍩烘湰淇℃伅
+        ifsInventoryQuantity.setIsSource(0);
+        ifsInventoryQuantity.setState(2);
+        ifsInventoryQuantity.setIsInspect(1);
+        ifsInventoryQuantity.setIsFinish(1);
+        ifsInventoryQuantity.setIsCopper(1);
+        ifsInventoryQuantity.setInspectStatus(1);
+        ifsInventoryQuantity.setIsQuarter(0);
+
+        ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
+        ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
+        ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
+        ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
+        ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
+
+        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
+
+        insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
+        insOrder.setExamineTime(LocalDateTime.now());
+
+        insOrder.setEntrustCode(no);
+        insOrder.setIsExemption(1);
+
+        insOrderMapper.updateById(insOrder);
+
+        // 娣诲姞宸ユ椂
+        addAuxiliary(insOrder, ifsInventoryQuantity);
+
+        return insOrder.getId();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean concessionRelease(Integer ifsInventoryId) {
+        // 鏌ヨ鍘熸潗鏂欎俊鎭�
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+        if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
+            throw new ErrorException("涓嶅悎鏍肩殑鍘熸潗鏂欐墠鑳借姝ユ斁琛�");
+        }
+
+        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
+        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+
+        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+                .set(IfsInventoryQuantity::getInspectStatus, 4)
+                .set(IfsInventoryQuantity::getToLocation, toLocation)
+                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+
+        return true;
+    }
+
+    /**
+     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
+     * @param enterOrderId
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean repealEnterRawOrder(Integer enterOrderId) {
+        // 鏌ヨ璁㈠崟
+        InsOrder order = insOrderMapper.selectById(enterOrderId);
+
+        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
+        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
+            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
+            ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
+        } else {
+            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+                    .set(IfsInventoryQuantity::getState, 0)
+                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+        }
+        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+                .eq(InsOrder::getId, enterOrderId)
+                .set(InsOrder::getState, -1)
+                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+
+        // 娓呴櫎涔嬪墠鐨勫伐鏃�
+        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+                .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
+
+        // 娓呴櫎涔嬪墠鎶ュ憡
+        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
+                .eq(InsReport::getInsOrderId, enterOrderId));
+
+        return true;
+    }
+
+    /**
+     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
+     * @param quarterOrderId
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean repealQuarterRawOrder(Integer quarterOrderId) {
+        // 鏌ヨ璁㈠崟
+        InsOrder order = insOrderMapper.selectById(quarterOrderId);
+
+        Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+                .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
+                .ne(InsOrder::getState, -1)
+                .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
+                .ne(InsOrder::getId, order.getId()));
+        // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�, 娌℃湁闇�瑕佷慨鏀瑰師鏉愭枡淇℃伅
+        if (count == 0) {
+            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+                    .set(IfsInventoryQuantity::getState, 0)
+                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+        } else {
+            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+        }
+
+        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+                .eq(InsOrder::getId, quarterOrderId)
+                .set(InsOrder::getState, -1)
+                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+                .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
+        // 娓呴櫎涔嬪墠鎶ュ憡
+        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
+                .eq(InsReport::getInsOrderId, quarterOrderId));
+        return true;
+    }
+
+    /**
+     * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
+     * @param ifsInventoryQuantityDto
+     * @param response
+     */
+    @Override
+    public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
+        //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
+        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+        ifsInventoryQuantityDto.setEndDeclareDate(null);
+        List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+
+        for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
+            dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            switch (dto.getInspectStatus()) {
+                case 1:
+                    dto.setInspectStatusString("鍚堟牸");
+                    break;
+                case 2:
+                    dto.setInspectStatusString("涓嶅悎鏍�");
+                    // 鏌ヨ涓嶅悎鏍奸」
+                    List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
+                    dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
+                    break;
+                case 3:
+                    dto.setInspectStatusString("鏈笅鍗�");
+                    break;
+                case 4:
+                    dto.setInspectStatusString("璁╂鏀捐");
+                    break;
+                case 0:
+                    dto.setInspectStatusString("妫�楠屼腑");
+                    break;
+
+            }
+        }
+
+
+        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");
+        try {
+            //鏂板缓ExcelWriter
+            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            //鑾峰彇sheet0瀵硅薄
+            WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭鍑�").head(IfsInventoryQuantitySupplierDto.class).build();
+
+            //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
+            excelWriter.write(ifsByOverList, mainSheet);
+            //鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    /**
+     * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    @Override
+    public Map<String, Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
+        if (map1.get("look") == 1) {
+            //涓汉
+            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
+        }
+        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+        ifsInventoryQuantityDto.setEndDeclareDate(null);
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
+        map.put("body", standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
+        return map;
+    }
+
+    /**
+     * 鎻愬墠鍏ュ簱
+     * @param ifsInventoryId
+     * @return
+     */
+    @Override
+    public boolean advancedGodown(Integer ifsInventoryId) {
+        // 鏌ヨ鍘熸潗鏂欎俊鎭�
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+        if (!ifsInventoryQuantity.getInspectStatus().equals(0)
+                && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
+            throw new ErrorException("鏈娴嬪畬鎴愭暟鎹墠鑳芥彁鍓嶅叆搴�");
+        }
+
+        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
+        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+
+        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+                .set(IfsInventoryQuantity::getInspectStatus, 1)
+                .set(IfsInventoryQuantity::getIsFinish, 1)
+                .set(IfsInventoryQuantity::getToLocation, toLocation)
+                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+
+        return true;
+    }
+
+
+    /**
+     * 娣诲姞宸ユ椂
+     * @param insOrder
+     * @param ifsInventoryQuantity
+     */
+    private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
+        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
+        auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "鍏嶆");//妫�娴嬮」鍒嗙被
+        auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//鏍峰搧缂栧彿
+        auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id
+        auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
+
+        // 鍏嶆榛樿2
+        auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//闈炲姞鐝伐鏃�
+        auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
+        auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
+        LocalDateTime localDateTime = LocalDateTime.now();
+        DateTime parse = DateUtil.parse(localDateTime.format(formatter));
+        auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
+        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
+        auxiliaryOutputWorkingHours.setCheck(getLook.selectPowerByMethodAndUserId(null).get("userId"));//妫�娴嬩汉
+        auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//鍗曚环
+
+        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+    }
+
+    public static String getWeek(String dayStr) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date date = sdf.parse(dayStr);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+            int day = calendar.get(Calendar.DAY_OF_MONTH);
+            return getWeekDay(dayOfWeek);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static String getWeekDay(int dayOfWeek) {
+        switch (dayOfWeek) {
+            case Calendar.MONDAY:
+                return "鍛ㄤ竴";
+            case Calendar.TUESDAY:
+                return "鍛ㄤ簩";
+            case Calendar.WEDNESDAY:
+                return "鍛ㄤ笁";
+            case Calendar.THURSDAY:
+                return "鍛ㄥ洓";
+            case Calendar.FRIDAY:
+                return "鍛ㄤ簲";
+            case Calendar.SATURDAY:
+                return "鍛ㄥ叚";
+            case Calendar.SUNDAY:
+                return "鍛ㄦ棩";
+            default:
+                return "鏈煡";
+        }
+    }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderTemplateServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderTemplateServiceImpl.java
index 60dd9ed..d959998 100644
--- a/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderTemplateServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderTemplateServiceImpl.java
@@ -1,68 +1,70 @@
-//package com.ruoyi.basic.service.impl;
-//
-//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-//import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
-//import lombok.AllArgsConstructor;
-//import org.springframework.stereotype.Service;
-//
-//import java.util.List;
-//
-///**
-// * 鍘熸潗鏂欎笅鍗曟ā鏉�
-// *
-// * @author zhuo
-// * @since 2024-08-05
-// */
-//@Service
-//@AllArgsConstructor
-//public class RawMaterialOrderTemplateServiceImpl extends ServiceImpl<RawMaterialOrderTemplateMapper, RawMaterialOrderTemplate> implements RawMaterialOrderTemplateService {
-//
-//
-//    /**
-//     * 娣诲姞鍘熸潗鏂欐楠屽崟妯℃澘
-//     * @param rawMaterialOrderTemplate
-//     * @return
-//     */
-//    @Override
-//    public int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate) {
-//        if (StringUtils.isBlank(rawMaterialOrderTemplate.getPartNo())) {
-//            throw new RuntimeException("缂哄皯闆朵欢鍙�");
-//        }
-//        return baseMapper.insert(rawMaterialOrderTemplate);
-//    }
-//
-//    /**
-//     * 鏌ヨ鍘熸潗鏂欐楠屽崟妯℃澘鍒楄〃
-//     * @param partNo
-//     * @return
-//     */
-//    @Override
-//    public List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo) {
-//        return baseMapper.selectList(Wrappers.<RawMaterialOrderTemplate>lambdaQuery()
-//                .eq(RawMaterialOrderTemplate::getPartNo, partNo));
-//    }
-//
-//    /**
-//     * 閫氳繃鍘熸潗鏂欐楠屽崟妯℃澘id鑾峰彇妫�楠屽崟妯℃澘鍐呭
-//     * @param id
-//     * @return
-//     */
-//    @Override
-//    public String selectRawMaterOrderTemplateById(Integer id) {
-//        return baseMapper.selectById(id).getThing();
-//    }
-//
-//    /**
-//     * 鍒犻櫎鍘熸潗鏂欐楠屽崟妯℃澘
-//     * @param id
-//     * @return
-//     */
-//    @Override
-//    public int delRawMaterOrderTemplate(Integer id) {
-//        return baseMapper.deleteById(id);
-//    }
-//
-//}
-//
+package com.ruoyi.basic.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.RawMaterialOrderTemplateMapper;
+import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
+import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鍘熸潗鏂欎笅鍗曟ā鏉�
+ *
+ * @author zhuo
+ * @since 2024-08-05
+ */
+@Service
+@AllArgsConstructor
+public class RawMaterialOrderTemplateServiceImpl extends ServiceImpl<RawMaterialOrderTemplateMapper, RawMaterialOrderTemplate> implements RawMaterialOrderTemplateService {
+
+
+    /**
+     * 娣诲姞鍘熸潗鏂欐楠屽崟妯℃澘
+     * @param rawMaterialOrderTemplate
+     * @return
+     */
+    @Override
+    public int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate) {
+        if (StringUtils.isBlank(rawMaterialOrderTemplate.getPartNo())) {
+            throw new RuntimeException("缂哄皯闆朵欢鍙�");
+        }
+        return baseMapper.insert(rawMaterialOrderTemplate);
+    }
+
+    /**
+     * 鏌ヨ鍘熸潗鏂欐楠屽崟妯℃澘鍒楄〃
+     * @param partNo
+     * @return
+     */
+    @Override
+    public List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo) {
+        return baseMapper.selectList(Wrappers.<RawMaterialOrderTemplate>lambdaQuery()
+                .eq(RawMaterialOrderTemplate::getPartNo, partNo));
+    }
+
+    /**
+     * 閫氳繃鍘熸潗鏂欐楠屽崟妯℃澘id鑾峰彇妫�楠屽崟妯℃澘鍐呭
+     * @param id
+     * @return
+     */
+    @Override
+    public String selectRawMaterOrderTemplateById(Integer id) {
+        return baseMapper.selectById(id).getThing();
+    }
+
+    /**
+     * 鍒犻櫎鍘熸潗鏂欐楠屽崟妯℃澘
+     * @param id
+     * @return
+     */
+    @Override
+    public int delRawMaterOrderTemplate(Integer id) {
+        return baseMapper.deleteById(id);
+    }
+
+}
+
diff --git a/performance-server/pom.xml b/performance-server/pom.xml
index 12db53e..d24eb14 100644
--- a/performance-server/pom.xml
+++ b/performance-server/pom.xml
@@ -12,14 +12,19 @@
     <artifactId>performance-server</artifactId>
 
     <dependencies>
+        <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+
+        <!-- 鏍稿績妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-framework</artifactId>
         </dependency>
+
+        <!-- 绯荤粺妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
diff --git a/pom.xml b/pom.xml
index d60e905..49bce83 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,8 @@
         <swagger.version>3.0.0</swagger.version>
         <kaptcha.version>2.3.3</kaptcha.version>
         <pagehelper.boot.version>1.4.7</pagehelper.boot.version>
-        <fastjson.version>2.0.53</fastjson.version>
+        <fastjson2.version>2.0.53</fastjson2.version>
+        <fastjson.version>2.0.23</fastjson.version>
         <oshi.version>6.6.5</oshi.version>
         <commons.io.version>2.13.0</commons.io.version>
         <poi.version>4.1.2</poi.version>
@@ -44,6 +45,7 @@
         <okhttp.version>4.9.0</okhttp.version>
         <hutool.version>5.8.18</hutool.version>
         <easyexcel.version>3.3.2</easyexcel.version>
+        <poi.tl.version>1.12.2</poi.tl.version>
     </properties>
 
     <!-- 渚濊禆澹版槑 -->
@@ -182,7 +184,7 @@
             <dependency>
                 <groupId>com.alibaba.fastjson2</groupId>
                 <artifactId>fastjson2</artifactId>
-                <version>${fastjson.version}</version>
+                <version>${fastjson2.version}</version>
             </dependency>
 
             <!-- Token鐢熸垚涓庤В鏋�-->
@@ -206,6 +208,13 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
+            <!-- 閫氱敤宸ュ叿-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-common</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
             <!-- 鏍稿績妯″潡-->
             <dependency>
                 <groupId>com.ruoyi</groupId>
@@ -220,13 +229,33 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
-            <!-- 閫氱敤宸ュ叿-->
+            <!--鍩虹妯″潡-->
             <dependency>
                 <groupId>com.ruoyi</groupId>
-                <artifactId>ruoyi-common</artifactId>
+                <artifactId>basic-server</artifactId>
                 <version>${ruoyi.version}</version>
             </dependency>
 
+            <!--涓氬姟妯″潡-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>inspect-server</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!--缁╂晥妯″潡-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>performance-server</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!--cnas鏍囧噯鐗╄川-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>cnas-require</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
 
             <!-- minio -->
             <dependency>
@@ -246,6 +275,13 @@
                 <groupId>com.squareup.okhttp3</groupId>
                 <artifactId>okhttp</artifactId>
                 <version>${okhttp.version}</version>
+            </dependency>
+
+            <!-- poi-tl鍖呯敓鎴愭姤鍛� -->
+            <dependency>
+                <groupId>com.deepoove</groupId>
+                <artifactId>poi-tl</artifactId>
+                <version>${poi.tl.version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
@@ -318,7 +354,7 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
-            <version>2.0.23</version>
+            <version>${fastjson.version}</version>
         </dependency>
     </dependencies>
 
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index ae1928f..5449aa6 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -43,6 +43,7 @@
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
 
+        <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
@@ -64,23 +65,21 @@
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>basic-server</artifactId>
-            <version>${ruoyi.version}</version>
         </dependency>
 
         <!--涓氬姟妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>inspect-server</artifactId>
-            <version>${ruoyi.version}</version>
         </dependency>
 
         <!--缁╂晥妯″潡-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>performance-server</artifactId>
-            <version>${ruoyi.version}</version>
         </dependency>
 
+        <!--cnas鏍囧噯鐗╄川-->
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>cnas-require</artifactId>
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index ef7ea58..0e5f458 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -141,6 +141,24 @@
             <artifactId>commons-text</artifactId>
             <version>1.3</version>
         </dependency>
+
+        <!--浼佷笟寰俊鎺ュ彛-->
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-cp</artifactId>
+            <version>4.1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.github.binarywang</groupId>
+                    <artifactId>weixin-java-common</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-common</artifactId>
+            <version>4.1.0</version>
+        </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
             <artifactId>jackson-datatype-jsr310</artifactId>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Util.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Util.java
new file mode 100644
index 0000000..a56ecf1
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Util.java
@@ -0,0 +1,68 @@
+package com.ruoyi.common.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * @author cxf
+ */
+public class Md5Util {
+	/**
+	 * 榛樿鐨勫瘑鐮佸瓧绗︿覆缁勫悎锛岀敤鏉ュ皢瀛楄妭杞崲鎴� 16 杩涘埗琛ㄧず鐨勫瓧绗�
+	 */
+	protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+	protected static MessageDigest messagedigest = null;
+
+	static {
+		try {
+			messagedigest = MessageDigest.getInstance("MD5");
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static String getFileMd5String(File file) throws IOException {
+		InputStream fis;
+		fis = new FileInputStream(file);
+		byte[] buffer = new byte[1024];
+		int numRead = 0;
+		while ((numRead = fis.read(buffer)) > 0) {
+			messagedigest.update(buffer, 0, numRead);
+		}
+		fis.close();
+		return bufferToHex(messagedigest.digest());
+	}
+
+	public static String getStringMd5(String str) {
+		byte[] buffer = str.getBytes();
+		messagedigest.update(buffer);
+		return bufferToHex(messagedigest.digest());
+	}
+
+	public static String bufferToHex(byte bytes[]) {
+		return bufferToHex(bytes, 0, bytes.length);
+	}
+
+	private static String bufferToHex(byte bytes[], int m, int n) {
+		StringBuffer stringbuffer = new StringBuffer(2 * n);
+		int k = m + n;
+		for (int l = m; l < k; l++) {
+			appendHexPair(bytes[l], stringbuffer);
+		}
+		return stringbuffer.toString();
+	}
+
+	private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
+		// 鍙栧瓧鑺備腑楂� 4 浣嶇殑鏁板瓧杞崲
+		char c0 = hexDigits[(bt & 0xf0) >> 4];
+		// 涓洪�昏緫鍙崇Щ锛屽皢绗﹀彿浣嶄竴璧峰彸绉�,姝ゅ鏈彂鐜颁袱绉嶇鍙锋湁浣曚笉鍚�
+		// 鍙栧瓧鑺備腑浣� 4 浣嶇殑鏁板瓧杞崲
+		char c1 = hexDigits[bt & 0xf];
+		stringbuffer.append(c0);
+		stringbuffer.append(c1);
+	}
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxCpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxCpUtils.java
new file mode 100644
index 0000000..32266bf
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxCpUtils.java
@@ -0,0 +1,153 @@
+package com.ruoyi.common.utils;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
+import me.chanjar.weixin.cp.bean.message.WxCpMessage;
+import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult;
+import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
+
+import java.io.*;
+import java.net.MalformedURLException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
+import java.util.List;
+
+/**
+ * @Author: chenxiangfeng
+ * @Date: 2021/7/20 10:35
+ */
+public class WxCpUtils {
+
+	public static final String CORP_ID = "wwa423654b975441ac";
+	public static final String CORP_SECRET = "snXq8qwA5tGu0YN1PlSDQqr6u9x3A0c_jQDmt8CN8Vs";
+	public static final Integer AGENT_ID = 1000515;
+
+	/**
+	 * @param user      渚嬶細ZT-033268|ZT-028629锛屽涓腑闂寸敤|闅斿紑
+	 * @param content   浼犳枃鏈唴瀹�
+	 * @param imageFile 鍥剧墖
+	 * @throws Exception
+	 */
+	public static void inform(String user, String content, File imageFile) throws Exception {
+		WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
+		// 娉ㄥ唽鐨勪紒涓氫俊鎭�
+		config.setCorpId(CORP_ID);
+		config.setCorpSecret(CORP_SECRET);
+
+		WxCpServiceImpl wxCpService = new WxCpServiceImpl();
+		wxCpService.setWxCpConfigStorage(config);
+
+		WxCpMessage message;
+		WxCpMessageSendResult result;
+		// 鍙戦�佹枃鏈�
+		if (StringUtils.isNotBlank(content)) {
+			message = WxCpMessage.TEXT()
+					.content(content)
+					// 鐢ㄦ埛id
+					.toUser(user)
+					// 搴旂敤id
+					.agentId(AGENT_ID)
+					.build();
+			result = wxCpService.getMessageService().send(message);
+		}
+		// 鍙戦�佹枃浠�
+		if (imageFile != null) {
+			// 鑾峰彇鏂囦欢id
+			WxMediaUploadResult imgResult = wxCpService.getMediaService().upload("file", imageFile);
+			message = WxCpMessage.IMAGE()
+					.mediaId(imgResult.getMediaId())
+					// 鐢ㄦ埛id
+					.toUser(user)
+					// 搴旂敤id
+					.agentId(AGENT_ID)
+					.build();
+			result = wxCpService.getMessageService().send(message);
+		}
+	}
+
+	/**
+	 * 鎺ㄩ�佺兢娑堟伅
+	 *
+	 * @param webHookList 浼佷笟寰俊鏈哄櫒浜哄湴鍧�
+	 * @param file        鍥剧墖
+	 * @throws Exception
+	 */
+	public static void informWebHook(List<String> webHookList, File file) throws Exception {
+		JSONObject json = new JSONObject();
+		json.putOpt("msgtype", "image");
+		JSONObject image = new JSONObject();
+		image.putOpt("base64", getBase64(file));
+		image.putOpt("md5", getMd5(file));
+		json.putOpt("image", image);
+
+		webHookList.stream().forEach(webHook -> {
+			String result = HttpRequest.post(webHook)
+					.header("Content-Type", "application/json")
+					.body(json.toString())
+					.execute().body();
+		});
+	}
+
+	/**
+	 * 鎺ㄩ�佺兢娑堟伅
+	 *
+	 * @param webHook 浼佷笟寰俊鏈哄櫒浜哄湴鍧�
+	 * @param content 鏁版嵁
+	 * @throws Exception
+	 */
+	public static String informWebHook(String webHook, String content) {
+		JSONObject jsonObject = new JSONObject()
+				.accumulate("msgtype", "text")
+				.accumulate("text", new JSONObject()
+						.accumulate("content", content));
+		return HttpRequest.post(webHook).header("Content-Type", "application/json").body(jsonObject.toString()).execute().body();
+	}
+
+	public static String getMd5(File file) {
+		String name = "";
+		try {
+			InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
+			byte[] bytes = new byte[1024];
+			int len = 0;
+			MessageDigest messagedigest = MessageDigest.getInstance("MD5");
+			while ((len = inputStream.read(bytes)) > 0) {
+				messagedigest.update(bytes, 0, len);
+			}
+			name = Md5Util.bufferToHex(messagedigest.digest());
+			inputStream.close();
+		} catch (MalformedURLException e) {
+		} catch (IOException e) {
+		} catch (NoSuchAlgorithmException e) {
+		}
+		return name;
+
+	}
+
+	public static String getBase64(File file) {
+		FileInputStream inputStream = null;
+		String base64Str = "";
+		try {
+			inputStream = new FileInputStream(file);
+			Base64.Encoder encoder = Base64.getEncoder();
+			int available = inputStream.available();
+			byte[] bytes = new byte[available];
+			inputStream.read(bytes);
+			base64Str = encoder.encodeToString(bytes);
+			inputStream.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				inputStream.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return base64Str;
+	}
+
+}

--
Gitblit v1.9.3