From e9af9f5cfeddbe5c0b33a3060b8ea6364c51e744 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 15 十一月 2024 11:37:10 +0800
Subject: [PATCH] 白名单故障类型

---
 ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java    |   75 ++++
 ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java      |   65 ----
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderWhiteMapper.xml                 |   32 ++
 ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java            |   39 --
 ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java |  309 +++++++++++++++++++-
 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderWhiteMapper.java         |   10 
 ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderForm.java             |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/WorkOrderWhiteExport.java     |   27 +
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java   |  235 +++++----------
 ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java         |   48 +++
 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java              |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/ErrorExport.java              |   16 +
 ycl-common/src/main/java/enumeration/ErrorType.java                                |   20 +
 13 files changed, 604 insertions(+), 275 deletions(-)

diff --git a/ycl-common/src/main/java/enumeration/ErrorType.java b/ycl-common/src/main/java/enumeration/ErrorType.java
index c8d83da..88fed87 100644
--- a/ycl-common/src/main/java/enumeration/ErrorType.java
+++ b/ycl-common/src/main/java/enumeration/ErrorType.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import lombok.Getter;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -71,14 +72,29 @@
     }
 
     // 鏍规嵁value鑾峰彇desc
+    public static List<String> getDescriptionList() {
+        List<String> list = new ArrayList<>();
+        for (ErrorType errorType : ErrorType.values()) {
+            list.add(errorType.getDesc());
+        }
+        return list;
+    }
+    // 鏍规嵁value鑾峰彇desc
     public static String getDescriptionByValue(String value) {
         for (ErrorType errorType : ErrorType.values()) {
             if (errorType.getValue().equals(value)) {
                 return errorType.getDesc();
             }
         }
-        // 濡傛灉娌℃湁鎵惧埌鍖归厤鐨剉alue锛岃繑鍥瀗ull鎴栬�呮姏鍑轰竴涓紓甯�
-        // 杩欓噷杩斿洖null
+        return null;
+    }
+    // 鏍规嵁desc鑾峰彇value
+    public static String getValueByDescription(String desc) {
+        for (ErrorType errorType : ErrorType.values()) {
+            if (errorType.getDesc().equals(desc)) {
+                return errorType.getValue();
+            }
+        }
         return null;
     }
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/ErrorExport.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/ErrorExport.java
new file mode 100644
index 0000000..ce999b2
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/ErrorExport.java
@@ -0,0 +1,16 @@
+package com.ycl.platform.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+/**
+ * 鏁呴殰绫诲瀷椤�
+ */
+@Data
+public class ErrorExport {
+    @ColumnWidth(30)
+    @ExcelProperty("鏁呴殰绫诲瀷")
+    private String error;
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/WorkOrderWhiteExport.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/WorkOrderWhiteExport.java
new file mode 100644
index 0000000..f2a6e8c
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/WorkOrderWhiteExport.java
@@ -0,0 +1,27 @@
+package com.ycl.platform.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+/**
+ * 鐧藉悕鍗曞鍏ュ鍑�
+ */
+@Data
+public class WorkOrderWhiteExport {
+    @ColumnWidth(30)
+    @ExcelProperty("鍥芥爣鐮�(涓嶅彲淇敼)")
+    private String serialNumber;
+
+    @ColumnWidth(50)
+    @ExcelProperty("鐐逛綅鍚嶇О(涓嶅彲淇敼)")
+    private String pointName;
+
+    @ColumnWidth(50)
+    @ExcelProperty("鏁呴殰绫诲瀷(鍙慨鏀�)")
+    private String errorType;
+
+    @ColumnWidth(50)
+    @ExcelProperty("澶囨敞(鍙慨鏀�)")
+    private String remark;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderForm.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderForm.java
index ac0ff06..254b036 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderForm.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderForm.java
@@ -73,6 +73,7 @@
           entity = new WorkOrder();
         }
         BeanUtils.copyProperties(form, entity);
+        entity.setErrorTypeList(form.getErrorType());
         return entity;
     }
 
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
index 81d8c57..0be073f 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
@@ -4,10 +4,7 @@
 import com.ycl.platform.domain.entity.WorkOrderAuditingRecord;
 import com.ycl.platform.domain.entity.WorkOrderWhite;
 import com.ycl.platform.domain.form.*;
-import com.ycl.platform.domain.query.DistributeWorkOrderQuery;
-import com.ycl.platform.domain.query.WorkOrderExportQuery;
-import com.ycl.platform.domain.query.WorkOrderQuery;
-import com.ycl.platform.domain.query.WorkOrderWhiteQuery;
+import com.ycl.platform.domain.query.*;
 import com.ycl.platform.domain.vo.DistributeWorkOrderVO;
 import com.ycl.platform.domain.vo.WorkOrderVO;
 import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO;
@@ -28,6 +25,7 @@
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -198,64 +196,6 @@
         List<WorkOrderAuditingRecord> data = workOrderService.selectYwAuditingListByYwId(workOrderNo);
         return Result.ok().data(data);
     }
