From 004ee58feda41620f621db1fb8773f1b56eaf71e Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期二, 30 十二月 2025 14:28:41 +0800
Subject: [PATCH] 外购成品功能迁移v1

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsOrderInspectionServiceImpl.java                 |   35 +
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java                                      |    5 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/IfsPartPropsRecordDTO.java                                  |   13 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/api/IfsApiUtils.java                                         |   10 
 inspect-server/src/main/java/com/ruoyi/inspect/controller/OutsourcingFinishProductInspectionController.java    |   58 ++
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java                   |   44 +
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsSplitOrderRecordMapper.java                           |    2 
 basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java                         |    4 
 inspect-server/src/main/java/com/ruoyi/inspect/service/IfsOrderInspectionService.java                          |   20 
 basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java                                      |    2 
 inspect-server/src/main/resources/mapper/InsOrderMapper.xml                                                    |   38 +
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsPartPropsRecordServiceImpl.java                 |  122 ++++
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java                           |   96 ++-
 inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsOrderInspectionController.java                    |   38 +
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java                       |  468 +++++++++++++----
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java                                    |    2 
 inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java                                              |   76 +++
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java                                 |    3 
 basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java                                    |    3 
 inspect-server/src/main/resources/mapper/IfsPartPropsRecordMapper.xml                                          |   34 +
 inspect-server/src/main/java/com/ruoyi/inspect/service/IfsPartPropsRecordService.java                          |   17 
 basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java                                      |    3 
 inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsPartPropsRecordController.java                    |   34 +
 inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java                      |   34 
 performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java           |    2 
 inspect-server/src/main/resources/static/small-wg-report-template.docx                                         |    0 
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/OutsourcingFinishProductInspectionServiceImpl.java |   50 ++
 inspect-server/src/main/java/com/ruoyi/inspect/vo/InsSampleUserVO.java                                         |   33 +
 inspect-server/src/main/java/com/ruoyi/inspect/service/OutsourcingFinishProductInspectionService.java          |   38 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/QueryWrappers.java                                           |    4 
 inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml                                               |   12 
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsPartPropsRecordMapper.java                            |   22 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/IfsPartPropsRecord.java                                    |   67 ++
 basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java                            |    3 
 inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java                                     |   19 
 inspect-server/src/main/java/com/ruoyi/inspect/service/RawMaterialOrderService.java                            |    4 
 ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderType.java                                               |   44 +
 37 files changed, 1,272 insertions(+), 187 deletions(-)

diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
index 237224e..83db775 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
@@ -79,4 +79,7 @@
 
     @ApiModelProperty("妫�楠屼汉")
     private String userName;
+
+    @ApiModelProperty("閿�鍞鍗曞垎绫�")
+    private String orderType;
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
index 009b268..b44234d 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
@@ -40,6 +40,9 @@
     @ApiModelProperty("鏍峰搧缂栧彿")
     private String sampleCode;
 
+    @ApiModelProperty("閿�鍞鍗曞垎绫诲悕绉�")
+    private String orderTypeName;
+
     // 杩涘巶
     @ApiModelProperty("杩涘巶璁㈠崟id")
     private Integer enterOrderId;
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java
index a743522..cf27259 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeMapper.java
@@ -9,6 +9,7 @@
 import com.ruoyi.basic.pojo.StandardProductList;
 import com.ruoyi.basic.pojo.StandardTree;
 import com.ruoyi.basic.vo.IfsInventoryQuantityVO;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -20,6 +21,7 @@
  * @createDate 2024-03-01 15:06:44
  * @Entity com.ruoyi.basic.pojo.StandardTree
  */
