From e713714eb3796ac4d67495f823aa633535b3ad15 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 26 三月 2025 13:33:19 +0800
Subject: [PATCH] 1.外购件检验 2.标准方法导入

---
 inspect-server/src/main/java/com/ruoyi/inspect/dto/InspectionPurchasedDto.java                  |   13 +
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InspectionPurchasedServiceImpl.java |   95 +++++++++
 basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java                     |    4 
 basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java            |   43 ++++
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InspectionPurchasedMapper.java            |   16 +
 basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java                   |    8 
 inspect-server/src/main/java/com/ruoyi/inspect/pojo/InspectionPurchased.java                    |   73 +++++++
 inspect-server/src/main/java/com/ruoyi/inspect/service/InspectionPurchasedService.java          |   26 ++
 basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java                             |   10 +
 basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java          |  190 ++++++++++--------
 basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java     |   33 ++
 inspect-server/src/main/java/com/ruoyi/inspect/controller/InspectionPurchasedController.java    |   49 ++++
 12 files changed, 468 insertions(+), 92 deletions(-)

diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
index 624b04b..b66db32 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
@@ -34,7 +34,7 @@
         return Result.success(workShopService.addWorkShop(workShopDto));
     }
 
-    @ApiOperation(value = "鍒犻櫎妫�楠屽崟妯℃澘")
+    @ApiOperation(value = "鍒犻櫎杞﹂棿鍚嶇О鏁版嵁")
     @DeleteMapping("/delWorkShop")
     public Result<?> delWorkShop(Integer id) {
         return Result.success(workShopService.delWorkShop(id));
@@ -57,4 +57,10 @@
     public Result<?> delFile(Integer id) {
         return Result.success(workShopFileService.delFile(id));
     }
+
+    @ApiOperation(value = "鏌ヨ闄勪欢鍒楄〃")
+    @GetMapping("/partFileList")
+    public Result partFileList(Page page,@RequestParam("partNo") String partNo) {
+        return Result.success(workShopFileService.partFileList(page,partNo));
+    }
 }
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java
index 6d5ec08..d636789 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java
@@ -1,5 +1,6 @@
 package com.ruoyi.basic.pojo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -21,38 +22,47 @@
     @TableId(type = IdType.AUTO)
     private Integer id;
 
+    @ExcelProperty("棰嗗煙")
     private String field;
 
+    @ExcelProperty("妫�楠屽璞�")
     @ApiModelProperty("妫�楠屽璞�")
     private String structureTestObjectId;
 
     /**
      * 鏍囧噯缂栧彿
      */
+    @ExcelProperty("鏍囧噯缂栧彿")
     @ApiModelProperty(value = "鏍囧噯缂栧彿")
     private String code;
 
     /**
      * 鏍囧噯鏂规硶
      */
+    @ExcelProperty("鏍囧噯鎻忚堪")
     @ApiModelProperty(value = "鏍囧噯鎻忚堪")
     private String name;
 
+    @ExcelProperty("鏍囧噯鎻忚堪EN")
     @ApiModelProperty(value = "鏍囧噯鎻忚堪EN")
     private String nameEn;
 
     /**
      * 澶囨敞
      */
+    @ExcelProperty("澶囨敞")
     @ApiModelProperty(value = "澶囨敞")
     private String remark;
 
+    @ExcelProperty("璧勮川")
     @ApiModelProperty(value = "璧勮川")
     private String qualificationId;
 
+    @ExcelProperty("鏄惁浜у搧鏍囧噯")
     @ApiModelProperty(value = "鏄惁浜у搧鏍囧噯")
     private Integer isProduct;
 
+    @ExcelProperty("鏄惁鍚敤")
     @ApiModelProperty(value = "鏄惁鍚敤")
     private Integer isUse;
 
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
index 562ffa1..987ef12 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
@@ -1,6 +1,8 @@
 package com.ruoyi.basic.service;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.basic.pojo.WorkShopFile;
 
