🔨 批量上传.
This commit is contained in:
@@ -40,7 +40,7 @@ import java.util.List;
|
||||
@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"})
|
||||
public class UploadTaskController {
|
||||
|
||||
// TODO 测试空文件上传 0B 取消怎么那么慢 是不是删除也慢 异步cancel cancel 需要设置子元素为 cancel
|
||||
// TODO 前端日志 测试删除慢吗
|
||||
|
||||
@Resource
|
||||
private UploadTaskService uploadTaskService;
|
||||
|
||||
@@ -7,7 +7,6 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 上传任务 视图响应对象
|
||||
@@ -31,7 +30,4 @@ public class UploadTaskCreateVO implements Serializable {
|
||||
@Schema(description = "上传 token")
|
||||
private String token;
|
||||
|
||||
@Schema(description = "主机")
|
||||
private List<HostBaseVO> hosts;
|
||||
|
||||
}
|
||||
|
||||
@@ -43,6 +43,9 @@ public class UploadTaskFileVO implements Serializable {
|
||||
@Schema(description = "文件大小")
|
||||
private Long fileSize;
|
||||
|
||||
@Schema(description = "额外信息")
|
||||
private String extraInfo;
|
||||
|
||||
@Schema(description = "状态")
|
||||
private String status;
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.orion.ops.module.asset.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 上传任务主机 视图响应对象
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.7
|
||||
* @since 2024-5-8 10:31
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "UploadTaskHostVO", description = "上传任务主机 视图响应对象")
|
||||
public class UploadTaskHostVO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "主机名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "主机编码")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "主机地址")
|
||||
private String address;
|
||||
|
||||
@Schema(description = "上传文件")
|
||||
private List<UploadTaskFileVO> files;
|
||||
|
||||
}
|
||||
@@ -56,7 +56,7 @@ public class UploadTaskVO implements Serializable {
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@Schema(description = "上传文件")
|
||||
private List<UploadTaskFileVO> files;
|
||||
@Schema(description = "上传主机及文件")
|
||||
private List<UploadTaskHostVO> hosts;
|
||||
|
||||
}
|
||||
|
||||
@@ -128,7 +128,6 @@ public class SftpSession extends TerminalSession implements ISftpSession {
|
||||
} catch (Exception e) {
|
||||
throw Exceptions.ioRuntime(e);
|
||||
} finally {
|
||||
// TODO Test
|
||||
// 关闭 inputStream 可能会被阻塞 ???...??? 只能关闭 executor
|
||||
Streams.close(this.executor);
|
||||
this.connect();
|
||||
|
||||
@@ -141,6 +141,9 @@ public class FileUploadTask implements IFileUploadTask {
|
||||
.current(0L)
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
if (files.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 添加到上传器
|
||||
uploaderList.add(new FileUploader(id, k, files));
|
||||
});
|
||||
@@ -150,6 +153,10 @@ public class FileUploadTask implements IFileUploadTask {
|
||||
* 执行上传
|
||||
*/
|
||||
private void runUpload() throws Exception {
|
||||
if (uploaderList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 执行
|
||||
if (uploaderList.size() == 1) {
|
||||
// 单个主机直接执行
|
||||
IFileUploader handler = uploaderList.get(0);
|
||||
|
||||
@@ -141,7 +141,6 @@ public class FileUploader implements IFileUploader {
|
||||
int read;
|
||||
while ((read = inputStream.read(buffer)) != -1) {
|
||||
outputStream.write(buffer, 0, read);
|
||||
// todo test
|
||||
file.setCurrent(file.getCurrent() + read);
|
||||
}
|
||||
outputStream.flush();
|
||||
|
||||
@@ -32,10 +32,7 @@ import com.orion.ops.module.asset.entity.request.upload.UploadTaskCreateRequest;
|
||||
import com.orion.ops.module.asset.entity.request.upload.UploadTaskFileRequest;
|
||||
import com.orion.ops.module.asset.entity.request.upload.UploadTaskQueryRequest;
|
||||
import com.orion.ops.module.asset.entity.request.upload.UploadTaskRequest;
|
||||
import com.orion.ops.module.asset.entity.vo.HostBaseVO;
|
||||
import com.orion.ops.module.asset.entity.vo.UploadTaskCreateVO;
|
||||
import com.orion.ops.module.asset.entity.vo.UploadTaskFileVO;
|
||||
import com.orion.ops.module.asset.entity.vo.UploadTaskVO;
|
||||
import com.orion.ops.module.asset.entity.vo.*;
|
||||
import com.orion.ops.module.asset.enums.HostConfigTypeEnum;
|
||||
import com.orion.ops.module.asset.enums.UploadTaskFileStatusEnum;
|
||||
import com.orion.ops.module.asset.enums.UploadTaskStatusEnum;
|
||||
@@ -147,7 +144,6 @@ public class UploadTaskServiceImpl implements UploadTaskService {
|
||||
return UploadTaskCreateVO.builder()
|
||||
.id(id)
|
||||
.token(token)
|
||||
.hosts(hosts)
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -158,11 +154,12 @@ public class UploadTaskServiceImpl implements UploadTaskService {
|
||||
Valid.notNull(record, ErrorMessage.DATA_ABSENT);
|
||||
// 查询任务文件
|
||||
List<UploadTaskFileVO> files = uploadTaskFileService.getFileByTaskId(id);
|
||||
// 计算传输进度
|
||||
this.computeUploadProgress(id, files);
|
||||
// 返回
|
||||
UploadTaskVO uploadTask = UploadTaskConvert.MAPPER.to(record);
|
||||
uploadTask.setFiles(files);
|
||||
// 计算传输进度
|
||||
this.computeUploadProgress(id, files);
|
||||
// 设置任务文件
|
||||
this.setTaskFiles(uploadTask, files);
|
||||
return uploadTask;
|
||||
}
|
||||
|
||||
@@ -208,8 +205,9 @@ public class UploadTaskServiceImpl implements UploadTaskService {
|
||||
} else {
|
||||
// 计算进度
|
||||
this.computeUploadProgress(id, files);
|
||||
// 设置任务文件
|
||||
}
|
||||
task.setFiles(files);
|
||||
this.setTaskFiles(task, files);
|
||||
}
|
||||
return tasks;
|
||||
}
|
||||
@@ -299,8 +297,6 @@ public class UploadTaskServiceImpl implements UploadTaskService {
|
||||
.map(localFileClient::getReturnPath)
|
||||
.map(localFileClient::getAbsolutePath)
|
||||
.collect(Collectors.toList());
|
||||
// TODO test
|
||||
paths.forEach(System.out::println);
|
||||
// 删除文件
|
||||
paths.forEach(Files1::delete);
|
||||
}
|
||||
@@ -393,7 +389,7 @@ public class UploadTaskServiceImpl implements UploadTaskService {
|
||||
uploadFile.setStatus(UploadTaskFileStatusEnum.CANCELED.name());
|
||||
uploadFile.setEndTime(new Date());
|
||||
LambdaQueryWrapper<UploadTaskFileDO> updateFileQuery = uploadTaskFileDAO.wrapper()
|
||||
.in(UploadTaskFileDO::getId, updateIdList)
|
||||
.in(UploadTaskFileDO::getTaskId, updateIdList)
|
||||
.in(UploadTaskFileDO::getStatus,
|
||||
UploadTaskFileStatusEnum.WAITING.name(),
|
||||
UploadTaskFileStatusEnum.UPLOADING.name());
|
||||
@@ -446,11 +442,34 @@ public class UploadTaskServiceImpl implements UploadTaskService {
|
||||
} else if (UploadTaskFileStatusEnum.FINISHED.name().equals(status)) {
|
||||
file.setCurrent(file.getFileSize());
|
||||
} else if (UploadTaskFileStatusEnum.FAILED.name().equals(status)) {
|
||||
file.setCurrent(0L);
|
||||
file.setCurrent(file.getFileSize());
|
||||
} else if (UploadTaskFileStatusEnum.CANCELED.name().equals(status)) {
|
||||
file.setCurrent(0L);
|
||||
file.setCurrent(file.getFileSize());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置任务文件
|
||||
*
|
||||
* @param task task
|
||||
* @param files files
|
||||
*/
|
||||
private void setTaskFiles(UploadTaskVO task, List<UploadTaskFileVO> files) {
|
||||
Map<Long, List<UploadTaskFileVO>> hostFiles = files.stream()
|
||||
.collect(Collectors.groupingBy(UploadTaskFileVO::getHostId));
|
||||
List<UploadTaskHostVO> hosts = JSON.parseObject(task.getExtraInfo(), UploadTaskExtraDTO.class)
|
||||
.getHosts()
|
||||
.stream()
|
||||
.map(s -> UploadTaskHostVO.builder()
|
||||
.id(s.getId())
|
||||
.code(s.getCode())
|
||||
.name(s.getName())
|
||||
.address(s.getAddress())
|
||||
.files(hostFiles.get(s.getId()))
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
task.setHosts(hosts);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user