-
-    /**
-     * 宸ュ崟鐧藉悕鍗曞垪琛�
-     */
-    @PostMapping("/white/page")
-    @ApiOperation(value = "宸ュ崟鐧藉悕鍗曞垪琛�", notes = "宸ュ崟鐧藉悕鍗曞垪琛�")
-    public Result whitePage(@RequestBody WorkOrderWhiteQuery workOrderWhiteQuery)
-    {
-        return workOrderService.selectWorkOrderWhiteList(workOrderWhiteQuery);
-    }
-
-    /**
-     * 宸ュ崟鐧藉悕鍗曡鎯�
-     */
-    @GetMapping("/white/{id}")
-    @ApiOperation(value = "宸ュ崟鐧藉悕鍗曡鎯�", notes = "宸ュ崟鐧藉悕鍗曡鎯�")
-    public Result whiteDetail(@PathVariable Integer id)
-    {
-        return workOrderService.selectWorkOrderWhiteDetail(id);
-    }
-    /**
-     * 娣诲姞宸ュ崟鐧藉悕鍗�
-     *
-     * @param workOrderWhite 鐧借壊宸ュ崟
-     * @return {@link Result }
-     * @author
-     */
-    @PostMapping("/white/add")
-    @ApiOperation(value = "鏂板宸ュ崟鐧藉悕鍗�", notes = "鏂板宸ュ崟鐧藉悕鍗�")
-    public Result addWorkOrderWhite(@RequestBody WorkOrderWhite workOrderWhite) {
-        return workOrderService.addWorkOrderWhite(workOrderWhite);
-    }
-
-    /**
-     * 淇敼宸ュ崟鐧藉悕鍗�
-     *
-     * @param workOrderWhite 鐧借壊宸ュ崟
-     * @return {@link Result }
-     * @author
-     */
-    @PostMapping("/white/update")
-    @ApiOperation(value = "淇敼宸ュ崟鐧藉悕鍗�", notes = "淇敼宸ュ崟鐧藉悕鍗�")
-    public Result updateWorkOrderWhite(@RequestBody WorkOrderWhite workOrderWhite) {
-        return workOrderService.updateWorkOrderWhite(workOrderWhite);
-    }
-    /**
-     * 鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�
-     *
-     * @param ids ids
-     * @return {@link Result }
-     * @author
-     */
-    @DeleteMapping("/white/batchDelete")
-    @ApiOperation(value = "鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�", notes = "鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�")
-    public Result batchDeleteWorkOrderWhite(@RequestBody List<String> ids) {
-        return workOrderService.batchDeleteWorkOrderWhite(ids);
-    }
-
     /**
      * 鎵归噺鍒犻櫎宸ュ崟
      *
@@ -268,4 +208,5 @@
     public Result batchDeleteWorkOrder(@RequestBody List<String> workOrderNos) {
         return workOrderService.batchDeleteWorkOrder(workOrderNos);
     }
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java b/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java
index a4de4ff..c1b2daa 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java
@@ -1,7 +1,9 @@
 package com.ycl.platform.controller;
 
 import annotation.Log;
+import com.ycl.platform.domain.entity.WorkOrderWhite;
 import com.ycl.platform.domain.entity.YwThreshold;
+import com.ycl.platform.domain.query.WorkOrderWhiteQuery;
 import com.ycl.platform.service.IYwThresholdService;
 import com.ycl.system.AjaxResult;
 import com.ycl.system.Result;
@@ -91,17 +93,84 @@
     {
         return toAjax(ywThresholdService.deleteYwThresholdByIds(ids));
     }
+    /**
+     * 宸ュ崟鐧藉悕鍗曞垪琛�
+     */
+    @PostMapping("/white/page")
+    @ApiOperation(value = "宸ュ崟鐧藉悕鍗曞垪琛�", notes = "宸ュ崟鐧藉悕鍗曞垪琛�")
+    public Result whitePage(@RequestBody WorkOrderWhiteQuery workOrderWhiteQuery)
+    {
+        return ywThresholdService.selectWorkOrderWhiteList(workOrderWhiteQuery);
+    }
 
     /**
-     * 瀵煎叆鏁版嵁
+     * 宸ュ崟鐧藉悕鍗曡鎯�
+     */
+    @GetMapping("/white/{id}")
+    @ApiOperation(value = "宸ュ崟鐧藉悕鍗曡鎯�", notes = "宸ュ崟鐧藉悕鍗曡鎯�")
+    public Result whiteDetail(@PathVariable Integer id)
+    {
+        return ywThresholdService.selectWorkOrderWhiteDetail(id);
+    }
+    /**
+     * 娣诲姞宸ュ崟鐧藉悕鍗�
+     *
+     * @param workOrderWhite 鐧借壊宸ュ崟
+     * @return {@link Result }
+     * @author
+     */
+    @PostMapping("/white/add")
+    @ApiOperation(value = "鏂板宸ュ崟鐧藉悕鍗�", notes = "鏂板宸ュ崟鐧藉悕鍗�")
+    public Result addWorkOrderWhite(@RequestBody WorkOrderWhite workOrderWhite) {
+        return ywThresholdService.addWorkOrderWhite(workOrderWhite);
+    }
+
+    /**
+     * 淇敼宸ュ崟鐧藉悕鍗�
+     *
+     * @param workOrderWhite 鐧借壊宸ュ崟
+     * @return {@link Result }
+     * @author
+     */
+    @PostMapping("/white/update")
+    @ApiOperation(value = "淇敼宸ュ崟鐧藉悕鍗�", notes = "淇敼宸ュ崟鐧藉悕鍗�")
+    public Result updateWorkOrderWhite(@RequestBody WorkOrderWhite workOrderWhite) {
+        return ywThresholdService.updateWorkOrderWhite(workOrderWhite);
+    }
+    /**
+     * 鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�
+     *
+     * @param ids ids
+     * @return {@link Result }
+     * @author
+     */
+    @DeleteMapping("/white/batchDelete")
+    @ApiOperation(value = "鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�", notes = "鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�")
+    public Result batchDeleteWorkOrderWhite(@RequestBody List<String> ids) {
+        return ywThresholdService.batchDeleteWorkOrderWhite(ids);
+    }
+
+    /**
+     * 瀵煎嚭鐧藉悕鍗�
+     * @param response
+     * @throws IOException
+     */
+    @GetMapping("/white/export")
+    @ApiOperation(value = "瀵煎嚭鏁版嵁", notes = "瀵煎嚭鏁版嵁")
+    public void whiteExport(HttpServletResponse response) throws IOException {
+        ywThresholdService.whiteExport(response);
+    }
+    /**
+     * 瀵煎叆鐧藉悕鍗�
      *
      * @param file 鏂囦欢
      * @return {@link Result }
      * @author
      */
     @PostMapping("/import")
-    @ApiOperation(value = "瀵煎叆鏁版嵁", notes = "瀵煎叆鏁版嵁")
+    @ApiOperation(value = "瀵煎叆鐧藉悕鍗�", notes = "瀵煎叆鐧藉悕鍗�")
     public Result importData(MultipartFile file) throws IOException, ParseException, ExecutionException, InterruptedException {
-        return ywThresholdService.importData(file);
+        return ywThresholdService.importWhite(file);
     }
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
index 917c371..ddcdfab 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ycl.platform.domain.entity.WorkOrder;
+import com.ycl.platform.domain.excel.WorkOrderWhiteExport;
 import com.ycl.platform.domain.form.WorkOrderBatchAuditingForm;
 import com.ycl.platform.domain.query.*;
 import com.ycl.platform.domain.vo.DeviceInfoVO;
@@ -113,4 +114,5 @@
 
     List<WorkOrder> selectByNos(@Param("workOrderNos") List<String> workOrderNos);
 
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderWhiteMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderWhiteMapper.java
index 3f02aaf..69b9b15 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderWhiteMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderWhiteMapper.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ycl.platform.domain.entity.WorkOrderWhite;
+import com.ycl.platform.domain.excel.WorkOrderWhiteExport;
 import com.ycl.platform.domain.query.WorkOrderWhiteQuery;
 import org.apache.ibatis.annotations.Param;
 
@@ -71,4 +72,13 @@
     void updateBySerialNumber(WorkOrderWhite white);
 
     WorkOrderWhite getById(Integer id);
+
+    List<WorkOrderWhiteExport> whiteExport();
+
+    void updateBatch(@Param("whiteList")List<WorkOrderWhite> dataList);
+
+    void insertBatch(@Param("whiteList")List<WorkOrderWhite> addList);
+
+    void deleteAll();
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java b/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java
index f4605f7..6eaa5f7 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java
@@ -1,14 +1,21 @@
 package com.ycl.platform.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.platform.domain.entity.WorkOrderWhite;
 import com.ycl.platform.domain.entity.YwThreshold;