@@ -11,4 +13,6 @@
 public interface WorkShopFileService extends IService<WorkShopFile> {
 
     int delFile(Integer id);
+
+    IPage<WorkShopFile> partFileList(Page page,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 44566bd..e78edbf 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
@@ -1,7 +1,10 @@
 package com.ruoyi.basic.service.impl;
 
 import cn.hutool.json.JSONUtil;
-import cn.hutool.poi.excel.ExcelUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -131,22 +134,115 @@
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void inputExcel(MultipartFile file) throws IOException {
+
         // 瀛樺偍妫�娴嬪璞ist
-        List<Object> structureTestObjectIdList = new ArrayList<>();
+        Set<Object> structureTestObjectIdSet = new HashSet<>();
         List<StandardMethod> result = new ArrayList<>();
-        ExcelUtil.readBySax(file.getInputStream(), 0, (i, l, list) -> {
-            // 鍘婚櫎绗竴琛岃〃澶�
-            if (l == 0) {
-                return;
+
+        EasyExcel.read(file.getInputStream(), StandardMethod.class, new AnalysisEventListener<StandardMethod>() {
+            @Override
+            public void invoke(StandardMethod data, AnalysisContext context) {
+                // 鍘婚櫎绗竴琛岃〃澶达紝EasyExcel 鑷姩澶勭悊琛ㄥご锛岃繖閲屾棤闇�棰濆澶勭悊
+                // 瀛樺偍鍞竴妫�娴嬪璞�
+                String structureTestObjectId = data.getStructureTestObjectId();
+                Object idObj = getFirstIdFromJson(structureTestObjectId);
+                if (idObj != null) {
+                    structureTestObjectIdSet.add(idObj);
+                }
+                result.add(data);
             }
-            // 瀛樺偍鍞竴妫�娴嬪璞�
-            if (!structureTestObjectIdList.contains(list.get(2))) {
-                structureTestObjectIdList.add(list.get(2));
+
+            @Override
+            public void doAfterAllAnalysed(AnalysisContext context) {
+                // 瑙f瀽瀹屾垚鍚庢墽琛屾坊鍔犳搷浣�
+                addStructureTest(new ArrayList<>(structureTestObjectIdSet), result);
             }
-            StandardMethod standardMethod = formatData(list);
-            result.add(standardMethod);
-        });
-        addStructureTest(structureTestObjectIdList, result);
+        }).sheet().doRead();
+    }
+
+    private Object getFirstIdFromJson(String json) {
+        // 绠�鍗曡В鏋� JSON 鏁扮粍鑾峰彇绗竴涓厓绱�
+        if (json != null && json.startsWith("[") && json.contains(",")) {
+            return json.substring(2, json.indexOf(","));
+        } else if (json != null && json.startsWith("[")) {
+            return json.substring(1, json.length() - 1);
+        }
+        return null;
+    }
+
+    public void addStructureTest(List<Object> structureTestObjectIdList, List<StandardMethod> standardMethodList) {
+        List<StandardMethod> updateList = new ArrayList<>();
+        List<Integer> deleteListId = new ArrayList<>();
+        List<StandardMethod> addList = new ArrayList<>();
+
+        // 鍏堝皢 Excel 鏁版嵁鎸� key 鍒嗙粍
+        Map<String, StandardMethod> excelDataMap = new HashMap<>();
+        for (StandardMethod excelMethod : standardMethodList) {
+            String key = generateKey(excelMethod);
+            excelDataMap.put(key, excelMethod);
+        }
+
+//        if (!structureTestObjectIdList.isEmpty()) {
+            // 浠� excel 涓殑缁勫悕鏌ヨ鏁版嵁搴撲腑鐨勫垎缁�
+            List<StandardMethod> allDbMethods = new ArrayList<>();
+            for (Object j : structureTestObjectIdList) {
+                List<StandardMethod> standardMethods = baseMapper.selectList(new LambdaQueryWrapper<StandardMethod>()
+                        .like(StandardMethod::getStructureTestObjectId, "\"" + j + "\""));
+                allDbMethods.addAll(standardMethods);
+            }
+
+            // 灏嗘暟鎹簱鏁版嵁鎸� key 鍒嗙粍
+            Map<String, StandardMethod> dbDataMap = new HashMap<>();
+            for (StandardMethod dbMethod : allDbMethods) {
+                String key = generateKey(dbMethod);
+                dbDataMap.put(key, dbMethod);
+            }
+
+            // 澶勭悊鏇存柊鍜屾柊澧�
+            for (Map.Entry<String, StandardMethod> entry : excelDataMap.entrySet()) {
+                String key = entry.getKey();
+                StandardMethod excelMethod = entry.getValue();
+                StandardMethod dbMethod = dbDataMap.get(key);
+                if (dbMethod != null) {
+                    // 鏇存柊
+                    excelMethod.setId(dbMethod.getId());
+                    updateList.add(excelMethod);
+                } else {
+                    // 鏂板
+                    addList.add(excelMethod);
+                }
+            }
+
+            // 澶勭悊鍒犻櫎
+            for (Map.Entry<String, StandardMethod> entry : dbDataMap.entrySet()) {
+                String key = entry.getKey();
+                if (!excelDataMap.containsKey(key)) {
+                    StandardMethod dbMethod = entry.getValue();
+                    deleteListId.add(dbMethod.getId());
+                }
+            }
+
+
+        if (!addList.isEmpty()) {
+            // 鏂板
+            baseMapper.insertBatchSomeColumn(addList);
+        }
+
+        if (!deleteListId.isEmpty()) {
+            // 鍒犻櫎
+            baseMapper.deleteBatchIds(deleteListId);
+        }
+
+        if (!updateList.isEmpty()) {
+            // 鏇存柊
+            updateList.forEach(i -> {
+                baseMapper.updateById(i);
+            });
+        }
+    }
+
+    private String generateKey(StandardMethod method) {
+        return method.getStructureTestObjectId() + "-" + method.getCode() + "-" + method.getField();
     }
 
     // 鏍煎紡鍖栨暟鎹�
@@ -185,74 +281,6 @@
         return standardMethod;
     }
 
-    // 鏂板鏁版嵁
-    public void addStructureTest(List<Object> structureTestObjectIdList, List<StandardMethod> standardMethodList) {
-        List<StandardMethod> updateList = new ArrayList<>();
-        List<Integer> deleteListId = new ArrayList<>();
-        List<StandardMethod> addList = new ArrayList<>();
-        if (!structureTestObjectIdList.isEmpty()) {
-            // 寰幆excel閲岄潰鐨勫垎缁�
-            structureTestObjectIdList.forEach(j -> {
-                // 浠xcel涓殑缁勫悕鏌ヨ鏁版嵁搴撲腑鐨勫垎缁�
-                List<StandardMethod> standardMethods = baseMapper.selectList(Wrappers.<StandardMethod>lambdaQuery()
-                        .like(StandardMethod::getStructureTestObjectId, "\"" + j + "\""));
-                // 灏嗙粨鏋滃惊鐜尮閰�
-                for (int i = 0; i < standardMethods.size(); i++) {
-                    boolean isExistence = false;
-                    for (int i1 = 0; i1 < standardMethodList.size(); i1++) {
-                        // 鏇存柊
-                        if (standardMethods.get(i).getStructureTestObjectId().equals(standardMethodList.get(i1).getStructureTestObjectId())
-                                && standardMethods.get(i).getCode().equals(standardMethodList.get(i1).getCode())
-                                && standardMethods.get(i).getField().equals(standardMethodList.get(i1).getField())) {
-                            // 缁檈xcel鏁版嵁璧嬪�糹d鍋氭洿鏂�
-                            standardMethodList.get(i1).setId(standardMethods.get(i).getId());
-                            // 鏇存柊
-                            updateList.add(standardMethodList.get(i1));
-                            isExistence = true;
-                            break;
-                        }
-                    }
-                    // 鍒犻櫎
-                    if (!isExistence) {
-                        deleteListId.add(standardMethods.get(i).getId());
-                    }
-                }
-                for (int i = 0; i < standardMethodList.size(); i++) {
-                    if (standardMethodList.get(i).getStructureTestObjectId().contains("\"" + j + "\"")) {
-                        boolean isExistence = false;
-                        for (int i1 = 0; i1 < standardMethods.size(); i1++) {
-                            if (standardMethods.get(i1).getStructureTestObjectId().equals(standardMethodList.get(i).getStructureTestObjectId())
-                                    && standardMethods.get(i1).getCode().equals(standardMethodList.get(i).getCode())
-                                    && standardMethods.get(i1).getField().equals(standardMethodList.get(i).getField())) {
-                                isExistence = true;
-                                break;
-                            }
-                        }
-                        // 鏂板
-                        if (!isExistence) {
-                            addList.add(standardMethodList.get(i));
-                        }
-                    }
-                }
-            });
-        }
-        if (!addList.isEmpty()) {
-            // 鏂板
-            baseMapper.insertBatchSomeColumn(addList);
-        }
-
-        if (!deleteListId.isEmpty()) {
-            // 鍒犻櫎
-            baseMapper.deleteBatchIds(deleteListId);
-        }
-
-        if (!updateList.isEmpty()) {
-            // 鏇存柊
-            updateList.forEach(i -> {
-                baseMapper.updateById(i);
-            });
-        }
-    }
 }
 
 
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
index 06567df..0c9167c 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
@@ -2,23 +2,19 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.*;
+import com.ruoyi.basic.pojo.*;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.basic.dto.CopyStandardProductListDto;
 import com.ruoyi.basic.dto.InsSampleReceiveDto;
 import com.ruoyi.basic.dto.ProductDto;
 import com.ruoyi.basic.dto.ResetTreeDragDTO;
-import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
-import com.ruoyi.basic.mapper.StandardProductListMapper;
-import com.ruoyi.basic.mapper.StandardProductListSupplierAskMapper;
-import com.ruoyi.basic.mapper.StandardTreeMapper;
-import com.ruoyi.basic.pojo.StandardProductList;
-import com.ruoyi.basic.pojo.StandardProductListSupplierAsk;
-import com.ruoyi.basic.pojo.StandardTree;
 import com.ruoyi.basic.service.StandardProductListService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -47,6 +43,10 @@
     private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
 
     private StandardProductListSupplierAskMapper standardProductListSupplierAskMapper;
+
+    private ProductPartMapper productPartMapper;
+
+    private StructureTestObjectPartMapper  structureTestObjectPartMapper;
 
 
     @Override
@@ -185,6 +185,25 @@
             }
         }
 
