|
|
|
@ -9,8 +9,9 @@ import cn.hutool.core.text.csv.CsvUtil;
|
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
|
|
import cn.hutool.poi.excel.ExcelReader;
|
|
|
|
|
import cn.hutool.poi.excel.ExcelUtil;
|
|
|
|
|
import cn.hutool.poi.exceptions.POIException;
|
|
|
|
|
import com.baiye.constant.DefaultNumberConstants;
|
|
|
|
|
import com.baiye.exception.BadRequestException;
|
|
|
|
|
import com.baiye.feign.UserClient;
|
|
|
|
|
import com.baiye.http.CommonResponse;
|
|
|
|
|
import com.baiye.http.ResponseCode;
|
|
|
|
|
import com.baiye.module.dao.ClueRecordRepository;
|
|
|
|
@ -44,9 +45,13 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
private FileAnalysisTask fileAnalysisTask;
|
|
|
|
|
@Resource
|
|
|
|
|
private ClueRecordRepository clueRecordRepository;
|
|
|
|
|
@Resource
|
|
|
|
|
private UserClient userClient;
|
|
|
|
|
|
|
|
|
|
@Value(value = "${storage.url}")
|
|
|
|
|
private String URL;
|
|
|
|
|
@Value(value = "${storage.auditingUrl}")
|
|
|
|
|
private String auditingUrl;
|
|
|
|
|
@Value(value = "${storage.de_symbol}")
|
|
|
|
|
private String DE_SYMBOL;
|
|
|
|
|
@Value("${snowflake.workerId}")
|
|
|
|
@ -75,6 +80,8 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
List<ClueRecord> clueRecordList = new ArrayList<>();
|
|
|
|
|
String oneFileName = files[0].getOriginalFilename();
|
|
|
|
|
Long taskId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
|
|
|
|
|
// 文件是否需要审核,需要审核的不入库
|
|
|
|
|
Boolean flag = userClient.findIsReview(userId);
|
|
|
|
|
//处理文件数据
|
|
|
|
|
for (MultipartFile file : files) {
|
|
|
|
|
String name = file.getOriginalFilename();
|
|
|
|
@ -86,27 +93,14 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
if (nameStr.equals(".xlsx") || nameStr.equals(".xls")) {
|
|
|
|
|
testingExcel(file, uploadType);
|
|
|
|
|
}
|
|
|
|
|
//存入本地
|
|
|
|
|
String currentDate = timeTwo.format(new Date());
|
|
|
|
|
String newRealPath = URL + currentDate;
|
|
|
|
|
File newRealPathFile = new File(newRealPath);
|
|
|
|
|
if (!newRealPathFile.exists()) {
|
|
|
|
|
newRealPathFile.mkdir();
|
|
|
|
|
}
|
|
|
|
|
String newName = randomFileName(name);
|
|
|
|
|
File newFile = new File(newRealPathFile, newName);
|
|
|
|
|
file.transferTo(newFile);
|
|
|
|
|
//检测csv文件
|
|
|
|
|
if (nameStr.equals(".csv")) {
|
|
|
|
|
testingCsv(newFile, uploadType);
|
|
|
|
|
}
|
|
|
|
|
//保存上传记录信息
|
|
|
|
|
String newFileUrl = newRealPath + DE_SYMBOL + newName;
|
|
|
|
|
ClueRecord clueRecord = saveClueRecord(name, newFileUrl, uploadType, userId, taskId);
|
|
|
|
|
//存入本地,保存上传记录
|
|
|
|
|
ClueRecord clueRecord = saveFileUtil(name, file, uploadType, userId, taskId, flag);
|
|
|
|
|
clueRecordList.add(clueRecord);
|
|
|
|
|
}
|
|
|
|
|
//异步读取文件并创建任务
|
|
|
|
|
fileAnalysisTask.runFileAnalysisTask(clueRecordList, oneFileName);
|
|
|
|
|
if (!flag) {
|
|
|
|
|
//异步读取文件并创建任务
|
|
|
|
|
fileAnalysisTask.runFileAnalysisTask(clueRecordList, oneFileName);
|
|
|
|
|
}
|
|
|
|
|
return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -119,6 +113,8 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
public ResponseEntity<Object> taskFileUpload(MultipartFile[] files, Integer uploadType, Long userId, Long taskId) {
|
|
|
|
|
List<ClueRecord> clueRecordList = new ArrayList<>();
|
|
|
|
|
String oneFileName = files[0].getOriginalFilename();
|
|
|
|
|
// 文件是否需要审核,需要审核的不入库
|
|
|
|
|
Boolean flag = userClient.findIsReview(userId);
|
|
|
|
|
for (MultipartFile file : files) {
|
|
|
|
|
String originalFilename = file.getOriginalFilename();
|
|
|
|
|
int lastIndexOf = originalFilename.lastIndexOf(".");
|
|
|
|
@ -129,31 +125,21 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
// 检测内容和行数
|
|
|
|
|
testingExcel(file, uploadType);
|
|
|
|
|
//存入本地
|
|
|
|
|
String currentDate = timeTwo.format(new Date());
|
|
|
|
|
String newRealPath = URL + currentDate;
|
|
|
|
|
File newRealPathFile = new File(newRealPath);
|
|
|
|
|
if (!newRealPathFile.exists()) {
|
|
|
|
|
newRealPathFile.mkdir();
|
|
|
|
|
}
|
|
|
|
|
String newName = randomFileName(originalFilename);
|
|
|
|
|
File newFile = new File(newRealPathFile, newName);
|
|
|
|
|
file.transferTo(newFile);
|
|
|
|
|
//保存上传记录信息
|
|
|
|
|
String newFileUrl = newRealPath + DE_SYMBOL + newName;
|
|
|
|
|
ClueRecord clueRecord = saveClueRecord(originalFilename, newFileUrl, uploadType, userId, taskId);
|
|
|
|
|
ClueRecord clueRecord = saveFileUtil(originalFilename, file, uploadType, userId, taskId, flag);
|
|
|
|
|
clueRecordList.add(clueRecord);
|
|
|
|
|
}
|
|
|
|
|
//异步读取文件并更新任务
|
|
|
|
|
fileAnalysisTask.runFileAnalysisTask(clueRecordList, oneFileName);
|
|
|
|
|
if (!flag) {
|
|
|
|
|
//异步读取文件并更新任务
|
|
|
|
|
fileAnalysisTask.runFileAnalysisTask(clueRecordList, oneFileName);
|
|
|
|
|
}
|
|
|
|
|
return new ResponseEntity<>(CommonResponse.createBySuccess(ResponseCode.SUCCESS), HttpStatus.OK);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 保存上传记录
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public ClueRecord saveClueRecord(String originalFilename, String newFileUrl, Integer uploadType, Long userId, Long taskId) {
|
|
|
|
|
public ClueRecord saveClueRecord(String originalFilename, String newFileUrl, Integer uploadType, Long userId, Long taskId, Boolean flag) {
|
|
|
|
|
long clueRecordId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
|
|
|
|
|
ClueRecord clueRecord = new ClueRecord();
|
|
|
|
|
clueRecord.setId(clueRecordId);
|
|
|
|
@ -163,6 +149,11 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
clueRecord.setUploadType(uploadType);
|
|
|
|
|
clueRecord.setCreateBy(userId);
|
|
|
|
|
clueRecord.setTaskId(taskId);
|
|
|
|
|
if (flag) {
|
|
|
|
|
clueRecord.setIsPass(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
|
} else {
|
|
|
|
|
clueRecord.setIsPass(DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
|
}
|
|
|
|
|
clueRecordRepository.save(clueRecord);
|
|
|
|
|
return clueRecord;
|
|
|
|
|
}
|
|
|
|
@ -193,13 +184,13 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
* @param file 文件
|
|
|
|
|
* @param uploadType 线索文件类型(UC..)
|
|
|
|
|
*/
|
|
|
|
|
public void testingExcel(MultipartFile file, Integer uploadType){
|
|
|
|
|
public void testingExcel(MultipartFile file, Integer uploadType) {
|
|
|
|
|
InputStream inputStream = null;
|
|
|
|
|
ExcelReader reader = null;
|
|
|
|
|
try{
|
|
|
|
|
try {
|
|
|
|
|
inputStream = file.getInputStream();
|
|
|
|
|
reader = ExcelUtil.getReader(inputStream);
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new BadRequestException("文件读取错误,请检查文件");
|
|
|
|
|
}
|
|
|
|
|
//检验excel内容格式(表头信息)
|
|
|
|
@ -288,4 +279,45 @@ public class UploadFileServiceImpl implements UploadFileService {
|
|
|
|
|
// 4.时间 + _ + 随机数 + 后缀名 返回一个新的文件名
|
|
|
|
|
return format + "_" + num + suffix;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 保存到本地并返回此文件返回记录
|
|
|
|
|
*
|
|
|
|
|
* @param name
|
|
|
|
|
* @param file
|
|
|
|
|
* @param uploadType
|
|
|
|
|
* @param userId
|
|
|
|
|
* @param taskId
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@SneakyThrows
|
|
|
|
|
private ClueRecord saveFileUtil(String name, MultipartFile file, Integer uploadType, Long userId, Long taskId, Boolean flag) {
|
|
|
|
|
String currentDate = timeTwo.format(new Date());
|
|
|
|
|
String newRealPath = URL + currentDate;
|
|
|
|
|
if (flag) {
|
|
|
|
|
newRealPath = auditingUrl;
|
|
|
|
|
}
|
|
|
|
|
//存入本地
|
|
|
|
|
File newRealPathFile = new File(newRealPath);
|
|
|
|
|
if (!newRealPathFile.exists()) {
|
|
|
|
|
newRealPathFile.mkdir();
|
|
|
|
|
}
|
|
|
|
|
String newName = randomFileName(name);
|
|
|
|
|
File newFile = new File(newRealPathFile, newName);
|
|
|
|
|
file.transferTo(newFile);
|
|
|
|
|
if (uploadType == FileConstant.FIVE_NUMBER) {
|
|
|
|
|
//检测csv文件,这个是保存到本地后读取的本地文件读取操作
|
|
|
|
|
int lastIndexOf = name.lastIndexOf(".");
|
|
|
|
|
String nameStr = name.substring(lastIndexOf);
|
|
|
|
|
if (nameStr.equals(".csv")) {
|
|
|
|
|
testingCsv(newFile, uploadType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//保存上传记录信息
|
|
|
|
|
String newFileUrl = newRealPath + DE_SYMBOL + newName;
|
|
|
|
|
ClueRecord clueRecord = saveClueRecord(name, newFileUrl, uploadType, userId, taskId, flag);
|
|
|
|
|
clueRecord.setFlag(flag);
|
|
|
|
|
return clueRecord;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|