+import com.ycl.platform.domain.excel.PointExport;
+import com.ycl.platform.domain.query.WorkOrderWhiteQuery;
 import com.ycl.platform.domain.result.HK.FaceDeviceInspectionResult;
 import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult;
 import com.ycl.system.Result;
+import com.ycl.system.page.TableDataInfo;
+import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutionException;
 
 /**
  * 杩愮淮闃堝�糞ervice鎺ュ彛
@@ -86,12 +93,47 @@
      */
     public void errorTypeCheckUY(List list);
 
+
     /**
-     * 瀵煎叆鏁版嵁
+     * 宸ュ崟鐧藉悕鍗曞垪琛�
      *
-     * @param file 鏂囦欢
+     * @param workOrderWhiteQuery 鐧借壊宸ュ崟鏌ヨ
+     * @return {@link TableDataInfo }
+     * @author
+     */
+    Result selectWorkOrderWhiteList(WorkOrderWhiteQuery workOrderWhiteQuery);
+
+    /**
+     * 娣诲姞宸ュ崟鐧藉悕鍗�
+     *
+     * @param workOrderWhite 鐧借壊宸ュ崟
      * @return {@link Result }
      * @author
      */
-    Result importData(MultipartFile file);
+    Result addWorkOrderWhite(WorkOrderWhite workOrderWhite);
+
+    /**
+     * 鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�
+     *
+     * @param ids ids
+     * @author
+     */
+    Result batchDeleteWorkOrderWhite(List<String> ids);
+
+
+    Result selectWorkOrderWhiteDetail(Integer id);
+
+    Result updateWorkOrderWhite(WorkOrderWhite workOrderWhite);
+    /**
+     * 瀵煎嚭鏁版嵁
+     *
+     * @param response
+     */
+    void whiteExport(HttpServletResponse response) throws IOException;;
+    /**
+     * 鎵归噺瀵煎叆宸ュ崟鐧藉悕鍗�
+     *
+     * @author
+     */
+    Result importWhite(MultipartFile file) throws IOException;
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
index 42e27c0..b68349f 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
@@ -12,8 +12,10 @@
 import com.ycl.platform.domain.vo.screen.WorkOrderTotalVO;
 import com.ycl.system.Result;
 import com.ycl.system.page.TableDataInfo;
+import jakarta.servlet.http.HttpServletResponse;
 import org.bytedeco.javacv.FFmpegFrameGrabber;
 
+import java.io.IOException;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -238,40 +240,6 @@
     List<WorkOrderVO> export(WorkOrderExportQuery query);
 
     /**
-     * 宸ュ崟鐧藉悕鍗曞垪琛�
-     *
-     * @param workOrderWhiteQuery 鐧借壊宸ュ崟鏌ヨ
-     * @return {@link TableDataInfo }
-     * @author
-     */
-    Result selectWorkOrderWhiteList(WorkOrderWhiteQuery workOrderWhiteQuery);
-
-    /**
-     * 娣诲姞宸ュ崟鐧藉悕鍗�
-     *
-     * @param workOrderWhite 鐧借壊宸ュ崟
-     * @return {@link Result }
-     * @author
-     */
-    Result addWorkOrderWhite(WorkOrderWhite workOrderWhite);
-
-    /**
-     * 鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�
-     *
-     * @param ids ids
-     * @author
-     */
-    Result batchDeleteWorkOrderWhite(List<String> ids);
-
-    /**
-     * 鎵归噺瀵煎叆宸ュ崟鐧藉悕鍗�
-     *
-     * @param dataList 鏁版嵁鍒楄〃
-     * @author
-     */
-    void batchImportWhite(List<PointExport> dataList);
-
-    /**
      * 妫�娴嬫寜閽�
      * @param workOrderNo
      * @return
@@ -282,8 +250,5 @@
 
     Result errorAll();
 
-    Result selectWorkOrderWhiteDetail(Integer id);
-
-    Result updateWorkOrderWhite(WorkOrderWhite workOrderWhite);
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
index 1657856..96e8e1b 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -1,5 +1,8 @@
 package com.ycl.platform.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
@@ -12,7 +15,9 @@
 import com.ycl.config.PlatformConfig;
 import com.ycl.exception.ServiceException;
 import com.ycl.platform.domain.entity.*;
+import com.ycl.platform.domain.excel.ErrorExport;
 import com.ycl.platform.domain.excel.PointExport;
+import com.ycl.platform.domain.excel.WorkOrderWhiteExport;
 import com.ycl.platform.domain.form.*;
 import com.ycl.platform.domain.query.*;
 import com.ycl.platform.domain.vo.*;
@@ -40,6 +45,7 @@
 import constant.RedisConstant;
 import enumeration.ErrorType;
 import enumeration.general.*;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -61,10 +67,13 @@
 import org.springframework.util.StringUtils;
 import pojo.CascadeOption;
 
+import java.io.IOException;
+import java.io.OutputStream;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -86,10 +95,10 @@
     private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper;
     private final WorkOrderErrorTypeServiceImpl workOrderErrorTypeService;
     private final WorkOrderErrorTypeMapper workOrderErrorTypeMapper;
+    private final WorkOrderWhiteMapper workOrderWhiteMapper;
     private final SysConfigMapper configMapper;
     private final ReportMapper reportMapper;
     private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
-    private final WorkOrderWhiteMapper workOrderWhiteMapper;
     private final DeviceInfoMapper deviceInfoMapper;
     private final ApplicationContext applicationContext;
     @Value("${rtsp.server:http://127.0.0.1:7788}")
@@ -109,19 +118,12 @@
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList){
+    public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList) {
         int total = workOrderList.size();
-        // 鏌ヨ鍑虹櫧鍚嶅崟鍒楄〃
-        List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
-        // 閬嶅巻宸ュ崟鍒楄〃锛屽垽鏂槸鍚﹀湪鐧藉悕鍗曚腑
-        workOrderList = workOrderList.stream().filter(item -> !serialNumbers.contains(item.getSerialNumber()))
-                .collect(Collectors.toList());
+        //娓呯悊鏁版嵁
         workOrderList = workOrderList.stream().filter(item -> {
             return StringUtils.hasText(item.getSerialNumber()) && Objects.nonNull(item.getStatus()) && !CollectionUtils.isEmpty(item.getErrorTypeList());
         }).collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(workOrderList)) {
-            return Boolean.TRUE;
-        }
         // 鏍规嵁鍥芥爣鐮佸幓閲�
         workOrderList = workOrderList.stream()
                 .collect(Collectors.toMap(
@@ -129,6 +131,12 @@
                         p -> p,
                         (existing, replacement) -> existing // 鍐茬獊鏃朵繚鐣欑涓�涓�
                 )).values().stream().collect(Collectors.toList());
+        //妫�鏌ョ櫧鍚嶅崟
+        workOrderList = checkWhite(workOrderList);
+
+        if (CollectionUtils.isEmpty(workOrderList)) {
+            return Boolean.TRUE;
+        }
         List<String> serialNumberList = workOrderList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
         // 鏌ュ嚭鏁版嵁搴撲腑鍥芥爣鐮佸搴旂殑鏈畬鎴愮殑宸ュ崟
         List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(serialNumberList);
@@ -171,7 +179,7 @@
                         }
                     }
                     //閬垮厤浠d笅鍙戠殑宸ュ崟鐩存帴鍙樻垚涓嬪彂
-                    if(!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) {
+                    if (!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) {
                         databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
                     }
                     databaseWorkOrder.setUpdateTime(now);
@@ -282,7 +290,7 @@
                 workOrderErrorType.setErrorName(errorType);
                 waitAddErrorTypeList.add(workOrderErrorType);
             }
-            log.info("鍗冲皢鐢熸垚鐨勫伐鍗�:{}",workOrder);
+            log.info("鍗冲皢鐢熸垚鐨勫伐鍗�:{}", workOrder);
         }
         redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
         redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
@@ -311,6 +319,8 @@
         log.info("浼犲叆宸ュ崟鎬绘暟: {}锛屽疄闄呮坊鍔犲伐鍗曟暟锛歿}, 瀹為檯淇敼宸ュ崟鏁帮細{}", total, waitAddList.size(), updateNum);
         return Boolean.TRUE;
     }
+
+
     /**
      * 娣诲姞
      *
@@ -319,6 +329,16 @@
      */
     @Override
     public Result add(WorkOrderForm form) {
+        //妫�鏌ョ櫧鍚嶅崟
+        List<WorkOrder> data = new ArrayList<>();
+        WorkOrder workOrder = WorkOrderForm.getEntityByForm(form, null);
+        data.add(workOrder);
+        data = checkWhite(data);
+        if (CollectionUtils.isEmpty(data)) {
+            return Result.error("璇ヨ澶囩殑鏁呴殰绫诲瀷鍦ㄧ櫧鍚嶅崟涓紝涓嶈兘娣诲姞宸ュ崟");
+        }
+        WorkOrder entity = data.get(0);
+
         //鏌edis浠婃棩宸ュ崟鏁伴噺
         int workOrderNum = 0;
         //UUID浣滀负value锛屼繚璇佷笂閿佺殑绾跨▼鑷繁瑙i攣
@@ -334,28 +354,22 @@
         } else {
             return Result.error("宸ュ崟姝e湪娣诲姞锛岃绋嶅悗鍐嶈瘯");
         }