+        ProductPart productPart = productPartMapper.selectOne(new LambdaQueryWrapper<ProductPart>().eq(ProductPart::getPartNo, insSample.getPartNo()));
+        if (productPart != null){
+            if (StringUtils.isNotEmpty(productPart.getInspectionItem())){
+                String inspectionItem = productPart.getInspectionItem();
+                list = list.stream()
+                        .filter(standardProductList -> inspectionItem.equals(standardProductList.getInspectionItem()))
+                        .collect(Collectors.toList());
+            }
+        }
+
+        StructureTestObjectPart structureTestObjectPart = structureTestObjectPartMapper.selectOne(new LambdaQueryWrapper<StructureTestObjectPart>().eq(StructureTestObjectPart::getPartNo, insSample.getPartNo()));
+        if (structureTestObjectPart != null){
+            if (StringUtils.isNotEmpty(structureTestObjectPart.getInspectionItem())){
+                String inspectionItem = structureTestObjectPart.getInspectionItem();
+                list = list.stream()
+                        .filter(standardProductList -> inspectionItem.equals(standardProductList.getInspectionItem()))
+                        .collect(Collectors.toList());
+            }
+        }
         return list;
     }
 
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
index 0b4801d..a0a3f6c 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
@@ -1,9 +1,11 @@
 package com.ruoyi.basic.service.impl;
 
