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