-        WorkOrder entity = WorkOrderForm.getEntityByForm(form, null);
-        // 鏌ヨ鍑虹櫧鍚嶅崟鍒楄〃
-        List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
-        // 閬嶅巻宸ュ崟鍒楄〃锛屽垽鏂槸鍚﹀湪鐧藉悕鍗曚腑
-         if (serialNumbers.contains(entity.getSerialNumber())){
-            return Result.error("璇ヨ澶囧湪鐧藉悕鍗曚腑锛屼笉鑳芥坊鍔犲伐鍗�");
-        }else {
-            entity.setCreateTime(DateUtils.getNowDate());
-            entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
-            Date now = new Date();
-            entity.setCreateTime(now);
-            entity.setUpdateTime(now);
-            entity.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum)));
-            entity.setErrorType(String.join(",", form.getErrorType()));
-            List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList();
-            workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
-            if (baseMapper.insert(entity) > 0) {
-                return Result.ok("娣诲姞鎴愬姛");
-            }
-            return Result.error("娣诲姞澶辫触");
+
+        entity.setCreateTime(DateUtils.getNowDate());
+        entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
+        Date now = new Date();
+        entity.setCreateTime(now);
+        entity.setUpdateTime(now);
+        entity.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum)));
+        entity.setErrorType(String.join(",", form.getErrorType()));
+        List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList();
+        workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
+        if (baseMapper.insert(entity) > 0) {
+            return Result.ok("娣诲姞鎴愬姛");
         }
+        return Result.error("娣诲姞澶辫触");
     }