+@Mapper
 public interface StandardTreeMapper extends BaseMapper<StandardTree> {
 
     List<FactoryDto> selectStandardTreeList();
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java
index 31f49a3..1228374 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/pojo/IfsInventoryQuantity.java
@@ -37,6 +37,9 @@
     @ApiModelProperty("鎺ユ敹鍙�")
     private Integer receiptNo;
 
+    @ApiModelProperty("璁㈠崟绫诲瀷(01raw:鍘熸潗鏂欙紝02wg:澶栬喘鎴愬搧)")
+    private String orderType;
+
     @ExcelProperty(index = 3, value = "闆朵欢鍙�")
     @ApiModelProperty("闆朵欢鍙�")
     private String partNo;
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
index 161ea61..e0de03f 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
@@ -26,6 +26,7 @@
 import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
 
 /**
  * @author Administrator
@@ -193,7 +194,8 @@
                 return map;
         }
         standardMethodLists.addAll(standardMethodMapper.selectStandardMethodListsByNull(str));
-        map.put("standardMethodList", standardMethodLists);
+        List<StandardMethodList> collect = standardMethodLists.stream().distinct().collect(Collectors.toList());
+        map.put("standardMethodList", collect);
         return map;
     }
 
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsOrderInspectionController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsOrderInspectionController.java
new file mode 100644
index 0000000..c586db0
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsOrderInspectionController.java
@@ -0,0 +1,38 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.service.IfsOrderInspectionService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * ifs閿�鍞鍗曟姤妫�controller
+ */
+@RestController
+@RequestMapping("/ifsOrderInspection")
+public class IfsOrderInspectionController {
+
+    @Autowired
+    private IfsOrderInspectionService ifsOrderInspectionService;
+
+    @ApiOperation(value = "閿�鍞鍗曟姤妫�鏌ヨ鍏ㄩ儴")
+    @PreAuthorize("@ss.hasPermi('get:Ifs:ByAll')")
+    @GetMapping("/getIfsByAll")
+    public Result getIfsByAll(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto){
+        return Result.success(ifsOrderInspectionService.getIfsByOver(page, ifsInventoryQuantityDto));
+    }
+
+    @ApiOperation(value = "閿�鍞鍗曟姤妫�鏌ョ湅宸插畬鎴愪俊鎭�")
+    @GetMapping("/getIfsByFinish")
+    public Result getIfsByFinish(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+        ifsInventoryQuantityDto.setIsFinish(1);
+        return Result.success(ifsOrderInspectionService.getIfsByOver(page, ifsInventoryQuantityDto));
+    }
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsPartPropsRecordController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsPartPropsRecordController.java
new file mode 100644
index 0000000..d513350
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsPartPropsRecordController.java
@@ -0,0 +1,34 @@
+package com.ruoyi.inspect.controller;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.dto.IfsPartPropsRecordDTO;
+import com.ruoyi.inspect.service.IfsPartPropsRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * ifs闆朵欢灞炴�ontroller
+ */
+@Api("ifs闆朵欢灞炴��")
+@RestController
+@RequestMapping("/ifsPartProps")
+public class IfsPartPropsRecordController {
+
+    @Autowired
+    private IfsPartPropsRecordService ifsPartPropsRecordService;
+
+    @ApiOperation(value = "鏂板鎴栦繚瀛橀浂浠跺睘鎬�")
+    @PostMapping("/saveOrUpdateProps")
+    public Result saveOrUpdateProps(@RequestBody  IfsPartPropsRecordDTO ifsPartPropsRecord){
+        return Result.success(ifsPartPropsRecordService.saveOrUpdateProps(ifsPartPropsRecord));
+    }
+
+    @ApiOperation(value = "鏌ヨifs璁㈠崟鐨勯浂浠跺睘鎬ц褰�")
+    @GetMapping("/getOneByIfsId/{ifsId}")
+    public Result getOneByIfsId(@PathVariable("ifsId") Long ifsId){
+        return Result.success(ifsPartPropsRecordService.getOneByIfsId(ifsId));
+    }
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/OutsourcingFinishProductInspectionController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/OutsourcingFinishProductInspectionController.java
new file mode 100644
index 0000000..5590267
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/OutsourcingFinishProductInspectionController.java
@@ -0,0 +1,58 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.IfsInventoryQuantityDto;
+import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.common.annotation.PersonalScope;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.service.OutsourcingFinishProductInspectionService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 澶栬喘鎴愬搧妫�楠宑ontroller
+ */
+@RestController
+@RequestMapping("/outsourcingFinishProduct")
+public class OutsourcingFinishProductInspectionController {
+
+    @Autowired
+    private OutsourcingFinishProductInspectionService outsourcingFinishProductInspectionService;
+
+    @ApiOperation(value = "浠撳簱鎶ユ鏌ヨ")
+    @GetMapping("/getWarehouseSubmit")
+    public Result getWarehouseSubmit(Page page, IfsInventoryQuantity ifsInventoryQuantity) {
+        return Result.success(outsourcingFinishProductInspectionService.getWarehouseSubmit(page, ifsInventoryQuantity));
+    }
+
+    @ApiOperation(value = "澶栬喘鎴愬搧妫�楠屾煡璇㈡楠屼腑")
+    @GetMapping("/getIfsByStateOne")
+    @PreAuthorize("@ss.hasPermi('business:order')")
+    @PersonalScope(permsName = "business:order", objectName = IfsInventoryQuantityDto.class, paramName = "createUser")
+    public Result getIfsByStateOne(Page page, IfsInventoryQuantityDto ifsInventoryQuantityDto){
+        return Result.success(outsourcingFinishProductInspectionService.getIfsByStateOne(page, ifsInventoryQuantityDto));
+    }
+
+    @ApiOperation(value = "澶栬喘鎴愬搧妫�楠屾煡璇㈠凡妫�楠�")
+    @GetMapping("/getIfsByOver")
+    @PreAuthorize("@ss.hasPermi('business:order')")
+    @PersonalScope(permsName = "business:order", objectName = IfsInventoryQuantitySupplierDto.class, paramName = "createUser")
+    public Result getIfsByOver(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto){
+        return Result.success(outsourcingFinishProductInspectionService.getIfsByOver(page, ifsInventoryQuantityDto));
+    }
+
+    @ApiOperation(value = "鍘熸潗鏂欐姤妫�鏌ヨ鍏ㄩ儴")
+    @PreAuthorize("@ss.hasPermi('get:Ifs:ByAll')")
+    @GetMapping("/getIfsByAll")
+    public Result getIfsByAll(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto){
+        return Result.success(outsourcingFinishProductInspectionService.getIfsByOver(page, ifsInventoryQuantityDto));
+    }
+
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java
index ae17b0d..85b6577 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java
@@ -1,23 +1,21 @@
 package com.ruoyi.inspect.controller;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.dto.*;
+import com.ruoyi.basic.dto.IfsInventoryQuantityCheckDto;
+import com.ruoyi.basic.dto.IfsInventoryQuantityDto;
+import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
 import com.ruoyi.basic.pojo.IfsInventoryQuantity;
 import com.ruoyi.common.annotation.PersonalScope;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.enums.OrderType;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.InsPlaceOrderDto;
 import com.ruoyi.inspect.dto.OrderSplitDTO;
-import com.ruoyi.inspect.dto.SampleProductDto;
-import com.ruoyi.inspect.pojo.InsOrder;
 import com.ruoyi.inspect.pojo.RawMaterialOrderTemplate;
 import com.ruoyi.inspect.service.InsOrderService;
 import com.ruoyi.inspect.service.RawMaterialOrderService;
 import com.ruoyi.inspect.service.RawMaterialOrderTemplateService;
-import com.ruoyi.common.core.domain.Result;
-import com.ruoyi.common.utils.JackSonUtil;
-import com.ruoyi.common.utils.WxCpUtils;
-import com.ruoyi.inspect.dto.CopperInsOrderDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -30,6 +28,7 @@
 import java.io.File;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Author zhuo
@@ -106,7 +105,11 @@
     @PostMapping("/inspectionReport")
     public Result<?> inspectionReport(@RequestBody Map<String, Object> param) {
         List<Long> ids = (List<Long>) param.get("ids");
-        return Result.success(rawMaterialOrderService.inspectionReport(ids));
+        String orderType = Objects.nonNull(param.get("orderType"))?param.get("orderType").toString():"";
+        if(!OrderType.validateValue(orderType)){
+            throw new ErrorException("鎵归噺鎶ユ澶辫触,闈炴硶鐨勯攢鍞鍗曞垎绫绘灇涓�");
+        }
+        return Result.success(rawMaterialOrderService.inspectionReport(ids,orderType));
     }
 
     /**
@@ -221,6 +224,7 @@
     @PreAuthorize("@ss.hasPermi('get:Ifs:ByAll')")
     @GetMapping("/getIfsByAll")
     public Result getIfsByAll(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto){
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
         return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
     }
 
@@ -236,6 +240,7 @@
     @GetMapping("/getIfsByFinish")
     public Result getIfsByFinish(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) throws Exception {
         ifsInventoryQuantityDto.setIsFinish(1);
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
         return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
     }
 
@@ -349,4 +354,13 @@
         return Result.success(rawMaterialOrderService.confirmSplitOrder(orderSplitDTO));
     }
 
+    /**
+     * 鏍规嵁ifsId鏌ヨ涓嬪崟鏁伴噺
+     */
+    @ApiOperation(value = "鏍规嵁ifsId鏌ヨ涓嬪崟鏁伴噺")
+    @GetMapping("/getOrderCountByIfsId/{ifsId}")
+    public Result getOrderCountByIfsId(@PathVariable("ifsId") Long ifsId){
+        return Result.success(rawMaterialOrderService.getOrderCountByIfsId(ifsId));
+    }
+
 }
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java
index 3a5456d..d4c54b9 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java
@@ -30,4 +30,23 @@
 
     @ApiModelProperty("妫�娴嬬紪鍙�")
     private String code;
+
+    /**
+     * 澶栨姢棰滆壊
+     */
+    @ApiModelProperty("澶栨姢棰滆壊")
+    private String outerColor;
+
+    /**
+     * 妫�楠屽憳
+     */
+    @ApiModelProperty("妫�楠屽憳")
+    private String inspector;
+
+    /**
+     * 妫�楠屾棩鏈�
+     */
+    @ApiModelProperty("妫�楠屾棩鏈�")
+    private String inspectDate;
+
 }
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/IfsPartPropsRecordDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/IfsPartPropsRecordDTO.java
new file mode 100644
index 0000000..6d78d3b
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/IfsPartPropsRecordDTO.java
@@ -0,0 +1,13 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.IfsPartPropsRecord;
+import lombok.Data;
+
+@Data
+public class IfsPartPropsRecordDTO extends IfsPartPropsRecord {
+
+    private String partNo;
+
+    private String lotBatchNo;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsPartPropsRecordMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsPartPropsRecordMapper.java
new file mode 100644
index 0000000..23033cf
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsPartPropsRecordMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.IfsPartPropsRecord;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @author 27233
+* @description 閽堝琛ㄣ�恑fs_part_props_record(ifs璁㈠崟闆朵欢灞炴�ц褰曡〃)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-10-23 15:00:34
+* @Entity com.ruoyi.inspect.pojo.IfsPartPropsRecord
+*/
+@Mapper
+public interface IfsPartPropsRecordMapper extends BaseMapper<IfsPartPropsRecord> {
+
+    Long selectCountByPartNoAndLotBatchNo(@Param("partNo") String partNo, @Param("lotBatchNo") String lotBatchNo);
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsSplitOrderRecordMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsSplitOrderRecordMapper.java
index 99769a5..148f82b 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsSplitOrderRecordMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/IfsSplitOrderRecordMapper.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.inspect.pojo.IfsSplitOrderRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
 * @author 27233
@@ -9,6 +10,7 @@
 * @createDate 2025-10-29 16:39:41
 * @Entity com.ruoyi.inspect.pojo.IfsSplitOrderRecord
 */
+@Mapper
 public interface IfsSplitOrderRecordMapper extends BaseMapper<IfsSplitOrderRecord> {
 
 }
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
index 7c91fc1..1d69e5e 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
@@ -9,8 +9,10 @@
 import com.ruoyi.inspect.dto.SampleProductDto2;
 import com.ruoyi.inspect.dto.SampleProductExportDto;
 import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.vo.IfsOrderVO;
 import com.ruoyi.inspect.vo.InsOrderPrintingVo;
 import com.ruoyi.inspect.vo.SampleDefectsFatherVo;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -23,6 +25,7 @@
  * @createDate 2024-03-12 16:17:55
  * @Entity com.yuanchu.mom.pojo.InsOrder
  */
+@Mapper
 public interface InsOrderMapper extends BaseMapper<InsOrder> {
 
     //鑾峰彇妫�楠屼笅鍗曟暟鎹�
@@ -144,4 +147,6 @@
      * @return
      */
     Integer selectNotSpotCheckOrder(@Param("itmeId") Integer itmeId, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    IfsOrderVO selectOrderInfoById(@Param("id") Integer id);
 }
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java
index 774b38a..69dd801 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java
@@ -8,6 +8,7 @@
 import com.ruoyi.inspect.dto.SampleProductRawAnalysisDto;
 import com.ruoyi.inspect.pojo.InsProduct;
 import com.ruoyi.inspect.pojo.InsProductDeviationWarningDetail;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -19,6 +20,7 @@
 * @createDate 2024-03-08 09:45:03
 * @Entity com.yuanchu.mom.pojo.InsProduct
 */
+@Mapper
 public interface InsProductMapper extends BaseMapper<InsProduct> {
 
     int selectOrderManDay(@Param("orderId") Integer orderId);
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java
index b3f0c19..ae3a445 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.inspect.pojo.InsSampleUser;
+import com.ruoyi.inspect.vo.InsSampleUserVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
 * @author Administrator
@@ -11,6 +13,7 @@
 */
 public interface InsSampleUserMapper extends BaseMapper<InsSampleUser> {
 
+    InsSampleUserVO selectUserNameByOrderId(@Param("orderId") Integer orderId);
 }
 
 
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/IfsPartPropsRecord.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/IfsPartPropsRecord.java
new file mode 100644
index 0000000..d9fbf70
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/IfsPartPropsRecord.java
@@ -0,0 +1,67 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * ifs璁㈠崟闆朵欢灞炴�ц褰曡〃
+ * @TableName ifs_part_props_record
+ */
+@TableName(value ="ifs_part_props_record")
+@Data
+public class IfsPartPropsRecord implements Serializable {
+    /**
+     * 涓婚敭id
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * ifs璁㈠崟id
+     */
+    private Long ifsInventoryId;
+
+    /**
+     * 杞藉叿缂栧彿
+     */
+    private String drumNo;
+
+    /**
+     * 璧峰绫虫爣
+     */
+    private BigDecimal startMeterMark;
+
+    /**
+     * 鎴绫虫爣
+     */
+    private BigDecimal endMeterMark;
+
+    /**
+     * 缁濈紭棰滆壊
+     */
+    private String insulationColor;
+
+    /**
+     * 澶栨姢棰滆壊
+     */
+    private String outerColor;
+
+    /**
+     * 鍗板瓧淇℃伅
+     */
+    private String letteringInfo;
+
+    /**
+     * ifs闆朵欢灞炴�ф洿鏂版爣璇�
+     */
+    private Boolean partPropsFlag;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/IfsOrderInspectionService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/IfsOrderInspectionService.java
new file mode 100644
index 0000000..4400e9b
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/IfsOrderInspectionService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
+import org.springframework.stereotype.Component;
+
+@Component
+public interface IfsOrderInspectionService {
+
+    /**
+     * 鏌ヨ宸叉楠�
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
+
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/IfsPartPropsRecordService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/IfsPartPropsRecordService.java
new file mode 100644
index 0000000..1270a13
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/IfsPartPropsRecordService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.IfsPartPropsRecordDTO;
+import com.ruoyi.inspect.pojo.IfsPartPropsRecord;
+
+/**
+* @author 27233
+* @description 閽堝琛ㄣ�恑fs_part_props_record(ifs璁㈠崟闆朵欢灞炴�ц褰曡〃)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-10-23 15:00:34
+*/
+public interface IfsPartPropsRecordService extends IService<IfsPartPropsRecord> {
+
+    boolean saveOrUpdateProps(IfsPartPropsRecordDTO ifsPartPropsRecord);
+
+    IfsPartPropsRecord getOneByIfsId(Long ifsId);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/OutsourcingFinishProductInspectionService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/OutsourcingFinishProductInspectionService.java
new file mode 100644
index 0000000..efa78d6
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/OutsourcingFinishProductInspectionService.java
@@ -0,0 +1,38 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.IfsInventoryQuantityDto;
+import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.basic.vo.IfsInventoryQuantityVO;
+import org.springframework.stereotype.Component;
+
+@Component
+public interface OutsourcingFinishProductInspectionService {
+
+    /**
+     * 鎶ユ鏌ヨ
+     * @param page
+     * @param ifsInventoryQuantity
+     * @return
+     */
+    IPage<IfsInventoryQuantityVO> getWarehouseSubmit(Page page, IfsInventoryQuantity ifsInventoryQuantity);
+
+    /**
+     * 鏌ヨ宸叉楠�
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    IPage<IfsInventoryQuantitySupplierDto>  getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
+
+    /**
+     * 鏌ヨ妫�楠屽��
+     * @param page
+     * @param ifsInventoryQuantityDto
+     * @return
+     */
+    IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto);
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/RawMaterialOrderService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/RawMaterialOrderService.java
index 3cc8a95..c5e6ce9 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/RawMaterialOrderService.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/RawMaterialOrderService.java
@@ -43,7 +43,7 @@
      */
     IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto);
 
-    int inspectionReport(List<Long> ids);
+    int inspectionReport(List<Long> ids,String orderType);
 
     int revokeInspectionReport(Long id);
 
@@ -156,4 +156,6 @@
     Result importSplitOrderData(MultipartFile file, Long ifsId, HttpServletRequest request);
 
     boolean confirmSplitOrder(OrderSplitDTO orderSplitDTO);
+
+    Long getOrderCountByIfsId(Long ifsId);
 }
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsOrderInspectionServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsOrderInspectionServiceImpl.java
new file mode 100644
index 0000000..5b05f88
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsOrderInspectionServiceImpl.java
@@ -0,0 +1,35 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
+import com.ruoyi.basic.mapper.StandardTreeMapper;
+import com.ruoyi.common.enums.OrderType;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.service.IfsOrderInspectionService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 閿�鍞鍗曟姤妫�service
+ */
+@Slf4j
+@Service
+public class IfsOrderInspectionServiceImpl implements IfsOrderInspectionService {
+
+    @Autowired
+    private StandardTreeMapper standardTreeMapper;
+
+    @Override
+    public IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+        // todo: 鍙湅鎴�
+        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+        ifsInventoryQuantityDto.setEndDeclareDate(null);
+        IPage<IfsInventoryQuantitySupplierDto> ifsByOver = standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+        ifsByOver.getRecords().forEach(r->r.setOrderTypeName(OrderType.getLabelByValue(r.getOrderType())));
+        return ifsByOver;
+    }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsPartPropsRecordServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsPartPropsRecordServiceImpl.java
new file mode 100644
index 0000000..929e993
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsPartPropsRecordServiceImpl.java
@@ -0,0 +1,122 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.enums.OrderType;
+import com.ruoyi.common.utils.api.IfsApiUtils;
+import com.ruoyi.inspect.dto.IfsPartPropsRecordDTO;
+import com.ruoyi.inspect.mapper.IfsPartPropsRecordMapper;
+import com.ruoyi.inspect.mapper.IfsSplitOrderRecordMapper;
+import com.ruoyi.inspect.pojo.IfsPartPropsRecord;
+import com.ruoyi.inspect.pojo.IfsSplitOrderRecord;
+import com.ruoyi.inspect.service.IfsPartPropsRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+* @author 27233
+* @description 閽堝琛ㄣ�恑fs_part_props_record(ifs璁㈠崟闆朵欢灞炴�ц褰曡〃)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-10-23 15:00:34
+*/
+@Slf4j
+@Service
+public class IfsPartPropsRecordServiceImpl extends ServiceImpl<IfsPartPropsRecordMapper, IfsPartPropsRecord>
+    implements IfsPartPropsRecordService{
+
+    @Autowired
+    private IfsApiUtils ifsApiUtils;
+
+    @Autowired
+    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+
+    @Autowired
+    private IfsSplitOrderRecordMapper ifsSplitOrderRecordMapper;
+
+    @Value("${ifs.contract}")
+    public String contract;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveOrUpdateProps(IfsPartPropsRecordDTO ifsPartPropsRecord) {
+        if(Objects.isNull(ifsPartPropsRecord)){
+            throw new RuntimeException("鍙傛暟涓嶈兘涓虹┖");
+        }
+        //鏌ヨ鏄惁宸叉湁鍚屾壒娆″悓闆朵欢鍙风殑鎵规灞炴�э紝娌℃湁鎵嶆洿鏂�
+        Long count = baseMapper.selectCountByPartNoAndLotBatchNo(ifsPartPropsRecord.getPartNo(),ifsPartPropsRecord.getLotBatchNo());
+        if(count==0){
+            //鍒ゆ柇鏄柊澧炶繕鏄洿鏂�
+            String actionType = Objects.isNull(ifsPartPropsRecord.getId())?"New":"Modify";
+            Map<String, Object> inAttrMap = new HashMap<>();
+            inAttrMap.put("RECORD_ID", UUID.randomUUID().toString());
+            inAttrMap.put("SYSCODE", "LIMS");
+            inAttrMap.put("SYSMODEL", "搴撳瓨鐗╂枡鎵规灞炴�т慨鏀�");
+            HashMap<String, Object> batchInfoMap = new HashMap<>();
+            batchInfoMap.put("CONTRACT",contract);//鍩�
+            batchInfoMap.put("PART_NO",ifsPartPropsRecord.getPartNo());//闆朵欢鍙�
+            batchInfoMap.put("LOT_BATCH_NO",ifsPartPropsRecord.getLotBatchNo());//鎵规鍙�
+            batchInfoMap.put("ATTR1",ifsPartPropsRecord.getDrumNo());//杞藉叿缂栧彿
+            batchInfoMap.put("ATTR2",ifsPartPropsRecord.getStartMeterMark().toString());//璧峰绫虫爣
+            batchInfoMap.put("ATTR3",ifsPartPropsRecord.getEndMeterMark().toString());//鎴绫虫爣
+            batchInfoMap.put("ATTR4", ifsPartPropsRecord.getOuterColor());//澶栨姢棰滆壊
+            batchInfoMap.put("ATTR5",ifsPartPropsRecord.getInsulationColor());//缁濈紭棰滆壊
+            batchInfoMap.put("ATTR8",ifsPartPropsRecord.getLetteringInfo());//鍗板瓧淇℃伅
+            batchInfoMap.put("ATTR23","杞﹂棿璁㈠崟");//鍏ュ簱鏉ユ簮
+            batchInfoMap.put("ATTR24","0");//鍒嗗壊棰勭暀鏁伴噺
+            batchInfoMap.put("ACTION_TYPE",actionType);//鎿嶄綔绫诲瀷
+            inAttrMap.put("BATCH_INFO", Collections.singletonList(batchInfoMap));
+            Result result = ifsApiUtils.importPartLotAttr(JSONUtil.toJsonStr(inAttrMap));
+            if(result.getCode()!=200){
+                throw new RuntimeException("搴撳瓨鐗╂枡鎵规灞炴�ф洿鏂板け璐ワ細"+result.getMessage());
+            }
+        }
+        return this.saveOrUpdate(ifsPartPropsRecord);
+    }
+
+    @Override
+    public IfsPartPropsRecord getOneByIfsId(Long ifsId) {
+        //鏌ヨifs璁㈠崟淇℃伅
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsId);
+        if(Objects.isNull(ifsInventoryQuantity)){
+            throw new RuntimeException("鏈壘鍒板搴旂殑IFS璁㈠崟淇℃伅");
+        }
+        //鍒ゆ柇鏄惁鏄媶鍒嗚鍗�
+        if(ifsInventoryQuantity.getIsSplitOrder().equals(1)&& StringUtils.equals(ifsInventoryQuantity.getOrderType(), OrderType.RAW.getValue())){
+            //鏌ヨ鎷嗗垎璁板綍
+            IfsSplitOrderRecord splitRecord = ifsSplitOrderRecordMapper.selectOne(Wrappers.<IfsSplitOrderRecord>lambdaQuery()
+                    .eq(IfsSplitOrderRecord::getOrderNo, ifsInventoryQuantity.getOrderNo())
+                    .eq(IfsSplitOrderRecord::getPartNo, ifsInventoryQuantity.getPartNo())
+                    .eq(IfsSplitOrderRecord::getReleaseNo, ifsInventoryQuantity.getReleaseNo())
+                    .eq(IfsSplitOrderRecord::getLineNo, ifsInventoryQuantity.getLineNo())
+                    .eq(IfsSplitOrderRecord::getReceiptNo, ifsInventoryQuantity.getReceiptNo())
+                    .eq(IfsSplitOrderRecord::getLotBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
+                    .eq(IfsSplitOrderRecord::getOrderNo, ifsInventoryQuantity.getOrderNo())
+            );
+            if(Objects.isNull(splitRecord)){
+                throw new RuntimeException("鏈壘鍒伴浂浠剁殑鎷嗗垎淇℃伅");
+            }
+            IfsPartPropsRecord ifsPartPropsRecord = new IfsPartPropsRecord();
+            ifsPartPropsRecord.setDrumNo(splitRecord.getDrumNo());
+            ifsPartPropsRecord.setLetteringInfo(splitRecord.getLetteringInfo());
+            ifsPartPropsRecord.setInsulationColor(splitRecord.getInsulationColor());
+            ifsPartPropsRecord.setOuterColor(splitRecord.getOuterColor());
+            ifsPartPropsRecord.setDrumNo(splitRecord.getDrumNo());
+            ifsPartPropsRecord.setDrumNo(splitRecord.getDrumNo());
+            return ifsPartPropsRecord;
+        }
+        return this.getOne(Wrappers.<IfsPartPropsRecord>lambdaQuery().eq(IfsPartPropsRecord::getIfsInventoryId,ifsId).last("limit 1"));
+    }
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
index f8d29bd..c303e78 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -2,6 +2,7 @@
 
 import cn.hutool.core.bean.BeanUtil;
 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.ObjectUtil;
@@ -11,6 +12,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.aspose.words.License;
 import com.aspose.words.SaveFormat;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -36,6 +38,7 @@
 import com.ruoyi.common.core.domain.entity.Custom;
 import com.ruoyi.common.core.domain.entity.InformationNotification;
 import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.enums.OrderType;
 import com.ruoyi.common.utils.*;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.*;
@@ -45,13 +48,10 @@
 import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
 import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
 import com.ruoyi.inspect.vo.InsOrderPlanVO;
+import com.ruoyi.inspect.vo.InsSampleUserVO;
 import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
-import com.ruoyi.performance.mapper.PerformanceShiftMapper;
-import com.ruoyi.performance.mapper.ShiftTimeMapper;
 import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
-import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHoursTemporary;
 import com.ruoyi.performance.service.AuxiliaryOutputWorkingHoursService;
-import com.ruoyi.performance.service.AuxiliaryOutputWorkingHoursTemporaryService;
 import com.ruoyi.system.mapper.CustomMapper;
 import com.ruoyi.system.mapper.UserMapper;
 import com.ruoyi.system.service.ISysDictTypeService;
@@ -74,9 +74,7 @@
 import java.nio.file.Paths;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -131,6 +129,8 @@
     @Resource
     private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
     @Resource
+    private IfsPartPropsRecordMapper ifsPartPropsRecordMapper;
+    @Resource
     private InsReportService insReportService;
     @Resource
     private InsUnqualifiedRetestProductMapper insUnqualifiedRetestProductMapper;
@@ -167,9 +167,7 @@
     public IPage<InsOrderPlanVO> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
         // todo: 浠呯湅鑷繁鎴栬�呭疄楠屽
         //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id
-
         String laboratory = null;
-
         String userName = null;
         Integer userId = null;
         if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
@@ -1637,6 +1635,96 @@
     /*****************************************************  灏忔姤鍛�    ***************************************************************************/
 
     /**
+     * 璁剧疆琛ㄦ牸鏍峰紡
+     * @param max 鏍囪瘑鏈�澶т釜鏁�
+     * @return
+     */
+    private TableStyle setTableStyle(int max){
+        //璁剧疆鏍峰紡
+        TableStyle tableStyle = new TableStyle();
+        if(max<=5){
+            for (int i = 1; i <= max; i++) {
+                // 鏍规嵁妫�楠岀粨鏋滀釜鏁颁慨鏀归暱搴�
+                switch (i) {
+                    case 1:
+                        tableStyle.setColWidths(new int[]{650, 2900, 850, 2300, 2100, 1200});
+                        break;
+                    case 2:
+                        tableStyle.setColWidths(new int[]{650, 2700, 850, 2200, 1200, 1200, 1200});
+                        break;
+                    case 3:
+                        tableStyle.setColWidths(new int[]{650, 2700, 850, 1600, 1000, 1000, 1000, 1200});
+                        break;
+                    case 4:
+                        tableStyle.setColWidths(new int[]{650, 2400, 850, 1500, 850, 850, 850, 850, 1200});
+                        break;
+                    case 5:
+                        tableStyle.setColWidths(new int[]{650, 2200, 850, 1350, 770, 770, 770, 770, 770, 1100});
+                        break;
+                }
+            }
+        }
+
+        tableStyle.setWidth("10000");
+        tableStyle.setAlign(TableRowAlign.CENTER);
+        BorderStyle borderStyle = new BorderStyle();
+        borderStyle.setColor("000000");
+        borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
+        borderStyle.setSize(4);
+        tableStyle.setLeftBorder(borderStyle);
+        tableStyle.setRightBorder(borderStyle);
+        tableStyle.setInsideHBorder(borderStyle); // 璁剧疆姘村钩鍐呰竟妗�
+        tableStyle.setInsideVBorder(borderStyle);
+        return tableStyle;
+    }
+
+
+    /**
+     * 澶勭悊鏈夌數缂嗛鑹叉爣璇嗙殑妫�娴嬮」
+     * @param cableTags 鐢电紗棰滆壊鏍囪瘑
+     * @param collect   妫�娴嬮」鍒楄〃
+     * @param startIndex 璧峰涓嬫爣
+     * @param endIndex   缁撴潫涓嬫爣
+     * @return
+     */
+    private List<SampleProductExportDto> transformSampleProduct(List<String> cableTags,Map<String, List<SampleProductExportDto>> collect,int startIndex,int endIndex){
+        List<SampleProductExportDto> sampleProductExportDtos = new ArrayList<>();
+        for (String s : collect.keySet()) {
+            List<String> lastValueList = new ArrayList<>();
+            SampleProductExportDto dto = new SampleProductExportDto();
+            BeanUtil.copyProperties(collect.get(s).get(0),dto);
+            Set<String> tellSet = new HashSet<>();
+            for (int i = startIndex; i < endIndex; i++) {
+                String cableTag = cableTags.get(i);
+                for (SampleProductExportDto sDto : collect.get(s)) {
+                    tellSet.add(sDto.getTell());
+                    if(sDto.getCableTag().equals(cableTag)){
+                        lastValueList.add(sDto.getLastValue());
+                    }
+                }
+            }
+            //鍒囧壊鐢电紗閰嶇疆椤�
+            dto.setTell(String.join("\n",tellSet));
+            dto.setLastValueList(lastValueList);
+            sampleProductExportDtos.add(dto);
+        }
+        return sampleProductExportDtos;
+    }
+
+    /**
+     * 妫�娴嬮」鎺掑簭
+     * @param sourceMap
+     * @param targetMap
+     */
+    private void sortSampleProduct(Map<String, List<SampleProductExportDto>> sourceMap,Map<String, List<SampleProductExportDto>> targetMap){
+        List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sourceMap.entrySet());
+        entries.sort(Comparator.comparingInt(o -> (o.getValue().get(0).getSort() == null ? 0 : o.getValue().get(0).getSort())));
+        for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
+            targetMap.put(entry.getKey(), entry.getValue());
+        }
+    }
+
+    /**
      * 灏忔姤鍛婄敓鎴�
      * @param orderId
      * @param insOrder
@@ -1654,11 +1742,17 @@
         enterFactoryReport.setSample(insOrder.getSample());
         // 鑾峰彇ifs鏁版嵁
         IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+        //鏌ヨ闆朵欢灞炴��
+        IfsPartPropsRecord ifsPartPropsRecord = ifsPartPropsRecordMapper.selectOne(Wrappers.<IfsPartPropsRecord>lambdaQuery()
+                .eq(IfsPartPropsRecord::getIfsInventoryId, ifsInventoryQuantity.getId()));
+        if(Objects.nonNull(ifsPartPropsRecord)){
+            enterFactoryReport.setOuterColor(ifsPartPropsRecord.getOuterColor());
+        }
         enterFactoryReport.setQtyArrived(ifsInventoryQuantity.getQtyArrived() == null ? "" :
                 ifsInventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + ifsInventoryQuantity.getBuyUnitMeas());
         enterFactoryReport.setQuantity(insOrder.getTestQuantity());
         enterFactoryReport.setPartDesc(insOrder.getPartDetail());
-        enterFactoryReport.setSupplierName("**********");
+        enterFactoryReport.setSupplierName(ifsInventoryQuantity.getSupplierName());
         enterFactoryReport.setLotBatchNo(ifsInventoryQuantity.getUpdateBatchNo());
 
         // 妫�娴嬩緷鎹�
@@ -1676,6 +1770,7 @@
         List<RowRenderData> rows = new ArrayList<>();
         List<TextRenderData> text = new ArrayList<>();
         RowRenderData rowRenderData = null;
+        List<Map<String,Object>> cableTagEnclosureTables = new ArrayList<>();
 
         // 鏌ヨ妫�楠屽唴瀹�
         List<SampleProductExportDto> sampleProductDto2s = insOrderMapper.selectSampleBySampleId(insSamples.stream()
@@ -1686,21 +1781,167 @@
 
         List<SampleProductExportDto> sampleList = new ArrayList<>();
         Integer max = insSamples.stream().mapToInt(InsSample::getQuantity).sum();
+        TableRenderData tableRenderData = new TableRenderData();
+        String templateName;
+        if(StringUtils.equals(OrderType.WG.getValue(),ifsInventoryQuantity.getOrderType())){
+            //杩囨护涓嶅垽瀹氱殑妫�娴嬮」
+            List<SampleProductExportDto> filterItems = sampleProductDto2s.stream().filter(f -> f.getInsResult() != 3).collect(Collectors.toList());
+            int maxCableTag = 5;//鍗曚釜琛ㄦ牸锛岀數缂嗛鑹叉爣璇嗘渶澶т釜鏁�
+            templateName = "/static/small-wg-report-template.docx";
+            //鏌ヨ妫�楠屽崟娑堟伅
+            InsSampleUserVO insSampleUser = insSampleUserMapper.selectUserNameByOrderId(orderId);
+            if(Objects.nonNull(insSampleUser)){
+                enterFactoryReport.setPartDesc(insSampleUser.getModel());
+                enterFactoryReport.setInspector(insSampleUser.getInspector());
+                enterFactoryReport.setInspectDate(insSampleUser.getInspectDate());
+            }
 
-        // 杞垚Mpa杩涜鎺掑簭
-        Map<String, List<SampleProductExportDto>> sortedMap = sampleProductDto2s.stream()
-                .filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItem()))
-                .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
-        List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sortedMap.entrySet());
-        entries.sort((o1, o2) -> (o1.getValue().get(0).getSort() == null ? 0 : o1.getValue().get(0).getSort())
-                - (o2.getValue().get(0).getSort() == null ? 0 : o2.getValue().get(0).getSort()));
-        // 鍒涘缓涓�涓� LinkedHashMap 鏉ヤ繚鎸佹彃鍏ラ『搴�
-        Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();
-        for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
-            item.put(entry.getKey(), entry.getValue());
+            Map<String, List<SampleProductExportDto>> totalItem = new LinkedHashMap<>();//妫�娴嬮」鍒楄〃
+            Map<String, List<SampleProductExportDto>> cableTagItem = new LinkedHashMap<>();//鐢电紗閰嶇疆妫�娴嬮」
+            Map<String, List<SampleProductExportDto>> cableTagEnclosureItem = new LinkedHashMap<>();//鐢电紗閰嶇疆妫�娴嬮」闄勪欢
+
+            AtomicInteger finalIndex = new AtomicInteger(1);
+            List<String> cableTags = insOrderMapper.selectSampleCableTag(insSample.getId());
+            max = Math.max(cableTags.size(),1);
+            //澶勭悊鐢电紗閰嶇疆妫�娴嬮」
+            Map<String, List<SampleProductExportDto>> tempMap = new HashMap<>();
+            Map<String, List<SampleProductExportDto>> tempMap2 = new HashMap<>();
+            Map<String, List<SampleProductExportDto>> listMap2 = filterItems.stream()
+                    .filter(f -> StringUtils.isNotBlank(f.getCableTag()) && StringUtils.isNotBlank(f.getInspectionItem()))
+                    .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
+            for (String key : listMap2.keySet()) {
+                List<SampleProductExportDto> sampleProductExportDtos;
+                List<SampleProductExportDto> sampleProductExportDtos2;
+                //澶勭悊鐢电紗閰嶇疆椤�
+                Map<String, List<SampleProductExportDto>> collect = listMap2.get(key).stream().collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItemSubclass));
+                if(cableTags.size()>maxCableTag){
+                    sampleProductExportDtos = transformSampleProduct(cableTags,collect,0,maxCableTag);
+                    sampleProductExportDtos2 = transformSampleProduct(cableTags,collect,maxCableTag,cableTags.size());
+                    tempMap2.put(key,sampleProductExportDtos2);
+                }else{
+                    sampleProductExportDtos = transformSampleProduct(cableTags,collect,0,cableTags.size());
+                }
+                cableTagItem.put(key,sampleProductExportDtos);
+            }
+            //澶勭悊闈炵數缂嗛厤缃娴嬮」
+            Map<String, List<SampleProductExportDto>> listMap = filterItems.stream()
+                    .filter(f -> StringUtils.isBlank(f.getCableTag()) && StringUtils.isNotBlank(f.getInspectionItem()))
+                    .collect(Collectors.groupingBy(s->s.getInspectionItem()+"&"));
+            //鍚堝苟妫�娴嬮」鍒楄〃
+            tempMap.putAll(cableTagItem);
+            tempMap.putAll(listMap);
+            sortSampleProduct(tempMap,totalItem);
+            int tagNum = Math.min(max,maxCableTag);
+            List<String> tagList = cableTags.isEmpty()?new ArrayList<>():cableTags.subList(0,tagNum);
+            handlerSampleItems(OrderType.WG.getValue(),totalItem,finalIndex,sampleList,tagNum,text,rows,rowRenderData,resultCh,tagList,true);
+
+            if(CollectionUtil.isNotEmpty(tempMap2)){
+                sortSampleProduct(tempMap2,cableTagEnclosureItem);
+                //鐢熸垚闄勪欢鐢电紗琛ㄦ牸
+                TableRenderData tableRenderData2 = new TableRenderData();
+                List<String> newCableTags = cableTags.subList(maxCableTag,cableTags.size());
+                AtomicInteger finalIndex2 = new AtomicInteger(1);
+                List<TextRenderData> newText = new ArrayList<TextRenderData>();
+                List<RowRenderData> newRows = new ArrayList<>();
+                RowRenderData newRowRenderData = null;
+                handlerSampleItems(OrderType.WG.getValue(),cableTagEnclosureItem,finalIndex2, new ArrayList<>(),newCableTags.size(),newText,newRows,newRowRenderData,resultCh,newCableTags,true);
+                tableRenderData2.setRows(newRows);
+                tableRenderData2.setTableStyle(setTableStyle(newCableTags.size()));
+                HashMap<String, Object> tableMap = new HashMap<>();
+                tableMap.put("enclosureTable",tableRenderData2);
+                tableMap.put("resultCh", resultCh);
+                tableMap.put("writeUrl", null);
+                tableMap.put("examineUrl", null);
+                tableMap.put("ratifyUrl", null);
+                tableMap.put("writeDateUrl", null);
+                tableMap.put("examineDateUrl", null);
+                tableMap.put("ratifyDateUrl", null);
+                tableMap.put("seal1", null);
+                cableTagEnclosureTables.add(tableMap);
+            }
+
+            tableRenderData.setRows(rows);
+            tableRenderData.setTableStyle(setTableStyle(tagNum));
+            if (!resultCh.get().isEmpty()) {
+                resultCh.set("缁忔楠岋紝" + resultCh.get() + "鎵�妫�椤圭洰涓嶅悎鏍硷紝鍏朵綑鎵�妫�椤圭洰鍧囧悎鏍笺�傦紙鐩栫珷鏈夋晥锛�");
+            } else {
+                resultCh.set("鏈骇鍝佺鍚堢浉鍏虫爣鍑嗚姹傦紝缁忔楠屽悎鏍煎噯浜堝嚭鍘傦紙鐩栫珷鏈夋晥锛�");
+            }
+
+        }else{
+            templateName = "/static/small-report-template.docx";
+            // 杞垚Mpa杩涜鎺掑簭
+            Map<String, List<SampleProductExportDto>> sortedMap = sampleProductDto2s.stream()
+                    .filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItem()))
+                    .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
+//            // 鍒涘缓涓�涓� LinkedHashMap 鏉ヤ繚鎸佹彃鍏ラ『搴�
+            Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();
+            sortSampleProduct(sortedMap,item);
+
+
+            AtomicInteger finalIndex = new AtomicInteger(1);
+            handlerSampleItems(OrderType.RAW.getValue(), item,finalIndex,sampleList,max,text,rows,rowRenderData,resultCh,null,true);
+            tableRenderData.setRows(rows);
+            tableRenderData.setTableStyle(setTableStyle(max));
+
+            if (!resultCh.get().equals("")) {
+                resultCh.set("缁忔楠岋紝" + resultCh.get() + "鎵�妫�椤圭洰涓嶅悎鏍硷紝鍏朵綑鎵�妫�椤圭洰鍧囧悎鏍笺��");
+            } else {
+                resultCh.set("缁忔楠屾鎵�" + enterFactoryReport.getSample() + "鍚勯」鐩潎绗﹀悎妫�楠岃鑼冭姹傘��");
+            }
         }
 
-        AtomicInteger finalIndex = new AtomicInteger(1);
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+
+        InputStream inputStream = this.getClass().getResourceAsStream(templateName);
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("report", enterFactoryReport);
+                    put("standardMethod", standardMethod2.toString().equals("null") ? "" : standardMethod2);
+                    put("orderType", orderType);
+                    put("table", tableRenderData);
+                    put("enclosureTables", cableTagEnclosureTables.isEmpty()?null:cableTagEnclosureTables);
+                    put("resultCh", resultCh);
+                    put("writeUrl", null);
+                    put("examineUrl", null);
+                    put("ratifyUrl", null);
+                    put("writeDateUrl", null);
+                    put("examineDateUrl", null);
+                    put("ratifyDateUrl", null);
+                    put("seal1", null);
+                }});
+        try {
+            // 淇敼鎹㈣鍜屽悎骞堕棶棰�
+            updaeMerge(template.getXWPFDocument(), true);
+            String name = insReport.getCode().replace("/", "") + "-J.docx";
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+            insReport.setUrl("/word/" + name);
+            insReport.setIsPass(0);
+            insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//鎻愪氦浜�
+            insReport.setWriteTime(LocalDateTime.now());//鎻愪氦鏃堕棿
+            // 鏌ヨ鎶ュ憡, 鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�, 娣诲姞杩囧垹闄�
+            insReportMapper.delete(Wrappers.<InsReport>lambdaQuery()
+                    .eq(InsReport::getInsOrderId, insOrder.getId()));
+            insReportMapper.insert(insReport);
+            inputStream.close();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 澶勭悊甯歌妫�娴嬮」
+     * @param item
+     * @param finalIndex
+     * @param sampleList
+     * @param max
+     * @param text
+     * @param rows
+     * @param rowRenderData
+     * @param resultCh
+     */
+    private static void handlerSampleItems(String orderType,Map<String, List<SampleProductExportDto>> item,AtomicInteger finalIndex,List<SampleProductExportDto> sampleList,Integer max,List<TextRenderData> text,List<RowRenderData> rows,RowRenderData rowRenderData,AtomicReference<String> resultCh,List<String> cableTagList,Boolean hasAddHead ){
         item.forEach((s, sampleProductDtoInside) -> {
             // 娣诲姞妫�楠岄」
             SampleProductExportDto dto2 = new SampleProductExportDto();
@@ -1713,19 +1954,23 @@
                 // 澶勭悊闆嗗悎
                 Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
                 for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
-                    String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem();
+                    String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem() + productDto2.getCableTag();
                     if (map.containsKey(productName)) {
                         // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
-                        map.get(productName)
-                                .getLastValueList()
-                                .add(productDto2.getLastValue());
+                        if(CollectionUtil.isEmpty(map.get(productName).getLastValueList()) || StringUtils.equals(OrderType.RAW.getValue(),orderType)){
+                            map.get(productName)
+                                    .getLastValueList()
+                                    .add(productDto2.getLastValue());
+                        }
                         map.get(productName)
                                 .getInsResultList()
                                 .add(productDto2.getInsResult());
                     } else {
                         // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
-                        productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
-                        productDto2.getLastValueList().add(productDto2.getLastValue());
+                        if(CollectionUtil.isEmpty(productDto2.getLastValueList()) || StringUtils.equals(OrderType.RAW.getValue(),orderType)){
+                            productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+                            productDto2.getLastValueList().add(productDto2.getLastValue());
+                        }
                         productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
                         productDto2.getInsResultList().add(productDto2.getInsResult());
 
@@ -1754,19 +1999,23 @@
                 // 澶勭悊闆嗗悎
                 Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
                 for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
-                    String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem() + productDto2.getInspectionItemSubclass();
+                    String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem() + productDto2.getInspectionItemSubclass() + productDto2.getCableTag();
                     if (map.containsKey(productName)) {
                         // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
-                        map.get(productName)
-                                .getLastValueList()
-                                .add(productDto2.getLastValue());
+                        if(CollectionUtil.isEmpty(map.get(productName).getLastValueList()) || StringUtils.equals(OrderType.RAW.getValue(),orderType)){
+                            map.get(productName)
+                                    .getLastValueList()
+                                    .add(productDto2.getLastValue());
+                        }
                         map.get(productName)
                                 .getInsResultList()
                                 .add(productDto2.getInsResult());
                     } else {
                         // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
-                        productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
-                        productDto2.getLastValueList().add(productDto2.getLastValue());
+                        if(CollectionUtil.isEmpty(productDto2.getLastValueList()) || StringUtils.equals(OrderType.RAW.getValue(),orderType)){
+                            productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+                            productDto2.getLastValueList().add(productDto2.getLastValue());
+                        }
                         productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
                         productDto2.getInsResultList().add(productDto2.getInsResult());
 
@@ -1784,8 +2033,9 @@
         });
 
         // 娣诲姞灏忔姤鍛婅〃澶�
-        text = addSmallHead(text, max, rows);
-
+        if(hasAddHead){
+            text = addSmallHead(text, max, rows,cableTagList);
+        }
 
         // 涓棿妫�娴嬪�兼坊鍔�
         for (int i = 0; i < sampleList.size(); i++) {
@@ -1802,7 +2052,9 @@
 
             // 妫�楠岄」鐩�
             TextRenderData middleRenderData2 = new TextRenderData();
-            middleRenderData2.setText(sample.getInspectionName());
+            String[] split = sample.getInspectionName().split("&");
+            String itemName = split.length>0?split[0]:sample.getInspectionName();
+            middleRenderData2.setText(itemName+"鈭�"+itemName+i+"_"+finalIndex);
             Style middleStyle2 = new Style();
             middleStyle2.setFontFamily("瀹嬩綋");
             middleStyle2.setColor("000000");
@@ -1889,7 +2141,7 @@
                     TextRenderData middleRenderData6 = new TextRenderData();
                     middleRenderData6.setText((StringUtils.isNotEmpty(sample.getLastValue()) ?
                             sample.getLastValue() : "")
-                            + "鈭�" + (7 + i));
+                            + "鈭�" + (finalIndex.get() +"_"+ i));
                     Style middleStyle6 = new Style();
                     middleStyle6.setFontFamily("瀹嬩綋");
                     middleStyle6.setColor("000000");
@@ -1927,7 +2179,7 @@
                             String type;
                             if (count.equals(0)) {
                                 // 娣诲姞涓嶅悎鏍兼弿杩�
-                                String item1 = (max == 1 ? "" : "绗�" + Integer.toString(index) + "娆�")
+                                String item1 = (max == 1 ? "" : "绗�" + index + "娆�")
                                         + sample.getInspectionItem()
                                         + (StringUtils.isBlank(sample.getInspectionItemSubclass()) ? "" : "" + sample.getInspectionItemSubclass());
                                 if (resultCh.get().equals("")) {
@@ -1967,95 +2219,16 @@
             text = new ArrayList<>();
         }
 
-        TableRenderData tableRenderData = new TableRenderData();
-        tableRenderData.setRows(rows);
-
-        //璁剧疆鏍峰紡
-        TableStyle tableStyle = new TableStyle();
-        for (int i = 1; i <= max; i++) {
-            // 鏍规嵁鍑忓帇閭g粨鏋滀釜鏁颁慨鏀归暱搴�
-            switch (i) {
-                case 1:
-                    tableStyle.setColWidths(new int[]{650, 2900, 850, 2300, 2100, 1200});
-                    break;
-                case 2:
-                    tableStyle.setColWidths(new int[]{650, 2700, 850, 2200, 1200, 1200, 1200});
-                    break;
-                case 3:
-                    tableStyle.setColWidths(new int[]{650, 2700, 850, 1600, 1000, 1000, 1000, 1200});
-                    break;
-                case 4:
-                    tableStyle.setColWidths(new int[]{650, 2400, 850, 1500, 850, 850, 850, 850, 1200});
-                    break;
-                case 5:
-                    tableStyle.setColWidths(new int[]{650, 2200, 850, 1350, 750, 750, 750, 750, 750, 1200});
-                    break;
-            }
-        }
-        tableStyle.setWidth("10000");
-        tableStyle.setAlign(TableRowAlign.CENTER);
-        BorderStyle borderStyle = new BorderStyle();
-        borderStyle.setColor("000000");
-        borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
-        borderStyle.setSize(4);
-        tableStyle.setLeftBorder(borderStyle);
-        tableStyle.setRightBorder(borderStyle);
-        tableStyle.setInsideHBorder(borderStyle); // 璁剧疆姘村钩鍐呰竟妗�
-        tableStyle.setInsideVBorder(borderStyle);
-        tableRenderData.setTableStyle(tableStyle);
-
-        if (!resultCh.get().equals("")) {
-            resultCh.set("缁忔楠岋紝" + resultCh.get() + "鎵�妫�椤圭洰涓嶅悎鏍硷紝鍏朵綑鎵�妫�椤圭洰鍧囧悎鏍笺��");
-        } else {
-            resultCh.set("缁忔楠屾鎵�" + enterFactoryReport.getSample() + "鍚勯」鐩潎绗﹀悎妫�楠岃鑼冭姹傘��");
-        }
-
-        ConfigureBuilder builder = Configure.builder();
-        builder.useSpringEL(true);
-
-        InputStream inputStream = this.getClass().getResourceAsStream("/static/small-report-template.docx");
-        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
-                new HashMap<String, Object>() {{
-                    put("report", enterFactoryReport);
-                    put("standardMethod", standardMethod2.toString().equals("null") ? "" : standardMethod2);
-                    put("orderType", orderType);
-                    put("table", tableRenderData);
-                    put("resultCh", resultCh);
-                    put("writeUrl", null);
-                    put("examineUrl", null);
-                    put("ratifyUrl", null);
-                    put("writeDateUrl", null);
-                    put("examineDateUrl", null);
-                    put("ratifyDateUrl", null);
-                    put("seal1", null);
-                }});
-        try {
-            // 淇敼鎹㈣鍜屽悎骞堕棶棰�
-            updaeMerge(template.getXWPFDocument(), true);
-            String name = insReport.getCode().replace("/", "") + "-J.docx";
-            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
-            insReport.setUrl("/word/" + name);
-            insReport.setIsPass(0);
-            insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//鎻愪氦浜�
-            insReport.setWriteTime(LocalDateTime.now());//鎻愪氦鏃堕棿
-            // 鏌ヨ鎶ュ憡, 鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�, 娣诲姞杩囧垹闄�
-            insReportMapper.delete(Wrappers.<InsReport>lambdaQuery()
-                    .eq(InsReport::getInsOrderId, insOrder.getId()));
-            insReportMapper.insert(insReport);
-            inputStream.close();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
     }
 
     /**
-     * 娣诲姞灏忓疂琛ㄥご
+     * 娣诲姞灏忔姤鍛婅〃澶�
      * @param text
      * @param max
      * @param rows
      * @return
      */
-    private static List<TextRenderData> addSmallHead(List<TextRenderData> text, Integer max, List<RowRenderData> rows) {
+    private static List<TextRenderData> addSmallHead(List<TextRenderData> text, Integer max, List<RowRenderData> rows,List<String> cableTagList) {
         RowRenderData rowRenderData;
 //        // 澶�
         TextRenderData headRenderData1 = new TextRenderData();
@@ -2113,7 +2286,7 @@
         text = new ArrayList<>();
 
         // 绗簩琛�(鍙兘娌℃湁)
-        if (max > 1) {
+        if (max > 1 && CollectionUtil.isEmpty(cableTagList)) {
             TextRenderData tagRenderData1 = new TextRenderData();
             tagRenderData1.setText("");
             Style tagStyle1 = new Style();
@@ -2170,7 +2343,62 @@
 
 
         }
+        //濡傛灉鏈夌數缂嗛鑹诧紝鐢熸垚棰滆壊鏍囪瘑琛�
+        if(CollectionUtil.isNotEmpty(cableTagList)){
+            TextRenderData tagRenderData1 = new TextRenderData();
+            tagRenderData1.setText("");
+            Style tagStyle1 = new Style();
+            tagStyle1.setFontFamily("瀹嬩綋");
+            tagStyle1.setColor("000000");
+            tagRenderData1.setStyle(tagStyle1);
+            text.add(tagRenderData1);
 
+            TextRenderData tagRenderData2 = new TextRenderData();
+            tagRenderData2.setText("缁濈紭绾胯姱棰滆壊鍜屾爣蹇�");
+            Style tagStyle2 = new Style();
+            tagStyle2.setFontFamily("瀹嬩綋");
+            tagStyle2.setColor("000000");
+            tagRenderData2.setStyle(tagStyle2);
+            text.add(tagRenderData2);
+
+            TextRenderData tagRenderData4 = new TextRenderData();
+            tagRenderData4.setText("/");
+            Style tagStyle4 = new Style();
+            tagStyle4.setFontFamily("瀹嬩綋");
+            tagStyle4.setColor("000000");
+            tagRenderData4.setStyle(tagStyle4);
+            text.add(tagRenderData4);
+
+            TextRenderData tagRenderData5 = new TextRenderData();
+            tagRenderData5.setText("/");
+            Style tagStyle5 = new Style();
+            tagStyle5.setFontFamily("瀹嬩綋");
+            tagStyle5.setColor("000000");
+            tagRenderData5.setStyle(tagStyle5);
+            text.add(tagRenderData5);
+
+            for (String cableTag : cableTagList) {
+                TextRenderData tagRenderData6 = new TextRenderData();
+                tagRenderData6.setText(cableTag);
+                Style tagStyle6 = new Style();
+                tagStyle6.setFontFamily("瀹嬩綋");
+                tagStyle6.setColor("000000");
+                tagRenderData6.setStyle(tagStyle6);
+                text.add(tagRenderData6);
+            }
+            TextRenderData tagRenderData7 = new TextRenderData();
+            tagRenderData7.setText("/");
+            Style tagStyle7 = new Style();
+            tagStyle7.setFontFamily("瀹嬩綋");
+            tagStyle7.setColor("000000");
+            tagRenderData7.setStyle(tagStyle7);
+            text.add(tagRenderData7);
+
+            TextRenderData[] text4 = text.toArray(new TextRenderData[0]);
+            rowRenderData = Rows.of(text4).center().rowAtleastHeight(1).create();
+            rows.add(rowRenderData);
+            text = new ArrayList<>();
+        }
         return text;
     }
 
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
index ebbf0c2..ed72ea8 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -26,6 +26,7 @@
 import com.ruoyi.common.constant.InsOrderTypeConstants;
 import com.ruoyi.common.core.domain.Result;
 import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.enums.OrderType;
 import com.ruoyi.common.numgen.NumberGenerator;
 import com.ruoyi.common.utils.LimsDateUtil;
 import com.ruoyi.common.utils.QueryWrappers;
@@ -39,6 +40,7 @@
 import com.ruoyi.inspect.service.InsOrderStateService;
 import com.ruoyi.inspect.service.InsProductService;
 import com.ruoyi.inspect.service.InsSampleService;
+import com.ruoyi.inspect.vo.IfsOrderVO;
 import com.ruoyi.inspect.vo.InsOrderPrintingVo;
 import com.ruoyi.system.mapper.UserMapper;
 import lombok.AllArgsConstructor;
@@ -312,9 +314,9 @@
                 }
             }
         });
-        //鏄惁涓哄師鏉愭枡涓嬪崟
-        if (insOrder.getTypeSource() != null && insOrder.getTypeSource().equals(1)) {
-            // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+        //鍘熸潗鏂欎笅鍗曟垨澶栬喘鎴愬搧涓嬪崟
+        if (Objects.nonNull(insOrder.getTypeSource())&&Objects.nonNull(insOrder.getIfsInventoryId())) {
+            // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
             IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
             Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
             User user = userMapper.selectById(declareUserId);
@@ -352,47 +354,51 @@
             upInsOrderOfState(insOrder);
 
             // 鍒嗛厤妫�楠屼汉
-            upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), "鍘熸潗鏂�");
+            String sonLaboratory = insOrder.getTypeSource().equals(1)?"鍘熸潗鏂�":"鎴愬搧瀹為獙瀹�";
+            upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), sonLaboratory);
 
-            // 鏍规嵁闆朵欢鍙峰垽鏂槸鍚︽槸杈呮潗
-            boolean isRaw = false;
-            StructureTestObject productObject = insOrderMapper.selectProductByPartNo(ifsInventoryQuantity.getPartNo());
-            // 鏌ヨ浜у搧
-            if (productObject != null && StrUtil.isNotBlank(productObject.getObjectType()) && productObject.getObjectType().equals("1")) {
-                isRaw = true;
-            } else {
-            // 鏌ヨ瀵硅薄
-                StructureTestObject testObject = insOrderMapper.selectByPartNo(ifsInventoryQuantity.getPartNo());
-                if (testObject != null && StrUtil.isNotBlank(testObject.getObjectType()) && testObject.getObjectType().equals("1")) {
+            //鏄惁涓哄師鏉愭枡涓嬪崟
+            if(insOrder.getTypeSource().equals(1)){
+                // 鏍规嵁闆朵欢鍙峰垽鏂槸鍚︽槸杈呮潗
+                boolean isRaw = false;
+                StructureTestObject productObject = insOrderMapper.selectProductByPartNo(ifsInventoryQuantity.getPartNo());
+                // 鏌ヨ浜у搧
+                if (productObject != null && StrUtil.isNotBlank(productObject.getObjectType()) && productObject.getObjectType().equals("1")) {
                     isRaw = true;
+                } else {
+                    // 鏌ヨ瀵硅薄
+                    StructureTestObject testObject = insOrderMapper.selectByPartNo(ifsInventoryQuantity.getPartNo());
+                    if (testObject != null && StrUtil.isNotBlank(testObject.getObjectType()) && testObject.getObjectType().equals("1")) {
+                        isRaw = true;
+                    }
                 }
-            }
 
-            if (isRaw) {
-                // 鑾峰彇褰撳墠瀛e害鐨勫紑濮嬫椂闂村拰缁撴潫鏃堕棿
-                LocalDateTime now = LocalDateTime.now();
-                // 鑾峰彇褰撳墠鏈堜唤
-                int month = now.getMonthValue();
-                // 纭畾褰撳墠瀛e害鐨勫紑濮嬫湀浠�
-                int startMonth = (month - 1) / 3 * 3 + 1;
-                // 鏋勯�犲搴︾殑寮�濮嬫椂闂�
-                LocalDateTime startOfQuarter = LocalDateTime.of(now.getYear(), Month.of(startMonth), 1, 0, 0);
-                // 璁$畻涓嬩竴涓搴︾殑寮�濮嬫椂闂�
-                LocalDateTime startOfNextQuarter = startOfQuarter.plusMonths(3);
-                // 璁$畻褰撳墠瀛e害鐨勭粨鏉熸椂闂�
-                LocalDateTime endOfQuarter = startOfNextQuarter.minusSeconds(1);
+                if (isRaw) {
+                    // 鑾峰彇褰撳墠瀛e害鐨勫紑濮嬫椂闂村拰缁撴潫鏃堕棿
+                    LocalDateTime now = LocalDateTime.now();
+                    // 鑾峰彇褰撳墠鏈堜唤
+                    int month = now.getMonthValue();
+                    // 纭畾褰撳墠瀛e害鐨勫紑濮嬫湀浠�
+                    int startMonth = (month - 1) / 3 * 3 + 1;
+                    // 鏋勯�犲搴︾殑寮�濮嬫椂闂�
+                    LocalDateTime startOfQuarter = LocalDateTime.of(now.getYear(), Month.of(startMonth), 1, 0, 0);
+                    // 璁$畻涓嬩竴涓搴︾殑寮�濮嬫椂闂�
+                    LocalDateTime startOfNextQuarter = startOfQuarter.plusMonths(3);
+                    // 璁$畻褰撳墠瀛e害鐨勭粨鏉熸椂闂�
+                    LocalDateTime endOfQuarter = startOfNextQuarter.minusSeconds(1);
 
-                // 鏍规嵁涓嬪崟鐨勮鏍煎瀷鍙峰垽鏂槸鍚︿负瀛e害棣栨鍑虹幇
-                Integer count = ifsInventoryQuantityMapper.selectIsFirst(insOrder.getPartDetail(),
-                        ifsInventoryQuantity.getSupplierName(),
-                        startOfNextQuarter,
-                        endOfQuarter);
+                    // 鏍规嵁涓嬪崟鐨勮鏍煎瀷鍙峰垽鏂槸鍚︿负瀛e害棣栨鍑虹幇
+                    Integer count = ifsInventoryQuantityMapper.selectIsFirst(insOrder.getPartDetail(),
+                            ifsInventoryQuantity.getSupplierName(),
+                            startOfNextQuarter,
+                            endOfQuarter);
 
-                if(count == 0) {
-                    ifsInventoryQuantity.setIsFirst(1);
-                    ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-                            .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
-                            .set(IfsInventoryQuantity::getIsFirst, 1));
+                    if (count == 0) {
+                        ifsInventoryQuantity.setIsFirst(1);
+                        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                                .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
+                                .set(IfsInventoryQuantity::getIsFirst, 1));
+                    }
                 }
             }
         }
@@ -516,9 +522,10 @@
     @Override
     public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
         Map<String, Object> map = new HashMap<>();
-        InsOrder insOrder = insOrderMapper.selectById(id);
+//        InsOrder insOrder = insOrderMapper.selectById(id);
+        IfsOrderVO ifsOrderVO = insOrderMapper.selectOrderInfoById(id);
         List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
-        map.put("insOrder", insOrder);
+        map.put("insOrder", ifsOrderVO);
         map.put("sampleProduct", list);
         //鏌ヨ鎵�鏈夎褰曟ā鐗堝幓閲�
         List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
@@ -1207,9 +1214,12 @@
          * TODO 鍚庣画闇�瑕佽皟鐢↖FS鐨勬帴鍙� 绉诲叆鐨勫簱浣嶅彿 toLocation
          */
         // 妫�楠屽悗绉诲簱
-        if(one.getIsSplitOrder().equals(1)){
-            //濡傛灉璁㈠崟涓哄師鏉愭枡鐨勬媶鍒嗚鍗曪紝鍒欑Щ鍒板璐簱浣�
-            toLocation = "W03";
+        //1301:鍘熸潗鏂欏悎鏍煎簱锛孋P-02-001:鎴愬搧搴�
+        if(StringUtils.equals(inventoryQuantity.getOrderType(), OrderType.RAW.getValue())){
+            //濡傛灉璁㈠崟涓哄師鏉愭枡鐨勬媶鍒嗚鍗曪紝鍒欑Щ鍒板璐師鏉愭枡搴撲綅W03
+            toLocation = one.getIsSplitOrder().equals(1)?"W03":"1301";
+        }else if(StringUtils.equals(inventoryQuantity.getOrderType(), OrderType.WG.getValue())){
+            toLocation = "CP-02-001";
         }else{
             toLocation = "1301";
         }
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/OutsourcingFinishProductInspectionServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/OutsourcingFinishProductInspectionServiceImpl.java
new file mode 100644
index 0000000..b5c8cea
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/OutsourcingFinishProductInspectionServiceImpl.java
@@ -0,0 +1,50 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.IfsInventoryQuantityDto;
+import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
+import com.ruoyi.basic.mapper.StandardTreeMapper;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.basic.vo.IfsInventoryQuantityVO;
+import com.ruoyi.common.enums.OrderType;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.service.OutsourcingFinishProductInspectionService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 澶栬喘鎴愬搧妫�楠宻erviceImpl
+ */
+@Slf4j
+@Service
+public class OutsourcingFinishProductInspectionServiceImpl implements OutsourcingFinishProductInspectionService {
+
+    @Autowired
+    private StandardTreeMapper standardTreeMapper;
+
+    @Override
+    public IPage<IfsInventoryQuantityVO> getWarehouseSubmit(Page page, IfsInventoryQuantity ifsInventoryQuantity) {
+        ifsInventoryQuantity.setOrderType(OrderType.WG.getValue());
+        return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
+    }
+
+    @Override
+    public IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+        ifsInventoryQuantityDto.setEndDeclareDate(null);
+        ifsInventoryQuantityDto.setOrderType(OrderType.WG.getValue());
+        IPage<IfsInventoryQuantitySupplierDto> ifsByOver = standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+        ifsByOver.getRecords().forEach(r->r.setOrderTypeName(OrderType.getLabelByValue(r.getOrderType())));
+        return ifsByOver;
+    }
+
+    @Override
+    public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
+        ifsInventoryQuantityDto.setOrderType(OrderType.WG.getValue());
+        return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
+    }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
index 4f2fe8b..b388357 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -20,21 +20,25 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.basic.dto.*;
+import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.basic.mapper.StandardTreeMapper;
 import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.basic.vo.IfsInventoryQuantityVO;
+import com.ruoyi.common.config.WechatProperty;
 import com.ruoyi.common.constant.InsOrderTypeConstants;
 import com.ruoyi.common.core.domain.Result;
 import com.ruoyi.common.core.domain.entity.User;
-import com.ruoyi.common.config.WechatProperty;
+import com.ruoyi.common.enums.OrderType;
+import com.ruoyi.common.numgen.NumberGenerator;
 import com.ruoyi.common.utils.LimsDateUtil;
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.WxCpUtils;
 import com.ruoyi.common.utils.api.IfsApiUtils;
+import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.CopperInsOrderDto;
 import com.ruoyi.inspect.dto.OrderSplitDTO;
 import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
-import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
-import com.ruoyi.basic.mapper.StandardTreeMapper;
 import com.ruoyi.inspect.dto.SampleProductDto;
 import com.ruoyi.inspect.excel.OrderSplitExcelData;
 import com.ruoyi.inspect.excel.OrderSplitExcelListener;
@@ -48,9 +52,6 @@
 import com.ruoyi.inspect.service.InsOrderService;
 import com.ruoyi.inspect.service.InsReportService;
 import com.ruoyi.inspect.service.RawMaterialOrderService;
-import com.ruoyi.common.numgen.NumberGenerator;
-import com.ruoyi.framework.exception.ErrorException;
-import com.ruoyi.basic.vo.IfsInventoryQuantityVO;
 import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
 import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
 import com.ruoyi.system.mapper.UserMapper;
@@ -148,6 +149,9 @@
 
     @Override
     public IPage<IfsInventoryQuantityVO> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
+        if(ifsInventoryQuantity.getIsInspect().equals(1)){
+            ifsInventoryQuantity.setOrderType(OrderType.RAW.getValue());
+        }
         IPage<IfsInventoryQuantityVO> ifsInventoryQuantityIPage = standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
         ifsInventoryQuantityIPage.getRecords().forEach(f->{
             Long count = ifsInventoryQuantityMapper.selectCount(Wrappers.<IfsInventoryQuantity>lambdaQuery()
@@ -160,6 +164,7 @@
 
     @Override
     public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
         return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
     }
 
@@ -170,13 +175,14 @@
      * @return
      */
     @Override
-    public int inspectionReport(List<Long> ids) {
+    public int inspectionReport(List<Long> ids,String orderType) {
         Integer userId = SecurityUtils.getUserId().intValue();
         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::getOrderType,orderType)
                 .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
         );
         threadPoolTaskExecutor.execute(() -> {
@@ -230,6 +236,13 @@
         return ifsInventoryQuantityMapper.printLabel(ids);
     }
 
+
+    @Override
+    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+    public Long getOrderCountByIfsId(Long ifsId) {
+        return insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getIfsInventoryId,ifsId).ne(InsOrder::getState,-1));
+    }
+
     /**
      * 鎶ユ
      * @param ifsInventoryQuantity
@@ -238,6 +251,12 @@
     @Override
     public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
         Integer userId = SecurityUtils.getUserId().intValue();
+        boolean validateValue = OrderType.validateValue(ifsInventoryQuantity.getOrderType());
+        if(!validateValue){
+            throw new ErrorException("鎶ユ澶辫触锛岄潪娉曠殑閿�鍞鍗曞垎绫绘灇涓�");
+        }
+        //鎵规鍙峰瓧姣嶈浆澶у啓
+        ifsInventoryQuantity.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo().toUpperCase(Locale.ROOT));
         ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
                 .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
                 .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
@@ -245,6 +264,7 @@
                 .set(IfsInventoryQuantity::getIsInspect, 1)
                 .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
                 .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
+                .set(IfsInventoryQuantity::getOrderType,ifsInventoryQuantity.getOrderType())
         );
 
         threadPoolTaskExecutor.execute(() -> {
@@ -415,8 +435,9 @@
         String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
         ifsInventoryQuantityDto.setBeginDeclareDate(null);
         ifsInventoryQuantityDto.setEndDeclareDate(null);
-
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
         IPage<IfsInventoryQuantitySupplierDto> ifsByOver = standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+        ifsByOver.getRecords().forEach(r->r.setOrderTypeName(OrderType.getLabelByValue(r.getOrderType())));
         return ifsByOver;
     }
 
@@ -533,6 +554,9 @@
         ifsInventoryQuantity.setIsSource(0);
         ifsInventoryQuantity.setState(0);
         ifsInventoryQuantity.setIsFinish(0);
+        if(!OrderType.validateValue(ifsInventoryQuantity.getOrderType())){
+            throw new ErrorException("鏂板鎶ユ淇℃伅澶辫触锛岄潪娉曠殑閿�鍞鍗曞垎绫绘灇涓�");
+        }
         ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
     }
 
@@ -796,7 +820,7 @@
         String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
         ifsInventoryQuantityDto.setBeginDeclareDate(null);
         ifsInventoryQuantityDto.setEndDeclareDate(null);
-
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
         return standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
     }
 
@@ -948,7 +972,7 @@
         if(Objects.nonNull(splitOrderList) && !splitOrderList.isEmpty()){
             List<Long> ids = splitOrderList.stream().map(IfsInventoryQuantity::getId).collect(Collectors.toList());
             ids.add(ifsInventoryQuantity.getId());
-            this.inspectionReport(ids);
+            this.inspectionReport(ids,OrderType.RAW.getValue());
         }
         //鍕鹃�夊悓姝ュ埌MES锛屼繚瀛樿鍗曟媶鍒嗚褰�
         if(orderSplitDTO.getPushToMes()){
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java
new file mode 100644
index 0000000..38ae11a
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java
@@ -0,0 +1,76 @@
+package com.ruoyi.inspect.vo;
+
+import com.ruoyi.inspect.pojo.InsOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * ifs璁㈠崟vo
+ */
+@Data
+public class IfsOrderVO extends InsOrder implements Serializable {
+
+
+    /**
+     * 闆朵欢鎵规灞炴�т富閿甶d
+     */
+    @ApiModelProperty("闆朵欢鎵规灞炴�т富閿甶d")
+    private Long lotPartId;
+
+    /**
+     * 缁濈紭棰滆壊
+     */
+    @ApiModelProperty("缁濈紭棰滆壊")
+    private String insulationColor;
+
+    /**
+     * 澶栨姢棰滆壊
+     */
+    @ApiModelProperty("澶栨姢棰滆壊")
+    private String outerColor;
+
+    /**
+     * 鐩樺彿
+     */
+    @ApiModelProperty("鐩樺彿")
+    private String drumNo;
+
+    /**
+     * 鍗板瓧淇℃伅
+     */
+    @ApiModelProperty("鍗板瓧淇℃伅")
+    private String letteringInfo;
+
+    /**
+     * 璧峰绫虫爣
+     */
+    @ApiModelProperty("璧峰绫虫爣")
+    private BigDecimal startMeterMark;
+
+    /**
+     * 鎴绫虫爣
+     */
+    @ApiModelProperty("鎴绫虫爣")
+    private BigDecimal endMeterMark;
+
+    /**
+     * 鏄惁鏄媶鍒嗚鍗�(0:鍚� 1:鏄�)
+     */
+    @ApiModelProperty("鏄惁鏄媶鍒嗚鍗�(0:鍚� 1:鏄�)")
+    private Integer isSplitOrder;
+
+
+    /**
+     * ifs璁㈠崟鍒嗙被(01raw:鍘熸潗鏂� 02wg:澶栬喘鎴愬搧)
+     */
+    @ApiModelProperty("ifs璁㈠崟鍒嗙被(01raw:鍘熸潗鏂� 02wg:澶栬喘鎴愬搧)")
+    private String ifsOrderType;
+
+    private String partNo;
+
+    private String lotBatchNo;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsSampleUserVO.java b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsSampleUserVO.java
new file mode 100644
index 0000000..1db7091
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/vo/InsSampleUserVO.java
@@ -0,0 +1,33 @@
+package com.ruoyi.inspect.vo;
+
+import com.ruoyi.inspect.pojo.InsSampleUser;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class InsSampleUserVO extends InsSampleUser implements Serializable {
+
+    /**
+     * 妫�楠屽憳
+     */
+    @ApiModelProperty("妫�楠屽憳")
+    private String inspector;
+
+    /**
+     * 妫�楠屾棩鏈�
+     */
+    @ApiModelProperty("妫�楠屾棩鏈�")
+    private String inspectDate;
+
+    /**
+     * 鍨嬪彿
+     */
+    @ApiModelProperty("鍨嬪彿")
+    private String model;
+
+
+
+
+}
diff --git a/inspect-server/src/main/resources/mapper/IfsPartPropsRecordMapper.xml b/inspect-server/src/main/resources/mapper/IfsPartPropsRecordMapper.xml
new file mode 100644
index 0000000..4cccb84
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/IfsPartPropsRecordMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.IfsPartPropsRecordMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.IfsPartPropsRecord">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="ifsInventoryId" column="ifs_inventory_id" jdbcType="BIGINT"/>
+            <result property="drumNo" column="drum_no" jdbcType="VARCHAR"/>
+            <result property="startMeterMark" column="start_meter_mark" jdbcType="DECIMAL"/>
+            <result property="endMeterMark" column="end_meter_mark" jdbcType="DECIMAL"/>
+            <result property="insulationColor" column="insulation_color" jdbcType="VARCHAR"/>
+            <result property="outerColor" column="outer_color" jdbcType="VARCHAR"/>
+            <result property="letteringInfo" column="lettering_info" jdbcType="VARCHAR"/>
+            <result property="partPropsFlag" column="part_props_flag" jdbcType="BIT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,ifs_inventory_id,drum_no,
+        start_meter_mark,end_meter_mark,insulation_color,
+        outer_color,lettering_info,part_props_flag
+    </sql>
+    <select id="selectCountByPartNoAndLotBatchNo" resultType="java.lang.Long">
+        select
+            COUNT(iiq.id)
+        from ifs_inventory_quantity  iiq
+            left join ifs_part_props_record ippr
+                on iiq.id = ippr.ifs_inventory_id
+        where iiq.part_no = #{partNo}
+          and iiq.update_batch_no= #{lotBatchNo}
+          and ippr.id  is not null
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
index 78234d5..fb57bb0 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -469,4 +469,42 @@
                 and ip.structure_item_parameter_id = #{itmeId}
               group by io.id) a
     </select>
+    <select id="selectOrderInfoById" resultType="com.ruoyi.inspect.vo.IfsOrderVO">
+        select  io.*,
+                iiq.is_split_order,
+                iiq.order_type AS ifs_order_type,
+                iiq.part_no,
+                iiq.update_batch_no AS lot_batch_no,
+                ipps.id AS lot_part_id,
+                case
+                    when ipps.drum_no is not null and ipps.drum_no!='' then ipps.drum_no
+                    else isor.drum_no
+                    end AS drum_no,
+                case
+                    when ipps.insulation_color is not null and ipps.insulation_color!='' then ipps.insulation_color
+                    else isor.insulation_color
+                    end AS insulation_color,
+                case
+                    when ipps.outer_color is not null and ipps.outer_color!='' then ipps.outer_color
+                    else isor.outer_color
+                    end AS outer_color,
+                case
+                    when ipps.lettering_info is not null and ipps.lettering_info!='' then ipps.lettering_info
+                    else isor.lettering_info
+                    end AS lettering_info,
+                ipps.start_meter_mark,
+                ipps.end_meter_mark
+        from ins_order io left join ifs_inventory_quantity iiq on io.ifs_inventory_id=iiq.id
+                          left join ifs_split_order_record isor
+                                    on iiq.order_no=isor.order_no
+                                        and iiq.line_no=isor.line_no
+                                        and iiq.release_no=isor.release_no
+                                        and iiq.receipt_no=isor.receipt_no
+                                        and iiq.part_no=isor.part_no
+                                        AND iiq.update_batch_no = isor.lot_batch_no
+                          LEFT JOIN ifs_part_props_record ipps ON iiq.id = ipps.ifs_inventory_id
+        where io.state !=-1
+          AND io.id = #{id}
+        LIMIT 1
+    </select>
 </mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml b/inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml
index 5cad2d2..c28afad 100644
--- a/inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml
@@ -1,4 +1,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.ruoyi.inspect.mapper.InsSampleUserMapper">
+    <select id="selectUserNameByOrderId" resultType="com.ruoyi.inspect.vo.InsSampleUserVO">
+        select
+            group_concat(DISTINCT u.name separator ',') AS inspector,
+            date_format(isu.create_time,'%Y-%m-%d') AS inspect_date,
+            isa.model
+        from ins_sample_user isu
+                 left join ins_sample isa on isu.ins_sample_id = isa.ins_order_id
+                 left join user u on isu.user_id=u.id
+        where isu.ins_sample_id=#{orderId} and isu.state=0
+        group by isu.ins_sample_id
+        order by isu.create_time
+    </select>
 </mapper>
diff --git a/inspect-server/src/main/resources/static/small-wg-report-template.docx b/inspect-server/src/main/resources/static/small-wg-report-template.docx
new file mode 100644
index 0000000..4a2285b
--- /dev/null
+++ b/inspect-server/src/main/resources/static/small-wg-report-template.docx
Binary files differ
diff --git a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java
index 97e9e39..b331be6 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryOutputWorkingHoursMapper.java
@@ -8,6 +8,7 @@
 import com.ruoyi.performance.dto.AuxiliaryOriginalHoursLookDto;
 import com.ruoyi.performance.dto.AuxiliaryOutputWorkingHoursDto;
 import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -21,6 +22,7 @@
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
  * @since 2024-05-28 03:48:48
  */
+@Mapper
 public interface AuxiliaryOutputWorkingHoursMapper extends BaseMapper<AuxiliaryOutputWorkingHours> {
 
     IPage<AuxiliaryOutputWorkingHoursDto> selectAuxiliaryOutputWorkingHours(Page page, @Param("ew") QueryWrapper<AuxiliaryOutputWorkingHoursDto> ew, @Param("ids") List<Long> ids);
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderType.java
new file mode 100644
index 0000000..de83896
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderType.java
@@ -0,0 +1,44 @@
+package com.ruoyi.common.enums;
+
+import org.apache.commons.lang3.StringUtils;
+
+public enum OrderType {
+
+    RAW("鍘熸潗鏂�","01raw"),
+    WG("澶栬喘鎴愬搧","02wg");
+
+    private String label,value;
+
+    public String getLabel() {
+        return label;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    OrderType(String label, String value) {
+        this.label = label;
+        this.value = value;
+    }
+
+    public static boolean validateValue(String value){
+        boolean flag = false;
+        for (OrderType orderType : OrderType.values()) {
+            if(StringUtils.isNotBlank(value)&&StringUtils.equals(orderType.getValue(),value)){
+                flag = true;
+            }
+        }
+        return flag;
+    }
+
+    public static String getLabelByValue(String value){
+        for (OrderType orderType : OrderType.values()) {
+            if(validateValue(value)&&StringUtils.equals(orderType.getValue(), value)){
+                return orderType.getLabel();
+            }
+        }
+        return "";
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/QueryWrappers.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/QueryWrappers.java
index a4b5d3d..9c46a62 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/QueryWrappers.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/QueryWrappers.java
@@ -51,8 +51,10 @@
             if (!field.getName().equals("orderBy")) {
                 if(value.getClass()== LocalDateTime.class){
                     wrapper.like(StrUtil.toUnderlineCase(field.getName()), ((LocalDateTime) value).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-                }else{
+                }else if(value.getClass()== String.class){
                     wrapper.like(StrUtil.toUnderlineCase(field.getName()), value);
+                }else{
+                    wrapper.eq(StrUtil.toUnderlineCase(field.getName()), value);
                 }
             } else {
                 Map<String, String> map = (Map<String, String>) value;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/api/IfsApiUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/api/IfsApiUtils.java
index ca4d3a9..0865b04 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/api/IfsApiUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/api/IfsApiUtils.java
@@ -79,7 +79,15 @@
         return getResult("MODIFY_PURCH_RECEIPT_LOT_STD", inAttr, ifsProperties.getCustorder(), "淇敼閲囪喘璁㈠崟鎵规鍙�-->");
     }
 
-
+    /**
+     * 搴撳瓨鐗╂枡鎵规灞炴�ф柊澧炰慨鏀规帴鍙�
+     *
+     * @param inAttr
+     * @return
+     */
+    public Result importPartLotAttr(String inAttr) {
+        return getResult("IMPORT_PART_LOT_ATTR_STD", inAttr, ifsProperties.getCustorder(), "搴撳瓨鐗╂枡鎵规灞炴�ф柊澧炰慨鏀规帴鍙�-->");
+    }
 
     /**
      * 鏌ヨ搴撳瓨鏁版嵁

--
Gitblit v1.9.3