diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java index f0de48ba..09da6477 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java @@ -40,7 +40,7 @@ import java.util.List; @SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) public class UploadTaskController { - // TODO 测试空文件上传 0B 取消怎么那么慢 是不是删除也慢 异步cancel cancel 需要设置子元素为 cancel + // TODO 前端日志 测试删除慢吗 @Resource private UploadTaskService uploadTaskService; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskCreateVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskCreateVO.java index b8a7aa35..e0d1c9d8 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskCreateVO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskCreateVO.java @@ -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 hosts; - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskFileVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskFileVO.java index 2282903a..ec317103 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskFileVO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskFileVO.java @@ -43,6 +43,9 @@ public class UploadTaskFileVO implements Serializable { @Schema(description = "文件大小") private Long fileSize; + @Schema(description = "额外信息") + private String extraInfo; + @Schema(description = "状态") private String status; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskHostVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskHostVO.java new file mode 100644 index 00000000..c264f96e --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskHostVO.java @@ -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 files; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java index e4c83d96..618244d4 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java @@ -56,7 +56,7 @@ public class UploadTaskVO implements Serializable { @Schema(description = "创建时间") private Date createTime; - @Schema(description = "上传文件") - private List files; + @Schema(description = "上传主机及文件") + private List hosts; } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SftpSession.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SftpSession.java index 1d723635..a13da224 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SftpSession.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SftpSession.java @@ -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(); diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java index dd81e195..34226304 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java @@ -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); diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java index c44d0794..7847f2de 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java @@ -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(); diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java index e061996f..4b4d8afc 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java @@ -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 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 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 files) { + Map> hostFiles = files.stream() + .collect(Collectors.groupingBy(UploadTaskFileVO::getHostId)); + List 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); + } + } diff --git a/orion-ops-ui/src/api/exec/upload-task.ts b/orion-ops-ui/src/api/exec/upload-task.ts index 7cacff53..4eb1e209 100644 --- a/orion-ops-ui/src/api/exec/upload-task.ts +++ b/orion-ops-ui/src/api/exec/upload-task.ts @@ -1,5 +1,4 @@ import type { DataGrid, Pagination } from '@/types/global'; -import type { HostQueryResponse } from '@/api/asset/host'; import type { TableData } from '@arco-design/web-vue/es/table/interface'; import axios from 'axios'; import qs from 'query-string'; @@ -29,7 +28,6 @@ export interface UploadTaskFileCreateRequest { export interface UploadTaskCreateResponse { id: number; token: string; - hosts: Array; } /** @@ -58,13 +56,24 @@ export interface UploadTaskQueryResponse extends TableData { startTime: number; endTime: number; createTime: number; - files: Array; + hosts: Array; } /** - * 上传任务文件查询响应 + * 上传任务主机响应 */ -export interface UploadTaskFileQueryResponse { +export interface UploadTaskHost { + id: number; + code: string; + name: string; + address: string; + files: Array; +} + +/** + * 上传任务文件响应 + */ +export interface UploadTaskFile { id: number; taskId: number; hostId: number; diff --git a/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue b/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue index 69a8ce50..b99b8542 100644 --- a/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue +++ b/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue @@ -4,10 +4,10 @@

文件列表

- + 清空 - @@ -16,7 +16,7 @@ - @@ -27,34 +27,36 @@
-
- -