+
 
     /**
      * 淇敼
@@ -488,7 +502,7 @@
         // 鍥芥爣璁惧鐨勭紪鐮佸氨鏄彇瑙嗛娴佺殑璁惧缂栫爜锛屽浗鏍囪澶囧氨涓�涓�傚浗鏍囪澶囩殑姣忎竴涓�氶亾浠h〃涓�涓憚鍍忓ご锛屼篃灏辨槸璁惧id鏄彇娴佺殑閫氶亾id
         String frameImg = null;
         try {
-            log.info("鍥芥爣骞冲彴:{},璁惧缂栫爜:{},宸ュ崟鍙�:{}",gbDevices.get(0).getDeviceId(), workOrder.getSerialNumber(), workOrder.getWorkOrderNo());
+            log.info("鍥芥爣骞冲彴:{},璁惧缂栫爜:{},宸ュ崟鍙�:{}", gbDevices.get(0).getDeviceId(), workOrder.getSerialNumber(), workOrder.getWorkOrderNo());
             frameImg = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), workOrder.getSerialNumber(), workOrder.getWorkOrderNo());
         } catch (Exception e) {
             e.printStackTrace();
@@ -501,11 +515,12 @@
             workOrderCheckImgMapper.insert(img);
         }
     }
+
     @Override
     public List<WorkOrderYwConditionRecordVO> selectYwConditionByYwId(String workOrderNo) {
         List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(workOrderNo);
         ywConditionList.stream().forEach(item -> {
-            if(item.getUserId().equals(1)){
+            if (item.getUserId().equals(1)) {
                 item.setUnitName("绠$悊鍛�");
             }
             if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) {
@@ -583,11 +598,11 @@
     @Override
     public Result page(WorkOrderQuery query) {
         IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
-        if(query.getUnitId()==null) {
+        if (query.getUnitId() == null) {
             query.setUnitId(SecurityUtils.getUnitId());
         }
-        if(query.getStart()!=null) query.setStart(DateUtils.getDayStart(query.getStart()));
-        if(query.getEnd()!=null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
+        if (query.getStart() != null) query.setStart(DateUtils.getDayStart(query.getStart()));
+        if (query.getEnd() != null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
         baseMapper.page(page, query);
         if (!CollectionUtils.isEmpty(page.getRecords())) {
             page.getRecords().stream().forEach(item -> {
@@ -616,8 +631,8 @@
     @Override
     public Result distributePage(DistributeWorkOrderQuery query) {
         IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
-        if(query.getStart()!=null) query.setStart(DateUtils.getDayStart(query.getStart()));
-        if(query.getEnd()!=null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
+        if (query.getStart() != null) query.setStart(DateUtils.getDayStart(query.getStart()));
+        if (query.getEnd() != null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
         baseMapper.distributePage(page, query);
         return Result.ok().data(page).total(page.getTotal());
     }
@@ -845,11 +860,11 @@
     @Override
     public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception {
         String url = String.format(this.rtspServer + "/api/play/start/img/%s/%s", deviceId, channelId);
-        log.info("璁块棶璺緞{}",url);
+        log.info("璁块棶璺緞{}", url);
         String result = HttpUtils.sendGet(url);
         log.info("鎷垮埌鍙栨祦鍥剧墖鍝嶅簲缁撴灉锛�" + result);
         WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
-        if(wvpResult.getCode() == 0) {
+        if (wvpResult.getCode() == 0) {
             Object imgUrl = (Object) wvpResult.getData();
             imgUrl = Objects.isNull(imgUrl) ? "" : imgUrl;
             log.info("鎷垮埌鍙栨祦鍥剧墖锛�" + imgUrl);
@@ -906,7 +921,7 @@
     }
 
     @Override
-    public void saveFrameImgByDevice (String deviceId, String channelId, String workOrderNo){
+    public void saveFrameImgByDevice(String deviceId, String channelId, String workOrderNo) {
         String url = String.format(this.rtspServer + "/api/play/start/%s/%s", deviceId, channelId);
         String result = HttpUtils.sendGet(url);
         WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
@@ -967,13 +982,13 @@
     }
 
     @Override
-    public List<DeviceInfoVO> hasErrorWorkOrderList (Date start, Date end){
+    public List<DeviceInfoVO> hasErrorWorkOrderList(Date start, Date end) {
         List<DeviceInfoVO> list = baseMapper.hasErrorWorkOrderList(start, end);
         return list;
     }
 
     @Override
-    public void updateImgById (Integer workOrderId, String imgPath){
+    public void updateImgById(Integer workOrderId, String imgPath) {
         new LambdaUpdateChainWrapper<>(baseMapper)
                 .eq(WorkOrder::getId, workOrderId)
                 .set(WorkOrder::getYwCheckResult, imgPath)
@@ -981,7 +996,7 @@
     }
 
     @Override
-    public Result processImg (String workOrderNo){
+    public Result processImg(String workOrderNo) {
         WorkOrder workOrder = new LambdaQueryChainWrapper<>(baseMapper)
                 .eq(WorkOrder::getWorkOrderNo, workOrderNo)
                 .one();
@@ -1022,7 +1037,7 @@
     }
 
     @Override
-    public Result detailByNo (String workOrderNo){
+    public Result detailByNo(String workOrderNo) {
         WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo);
         // 鏄惁鎶ュ
         boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper)
@@ -1044,8 +1059,8 @@
     }
 
     @Override
-    public List<WorkOrderVO> export (WorkOrderExportQuery query){
-        if(query.getUnitId()==null) {
+    public List<WorkOrderVO> export(WorkOrderExportQuery query) {
+        if (query.getUnitId() == null) {
             query.setUnitId(SecurityUtils.getUnitId());
         }
         if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00");
@@ -1055,107 +1070,13 @@
     }
 
     /**
-     * 宸ュ崟鐧藉悕鍗曞垪琛�
-     *
-     * @param query 鏌ヨ
-     * @return {@link List }<{@link WorkOrderWhite }>
-     * @author
-     */
-    @Override
-    public Result selectWorkOrderWhiteList(WorkOrderWhiteQuery query) {
-        IPage<WorkOrderWhite> page = PageUtil.getPage(query, WorkOrderWhite.class);
-        workOrderWhiteMapper.page(page, query);
-        List<WorkOrderWhite> records = page.getRecords();
-        records.forEach(white-> {
-            List<String> errorTextList = new ArrayList<>();
-            List<String> errorTypeList = JSONArray.parseArray(white.getErrorType(), String.class);
-            errorTypeList.forEach(error->{
-                String errorText = ErrorType.getDescriptionByValue(error);
-                errorTextList.add(errorText);
-            });
-            white.setErrorType(String.join(",", errorTextList));
-        });
-        return Result.ok().data(records).total(page.getTotal());
-    }
-
-    /**
-     * 娣诲姞宸ュ崟鐧藉悕鍗�
-     *
-     * @param workOrderWhite 鐧借壊宸ュ崟
-     * @return {@link Result }
-     * @author
-     */
-    @Override
-    public Result addWorkOrderWhite(WorkOrderWhite workOrderWhite) {
-        // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄨ鐧藉悕鍗�
-        WorkOrderWhite flag = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber());
-        if (flag != null) {
-            return Result.error("璇ヨ澶囧凡瀛樺湪鐧藉悕鍗�");
-        } else {
-            List<String> errorTypeList = workOrderWhite.getErrorTypeList();
-            workOrderWhite.setErrorType(JSONArray.toJSONString(errorTypeList));
-            workOrderWhite.setCreateBy(SecurityUtils.getUsername());
-            workOrderWhiteMapper.insert(workOrderWhite);
-            return Result.ok();
-        }
-    }
-    /**
-     * 淇敼宸ュ崟鐧藉悕鍗�
-     *
-     * @param workOrderWhite 鐧借壊宸ュ崟
-     * @return {@link Result }
-     * @author
-     */
-    @Override
-    public Result updateWorkOrderWhite(WorkOrderWhite workOrderWhite) {
-        WorkOrderWhite white = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber());
-        workOrderWhite.setId(white.getId());
-        List<String> errorTypeList = workOrderWhite.getErrorTypeList();
-        workOrderWhite.setErrorType(JSONArray.toJSONString(errorTypeList));
-        workOrderWhiteMapper.updateById(workOrderWhite);
-        return Result.ok();
-    }
-    /**
-     * 鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�
-     *
-     * @param ids ids
-     * @author
-     */
-    @Override
-    public Result batchDeleteWorkOrderWhite(List<String> ids) {
-        workOrderWhiteMapper.batchDelete(ids);
-        return Result.ok();
-    }
-
-    /**
-     * 鎵归噺瀵煎叆鐧藉悕鍗�
-     *
-     * @param dataList 鏁版嵁鍒楄〃
-     * @author
-     */
-    @Override
-    public void batchImportWhite(List<PointExport> dataList) {
-//        // 鑾峰緱鎵�鏈夐渶瑕佹柊澧炵殑鐧藉悕鍗曞璞�
-//        List<WorkOrderWhite> whitelist = dataList.stream().map(pointExport ->
-//                        new WorkOrderWhite(pointExport.getSerialNumber(), pointExport.getPointName(), SecurityUtils.getUsername()))
-//                .collect(Collectors.toList());
-//        // 鑾峰緱鎵�鏈夊凡瀛樺湪鐨勭櫧鍚嶅崟璁惧缂栫爜
-//        List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
-//        // 绛涢�夊嚭鏂板銆佷慨鏀圭殑鐧藉悕鍗曞璞�
-//        List<WorkOrderWhite> updateWhiteList = whitelist.stream().filter(white -> serialNumbers.contains(white.getSerialNumber())).collect(Collectors.toList());
-//        List<WorkOrderWhite> insertWhiteList = whitelist.stream().filter(white ->!serialNumbers.contains(white.getSerialNumber())).collect(Collectors.toList());
-//        // 鏂板/淇敼鐧藉悕鍗曡澶囪褰�
-//        updateWhiteList.stream().forEach(white -> workOrderWhiteMapper.updateBySerialNumber(white));
-//        insertWhiteList.stream().forEach(white -> workOrderWhiteMapper.insert(white));
-    }
-
-    /**
      * 妫�娴嬪伐鍗曟寜閽�
+     *
      * @param workOrderNo
      * @return
      */
     @Override
