|
|
|
@ -1,16 +1,19 @@
|
|
|
|
|
package me.zhengjie.modules.mailtask.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
|
|
import cn.hutool.core.util.ZipUtil;
|
|
|
|
|
import cn.hutool.poi.excel.ExcelUtil;
|
|
|
|
|
import cn.hutool.system.OsInfo;
|
|
|
|
|
import cn.hutool.system.SystemUtil;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import me.zhengjie.exception.BadRequestException;
|
|
|
|
|
import me.zhengjie.modules.mailtask.service.MailTaskService;
|
|
|
|
|
import me.zhengjie.modules.tmpfilerecord.domain.TempFileRecord;
|
|
|
|
|
import me.zhengjie.modules.tmpfilerecord.service.TempFileRecordService;
|
|
|
|
|
import me.zhengjie.modules.tmpfilerecord.service.dto.TempFileRecordDto;
|
|
|
|
|
import me.zhengjie.utils.FileUtil;
|
|
|
|
|
import me.zhengjie.utils.GenUtil;
|
|
|
|
|
import me.zhengjie.utils.StringUtils;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
@ -22,7 +25,9 @@ import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
|
import java.nio.charset.Charset;
|
|
|
|
|
import java.nio.file.FileSystem;
|
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
@ -41,6 +46,17 @@ public class MailTaskServiceImpl implements MailTaskService {
|
|
|
|
|
*/
|
|
|
|
|
private static final String FILE_SPLIT = ",";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 完成建立的文件状态码
|
|
|
|
|
*/
|
|
|
|
|
private static final int FINISH_BUILD_FILE_STATUS_CODE = 0;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 成功进行下载的文件状态码
|
|
|
|
|
*/
|
|
|
|
|
private static final int FINISH_DOWNLOAD_FILE_STATUS_CODE = 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 远程服务器地址
|
|
|
|
|
*/
|
|
|
|
@ -74,9 +90,10 @@ public class MailTaskServiceImpl implements MailTaskService {
|
|
|
|
|
|
|
|
|
|
// 路径build
|
|
|
|
|
StringBuilder pathBuilder = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
// 生成通用随机文件夹存放每次的文件
|
|
|
|
|
String baseStr = RandomUtil.randomString(11) + File.separator;
|
|
|
|
|
for (MultipartFile file : files) {
|
|
|
|
|
String eachFilePath = buildFileWritePath();
|
|
|
|
|
String eachFilePath = buildFileWritePath(baseStr);
|
|
|
|
|
pathBuilder.append(eachFilePath);
|
|
|
|
|
pathBuilder.append(FILE_SPLIT);
|
|
|
|
|
if (StringUtils.isBlank(eachFilePath)){
|
|
|
|
@ -98,7 +115,7 @@ public class MailTaskServiceImpl implements MailTaskService {
|
|
|
|
|
// 生成验证码
|
|
|
|
|
tempFileRecord.setVerificationCode(RandomUtil.randomString(11));
|
|
|
|
|
// 文件标记 - 生成但是未读
|
|
|
|
|
tempFileRecord.setFileStatus(0);
|
|
|
|
|
tempFileRecord.setFileStatus(FINISH_BUILD_FILE_STATUS_CODE);
|
|
|
|
|
TempFileRecordDto tempFileRecordDto = tempFileRecordService.create(tempFileRecord);
|
|
|
|
|
if (tempFileRecordDto == null){
|
|
|
|
|
log.error(" ====== [ create TempFileRecordDto fail, please check it. tempFileRecord is {} ] =====", tempFileRecord.toString());
|
|
|
|
@ -116,21 +133,22 @@ public class MailTaskServiceImpl implements MailTaskService {
|
|
|
|
|
/**
|
|
|
|
|
* 构建文件上传保存路径
|
|
|
|
|
*/
|
|
|
|
|
private String buildFileWritePath(){
|
|
|
|
|
private String buildFileWritePath(String baseStr){
|
|
|
|
|
// 获取环境配置信息
|
|
|
|
|
OsInfo osInfo = SystemUtil.getOsInfo();
|
|
|
|
|
// 生成一个随机文件夹目录,方便整理和打包
|
|
|
|
|
if (osInfo.isWindows()){
|
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathWindows);
|
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathWindows + baseStr);
|
|
|
|
|
// 构建存储文件
|
|
|
|
|
return remoteLinkFileBasePathWindows + RandomUtil.randomString(11) + FILE_END;
|
|
|
|
|
return remoteLinkFileBasePathWindows + baseStr + RandomUtil.randomString(11) + FILE_END;
|
|
|
|
|
}else if (osInfo.isLinux()){
|
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathLinux);
|
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathLinux + baseStr);
|
|
|
|
|
// 构建存储文件
|
|
|
|
|
return remoteLinkFileBasePathLinux + RandomUtil.randomString(11) + FILE_END;
|
|
|
|
|
return remoteLinkFileBasePathLinux + baseStr + RandomUtil.randomString(11) + FILE_END;
|
|
|
|
|
}else if (osInfo.isMac()){
|
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathMac);
|
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathMac + baseStr);
|
|
|
|
|
// 构建存储文件
|
|
|
|
|
return remoteLinkFileBasePathMac + RandomUtil.randomString(11) + FILE_END;
|
|
|
|
|
return remoteLinkFileBasePathMac + baseStr + RandomUtil.randomString(11) + FILE_END;
|
|
|
|
|
}else {
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
@ -138,22 +156,26 @@ public class MailTaskServiceImpl implements MailTaskService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public void downloadFilesByRandCode(String rand, HttpServletResponse response,HttpServletRequest request) {
|
|
|
|
|
public Boolean downloadFilesByRandCode(String rand, HttpServletResponse response,HttpServletRequest request) {
|
|
|
|
|
// 根据验证码查出需要的信息
|
|
|
|
|
TempFileRecord tempFileRecord = tempFileRecordService.findByVerificationCode(rand.trim());
|
|
|
|
|
TempFileRecord tempFileRecord = tempFileRecordService.findByVerificationCode(rand.trim(), FINISH_BUILD_FILE_STATUS_CODE);
|
|
|
|
|
// 切分需要的文件地址
|
|
|
|
|
if (tempFileRecord!= null){
|
|
|
|
|
String filePaths = tempFileRecord.getFilePaths();
|
|
|
|
|
if (StringUtils.isNotBlank(filePaths)){
|
|
|
|
|
String[] split = filePaths.split(FILE_SPLIT);
|
|
|
|
|
if (split.length > 0){
|
|
|
|
|
for (String eachPath : split) {
|
|
|
|
|
// 每天一个文件写入要下载的请求中
|
|
|
|
|
File file = new File(eachPath);
|
|
|
|
|
FileUtil.downloadFile(request, response, file, false);
|
|
|
|
|
}
|
|
|
|
|
if (split.length > 0 && StringUtils.isNotBlank(split[0])){
|
|
|
|
|
String tempPath = StringUtils.substringBeforeLast(split[0], File.separator);
|
|
|
|
|
String zipPath = tempPath + ".zip";
|
|
|
|
|
ZipUtil.zip(tempPath, zipPath);
|
|
|
|
|
FileUtil.downloadFile(request, response, new File(zipPath), true);
|
|
|
|
|
// 更新下载结果
|
|
|
|
|
tempFileRecord.setFileStatus(FINISH_DOWNLOAD_FILE_STATUS_CODE);
|
|
|
|
|
tempFileRecordService.update(tempFileRecord);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
return Boolean.FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|