From f32369047289029fffba98f1a6f6afa711b2d52b Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Wed, 8 May 2024 00:13:29 +0800 Subject: [PATCH] =?UTF-8?q?:construction:=20=E6=89=B9=E9=87=8F=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/orion-ops-pro/build.sh | 10 +- .../core/generator/CodeGenerators.java | 14 +- .../core/generator/template/Template.java | 10 +- .../controller/UploadTaskController.http | 41 +++++ .../controller/UploadTaskController.java | 94 ++++++++++ .../ops/module/asset/convert/HostConvert.java | 3 + .../asset/convert/UploadTaskConvert.java | 32 ++++ .../ops/module/asset/dao/UploadTaskDAO.java | 17 ++ .../operator/UploadTaskOperatorType.java | 31 ++++ .../asset/entity/domain/HostIdentityDO.java | 5 +- .../module/asset/entity/domain/HostKeyDO.java | 5 +- .../asset/entity/domain/UploadTaskDO.java | 67 +++++++ .../module/asset/entity/dto/HostCacheDTO.java | 7 - .../entity/dto/HostConnectLogExtraDTO.java | 4 +- .../entity/dto/HostIdentityCacheDTO.java | 7 - .../asset/entity/dto/HostKeyCacheDTO.java | 7 - .../asset/entity/dto/UploadTaskExtraDTO.java | 32 ++++ .../host/HostGroupRelUpdateRequest.java | 2 - .../upload/UploadTaskCreateRequest.java | 47 +++++ .../request/upload/UploadTaskFileRequest.java | 36 ++++ .../upload/UploadTaskQueryRequest.java | 47 +++++ .../module/asset/entity/vo/HostBaseVO.java | 39 ++++ .../asset/entity/vo/UploadTaskCreateVO.java | 33 ++++ .../module/asset/entity/vo/UploadTaskVO.java | 58 ++++++ .../module/asset/enums/ExecSourceEnum.java | 12 ++ .../module/asset/enums/HostSshOsTypeEnum.java | 1 - .../asset/enums/UploadTaskStatusEnum.java | 46 +++++ .../asset/service/UploadTaskService.java | 60 ++++++ .../service/impl/UploadTaskServiceImpl.java | 171 ++++++++++++++++++ .../resources/mapper/UploadTaskMapper.xml | 28 +++ .../components/exec-template-table.vue | 4 - .../dict-key/components/dict-key-table.vue | 2 +- .../views/user/user/components/user-table.vue | 3 +- 33 files changed, 928 insertions(+), 47 deletions(-) create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.http create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/UploadTaskDAO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/UploadTaskOperatorType.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/UploadTaskExtraDTO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskCreateRequest.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskFileRequest.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskQueryRequest.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostBaseVO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskCreateVO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml diff --git a/docker/orion-ops-pro/build.sh b/docker/orion-ops-pro/build.sh index 606758f3..614d376e 100644 --- a/docker/orion-ops-pro/build.sh +++ b/docker/orion-ops-pro/build.sh @@ -1,3 +1,9 @@ -mv ../../orion-ops-launch/target/orion-ops-launch.jar ./ +#/bin/bash +version=1.0.7 +cp ../../sql/* ./ mv ../../orion-ops-ui/dist ./dist -docker build -t orion-ops-pro:1.0.7 . +docker build -t orion-ops-pro:${version} . +rm -f ./orion-ops-launch.jar +rm -rf ./dist +docker tag orion-ops-pro:${version} registry.cn-hangzhou.aliyuncs.com/orion-ops/orion-ops-pro:${version} +docker push registry.cn-hangzhou.aliyuncs.com/orion-ops/orion-ops-pro:${version} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java index 66a19e21..6f0ca946 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java @@ -10,7 +10,6 @@ import com.orion.ops.framework.mybatis.core.generator.template.Table; import com.orion.ops.framework.mybatis.core.generator.template.Template; import java.io.File; -import java.util.concurrent.TimeUnit; /** * 代码生成器 @@ -40,6 +39,7 @@ public class CodeGenerators { // .enableCardView() // .enableDrawerForm() // .dict("dictValueType", "value_type") + // .comment("字典值类型") // .fields("STRING", "INTEGER", "DECIMAL", "BOOLEAN", "COLOR") // .labels("字符串", "整数", "小数", "布尔值", "颜色") // .color("blue", "gray", "red", "green", "white") @@ -49,11 +49,15 @@ public class CodeGenerators { // .disableUnitTest() // .vue("exec", "exec-template-host") // .build(), - Template.create("path_bookmark", "路径标签", "path") + Template.create("upload_task", "上传任务", "upload") .disableUnitTest() - .cache("path:bookmark:list:{}", "路径标签列表 ${userId}") - .expire(8, TimeUnit.HOURS) - .vue("host", "path-bookmark") + .vue("exec", "batch-upload") + .enableRowSelection() + .dict("uploadTaskStatus", "status") + .comment("上传任务状态") + .fields("PREPARATION", "UPLOADING", "FINISHED", "CANCELED") + .labels("准备中", "上传中", "已完成", "已取消") + .valueUseFields() .build(), }; // jdbc 配置 - 使用配置文件 diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/Template.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/Template.java index da62ccfe..327917e2 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/Template.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/Template.java @@ -83,13 +83,13 @@ public class Template { /** * 设置字典 * - * @param keyName 字典配置名称 - * @param variable 替换字段 数据库/小驼峰 - * @param className 字段名称 + * @param keyName 字典配置名称 + * @param variable 替换字段 数据库/小驼峰 + * @param field 字段名称 * @return dict */ - public DictTemplate dict(String keyName, String variable, String className) { - return new DictTemplate(table, keyName, variable, className); + public DictTemplate dict(String keyName, String variable, String field) { + return new DictTemplate(table, keyName, variable, field); } /** diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.http b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.http new file mode 100644 index 00000000..6097a093 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.http @@ -0,0 +1,41 @@ +### 创建上传任务 +POST {{baseUrl}}/asset/upload-task/create +Content-Type: application/json +Authorization: {{token}} + +{ + "remotePath": "", + "description": "" +} + + +### 查询上传任务 +GET {{baseUrl}}/asset/upload-task/get?id=1 +Authorization: {{token}} + + +### 分页查询上传任务 +POST {{baseUrl}}/asset/upload-task/query +Content-Type: application/json +Authorization: {{token}} + +{ + "page": 1, + "limit": 10, + "id": "", + "userId": "", + "description": "", + "status": "" +} + + +### 删除上传任务 +DELETE {{baseUrl}}/asset/upload-task/delete?id=1 +Authorization: {{token}} + + +### 批量删除上传任务 +DELETE {{baseUrl}}/asset/upload-task/batch-delete?idList=1,2,3 +Authorization: {{token}} + +### 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 new file mode 100644 index 00000000..78d87d2d --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java @@ -0,0 +1,94 @@ +package com.orion.ops.module.asset.controller; + +import com.orion.lang.define.wrapper.DataGrid; +import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; +import com.orion.ops.framework.common.validator.group.Page; +import com.orion.ops.framework.log.core.annotation.IgnoreLog; +import com.orion.ops.framework.log.core.enums.IgnoreLogMode; +import com.orion.ops.framework.web.core.annotation.RestWrapper; +import com.orion.ops.module.asset.define.operator.UploadTaskOperatorType; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskCreateRequest; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskQueryRequest; +import com.orion.ops.module.asset.entity.vo.UploadTaskCreateVO; +import com.orion.ops.module.asset.entity.vo.UploadTaskVO; +import com.orion.ops.module.asset.service.UploadTaskService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 上传任务 api + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Tag(name = "asset - 上传任务服务") +@Slf4j +@Validated +@RestWrapper +@RestController +@RequestMapping("/asset/upload-task") +@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) +public class UploadTaskController { + + @Resource + private UploadTaskService uploadTaskService; + + // TODO 字典颜色 菜单 操作日志 + // TODO start + // TODO cancel + // todo CLEAR + + @OperatorLog(UploadTaskOperatorType.UPLOAD) + @PostMapping("/create") + @Operation(summary = "创建上传任务") + @PreAuthorize("@ss.hasPermission('asset:upload-task:upload')") + public UploadTaskCreateVO createUploadTask(@Validated @RequestBody UploadTaskCreateRequest request) { + return uploadTaskService.createUploadTask(request); + } + + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/get") + @Operation(summary = "查询上传任务") + @Parameter(name = "id", description = "id", required = true) + @PreAuthorize("@ss.hasPermission('asset:upload-task:query')") + public UploadTaskVO getUploadTask(@RequestParam("id") Long id) { + return uploadTaskService.getUploadTaskById(id); + } + + @IgnoreLog(IgnoreLogMode.RET) + @PostMapping("/query") + @Operation(summary = "分页查询上传任务") + @PreAuthorize("@ss.hasPermission('asset:upload-task:query')") + public DataGrid getUploadTaskPage(@Validated(Page.class) @RequestBody UploadTaskQueryRequest request) { + return uploadTaskService.getUploadTaskPage(request); + } + + @OperatorLog(UploadTaskOperatorType.DELETE) + @DeleteMapping("/delete") + @Operation(summary = "删除上传任务") + @Parameter(name = "id", description = "id", required = true) + @PreAuthorize("@ss.hasPermission('asset:upload-task:delete')") + public Integer deleteUploadTask(@RequestParam("id") Long id) { + return uploadTaskService.deleteUploadTaskById(id); + } + + @OperatorLog(UploadTaskOperatorType.DELETE) + @DeleteMapping("/batch-delete") + @Operation(summary = "批量删除上传任务") + @Parameter(name = "idList", description = "idList", required = true) + @PreAuthorize("@ss.hasPermission('asset:upload-task:delete')") + public Integer batchDeleteUploadTask(@RequestParam("idList") List idList) { + return uploadTaskService.deleteUploadTaskByIdList(idList); + } + +} + diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConvert.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConvert.java index 6d786e19..de670c8a 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConvert.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConvert.java @@ -5,6 +5,7 @@ import com.orion.ops.module.asset.entity.dto.HostCacheDTO; import com.orion.ops.module.asset.entity.request.host.HostCreateRequest; import com.orion.ops.module.asset.entity.request.host.HostQueryRequest; import com.orion.ops.module.asset.entity.request.host.HostUpdateRequest; +import com.orion.ops.module.asset.entity.vo.HostBaseVO; import com.orion.ops.module.asset.entity.vo.HostVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -35,6 +36,8 @@ public interface HostConvert { HostCacheDTO toCache(HostDO domain); + HostBaseVO toBase(HostDO domain); + List toList(List domain); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java new file mode 100644 index 00000000..aa0da356 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java @@ -0,0 +1,32 @@ +package com.orion.ops.module.asset.convert; + +import com.orion.ops.module.asset.entity.domain.UploadTaskDO; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskCreateRequest; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskQueryRequest; +import com.orion.ops.module.asset.entity.vo.UploadTaskVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 上传任务 内部对象转换器 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Mapper +public interface UploadTaskConvert { + + UploadTaskConvert MAPPER = Mappers.getMapper(UploadTaskConvert.class); + + UploadTaskDO to(UploadTaskCreateRequest request); + + UploadTaskDO to(UploadTaskQueryRequest request); + + UploadTaskVO to(UploadTaskDO domain); + + List to(List list); + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/UploadTaskDAO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/UploadTaskDAO.java new file mode 100644 index 00000000..81d1bd36 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/UploadTaskDAO.java @@ -0,0 +1,17 @@ +package com.orion.ops.module.asset.dao; + +import com.orion.ops.framework.mybatis.core.mapper.IMapper; +import com.orion.ops.module.asset.entity.domain.UploadTaskDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 上传任务 Mapper 接口 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Mapper +public interface UploadTaskDAO extends IMapper { + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/UploadTaskOperatorType.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/UploadTaskOperatorType.java new file mode 100644 index 00000000..6934d9e7 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/UploadTaskOperatorType.java @@ -0,0 +1,31 @@ +package com.orion.ops.module.asset.define.operator; + +import com.orion.ops.framework.biz.operator.log.core.annotation.Module; +import com.orion.ops.framework.biz.operator.log.core.factory.InitializingOperatorTypes; +import com.orion.ops.framework.biz.operator.log.core.model.OperatorType; + +import static com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel.*; + +/** + * 上传任务 操作日志类型 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Module("asset:upload-task") +public class UploadTaskOperatorType extends InitializingOperatorTypes { + + public static final String UPLOAD = "upload-task:upload"; + + public static final String DELETE = "upload-task:delete"; + + @Override + public OperatorType[] types() { + return new OperatorType[]{ + new OperatorType(M, UPLOAD, "批量上传文件"), + new OperatorType(H, DELETE, "删除批量上传记录"), + }; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java index f7c340b3..60bc8252 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java @@ -1,6 +1,9 @@ package com.orion.ops.module.asset.entity.domain; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.orion.ops.framework.mybatis.core.domain.BaseDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostKeyDO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostKeyDO.java index 9b897caf..284218ba 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostKeyDO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostKeyDO.java @@ -1,6 +1,9 @@ package com.orion.ops.module.asset.entity.domain; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.orion.ops.framework.mybatis.core.domain.BaseDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java new file mode 100644 index 00000000..29178b7b --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java @@ -0,0 +1,67 @@ +package com.orion.ops.module.asset.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.orion.ops.framework.mybatis.core.domain.BaseDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.util.Date; + +/** + * 上传任务 实体对象 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName(value = "upload_task", autoResultMap = true) +@Schema(name = "UploadTaskDO", description = "上传任务 实体对象") +public class UploadTaskDO extends BaseDO { + + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "用户id") + @TableField("user_id") + private Long userId; + + @Schema(description = "用户名") + @TableField("username") + private String username; + + @Schema(description = "远程路径") + @TableField("remote_path") + private String remotePath; + + @Schema(description = "描述") + @TableField("description") + private String description; + + @Schema(description = "状态") + @TableField("status") + private String status; + + @Schema(description = "额外信息") + @TableField("extra_info") + private String extraInfo; + + @Schema(description = "开始时间") + @TableField("start_time") + private Date startTime; + + @Schema(description = "结束时间") + @TableField("end_time") + private Date endTime; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostCacheDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostCacheDTO.java index 4ec3e45d..7c0b3110 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostCacheDTO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostCacheDTO.java @@ -8,7 +8,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.util.Date; /** * 主机 缓存对象 @@ -36,10 +35,4 @@ public class HostCacheDTO implements LongCacheIdModel, Serializable { @Schema(description = "主机地址") private String address; - @Schema(description = "创建时间") - private Date createTime; - - @Schema(description = "修改时间") - private Date updateTime; - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostConnectLogExtraDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostConnectLogExtraDTO.java index b314e5cd..29758f21 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostConnectLogExtraDTO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostConnectLogExtraDTO.java @@ -7,7 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * 主机连接日志推展信息对象 + * 主机连接日志拓展信息对象 * * @author Jiahang Li * @version 1.0.0 @@ -17,7 +17,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "HostConnectLogExtraDTO", description = "主机连接日志推展信息对象") +@Schema(name = "HostConnectLogExtraDTO", description = "主机连接日志拓展信息对象") public class HostConnectLogExtraDTO { @Schema(description = "hostId") diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java index 27d2ced3..e582a912 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java @@ -8,7 +8,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.util.Date; /** * 主机身份缓存 @@ -39,10 +38,4 @@ public class HostIdentityCacheDTO implements LongCacheIdModel, Serializable { @Schema(description = "秘钥id") private Long keyId; - @Schema(description = "创建时间") - private Date createTime; - - @Schema(description = "修改时间") - private Date updateTime; - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostKeyCacheDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostKeyCacheDTO.java index 90f49fde..106e33d9 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostKeyCacheDTO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostKeyCacheDTO.java @@ -8,7 +8,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.util.Date; /** * 主机秘钥缓存 @@ -30,10 +29,4 @@ public class HostKeyCacheDTO implements LongCacheIdModel, Serializable { @Schema(description = "名称") private String name; - @Schema(description = "创建时间") - private Date createTime; - - @Schema(description = "修改时间") - private Date updateTime; - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/UploadTaskExtraDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/UploadTaskExtraDTO.java new file mode 100644 index 00000000..f020f2ba --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/UploadTaskExtraDTO.java @@ -0,0 +1,32 @@ +package com.orion.ops.module.asset.entity.dto; + +import com.orion.ops.module.asset.entity.vo.HostBaseVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 上传任务拓展信息对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/5/7 23:45 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "UploadTaskExtraDTO", description = "上传任务拓展信息对象") +public class UploadTaskExtraDTO { + + @Schema(description = "hostIdList") + private List hostIdList; + + @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/request/host/HostGroupRelUpdateRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostGroupRelUpdateRequest.java index f3aa6bc0..99f7197f 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostGroupRelUpdateRequest.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostGroupRelUpdateRequest.java @@ -6,9 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; import java.io.Serializable; import java.util.List; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskCreateRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskCreateRequest.java new file mode 100644 index 00000000..c0e4adb6 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskCreateRequest.java @@ -0,0 +1,47 @@ +package com.orion.ops.module.asset.entity.request.upload; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.List; + +/** + * 上传任务 创建请求对象 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "UploadTaskCreateRequest", description = "上传任务 创建请求对象") +public class UploadTaskCreateRequest implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotBlank + @Size(max = 1024) + @Schema(description = "远程路径") + private String remotePath; + + @Size(max = 128) + @Schema(description = "描述") + private String description; + + @NotEmpty + @Schema(description = "上传主机id") + private List hostIdList; + + @NotEmpty + @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/request/upload/UploadTaskFileRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskFileRequest.java new file mode 100644 index 00000000..cb4ff823 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskFileRequest.java @@ -0,0 +1,36 @@ +package com.orion.ops.module.asset.entity.request.upload; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 上传任务文件 请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/5/7 22:54 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "UploadTaskFileRequest", description = "上传任务文件 创建请求对象") +public class UploadTaskFileRequest implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotBlank + @Schema(description = "文件id") + private String fileId; + + @NotBlank + @Schema(description = "远程文件地址") + private String remotePath; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskQueryRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskQueryRequest.java new file mode 100644 index 00000000..a00aaf4e --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskQueryRequest.java @@ -0,0 +1,47 @@ +package com.orion.ops.module.asset.entity.request.upload; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.orion.ops.framework.common.entity.PageRequest; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 上传任务 查询请求对象 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Schema(name = "UploadTaskQueryRequest", description = "上传任务 查询请求对象") +public class UploadTaskQueryRequest extends PageRequest { + + @Schema(description = "id") + private Long id; + + @Schema(description = "用户id") + private Long userId; + + @Size(max = 128) + @Schema(description = "描述") + private String description; + + @Size(max = 16) + @Schema(description = "状态") + private String status; + + @Schema(description = "额外信息") + private String extraInfo; + + @Schema(description = "开始时间-区间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date[] startTimeRange; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostBaseVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostBaseVO.java new file mode 100644 index 00000000..6e8d3e52 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostBaseVO.java @@ -0,0 +1,39 @@ +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; + +/** + * 主机基本信息 视图响应对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-9-11 14:16 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "HostBaseVO", description = "主机基本信息 视图响应对象") +public class HostBaseVO 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; + +} 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 new file mode 100644 index 00000000..e0d1c9d8 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskCreateVO.java @@ -0,0 +1,33 @@ +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; + +/** + * 上传任务 视图响应对象 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "UploadTaskCreateVO", description = "上传任务创建 视图响应对象") +public class UploadTaskCreateVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + private Long id; + + @Schema(description = "上传 token") + private String token; + +} 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 new file mode 100644 index 00000000..0af85570 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java @@ -0,0 +1,58 @@ +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.Date; + +/** + * 上传任务 视图响应对象 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "UploadTaskVO", description = "上传任务 视图响应对象") +public class UploadTaskVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + private Long id; + + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "用户名") + private String username; + + @Schema(description = "远程路径") + private String remotePath; + + @Schema(description = "描述") + private String description; + + @Schema(description = "状态") + private String status; + + @Schema(description = "额外信息") + private String extraInfo; + + @Schema(description = "开始时间") + private Date startTime; + + @Schema(description = "结束时间") + private Date endTime; + + @Schema(description = "创建时间") + private Date createTime; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/ExecSourceEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/ExecSourceEnum.java index 8d07f95b..bf06a381 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/ExecSourceEnum.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/ExecSourceEnum.java @@ -21,4 +21,16 @@ public enum ExecSourceEnum { ; + public static ExecSourceEnum of(String source) { + if (source == null) { + return null; + } + for (ExecSourceEnum value : values()) { + if (value.name().equals(source)) { + return value; + } + } + return null; + } + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostSshOsTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostSshOsTypeEnum.java index c9273989..8e9dba31 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostSshOsTypeEnum.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostSshOsTypeEnum.java @@ -40,5 +40,4 @@ public enum HostSshOsTypeEnum { return null; } - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java new file mode 100644 index 00000000..90e5b00e --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java @@ -0,0 +1,46 @@ +package com.orion.ops.module.asset.enums; + +/** + * 上传任务状态 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/5/7 22:21 + */ +public enum UploadTaskStatusEnum { + + /** + * 准备中 + */ + PREPARATION, + + /** + * 上传中 + */ + UPLOADING, + + /** + * 已完成 + */ + FINISHED, + + /** + * 已取消 + */ + CANCELED, + + ; + + public static UploadTaskStatusEnum of(String status) { + if (status == null) { + return null; + } + for (UploadTaskStatusEnum value : values()) { + if (value.name().equals(status)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java new file mode 100644 index 00000000..d4321d1d --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java @@ -0,0 +1,60 @@ +package com.orion.ops.module.asset.service; + +import com.orion.lang.define.wrapper.DataGrid; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskCreateRequest; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskQueryRequest; +import com.orion.ops.module.asset.entity.vo.UploadTaskCreateVO; +import com.orion.ops.module.asset.entity.vo.UploadTaskVO; + +import java.util.List; + +/** + * 上传任务 服务类 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +public interface UploadTaskService { + + /** + * 创建上传任务 + * + * @param request request + * @return result + */ + UploadTaskCreateVO createUploadTask(UploadTaskCreateRequest request); + + /** + * 查询上传任务 + * + * @param id id + * @return row + */ + UploadTaskVO getUploadTaskById(Long id); + + /** + * 分页查询上传任务 + * + * @param request request + * @return rows + */ + DataGrid getUploadTaskPage(UploadTaskQueryRequest request); + + /** + * 删除上传任务 + * + * @param id id + * @return effect + */ + Integer deleteUploadTaskById(Long id); + + /** + * 批量删除上传任务 + * + * @param idList idList + * @return effect + */ + Integer deleteUploadTaskByIdList(List idList); + +} 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 new file mode 100644 index 00000000..be0618a8 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java @@ -0,0 +1,171 @@ +package com.orion.ops.module.asset.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.orion.lang.define.wrapper.DataGrid; +import com.orion.lang.utils.Arrays1; +import com.orion.lang.utils.Strings; +import com.orion.lang.utils.time.Dates; +import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.file.FileClient; +import com.orion.ops.framework.common.security.LoginUser; +import com.orion.ops.framework.common.utils.Valid; +import com.orion.ops.framework.security.core.utils.SecurityUtils; +import com.orion.ops.module.asset.convert.HostConvert; +import com.orion.ops.module.asset.convert.UploadTaskConvert; +import com.orion.ops.module.asset.dao.HostDAO; +import com.orion.ops.module.asset.dao.UploadTaskDAO; +import com.orion.ops.module.asset.entity.domain.UploadTaskDO; +import com.orion.ops.module.asset.entity.dto.UploadTaskExtraDTO; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskCreateRequest; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskQueryRequest; +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.UploadTaskVO; +import com.orion.ops.module.asset.enums.HostConfigTypeEnum; +import com.orion.ops.module.asset.enums.UploadTaskStatusEnum; +import com.orion.ops.module.asset.service.AssetAuthorizedDataService; +import com.orion.ops.module.asset.service.UploadTaskService; +import com.orion.ops.module.infra.api.FileUploadApi; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 上传任务 服务实现类 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Slf4j +@Service +public class UploadTaskServiceImpl implements UploadTaskService { + + private static final String SWAP_ENDPOINT = "/upload/swap/{}"; + + private static final String DEFAULT_DESC = "上传文件 {}"; + + @Resource + private UploadTaskDAO uploadTaskDAO; + + @Resource + private HostDAO hostDAO; + + @Resource + private AssetAuthorizedDataService assetAuthorizedDataService; + + @Resource + private FileClient localFileClient; + + @Resource + private FileUploadApi fileUploadApi; + + @Override + public UploadTaskCreateVO createUploadTask(UploadTaskCreateRequest request) { + LoginUser user = Valid.notNull(SecurityUtils.getLoginUser()); + List hostIdList = request.getHostIdList(); + log.info("UploadTaskService-createUploadTask request: {}", JSON.toJSONString(request)); + // 检查主机是否有权限 + this.checkHostPermission(hostIdList); + // 查询主机信息 + List hosts = hostDAO.selectBatchIds(hostIdList) + .stream() + .map(HostConvert.MAPPER::toBase) + .collect(Collectors.toList()); + // 转换 + UploadTaskDO record = UploadTaskConvert.MAPPER.to(request); + record.setUserId(user.getId()); + record.setUsername(user.getUsername()); + record.setDescription(Strings.def(record.getDescription(), () -> Strings.format(DEFAULT_DESC, Dates.current()))); + record.setStatus(UploadTaskStatusEnum.PREPARATION.name()); + UploadTaskExtraDTO extra = UploadTaskExtraDTO.builder() + .hostIdList(hostIdList) + .hosts(hosts) + .build(); + record.setExtraInfo(JSON.toJSONString(extra)); + // 插入 + int effect = uploadTaskDAO.insert(record); + Long id = record.getId(); + // 设置 uploadToken + String token = fileUploadApi.createUploadToken(user.getId(), Strings.format(SWAP_ENDPOINT, id)); + log.info("UploadTaskService-createUploadTask id: {}, effect: {}", id, effect); + return UploadTaskCreateVO.builder() + .id(id) + .token(token) + .build(); + } + + @Override + public UploadTaskVO getUploadTaskById(Long id) { + // 查询 + UploadTaskDO record = uploadTaskDAO.selectById(id); + Valid.notNull(record, ErrorMessage.DATA_ABSENT); + // 转换 + return UploadTaskConvert.MAPPER.to(record); + } + + @Override + public DataGrid getUploadTaskPage(UploadTaskQueryRequest request) { + // 条件 + LambdaQueryWrapper wrapper = this.buildQueryWrapper(request); + // 查询 + return uploadTaskDAO.of(wrapper) + .page(request) + .dataGrid(UploadTaskConvert.MAPPER::to); + } + + @Override + public Integer deleteUploadTaskById(Long id) { + log.info("UploadTaskService-deleteUploadTaskById id: {}", id); + // 检查数据是否存在 + UploadTaskDO record = uploadTaskDAO.selectById(id); + Valid.notNull(record, ErrorMessage.DATA_ABSENT); + // 删除 + int effect = uploadTaskDAO.deleteById(id); + log.info("UploadTaskService-deleteUploadTaskById id: {}, effect: {}", id, effect); + return effect; + } + + @Override + public Integer deleteUploadTaskByIdList(List idList) { + log.info("UploadTaskService-deleteUploadTaskByIdList idList: {}", idList); + int effect = uploadTaskDAO.deleteBatchIds(idList); + log.info("UploadTaskService-deleteUploadTaskByIdList effect: {}", effect); + return effect; + } + + /** + * 构建查询 wrapper + * + * @param request request + * @return wrapper + */ + private LambdaQueryWrapper buildQueryWrapper(UploadTaskQueryRequest request) { + return uploadTaskDAO.wrapper() + .eq(UploadTaskDO::getId, request.getId()) + .eq(UploadTaskDO::getUserId, request.getUserId()) + .eq(UploadTaskDO::getDescription, request.getDescription()) + .eq(UploadTaskDO::getStatus, request.getStatus()) + .ge(UploadTaskDO::getStartTime, Arrays1.getIfPresent(request.getStartTimeRange(), 0)) + .le(UploadTaskDO::getStartTime, Arrays1.getIfPresent(request.getStartTimeRange(), 1)) + .orderByDesc(UploadTaskDO::getId); + } + + /** + * 检查主机权限 + * + * @param hostIdList hostIdList + */ + private void checkHostPermission(List hostIdList) { + // 查询有权限的主机 + List authorizedHostIdList = assetAuthorizedDataService.getUserAuthorizedHostIdWithEnabledConfig(SecurityUtils.getLoginUserId(), HostConfigTypeEnum.SSH); + for (Long hostId : hostIdList) { + Valid.isTrue(authorizedHostIdList.contains(hostId), Strings.format(ErrorMessage.PLEASE_CHECK_HOST_SSH, hostId)); + } + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml new file mode 100644 index 00000000..f717beb1 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + id, user_id, username, remote_path, description, status, extra_info, start_time, end_time, create_time, update_time, creator, updater, deleted + + + diff --git a/orion-ops-ui/src/views/exec/exec-template/components/exec-template-table.vue b/orion-ops-ui/src/views/exec/exec-template/components/exec-template-table.vue index 2e300368..044af1c3 100644 --- a/orion-ops-ui/src/views/exec/exec-template/components/exec-template-table.vue +++ b/orion-ops-ui/src/views/exec/exec-template/components/exec-template-table.vue @@ -62,10 +62,6 @@ @page-change="(page) => fetchTableData(page, pagination.pageSize)" @page-size-change="(size) => fetchTableData(1, size)" :bordered="false"> - -