邮件模块开发完成版本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);
}
//返回错误码和错误描述
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) {
return new CommonResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data);

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

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

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

Loading…
Cancel
Save