-
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.WorkShopFileMapper;
-import com.ruoyi.basic.pojo.WorkShopFile;
+import com.ruoyi.basic.mapper.*;
+import com.ruoyi.basic.pojo.*;
 import com.ruoyi.basic.service.WorkShopFileService;
 import com.ruoyi.common.utils.file.MinioUtils;
 import org.springframework.beans.factory.annotation.Value;
@@ -20,6 +22,17 @@
 
     @Resource
     private WorkShopFileMapper workShopFileMapper;
+
+    @Resource
+    private ProductPartMapper productPartMapper;
+
+    @Resource
+    private ProductMapper productMapper;
+    @Resource
+    private StructureTestObjectPartMapper structureTestObjectPartMapper;
+
+    @Resource
+    private StructureTestObjectMapper structureTestObjectMapper;
 
     @Resource
     private MinioUtils minioUtils;
@@ -52,6 +65,30 @@
             return 0;
         }
     }
+
+    @Override
+    public IPage<WorkShopFile> partFileList(Page page, String partNo) {
+        StructureTestObject structureTestObject = findStructureTestObjectByPartNo(partNo);
+        if (structureTestObject != null && structureTestObject.getWorkShopId() != null) {
+            return workShopFileMapper.selectPage(page, new LambdaQueryWrapper<WorkShopFile>().eq(WorkShopFile::getWorkShopId, structureTestObject.getWorkShopId()));
+        }
+        return null;
+    }
+
+    private StructureTestObject findStructureTestObjectByPartNo(String partNo) {
+        ProductPart productPart = productPartMapper.selectOne(new LambdaQueryWrapper<ProductPart>().eq(ProductPart::getPartNo, partNo));
+        if (productPart != null) {
+            Product product = productMapper.selectById(productPart.getProductId());
+            if (product != null) {
+                return structureTestObjectMapper.selectById(product.getObjectId());
+            }
+        }
+        StructureTestObjectPart structureTestObjectPart = structureTestObjectPartMapper.selectOne(new LambdaQueryWrapper<StructureTestObjectPart>().eq(StructureTestObjectPart::getPartNo, partNo));
+        if (structureTestObjectPart != null) {
+            return structureTestObjectMapper.selectById(structureTestObjectPart.getTestObjectId());
+        }
+        return null;
+    }
 }
 
 
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/InspectionPurchasedController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InspectionPurchasedController.java
new file mode 100644
index 0000000..bab4e46
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InspectionPurchasedController.java
@@ -0,0 +1,49 @@
+package com.ruoyi.inspect.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.dto.InspectionPurchasedDto;
+import com.ruoyi.inspect.service.InspectionPurchasedService;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 澶栬喘浠舵楠� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author ld
+ * @since 2025-03-25 11:22:56
+ */
+@RestController
+@RequestMapping("/inspectionPurchased")
+@AllArgsConstructor
+public class InspectionPurchasedController {
+
+    private InspectionPurchasedService inspectionPurchasedService;
+
+    @ApiOperation("鏌ヨ鍒楄〃")
+    @GetMapping("/selectInspection")
+    public Result selectInspectionPurchased(Page page, InspectionPurchasedDto inspectionPurchasedDto) {
+        return Result.success(inspectionPurchasedService.selectInspectionPurchased(page,inspectionPurchasedDto));
+    }
+
+    @ApiOperation(value = "娣诲姞澶栬喘浠舵楠屾暟鎹�")
+    @PostMapping("/addOrUpdateInspection")
+    public Result<?> addOrUpdateInspection(@RequestBody InspectionPurchasedDto inspectionPurchasedDto) {
+        return Result.success(inspectionPurchasedService.addOrUpdateInspection(inspectionPurchasedDto));
+    }
+
+    @ApiOperation(value = "鏇存柊鎻愪氦澶栬喘浠舵楠屾暟鎹�")
+    @PostMapping("/UpdateInspection")
+    public Result<?> UpdateInspection(InspectionPurchasedDto inspectionPurchasedDto) throws Exception {
+        return Result.success(inspectionPurchasedService.UpdateInspection(inspectionPurchasedDto));
+    }
+
+    @ApiOperation(value = "鍒犻櫎澶栬喘浠舵楠�")
+    @DeleteMapping("/delInspection")
+    public Result<?> delWorkShop(Integer id) {
+        return Result.success(inspectionPurchasedService.delInspection(id));
+    }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InspectionPurchasedDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InspectionPurchasedDto.java
new file mode 100644
index 0000000..4213cbb
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InspectionPurchasedDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InspectionPurchased;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+
+@Data
+public class InspectionPurchasedDto extends InspectionPurchased {
+
+    private MultipartFile file;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InspectionPurchasedMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InspectionPurchasedMapper.java
new file mode 100644
index 0000000..88f1bcc
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InspectionPurchasedMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.mapper;
+
+import com.ruoyi.inspect.pojo.InspectionPurchased;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 澶栬喘浠舵楠� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author ld
+ * @since 2025-03-25 01:58:21
+ */
+public interface InspectionPurchasedMapper extends BaseMapper<InspectionPurchased> {
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InspectionPurchased.java b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InspectionPurchased.java
new file mode 100644
index 0000000..e0cdb22
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/pojo/InspectionPurchased.java
@@ -0,0 +1,73 @@
+package com.ruoyi.inspect.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ * 澶栬喘浠舵楠�
+ * </p>
+ *
+ * @author ld
+ * @since 2025-03-25 01:58:21
+ */
+@TableName("inspection_purchased")
+@ApiModel(value = "InspectionPurchased瀵硅薄", description = "澶栬喘浠舵楠�")
+@Data
+public class InspectionPurchased implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("浜у搧鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鏉ユ枡鏁伴噺")
+    private String num;
+
+    @ApiModelProperty("渚涜揣鍘傚")
+    private String supplier;
+
+    @ApiModelProperty("璁㈠崟鍙�")
+    private String orderNum;
+
+    @ApiModelProperty("sp鍙�")
+    private String spNum;
+
+    @ApiModelProperty("濮旀墭缂栧彿")
+    private String entrustmentNo;
+
+    @ApiModelProperty("閫昏緫鐘舵��")
+    @TableLogic
+    private String state;
+
+    @ApiModelProperty("妫�楠岀姸鎬�")
+    private String inspectionStatus;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鏂囦欢鍚�")
+    private String fileName;
+
+    @ApiModelProperty("鏂囦欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("鏂囦欢棰勮璺緞")
+    private String filePreviewUrl;
+
+    @ApiModelProperty("妫�楠岄」")
+    private String inspectionItems;
+
+    @ApiModelProperty("妫�娴嬬粨鏋�")
+    private String result;
+
+    @ApiModelProperty("绫诲瀷")
+    private Integer type;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InspectionPurchasedService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InspectionPurchasedService.java
new file mode 100644
index 0000000..0713915
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InspectionPurchasedService.java
@@ -0,0 +1,26 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.dto.InspectionPurchasedDto;
+import com.ruoyi.inspect.pojo.InspectionPurchased;
+
+/**
+ * <p>
+ * 澶栬喘浠舵楠� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author ld
+ * @since 2025-03-25 11:22:56
+ */
+public interface InspectionPurchasedService extends IService<InspectionPurchased> {
+
+    int addOrUpdateInspection(InspectionPurchasedDto inspectionPurchasedDto);
+
+    int delInspection(Integer id);
+
+    IPage<InspectionPurchasedDto> selectInspectionPurchased(Page page, InspectionPurchasedDto inspectionPurchasedDto);
+
+    int UpdateInspection(InspectionPurchasedDto inspectionPurchasedDto) throws Exception;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InspectionPurchasedServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InspectionPurchasedServiceImpl.java
new file mode 100644
index 0000000..31c5bec
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InspectionPurchasedServiceImpl.java
@@ -0,0 +1,95 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.MinioResult;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.file.MinioUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.InspectionPurchasedDto;
+import com.ruoyi.inspect.mapper.InspectionPurchasedMapper;
+import com.ruoyi.inspect.pojo.InspectionPurchased;
+import com.ruoyi.inspect.service.InspectionPurchasedService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 澶栬喘浠舵楠� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author ld
+ * @since 2025-03-25 11:22:56
+ */
+@Service
+public class InspectionPurchasedServiceImpl extends ServiceImpl<InspectionPurchasedMapper, InspectionPurchased> implements InspectionPurchasedService {
+
+    @Resource
+    private InspectionPurchasedMapper inspectionPurchasedMapper;
+
+    @Resource
+    private MinioUtils minioUtils;
+
+    @Value("${minio.bucketName}")
+    private String bucketName;
+
+    @Override
+    public int addOrUpdateInspection(InspectionPurchasedDto inspectionPurchasedDto) {
+        if (inspectionPurchasedDto.getId() == null) {
+            inspectionPurchasedDto.setInspectionStatus(String.valueOf(0));
+            
+            return inspectionPurchasedMapper.insert(inspectionPurchasedDto);
+        } else {
+            return inspectionPurchasedMapper.updateById(inspectionPurchasedDto);
+        }
+    }
+
+    @Override
+    public int delInspection(Integer id) {
+        return inspectionPurchasedMapper.deleteById(id);
+    }
+
+    @Override
+    public IPage<InspectionPurchasedDto> selectInspectionPurchased(Page page, InspectionPurchasedDto inspectionPurchasedDto) {
+        return inspectionPurchasedMapper.selectPage(page, QueryWrappers.queryWrappers(inspectionPurchasedDto));
+    }
+
+    @Override
+    public int UpdateInspection(InspectionPurchasedDto inspectionPurchasedDto) throws Exception {
+        int insertResult = 0;
+        InspectionPurchased inspectionPurchased = inspectionPurchasedMapper.selectById(inspectionPurchasedDto.getId());
+        if (ObjectUtils.isNotEmpty(inspectionPurchasedDto.getFile())) {
+            if (ObjectUtils.isNotEmpty(inspectionPurchased.getFileUrl())){
+                if (inspectionPurchased != null && inspectionPurchased.getFileUrl() != null) {
+                    // 妫�鏌� MinIO 涓枃浠舵槸鍚﹀瓨鍦�
+                    if (minioUtils.objectExists(bucketName, inspectionPurchased.getFileUrl())) {
+                        // 鍏堝垹闄� MinIO 涓殑瀵硅薄
+                        minioUtils.removeObjectsResult(bucketName, inspectionPurchased.getFileUrl());
+                    }
+                }
+            }
+            try {
+                String contentType = inspectionPurchasedDto.getFile().getContentType();
+                String category = contentType != null && contentType.startsWith("image/") ? "images" : "docs";
+                MinioResult upload = minioUtils.upload(bucketName, inspectionPurchasedDto.getFile(), true);
+                // 璁板綍瀛樺偍璺緞
+                inspectionPurchased.setFileUrl(upload.getBucketFileName());
+                inspectionPurchased.setFilePreviewUrl(upload.getPreviewExpiry());
+                inspectionPurchased.setType(category.equals("images") ? 1 : 2);
+                // 鏁版嵁搴撴搷浣�
+                insertResult = inspectionPurchasedMapper.updateById(inspectionPurchased);
+                if (insertResult <= 0) {
+                    throw new ErrorException("鏁版嵁搴撴彃鍏ュけ璐�");
+                }
+                return insertResult;
+            } catch (Exception e) {
+                throw new Exception("绯荤粺寮傚父: ", e);
+            }
+        }
+        return insertResult;
+    }
+}

--
Gitblit v1.9.3