邮件模块开发完成版本2

master
土豆兄弟 4 years ago
parent 286145e1cd
commit 03bd3b583f

@ -67,6 +67,11 @@ public class CommonResponse<T> implements Serializable {
return new CommonResponse<T>(ResponseCode.SUCCESS.getCode(), data); return new CommonResponse<T>(ResponseCode.SUCCESS.getCode(), data);
} }
//返回错误码和错误描述
public static <T> CommonResponse<T> createBySuccessByCode(ResponseCode responseCode){
return new CommonResponse<T>(responseCode.getCode(),responseCode.getDesc());
}
//返回成功码和成功信息和数据 //返回成功码和成功信息和数据
public static <T> CommonResponse<T> createBySuccess(String msg, T data) { public static <T> CommonResponse<T> createBySuccess(String msg, T data) {
return new CommonResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data); return new CommonResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data);

@ -14,6 +14,8 @@ public enum ResponseCode {
SUCCESS(0,"SUCCESS"), SUCCESS(0,"SUCCESS"),
ERROR(1,"ERROR"), ERROR(1,"ERROR"),
// 成功的一些特殊提示
SUCCESS_ONCE_LINK_MSG(0,"下载成功,一次性链接已经失效"),
// 通用请求参数校验 // 通用请求参数校验
ILLEGAL_ARGUMENT(1,"请求参数格式错误"), ILLEGAL_ARGUMENT(1,"请求参数格式错误"),
EMPTY_ARGUMENT(1,"请求参数为空"), EMPTY_ARGUMENT(1,"请求参数为空"),
@ -21,6 +23,7 @@ public enum ResponseCode {
NO_FILE_INPUT(1,"没有文件输入"), NO_FILE_INPUT(1,"没有文件输入"),
// 特殊需要进行前端返回说明的参数定义 // 特殊需要进行前端返回说明的参数定义
TASK_NAME_IS_EXIST(1,"任务名称已经存在"), TASK_NAME_IS_EXIST(1,"任务名称已经存在"),
ONCE_LINK_MSG_ERROR(1,"链接失效,下载文件失败~"),
// 请求结果性的错误 // 请求结果性的错误
NODATA_ERROR(1,"查询结果为空"), NODATA_ERROR(1,"查询结果为空"),
TASK_BUILD_ERROR(1,"任务建立失败"), TASK_BUILD_ERROR(1,"任务建立失败"),

@ -1,18 +1,15 @@
package me.zhengjie.modules.mailtask.rest; package me.zhengjie.modules.mailtask.rest;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhengjie.annotation.AnonymousAccess;
import me.zhengjie.annotation.Log; import me.zhengjie.annotation.Log;
import me.zhengjie.common.http.CommonResponse; import me.zhengjie.common.http.CommonResponse;
import me.zhengjie.common.http.ResponseCode; import me.zhengjie.common.http.ResponseCode;
import me.zhengjie.common.json.OnceLinkMsgJsonContent; import me.zhengjie.common.json.OnceLinkMsgJsonContent;
import me.zhengjie.modules.mailtask.service.MailTaskService; import me.zhengjie.modules.mailtask.service.MailTaskService;
import me.zhengjie.modules.tmpfilerecord.service.TempFileRecordService;
import me.zhengjie.utils.StringUtils; import me.zhengjie.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -31,15 +28,13 @@ public class MailTaskController {
private final MailTaskService mailTaskService; private final MailTaskService mailTaskService;
@Autowired
private TempFileRecordService tempFileRecordService;
/** /**
* , * ,
*/ */
@Log("生成文件一次性链接") @Log("生成文件一次性链接")
@PostMapping("link") @PostMapping("link")
@ApiOperation("生成一次性链接") @ApiOperation("生成一次性链接")
@AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解
public ResponseEntity<Object> buildRequest(@RequestParam(value = "files") MultipartFile[] files){ public ResponseEntity<Object> buildRequest(@RequestParam(value = "files") MultipartFile[] files){
// 校验上传是否有文件 // 校验上传是否有文件
if (files!= null && files.length<= 0){ if (files!= null && files.length<= 0){
@ -47,15 +42,10 @@ public class MailTaskController {
} }
// 构建一次性链接 // 构建一次性链接
String result = mailTaskService.buildOnceLinkForInputFile(files); String result = mailTaskService.buildOnceLinkForInputFile(files);
// String jsonResult = null;
OnceLinkMsgJsonContent content = new OnceLinkMsgJsonContent(); OnceLinkMsgJsonContent content = new OnceLinkMsgJsonContent();
if (StringUtils.isNotBlank(result)){ if (StringUtils.isNotBlank(result)){
// 进行json相关的转换 // 进行json相关的转换
content.setOnceLink(result); content.setOnceLink(result);
// JSON parse = JSONUtil.parse(content);
//// if (parse != null){
//// jsonResult = JSONUtil.toJsonStr(parse);
//// }
}else { }else {
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_MATCH_ARGUMENT_SET), HttpStatus.OK); return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_MATCH_ARGUMENT_SET), HttpStatus.OK);
} }
@ -69,12 +59,17 @@ public class MailTaskController {
@Log("下载文件") @Log("下载文件")
@GetMapping("download") @GetMapping("download")
@ApiOperation("下载文件") @ApiOperation("下载文件")
public ResponseEntity<Object> downLoadFile(HttpServletResponse response, HttpServletRequest request, @RequestParam(value = "rand")String rand){ @AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解
public void downLoadOnceFile(HttpServletResponse response, HttpServletRequest request, @RequestParam(value = "rand")String rand){
// 校验参数,进行下载文件 // 校验参数,进行下载文件
if (StringUtils.isBlank(rand)){ /* if (StringUtils.isBlank(rand)){
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.EMPTY_ARGUMENT), HttpStatus.OK); return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.EMPTY_ARGUMENT), HttpStatus.OK);
} }*/
mailTaskService.downloadFilesByRandCode(rand, response, request); Boolean tag = mailTaskService.downloadFilesByRandCode(rand, response, request);
return new ResponseEntity<>(CommonResponse.createBySuccess(), HttpStatus.OK); /* if (tag){
return new ResponseEntity<>(CommonResponse.createBySuccessByCode(ResponseCode.SUCCESS_ONCE_LINK_MSG), HttpStatus.OK);
}else {
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.ONCE_LINK_MSG_ERROR), HttpStatus.OK);
}*/
} }
} }

@ -1,5 +1,6 @@
package me.zhengjie.modules.mailtask.service; package me.zhengjie.modules.mailtask.service;
import com.sun.org.apache.xpath.internal.operations.Bool;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -21,5 +22,5 @@ public interface MailTaskService {
* *
* @param rand * @param rand
*/ */
void downloadFilesByRandCode(String rand, HttpServletResponse response, HttpServletRequest request); Boolean downloadFilesByRandCode(String rand, HttpServletResponse response, HttpServletRequest request);
} }

@ -1,16 +1,19 @@
package me.zhengjie.modules.mailtask.service.impl; package me.zhengjie.modules.mailtask.service.impl;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.ZipUtil;
import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.system.OsInfo; import cn.hutool.system.OsInfo;
import cn.hutool.system.SystemUtil; import cn.hutool.system.SystemUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.mailtask.service.MailTaskService; import me.zhengjie.modules.mailtask.service.MailTaskService;
import me.zhengjie.modules.tmpfilerecord.domain.TempFileRecord; import me.zhengjie.modules.tmpfilerecord.domain.TempFileRecord;
import me.zhengjie.modules.tmpfilerecord.service.TempFileRecordService; import me.zhengjie.modules.tmpfilerecord.service.TempFileRecordService;
import me.zhengjie.modules.tmpfilerecord.service.dto.TempFileRecordDto; import me.zhengjie.modules.tmpfilerecord.service.dto.TempFileRecordDto;
import me.zhengjie.utils.FileUtil; import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.GenUtil;
import me.zhengjie.utils.StringUtils; import me.zhengjie.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -22,7 +25,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.file.FileSystem;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List; import java.util.List;
@ -41,6 +46,17 @@ public class MailTaskServiceImpl implements MailTaskService {
*/ */
private static final String FILE_SPLIT = ","; 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 // 路径build
StringBuilder pathBuilder = new StringBuilder(); StringBuilder pathBuilder = new StringBuilder();
// 生成通用随机文件夹存放每次的文件
String baseStr = RandomUtil.randomString(11) + File.separator;
for (MultipartFile file : files) { for (MultipartFile file : files) {
String eachFilePath = buildFileWritePath(); String eachFilePath = buildFileWritePath(baseStr);
pathBuilder.append(eachFilePath); pathBuilder.append(eachFilePath);
pathBuilder.append(FILE_SPLIT); pathBuilder.append(FILE_SPLIT);
if (StringUtils.isBlank(eachFilePath)){ if (StringUtils.isBlank(eachFilePath)){
@ -98,7 +115,7 @@ public class MailTaskServiceImpl implements MailTaskService {
// 生成验证码 // 生成验证码
tempFileRecord.setVerificationCode(RandomUtil.randomString(11)); tempFileRecord.setVerificationCode(RandomUtil.randomString(11));
// 文件标记 - 生成但是未读 // 文件标记 - 生成但是未读
tempFileRecord.setFileStatus(0); tempFileRecord.setFileStatus(FINISH_BUILD_FILE_STATUS_CODE);
TempFileRecordDto tempFileRecordDto = tempFileRecordService.create(tempFileRecord); TempFileRecordDto tempFileRecordDto = tempFileRecordService.create(tempFileRecord);
if (tempFileRecordDto == null){ if (tempFileRecordDto == null){
log.error(" ====== [ create TempFileRecordDto fail, please check it. tempFileRecord is {} ] =====", tempFileRecord.toString()); 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(); OsInfo osInfo = SystemUtil.getOsInfo();
// 生成一个随机文件夹目录,方便整理和打包
if (osInfo.isWindows()){ 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()){ }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()){ }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 { }else {
return ""; return "";
} }
@ -138,22 +156,26 @@ public class MailTaskServiceImpl implements MailTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @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){ if (tempFileRecord!= null){
String filePaths = tempFileRecord.getFilePaths(); String filePaths = tempFileRecord.getFilePaths();
if (StringUtils.isNotBlank(filePaths)){ if (StringUtils.isNotBlank(filePaths)){
String[] split = filePaths.split(FILE_SPLIT); String[] split = filePaths.split(FILE_SPLIT);
if (split.length > 0){ if (split.length > 0 && StringUtils.isNotBlank(split[0])){
for (String eachPath : split) { String tempPath = StringUtils.substringBeforeLast(split[0], File.separator);
// 每天一个文件写入要下载的请求中 String zipPath = tempPath + ".zip";
File file = new File(eachPath); ZipUtil.zip(tempPath, zipPath);
FileUtil.downloadFile(request, response, file, false); FileUtil.downloadFile(request, response, new File(zipPath), true);
} // 更新下载结果
tempFileRecord.setFileStatus(FINISH_DOWNLOAD_FILE_STATUS_CODE);
tempFileRecordService.update(tempFileRecord);
} }
} }
return Boolean.TRUE;
} }
return Boolean.FALSE;
} }
} }

@ -5,7 +5,7 @@ spring:
freemarker: freemarker:
check-template-location: false check-template-location: false
profiles: profiles:
active: prod active: dev
jackson: jackson:
time-zone: GMT+8 time-zone: GMT+8
data: data:

Loading…
Cancel
Save