-    public Result checkImage(String workOrderNo,String serialNumber) {
+    public Result checkImage(String workOrderNo, String serialNumber) {
         // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹�
         List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
                 .orderByDesc(DeviceInfo::getUpdateTime)
@@ -1163,7 +1084,7 @@
                 .list();
         if (!CollectionUtils.isEmpty(gbDevices)) {
             try {
-                String imgUrl = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), serialNumber,workOrderNo);
+                String imgUrl = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), serialNumber, workOrderNo);
                 if (StringUtils.hasText(imgUrl)) {
                     WorkOrderCheckImg img = new WorkOrderCheckImg();
                     img.setWorkOrderNo(workOrderNo);
@@ -1182,7 +1103,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result batchDeleteWorkOrder(List<String> workOrderNos) {
-        if(!CollectionUtils.isEmpty(workOrderNos)) {
+        if (!CollectionUtils.isEmpty(workOrderNos)) {
             //鍒犻櫎宸ュ崟瀹℃牳璁板綍
             workOrderAuditingRecordMapper.delete(new QueryWrapper<WorkOrderAuditingRecord>().in("work_order_no", workOrderNos));
             //鍒犻櫎宸ュ崟鍥剧墖璁板綍
@@ -1248,12 +1169,22 @@
         return Result.ok().data(results);
     }
 
-    @Override
-    public Result selectWorkOrderWhiteDetail(Integer id) {
-        WorkOrderWhite workOrderWhite = workOrderWhiteMapper.getById(id);
-        List<String> errorList = JSONArray.parseArray(workOrderWhite.getErrorType(), String.class);
-        workOrderWhite.setErrorTypeList(errorList);
-        return Result.ok().data(workOrderWhite);
+    //鐧藉悕鍗曟牎楠�
+    private List<WorkOrder> checkWhite(List<WorkOrder> workOrderList) {
+        // 鏌ヨ鍑虹櫧鍚嶅崟鍒楄〃
+        Map<String, WorkOrderWhite> whiteMap = workOrderWhiteMapper.selectList().stream().collect(Collectors.toMap(WorkOrderWhite::getSerialNumber, Function.identity()));
+        workOrderList = workOrderList.stream()
+                .filter(workOrder -> {
+                    List<String> errorTypeList = workOrder.getErrorTypeList();
+                    WorkOrderWhite white = whiteMap.get(workOrder.getSerialNumber());
+                    if (white != null) {
+                        List<String> whiteErrorListSet = Arrays.asList(white.getErrorType().split(","));
+                        errorTypeList.removeIf(whiteErrorListSet::contains);
+                    }
+                    return !errorTypeList.isEmpty(); // 鍙繚鐣� errorTypeList 闈炵┖鐨� WorkOrder
+                })
+                .collect(Collectors.toList());
+        return workOrderList;
     }
 
 
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
index 8728731..bf9cd3d 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
@@ -1,17 +1,34 @@
 package com.ycl.platform.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.fastjson2.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.dataListener.CurrencyDataListener;
 import com.ycl.platform.domain.entity.WorkOrder;
+import com.ycl.platform.domain.entity.WorkOrderWhite;
+import com.ycl.platform.domain.entity.YwPoint;
 import com.ycl.platform.domain.entity.YwThreshold;
+import com.ycl.platform.domain.excel.ErrorExport;
 import com.ycl.platform.domain.excel.PointExport;
+import com.ycl.platform.domain.excel.WorkOrderWhiteExport;
+import com.ycl.platform.domain.query.WorkOrderWhiteQuery;
 import com.ycl.platform.domain.result.HK.FaceDeviceInspectionResult;
 import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult;
 import com.ycl.platform.domain.vo.DynamicColumnVO;
+import com.ycl.platform.mapper.WorkOrderWhiteMapper;
 import com.ycl.platform.mapper.YwThresholdMapper;
 import com.ycl.platform.service.IYwThresholdService;
 import com.ycl.platform.service.WorkOrderService;
 import com.ycl.system.Result;
+import com.ycl.system.page.PageUtil;
+import com.ycl.utils.SecurityUtils;
+import com.ycl.utils.StringUtils;
 import com.ycl.utils.ip.PingUtil;
 import com.ycl.utils.poi.EasyExcelImportUtils;
 import com.ycl.utils.uuid.IdUtils;
@@ -21,14 +38,20 @@
 import enumeration.ErrorType;
 import enumeration.general.BusinessTypeEnum;
 import enumeration.general.WorkOrderStatusEnum;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 import utils.DateUtils;
 
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.*;
+import java.util.concurrent.ExecutionException;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -47,6 +70,8 @@
     @Autowired
     private WorkOrderService workOrderService;
 
+    @Autowired
+    private WorkOrderWhiteMapper workOrderWhiteMapper;
     /**
      * 鏌ヨ杩愮淮闃堝��
      *
@@ -151,21 +176,6 @@
         // 娓呮櫚搴﹀紓甯告娴�
 
         // 浜害寮傚父鏁呴殰妫�娴�
-    }
-
-    @Override
-    public Result importData(MultipartFile file) {
-        List<Map<String, String>> list = EasyExcelImportUtils.makeData(file);
-        List<PointExport> dataList = new ArrayList<>();
-        for (Map<String, String> map : list) {
-            PointExport pointExport = new PointExport();
-            pointExport.setPointName(map.get(PointHeaderConstant.Point_Name));
-            pointExport.setSerialNumber(map.get(PointHeaderConstant.Serial_Number));
-            dataList.add(pointExport);
-        }
-        workOrderService.batchImportWhite(dataList);
-        return Result.ok("瀵煎叆鎴愬姛");
-
     }
 
     /**
@@ -305,6 +315,264 @@
     }
 
     /**
+     * 鐧藉悕鍗曡鎯�
+     * @param id
+     * @return
+     */
+    @Override
+    public Result selectWorkOrderWhiteDetail(Integer id) {
+        WorkOrderWhite workOrderWhite = workOrderWhiteMapper.getById(id);
+        List<String> errorTypeList = Arrays.asList(workOrderWhite.getErrorType().split(","));
+        workOrderWhite.setErrorTypeList(errorTypeList);
+        return Result.ok().data(workOrderWhite);
+    }
+    /**
+     * 宸ュ崟鐧藉悕鍗曞垪琛�
+     *
+     * @param query 鏌ヨ
+     * @return {@link List }<{@link WorkOrderWhite }>
+     * @author
+     */
+    @Override
+    public Result selectWorkOrderWhiteList(WorkOrderWhiteQuery query) {
+        IPage<WorkOrderWhite> page = PageUtil.getPage(query, WorkOrderWhite.class);
+        workOrderWhiteMapper.page(page, query);
+        List<WorkOrderWhite> records = page.getRecords();
+        records.forEach(white-> {
+            List<String> errorTextList = new ArrayList<>();
+            List<String> errorTypeList = Arrays.asList(white.getErrorType().split(","));
+            errorTypeList.forEach(error->{
+                String errorText = ErrorType.getDescriptionByValue(error);
+                errorTextList.add(errorText);
+            });
+            white.setErrorType(String.join(",", errorTextList));
+        });
+        return Result.ok().data(records).total(page.getTotal());
+    }
+
+    /**
+     * 娣诲姞宸ュ崟鐧藉悕鍗�
+     *
+     * @param workOrderWhite 鐧借壊宸ュ崟
+     * @return {@link Result }
+     * @author
+     */
+    @Override
+    public Result addWorkOrderWhite(WorkOrderWhite workOrderWhite) {
+        // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄨ鐧藉悕鍗�
+        WorkOrderWhite flag = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber());
+        if (flag != null) {
+            return Result.error("璇ヨ澶囧凡瀛樺湪鐧藉悕鍗�");
+        } else {
+            List<String> errorTypeList = workOrderWhite.getErrorTypeList();
+            workOrderWhite.setErrorType(String.join(",",errorTypeList));
+            workOrderWhite.setCreateBy(SecurityUtils.getUsername());
+            workOrderWhiteMapper.insert(workOrderWhite);
+            return Result.ok();
+        }
+    }
+    /**
+     * 淇敼宸ュ崟鐧藉悕鍗�
+     *
+     * @param workOrderWhite 鐧借壊宸ュ崟
+     * @return {@link Result }
+     * @author
+     */
+    @Override
+    public Result updateWorkOrderWhite(WorkOrderWhite workOrderWhite) {
+        WorkOrderWhite white = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber());
+        workOrderWhite.setId(white.getId());
+        List<String> errorTypeList = workOrderWhite.getErrorTypeList();
+        workOrderWhite.setErrorType(String.join(",",errorTypeList));
+        workOrderWhiteMapper.updateById(workOrderWhite);
+        return Result.ok();
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�
+     *
+     * @param ids ids
+     * @author
+     */
+    @Override
+    public Result batchDeleteWorkOrderWhite(List<String> ids) {
+        workOrderWhiteMapper.batchDelete(ids);
+        return Result.ok();
+    }
+    /**
+     * 鐧藉悕鍗曞鍑�
+     * @param response
+     * @throws IOException
+     */
+    @Override
+    public void whiteExport(HttpServletResponse response) throws IOException {
+        //鐧藉悕鍗曟暟鎹�
+        List<WorkOrderWhiteExport> data = workOrderWhiteMapper.whiteExport();
+        data.forEach(white-> {
+            List<String> errorTextList = new ArrayList<>();
+            List<String> errorTypeList = Arrays.asList(white.getErrorType().split(","));
+            errorTypeList.forEach(error->{
+                String errorText = ErrorType.getDescriptionByValue(error);
+                errorTextList.add(errorText);
+            });
+            white.setErrorType(String.join(",", errorTextList));
+        });
+        //鏁呴殰绫诲瀷鏁版嵁
+        List<String> errorTextList = ErrorType.getDescriptionList();
+        List<ErrorExport> errorExports = new ArrayList<>();
+        errorTextList.forEach(error -> {
+            ErrorExport errorExport = new ErrorExport();
+            errorExport.setError(error);
+            errorExports.add(errorExport);
+        });
+        ExcelWriter excelWriter = null;
+        try(OutputStream outputStream = response.getOutputStream()) {
+            excelWriter = EasyExcel.write(outputStream).build();
+
+            WriteSheet whiteSheet = EasyExcel.writerSheet(0, "宸ュ崟鐧藉悕鍗曟竻鍗�").head(WorkOrderWhiteExport.class).build();
+            WriteSheet errorSheet = EasyExcel.writerSheet(1, "鏁呴殰绫诲瀷").head(ErrorExport.class).build();
+
+            excelWriter.write(data, whiteSheet);
+            excelWriter.write(errorExports, errorSheet);
+            excelWriter.finish();
+            outputStream.flush();
+        }catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                excelWriter.finish();
+                response.getOutputStream().close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    /**
+     * 瀵煎叆宸ュ崟鐧藉悕鍗�
+     * @param file
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result importWhite(MultipartFile file) throws IOException{
+//        Consumer<List<WorkOrderWhiteExport>> consumer = (dataList) -> {
+//            try {
+//                this.updateWhite(dataList);
+//            } catch (ExecutionException e) {
+//                e.printStackTrace();
+//            } catch (InterruptedException e) {
+//                e.printStackTrace();
+//            }
+//        };
+//        EasyExcel.read(file.getInputStream(), WorkOrderWhiteExport.class, new CurrencyDataListener(consumer))
+//                .sheet()
+//                .headRowNumber(1)
+//                .doRead();
+        List<WorkOrderWhiteExport> dataList = new ArrayList<>();
+        EasyExcel.read(file.getInputStream(), WorkOrderWhiteExport.class, new AnalysisEventListener<WorkOrderWhiteExport>() {
+            @Override
+            public void invoke(WorkOrderWhiteExport excel, AnalysisContext analysisContext) {
+                // 灏嗚鍙栧埌鐨勬瘡涓�琛屽瓨鍏eportDetails闆嗗悎涓�
+                dataList.add(excel);
+            }
+            @Override
+            public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
+        }).sheet().doRead();
+
+        if (CollectionUtils.isEmpty(dataList)) {
+            throw new RuntimeException("瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+        }
+        boolean duplic = checkDuplic(dataList);
+        if(duplic) throw new RuntimeException("瀛樺湪閲嶅鍥芥爣璁惧");
+        //宸插瓨鍦ㄧ殑鐧藉悕鍗�
+        Map<String, WorkOrderWhite> whiteMap = workOrderWhiteMapper.selectList().stream().collect(Collectors.toMap(WorkOrderWhite::getSerialNumber, Function.identity()));
+        List<WorkOrderWhite> addList = new ArrayList<>();
+        dataList.stream().forEach(item -> {
+            WorkOrderWhite white = new WorkOrderWhite();
+            //鍥芥爣鐮�
+            white.setSerialNumber(item.getSerialNumber());
+            //澶囨敞
+            white.setRemark(item.getRemark());
+            String errorType = item.getErrorType();
+            if(StringUtils.isEmpty(errorType)){
+                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滀笉鑳戒负绌�");
+            }
+            try {
+                List<String> errorDataList = new ArrayList<>();
+                List<String> errorExcelList = Arrays.asList(item.getErrorType().split(","));
+                errorExcelList.forEach(desc->{
+                    //鎶婁腑鏂囪浆鎹负鏁版嵁搴撳瓨鍌ㄦ牸寮�
+                    String errorText = ErrorType.getValueByDescription(desc);
+                    //鎵句笉鍒版姏鍑哄紓甯�
+                    if(errorText == null) throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+                    errorDataList.add(errorText);
+                });
+                white.setErrorType(String.join(",", errorDataList));
+                //濡傛灉宸插瓨鍦ㄨˉ鍏卛d
+                WorkOrderWhite whiteExsit = whiteMap.get(white.getSerialNumber());
+                if(whiteExsit!=null) white.setId(whiteExsit.getId());
+                addList.add(white);
+            } catch (Exception e) {
+                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+            }
+        });
+        if(!CollectionUtils.isEmpty(addList)) {
+            workOrderWhiteMapper.deleteAll();
+            workOrderWhiteMapper.insertBatch(addList);
+        }
+        return Result.ok();
+    }
+    /**
+     * 淇敼鐧藉悕鍗�
+     *
+     * @param dataList
+     * @param unitId
+     */
+    public void updateWhite(List<WorkOrderWhiteExport> dataList) throws ExecutionException, InterruptedException {
+        if (CollectionUtils.isEmpty(dataList)) {
+            throw new RuntimeException("瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+        }
+        //宸插瓨鍦ㄧ殑鐧藉悕鍗�
+        List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
+        List<WorkOrderWhite> addList = new ArrayList<>();
+        List<WorkOrderWhite> updateList = new ArrayList<>();
+        dataList.stream().forEach(item -> {
+            WorkOrderWhite white = new WorkOrderWhite();
+            //鍥芥爣鐮�
+            white.setSerialNumber(item.getSerialNumber());
+            //澶囨敞
+            white.setRemark(item.getRemark());
+            String errorType = item.getErrorType();
+            if(StringUtils.isEmpty(errorType)){
+                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滀笉鑳戒负绌�");
+            }
+            try {
+                List<String> errorDataList = new ArrayList<>();
+                List<String> errorExcelList = Arrays.asList(item.getErrorType().split(","));
+                errorExcelList.forEach(desc->{
+                    //鎶婁腑鏂囪浆鎹负鏁版嵁搴撳瓨鍌ㄦ牸寮�
+                    String errorText = ErrorType.getValueByDescription(desc);
+                    //鎵句笉鍒版姏鍑哄紓甯�
+                    if(errorText == null) throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+                    errorDataList.add(errorText);
+                });
+                white.setErrorType(String.join(",", errorDataList));
+                if(!CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(white.getSerialNumber())){
+                    updateList.add(white);
+                }else {
+                    addList.add(white);
+                }
+            } catch (Exception e) {
+                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+            }
+        });
+        if(!CollectionUtils.isEmpty(addList)) workOrderWhiteMapper.insertBatch(addList);
+        if(!CollectionUtils.isEmpty(updateList)) workOrderWhiteMapper.updateBatch(updateList);
+    }
+
+    /**
      * 妫�鏌ラ槇鍊�
      *
      * @param key 鏌愰槇鍊兼爣璇�
@@ -373,4 +641,15 @@
         }
     }
 
+    public static boolean checkDuplic(List<WorkOrderWhiteExport> dataList) {
+        Set<String> serialNumbers = new HashSet<>();
+
+        for (WorkOrderWhiteExport white : dataList) {
+            String serialNumber = white.getSerialNumber();
+            if (!serialNumbers.add(serialNumber)) {
+                return true;
+            }
+        }
+        return false;
+    }
 }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderWhiteMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderWhiteMapper.xml
index 8220c64..cc93123 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderWhiteMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderWhiteMapper.xml
@@ -32,7 +32,7 @@
         left join t_monitor m on wow.serial_number = m.serial_number
         <where>
             <if test="query.keyword != null  and query.keyword != ''">
-            and (serial_number like concat('%',#{query.keyword},'%') or point_name like concat('%', #{query.keyword}, '%'))
+            and (wow.serial_number like concat('%',#{query.keyword},'%') or m.name like concat('%', #{query.keyword}, '%'))
             </if>
         </where>
     </select>
@@ -44,10 +44,18 @@
             wow.id = #{id}
         </where>
     </select>
+
+    <select id="whiteExport" resultType="com.ycl.platform.domain.excel.WorkOrderWhiteExport">
+        select wow.id, wow.serial_number,m.name as pointName, wow.error_type, wow.create_by, wow.remark
+        from t_work_order_white wow
+        left join t_monitor m on wow.serial_number = m.serial_number
+    </select>
+
     <select id="selectBySerialNumber" resultType="com.ycl.platform.domain.entity.WorkOrderWhite">
         <include refid="selectWorkOrderWhiteVo"/>
         where serial_number = #{serialNumber}
     </select>
+
     <select id="selectList" resultType="com.ycl.platform.domain.entity.WorkOrderWhite">
         <include refid="selectWorkOrderWhiteVo"/>
     </select>
@@ -80,4 +88,26 @@
             #{id}
         </foreach>
     </delete>
+
+    <update id="updateBatch">
+        <foreach collection="whiteList" separator=";" item="white">
+            UPDATE t_work_order_white
+            SET
+            <if test="white.errorType != null and white.errorType !=''">
+                error_type = #{white.errorType},
+            </if>
+            remark = #{white.remark}
+            WHERE serial_number = #{white.serialNumber}
+        </foreach>
+    </update>
+
+    <insert id="insertBatch">
+        insert into t_work_order_white (serial_number,error_type,remark) values
+        <foreach item="white" collection="whiteList" separator=",">
+            (#{white.serialNumber},#{white.errorType},#{white.remark})
+        </foreach>
+    </insert>
+    <delete id="deleteAll">
+        delete from t_work_order_white;
+    </delete>
 </mapper>

--
Gitblit v1.8.0