From 7185cf3db8eb19d61324a5338ae148ebc5d96660 Mon Sep 17 00:00:00 2001 From: bynt Date: Sun, 23 Apr 2023 10:58:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/baiye/util/FileUtil.java | 49 +++++++++++++- .../java/com/baiye/module/dao/ClueJpa.java | 4 +- .../com/baiye/task/ZipFileSendMailTask.java | 64 +++++++++++++++++++ 3 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/ZipFileSendMailTask.java diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/FileUtil.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/FileUtil.java index be8ef21e..a3967fd2 100644 --- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/FileUtil.java +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/FileUtil.java @@ -24,6 +24,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.BigExcelWriter; import cn.hutool.poi.excel.ExcelUtil; import com.baiye.exception.BadRequestException; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.multipart.MultipartFile; @@ -35,9 +36,7 @@ import java.security.MessageDigest; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.time.Instant; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; /** * File工具类,扩展 hutool 工具包 @@ -372,4 +371,48 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { return file; } + + /** + *

获取指定文件夹下所有文件,不含文件夹

+ * @param dirFilePath 文件夹路径 + * @return + */ + public static List getAllFile(String dirFilePath){ + if(StringUtils.isBlank(dirFilePath)) + return null; + return getAllFile(new File(dirFilePath)); + } + + /** + *

获取指定文件夹下所有文件,不含文件夹

+ * @param dirFile 文件夹 + * @return + */ + public static List getAllFile(File dirFile){ + // 如果文件夹不存在或着不是文件夹,则返回 null + if(Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile()) + return null; + + File[] childrenFiles = dirFile.listFiles(); + if(Objects.isNull(childrenFiles) || childrenFiles.length == 0) + return null; + + List files = new ArrayList<>(); + for(File childFile : childrenFiles) { + + // 如果时文件,直接添加到结果集合 + if(childFile.isFile()) { + files.add(childFile); + }else { + // 如果是文件夹,则将其内部文件添加进结果集合 + List cFiles = getAllFile(childFile); + if(Objects.isNull(cFiles) || cFiles.isEmpty()) continue; + files.addAll(cFiles); + } + + } + + return files; + } + } diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java index 86a14666..73ac5d60 100644 --- a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java @@ -57,7 +57,7 @@ public class ClueJpa { public List getClueList(ClueQueryCriteria clueQueryCriteria, Pageable pageable) { StringBuilder sql = new StringBuilder(); sql.append("select c.id as id,c.name as name,c.nid as nid,c.wx as wx,c.origin as origin,c.collect_time as collectTime,c.address as address,c.record_id as recordId," + - "c.create_time as createTime,c.amount as amount,c.platform as platform,c.tag as tag,c.audio_url as audioUrl,c.cast_info as castInfo,c.is_encryption as isEncryption, cm.remark as remark,cm.member_status as memberStatus,cm.organize_id as organizeId,cm.member_id as memberId," + + "cm.create_time as createTime,c.amount as amount,c.platform as platform,c.tag as tag,c.audio_url as audioUrl,c.cast_info as castInfo,c.is_encryption as isEncryption, cm.remark as remark,cm.member_status as memberStatus,cm.organize_id as organizeId,cm.member_id as memberId," + "cm.optimistic_version as optimisticVersion,cm.source_label as sourceLabel,cm.task_id as taskId,cm.clue_stage as clueStage,cm.clue_call_status as clueCallStatus," + "cm.newest_call_time as newestCallTime ,cm.turnover_amount as turnoverAmount ,cm.clue_type as clueType " + "from tb_clue as c LEFT JOIN tb_clue_middle as cm on c.id = cm.clue_id where 1=1 "); @@ -71,7 +71,7 @@ public class ClueJpa { public List getTalkClueList(ClueQueryCriteria clueQueryCriteria, Pageable pageable) { StringBuilder sql = new StringBuilder(); sql.append("select c.id as id,c.name as name,c.nid as nid,c.wx as wx,c.origin as origin,c.collect_time as collectTime,c.address as address,c.record_id as recordId," + - "c.create_time as createTime,c.amount as amount,c.platform as platform,c.tag as tag,c.audio_url as audioUrl,c.cast_info as castInfo,c.is_encryption as isEncryption, cm.remark as remark,cm.member_status as memberStatus,cm.organize_id as organizeId,cm.member_id as memberId," + + "cm.create_time as createTime,c.amount as amount,c.platform as platform,c.tag as tag,c.audio_url as audioUrl,c.cast_info as castInfo,c.is_encryption as isEncryption, cm.remark as remark,cm.member_status as memberStatus,cm.organize_id as organizeId,cm.member_id as memberId," + "cm.optimistic_version as optimisticVersion,cm.source_label as sourceLabel,cm.task_id as taskId,cm.clue_stage as clueStage,cm.clue_call_status as clueCallStatus," + "cm.newest_call_time as newestCallTime ,cm.turnover_amount as turnoverAmount ,cm.clue_type as clueType " + "from tb_clue as c LEFT JOIN tb_clue_talk as cm on c.id = cm.clue_id where 1=1 "); diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/ZipFileSendMailTask.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/ZipFileSendMailTask.java new file mode 100644 index 00000000..d99c3603 --- /dev/null +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/ZipFileSendMailTask.java @@ -0,0 +1,64 @@ +package com.baiye.task; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.StrPool; +import cn.hutool.core.util.ObjectUtil; +import com.baiye.config.properties.DeliveryProperties; +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.constant.FileConstant; +import com.baiye.util.*; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.io.File; +import java.util.concurrent.TimeUnit; + +/** + * @author Enzo + * @date : 2023/4/22 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ZipFileSendMailTask { + + private final DeliveryProperties deliveryProperties; + + private final RedisUtils redisUtils; + + /** + * 凌晨一点发送邮件 + */ + @SneakyThrows + @Scheduled(cron = "0 0 1 * * ? ") + @Transactional(rollbackFor = Exception.class) + public void receiveMail() { + String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN); + + log.info(""); + for (File file : FileUtil.getAllFile("/home/mail")) { + Integer num = (Integer) redisUtils.get(CacheKey.DMP_MANUAL_ID.concat(format)); + Integer batch = ObjectUtil.isNull(num) ? DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER; + String taskImeiName = FileConstant.MM.concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch)); + // 保存文件 + String zipPath = file.getPath().replace(".csv", FileConstant.ZIP_FILE_SUB_NAME); + + // 设置压缩文件 + CompressUtil.decryptionCompression + (zipPath, file.getPath(), deliveryProperties.getZipPassword()); + // 发送邮件 + MailUtil.sendMail(deliveryProperties.getEmailAddress(), + deliveryProperties.getEmailPassword(), deliveryProperties.getToEmailAddress(), zipPath, taskImeiName); + // 保存批次号 + redisUtils.set(CacheKey.DMP_MANUAL_ID.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); + FileUtil.del(file); + FileUtil.del(zipPath); + } + + } +}