|
|
@ -15,36 +15,34 @@
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
package me.zhengjie.modules.upload.service.impl;
|
|
|
|
package me.zhengjie.modules.upload.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
|
|
|
|
import java.sql.Timestamp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
|
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.extern.slf4j.Slf4j;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import me.zhengjie.modules.upload.consts.SysConst;
|
|
|
|
import me.zhengjie.modules.upload.domain.UploadFile;
|
|
|
|
import me.zhengjie.modules.upload.domain.UploadFile;
|
|
|
|
import me.zhengjie.modules.upload.task.SaveToFileTask;
|
|
|
|
|
|
|
|
import me.zhengjie.utils.*;
|
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
|
|
|
import me.zhengjie.modules.upload.repository.UploadFileRepository;
|
|
|
|
import me.zhengjie.modules.upload.repository.UploadFileRepository;
|
|
|
|
import me.zhengjie.modules.upload.service.UploadFileService;
|
|
|
|
import me.zhengjie.modules.upload.service.UploadFileService;
|
|
|
|
import me.zhengjie.modules.upload.service.dto.UploadFileDto;
|
|
|
|
import me.zhengjie.modules.upload.service.dto.UploadFileDto;
|
|
|
|
import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria;
|
|
|
|
import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria;
|
|
|
|
import me.zhengjie.modules.upload.service.mapstruct.UploadFileMapper;
|
|
|
|
import me.zhengjie.modules.upload.service.mapstruct.UploadFileMapper;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import me.zhengjie.utils.*;
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import org.springframework.data.domain.Page;
|
|
|
|
import org.springframework.data.domain.Page;
|
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
|
|
|
|
import java.sql.Timestamp;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.*;
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static me.zhengjie.modules.upload.consts.SysConst.TEST_USER_NAME;
|
|
|
|
import static me.zhengjie.modules.upload.consts.SysConst.TEST_USER_NAME;
|
|
|
|
import static me.zhengjie.modules.upload.consts.UploadFileConst.*;
|
|
|
|
import static me.zhengjie.modules.upload.consts.UploadFileConst.*;
|
|
|
@ -92,10 +90,29 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public Map<String, Object> queryAll(UploadFileQueryCriteria criteria, Pageable pageable) {
|
|
|
|
public Map<String, Object> queryAll(UploadFileQueryCriteria criteria, Pageable pageable) {
|
|
|
|
Page<UploadFile> page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
|
|
|
|
|
|
|
|
|
|
|
|
criteria = filterOfWriteList(criteria);
|
|
|
|
|
|
|
|
UploadFileQueryCriteria finalCriteria = criteria;
|
|
|
|
|
|
|
|
Page<UploadFile> page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, finalCriteria, criteriaBuilder), pageable);
|
|
|
|
return PageUtil.toPage(page.map(uploadFileMapper::toDto));
|
|
|
|
return PageUtil.toPage(page.map(uploadFileMapper::toDto));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 加一个判断,除了白名单账户外,其他的人查询只能返回自己上传的列表
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param criteria 查询的参数
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @return
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private UploadFileQueryCriteria filterOfWriteList(UploadFileQueryCriteria criteria) {
|
|
|
|
|
|
|
|
if (!SysConst.sysDebug){
|
|
|
|
|
|
|
|
if (!CollectionUtil.contains(WHITE_LIST, SecurityUtils.getCurrentUsername())){
|
|
|
|
|
|
|
|
criteria.setOperation(SecurityUtils.getCurrentUsername());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return criteria;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public List<UploadFileDto> queryAll(UploadFileQueryCriteria criteria) {
|
|
|
|
public List<UploadFileDto> queryAll(UploadFileQueryCriteria criteria) {
|
|
|
|
return uploadFileMapper.toDto(uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder)));
|
|
|
|
return uploadFileMapper.toDto(uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder)));
|
|
|
@ -147,10 +164,10 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files) {
|
|
|
|
public UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files, String taskName) {
|
|
|
|
// 1. 文件存储到本地
|
|
|
|
// 1. 文件存储到本地
|
|
|
|
long count = 0; // 统计总数
|
|
|
|
long count = 0; // 统计总数
|
|
|
|
String baseStr = RandomUtil.randomString(11) + File.separator; // 生成通用随机文件夹存放每次的文件
|
|
|
|
String baseStr = ""; // 生成通用随机文件夹存放每次的文件
|
|
|
|
StringBuilder pathBuilder = new StringBuilder();
|
|
|
|
StringBuilder pathBuilder = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
|
|
for (MultipartFile file : files) {
|
|
|
|
for (MultipartFile file : files) {
|
|
|
@ -161,13 +178,14 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String extName = FileUtil.extName(originalFilename);
|
|
|
|
String extName = FileUtil.extName(originalFilename);
|
|
|
|
baseStr += baseStr + FileUtil.mainName(originalFilename);
|
|
|
|
baseStr += FileUtil.mainName(originalFilename);
|
|
|
|
String eachFilePath = buildFileWritePath(baseStr, extName);
|
|
|
|
String eachFilePath = buildFileWritePath(baseStr, extName);
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// 把文件保存到本地路径
|
|
|
|
// 把文件保存到本地路径
|
|
|
|
file.transferTo(Paths.get(eachFilePath));
|
|
|
|
file.transferTo(Paths.get(eachFilePath));
|
|
|
|
|
|
|
|
baseStr = "";
|
|
|
|
} catch (IOException e) {
|
|
|
|
} catch (IOException e) {
|
|
|
|
log.error("============== [transferTo file fail, path is {} ] ==============", eachFilePath);
|
|
|
|
log.error("============== [transferTo file fail, path is {} ] ==============", eachFilePath,e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 统计行数
|
|
|
|
// 统计行数
|
|
|
|
List<String> tempList = FileUtil.readLines(eachFilePath, "UTF-8");
|
|
|
|
List<String> tempList = FileUtil.readLines(eachFilePath, "UTF-8");
|
|
|
@ -182,12 +200,16 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 更新上传记录为正在上传,解析了有多少条
|
|
|
|
// 2. 更新上传记录为正在上传,解析了有多少条
|
|
|
|
UploadFile uploadFile = new UploadFile();
|
|
|
|
UploadFile uploadFile = new UploadFile();
|
|
|
|
|
|
|
|
uploadFile.setUploadFileTaskName(taskName);
|
|
|
|
uploadFile.setUploadTime(new Timestamp(new Date().getTime()));
|
|
|
|
uploadFile.setUploadTime(new Timestamp(new Date().getTime()));
|
|
|
|
String currentUsername = SecurityUtils.getCurrentUsername();
|
|
|
|
String currentUsername;
|
|
|
|
if (StringUtils.isBlank(currentUsername)){
|
|
|
|
if (SysConst.sysDebug){
|
|
|
|
uploadFile.setOpration(TEST_USER_NAME);//fixme 这边补充一下需要的操作人
|
|
|
|
uploadFile.setOperation(TEST_USER_NAME);//fixme 这边测试环境补充一下需要的操作人
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
|
|
|
currentUsername = SecurityUtils.getCurrentUsername();
|
|
|
|
|
|
|
|
uploadFile.setOperation(currentUsername);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uploadFile.setOpration(currentUsername);//fixme 这边补充一下需要的操作人
|
|
|
|
|
|
|
|
uploadFile.setFileCount(count);
|
|
|
|
uploadFile.setFileCount(count);
|
|
|
|
uploadFile.setFileTransSuccessCount(0L);
|
|
|
|
uploadFile.setFileTransSuccessCount(0L);
|
|
|
|
uploadFile.setUploadTag(DOING_TAG);
|
|
|
|
uploadFile.setUploadTag(DOING_TAG);
|
|
|
@ -211,19 +233,26 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
// 定义的时间格式
|
|
|
|
// 定义的时间格式
|
|
|
|
String timeFormate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
|
|
|
|
String timeFormate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String dirPath;
|
|
|
|
// 生成一个随机文件夹目录,方便整理和打包
|
|
|
|
// 生成一个随机文件夹目录,方便整理和打包
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String filePath = RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName;
|
|
|
|
|
|
|
|
|
|
|
|
if (osInfo.isWindows()) {
|
|
|
|
if (osInfo.isWindows()) {
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathWindows + baseStr);
|
|
|
|
dirPath = remoteLinkFileBasePathWindows + timeFormate + File.separator;
|
|
|
|
|
|
|
|
FileUtil.mkdir(new File(dirPath));
|
|
|
|
// 构建存储文件
|
|
|
|
// 构建存储文件
|
|
|
|
return remoteLinkFileBasePathWindows + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) +FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName;
|
|
|
|
return dirPath + filePath;
|
|
|
|
} else if (osInfo.isLinux()) {
|
|
|
|
} else if (osInfo.isLinux()) {
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathLinux + baseStr);
|
|
|
|
dirPath = remoteLinkFileBasePathLinux + timeFormate + File.separator;
|
|
|
|
|
|
|
|
FileUtil.mkdir(new File(dirPath));
|
|
|
|
// 构建存储文件
|
|
|
|
// 构建存储文件
|
|
|
|
return remoteLinkFileBasePathLinux + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName;
|
|
|
|
return dirPath + filePath;
|
|
|
|
} else if (osInfo.isMac()) {
|
|
|
|
} else if (osInfo.isMac()) {
|
|
|
|
FileUtil.mkdir(remoteLinkFileBasePathMac + baseStr);
|
|
|
|
dirPath = remoteLinkFileBasePathMac + timeFormate + File.separator;
|
|
|
|
|
|
|
|
FileUtil.mkdir(new File(dirPath));
|
|
|
|
// 构建存储文件
|
|
|
|
// 构建存储文件
|
|
|
|
return remoteLinkFileBasePathMac + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName;
|
|
|
|
return dirPath + filePath;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
return "";
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|