From 059b188fd49c5127b75a38408d12e26d2363fbab Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期二, 18 三月 2025 19:07:27 +0800
Subject: [PATCH] cans问题修复1.0

---
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java |  176 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 105 insertions(+), 71 deletions(-)

diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
index 591f9c0..ad70719 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
@@ -1,23 +1,26 @@
 package com.ruoyi.process.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
 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.util.FileUtils;
 import com.alibaba.excel.util.ListUtils;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.process.dto.ProcessMethodSearchNewDto;
+import com.ruoyi.process.dto.ProcessMethodSearchNewExcel;
+import com.ruoyi.process.dto.ProcessMethodSearchNewImport;
 import com.ruoyi.process.mapper.ProcessMethodSearchNewMapper;
 import com.ruoyi.process.pojo.ProcessMethodSearchNew;
 import com.ruoyi.process.service.ProcessMethodSearchNewService;
 import com.ruoyi.process.utils.UserUtils;
+import org.apache.poi.hslf.util.LocaleDateFormat;
 import org.springframework.beans.BeanUtils;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
@@ -30,10 +33,13 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -45,6 +51,7 @@
 @Service
 public class ProcessMethodSearchNewServiceImpl extends ServiceImpl<ProcessMethodSearchNewMapper, ProcessMethodSearchNew> implements ProcessMethodSearchNewService {
 
+    private final Set<String> importedFileHashes = ConcurrentHashMap.newKeySet();
     /**
      * 鏂板鏍囧噯鏌ユ柊
      *
@@ -87,7 +94,16 @@
         String endDate = processMethodSearchNew.getEndDate();
         processMethodSearchNew.setBeginDate(null);
         processMethodSearchNew.setEndDate(null);
-        return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew), beginDate, endDate);
+        // 鍘嗗彶璁板綍鐨勮瘽 灏辫鍔犳椂闂�
+        if(!processMethodSearchNew.getIsThisYear()) {
+            LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now().getYear(), 1, 1, 0, 0, 0);
+            endDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(localDateTime);
+        }
+        ProcessMethodSearchNew processMethodSearchNew1 = new ProcessMethodSearchNew();
+        BeanUtils.copyProperties(processMethodSearchNew, processMethodSearchNew1);
+
+
+        return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew1), beginDate, endDate);
     }
 
     /**
@@ -139,20 +155,23 @@
                     methodSearchNew.setRemarkString("浣滃簾");
                 }
             }
-
-            switch (methodSearchNew.getSearchNewSource()) {
-                case 0:
-                    methodSearchNew.setStandardNet("鈭�");
-                    break;
-                case 1:
-                    methodSearchNew.setInformationOffices("鈭�");
-                    break;
-                case 2:
-                    methodSearchNew.setStandardBookstore("鈭�");
-                    break;
-                case 3:
-                    methodSearchNew.setOther("鈭�");
-                    break;
+            if(Objects.nonNull(methodSearchNew.getSearchNewSource())) {
+                switch (methodSearchNew.getSearchNewSource()) {
+                    case 0:
+                        methodSearchNew.setStandardNet("鈭�");
+                        break;
+                    case 1:
+                        methodSearchNew.setInformationOffices("鈭�");
+                        break;
+                    case 2:
+                        methodSearchNew.setStandardBookstore("鈭�");
+                        break;
+                    case 3:
+                        methodSearchNew.setOther("鈭�");
+                        break;
+                    default:
+                        break;
+                }
             }
             methodSearchNew.setIndex(index);
             index++;
@@ -236,63 +255,78 @@
      * @return
      */
     @Override
-    public boolean importMethodSearchNew(MultipartFile file) {
-
-        List<ProcessMethodSearchNewDto> searchNewDtoList = new ArrayList<>();
-
+    public void importMethodSearchNew(MultipartFile file) {
         try {
-            // excel瑙f瀽
-            EasyExcel.read(file.getInputStream(), ProcessMethodSearchNewDto.class, new AnalysisEventListener<ProcessMethodSearchNewDto>() {
-                @Override
-                public void invoke(ProcessMethodSearchNewDto searchNewDto, AnalysisContext analysisContext) {
-                    searchNewDtoList.add(searchNewDto);
-                }
+            // 1. 璁$畻鏂囦欢鐨� MD5 鍝堝笇鍊�
+            String fileHash = calculateFileHash(file);
 
-                @Override
-                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+            // 2. 妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鏂囦欢
+            if (!importedFileHashes.add(fileHash)) {
+                return; // 宸插瓨鍦紝鐩存帴璺宠繃
+            }
+            // 3. 璇诲彇骞跺鐞嗘枃浠�
+            try (InputStream inputStream = file.getInputStream()) {
+                EasyExcel.read(inputStream, ProcessMethodSearchNewExcel.class, new ProcessMethodSearchNewImport(this))
+                        .sheet()
+                        .doRead();
+            }
 
-                }
-            }).sheet().doRead();
-            // 鏍煎紡鍖栨煡鏂板璞�
-            List<ProcessMethodSearchNew> collect = searchNewDtoList.stream().map(searchNewDto -> {
-                ProcessMethodSearchNew searchNew = new ProcessMethodSearchNew();
-                BeanUtils.copyProperties(searchNewDto, searchNew);
-                // 鏄惁鏄洿鏂�
-                if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
-                    if (searchNewDto.getIsNewStandardString().equals("鏄�")) {
-                        searchNew.setIsNewStandard(1);
-                    } else {
-                        searchNew.setIsNewStandard(0);
-                    }
-                }
-                // 鏌ユ柊璁板綍
-                if (StringUtils.isNotBlank(searchNewDto.getStandardNet())) {
-                    searchNew.setSearchNewSource(0);
-                } else if (StringUtils.isNotBlank(searchNewDto.getInformationOffices())) {
-                    searchNew.setSearchNewSource(1);
-                } else if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
-                    searchNew.setSearchNewSource(2);
-                } else if (StringUtils.isNotBlank(searchNewDto.getOther())) {
-                    searchNew.setSearchNewSource(3);
-                }
-
-                // 澶囨敞
-                if (StringUtils.isNotBlank(searchNewDto.getRemarkString())) {
-                    if (searchNewDto.getRemarkString().equals("鏇挎崲")) {
-                        searchNew.setRemark(1);
-                    } else if (searchNewDto.getRemarkString().equals("浣滃簾")) {
-                        searchNew.setRemark(0);
-                    }
-                }
-
-                return searchNew;
-            }).collect(Collectors.toList());
-            this.saveBatch(collect);
-
-        } catch (IOException e) {
+            // 4. 璁板綍鏂囦欢鍝堝笇鍊硷紙鏍囪涓哄凡瀵煎叆锛�
+            importedFileHashes.add(fileHash);
+        } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        return true;
+    }
+
+    public void save (List<ProcessMethodSearchNewExcel> list) {
+        if(CollectionUtils.isNotEmpty(list)) {
+            for (ProcessMethodSearchNewExcel a : list) {
+                if(NumberUtil.isNumber(a.getIndex())) {
+                    ProcessMethodSearchNew processMethodSearchNew = new ProcessMethodSearchNew();
+                    BeanUtils.copyProperties(a, processMethodSearchNew);
+                    processMethodSearchNew.setIsNewStandard(a.getIsNewStandardString() == "鏄�" ? 1 : 0); // 鏄惁鏄柊鏍囧噯
+                    // 鏌ユ柊璁板綍 0 鏍囧噯缃�  1 濮旀墭鎯呮姤 2 鏍囧噯鏁�  3 鍏朵粬
+                    if(StringUtils.isNotEmpty(a.getStandardNet())) {
+                        processMethodSearchNew.setSearchNewSource(0);
+                    } else if(StringUtils.isNotEmpty(a.getInformationOffices())) {
+                        processMethodSearchNew.setSearchNewSource(1);
+                    } else if(StringUtils.isNotEmpty(a.getStandardBookstore())) {
+                        processMethodSearchNew.setSearchNewSource(2);
+                    } else if(StringUtils.isNotEmpty(a.getOther())) {
+                        processMethodSearchNew.setSearchNewSource(3);
+                    }
+                    // 缂栧埗浜�
+                    baseMapper.insert(processMethodSearchNew);
+                }
+            }
+        }
+    }
+
+    // 璁$畻鏂囦欢鐨� MD5 鍝堝笇鍊�
+    private String calculateFileHash(MultipartFile file) throws Exception {
+        try (InputStream is = file.getInputStream()) {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] buffer = new byte[8192];
+            int bytesRead;
+            while ((bytesRead = is.read(buffer)) != -1) {
+                md.update(buffer, 0, bytesRead);
+            }
+            byte[] hashBytes = md.digest();
+            // 灏嗗瓧鑺傛暟缁勮浆鎹负鍗佸叚杩涘埗瀛楃涓�
+            return bytesToHex(hashBytes);
+        }
+    }
+
+    private static String bytesToHex(byte[] bytes) {
+        StringBuilder hexString = new StringBuilder();
+        for (byte b : bytes) {
+            String hex = Integer.toHexString(0xff & b);
+            if (hex.length() == 1) {
+                hexString.append('0');
+            }
+            hexString.append(hex);
+        }
+        return hexString.toString();
     }
 }
 

--
Gitblit v1.9.3