From faa34a3600a12fd4c3ced3291e1b3efa50132981 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Mon, 13 Nov 2023 18:32:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E5=8A=A8=E4=B8=BB=E6=9C=BA?= =?UTF-8?q?=E5=88=86=E7=BB=84.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/common/constant/FieldConst.java | 8 + .../framework/common/enums/MovePosition.java | 42 ++ .../log/core/constant/OperatorLogKeys.java | 2 + .../asset/controller/HostGroupController.http | 43 ++ .../asset/controller/HostGroupController.java | 42 +- .../asset/convert/HostGroupConvert.java | 24 + .../operator/HostGroupOperatorType.java | 38 ++ .../asset/entity/vo/HostGroupTreeVO.java | 45 ++ .../ops/module/infra/api/DataGroupApi.java | 13 +- .../entity/dto/data/DataGroupMoveDTO.java | 38 ++ ...UpdateDTO.java => DataGroupRenameDTO.java} | 14 +- .../infra/api/impl/DataGroupApiImpl.java | 17 +- .../infra/convert/DataGroupConvert.java | 4 +- .../convert/DataGroupProviderConvert.java | 12 +- .../ops/module/infra/dao/DataGroupDAO.java | 14 + .../request/data/DataGroupMoveRequest.java | 38 ++ ...quest.java => DataGroupRenameRequest.java} | 8 +- .../infra/service/DataGroupService.java | 13 +- .../service/impl/DataGroupServiceImpl.java | 78 +++- .../main/resources/mapper/DataGroupMapper.xml | 7 + orion-ops-ui/src/api/asset/host-group.ts | 35 +- orion-ops-ui/src/utils/tree.ts | 37 ++ .../host-group/components/host-group-tree.vue | 420 ++++++++++-------- .../components/host-group-view-setting.vue | 60 ++- .../src/views/asset/host-group/index.vue | 1 - .../src/views/asset/host-group/types/const.ts | 8 +- .../system/menu/components/menu-table.vue | 1 + 27 files changed, 810 insertions(+), 252 deletions(-) create mode 100644 orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/enums/MovePosition.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.http create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostGroupConvert.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostGroupOperatorType.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostGroupTreeVO.java create mode 100644 orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupMoveDTO.java rename orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/{DataGroupUpdateDTO.java => DataGroupRenameDTO.java} (66%) create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupMoveRequest.java rename orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/{DataGroupUpdateRequest.java => DataGroupRenameRequest.java} (79%) diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FieldConst.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FieldConst.java index a85f558a..0c263403 100644 --- a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FieldConst.java +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FieldConst.java @@ -31,4 +31,12 @@ public interface FieldConst { String REL_ID = "relId"; + String BEFORE = "before"; + + String AFTER = "after"; + + String SOURCE = "source"; + + String TARGET = "target"; + } diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/enums/MovePosition.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/enums/MovePosition.java new file mode 100644 index 00000000..8241d42d --- /dev/null +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/enums/MovePosition.java @@ -0,0 +1,42 @@ +package com.orion.ops.framework.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 移动位置 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/11/13 17:26 + */ +@Getter +@AllArgsConstructor +public enum MovePosition { + + // 拖拽到目标元素上 + TOP(-1), + + // 拖拽到目标元素中 + IN(0), + + // 拖拽到目标元素下 + BOTTOM(1), + + ; + + private final Integer position; + + public static MovePosition of(Integer position) { + if (position == null) { + return null; + } + for (MovePosition value : values()) { + if (value.position.equals(position)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java index 0202e38e..926eab29 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java @@ -19,4 +19,6 @@ public interface OperatorLogKeys extends FieldConst { String KEY_NAME = "keyName"; + String POSITION_NAME = "positionName"; + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.http b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.http new file mode 100644 index 00000000..13f7d037 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.http @@ -0,0 +1,43 @@ +### 创建主机分组 +POST {{baseUrl}}/asset/host-group/create +Content-Type: application/json +Authorization: {{token}} + +{ + "parentId": -1, + "name": "" +} + + +### 查询主机分组 +GET {{baseUrl}}/asset/host-group/tree +Authorization: {{token}} + + +### 修改名称 +PUT {{baseUrl}}/asset/host-group/rename +Content-Type: application/json +Authorization: {{token}} + +{ + "id": "", + "name": "" +} + + +### 移动位置 +PUT {{baseUrl}}/asset/host-group/move +Content-Type: application/json +Authorization: {{token}} + +{ + "id": "", + "targetId": "", + "position": "" +} + + +### 删除主机分组 +DELETE {{baseUrl}}/asset/host-group/delete?id=1 +Authorization: {{token}} + diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.java index 26f9727f..39302d0c 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostGroupController.java @@ -4,12 +4,15 @@ import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; 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.HostOperatorType; +import com.orion.ops.module.asset.convert.HostGroupConvert; +import com.orion.ops.module.asset.define.operator.HostGroupOperatorType; +import com.orion.ops.module.asset.entity.vo.HostGroupTreeVO; import com.orion.ops.module.asset.service.HostService; import com.orion.ops.module.infra.api.DataGroupApi; import com.orion.ops.module.infra.entity.dto.data.DataGroupCreateDTO; import com.orion.ops.module.infra.entity.dto.data.DataGroupDTO; -import com.orion.ops.module.infra.entity.dto.data.DataGroupUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupMoveDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupRenameDTO; import com.orion.ops.module.infra.enums.DataGroupTypeEnum; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -43,13 +46,7 @@ public class HostGroupController { @Resource private DataGroupApi dataGroupApi; - // TODO 配置权限 - // TODO 配置操作日志类型 - // TODO 拖拽 - // TODO http - // TODO 聚合查询关联 - - @OperatorLog(HostOperatorType.CREATE) + @OperatorLog(HostGroupOperatorType.CREATE) @PostMapping("/create") @Operation(summary = "创建主机分组") @PreAuthorize("@ss.hasPermission('asset:host-group:create')") @@ -59,21 +56,30 @@ public class HostGroupController { @IgnoreLog(IgnoreLogMode.RET) @GetMapping("/tree") - @Operation(summary = "创建主机分组") + @Operation(summary = "查询主机分组") @PreAuthorize("@ss.hasPermission('asset:host-group:query')") - public List queryHostGroup() { - return dataGroupApi.getDataGroupTree(DataGroupTypeEnum.HOST); + public List queryHostGroup() { + List rows = dataGroupApi.getDataGroupTree(DataGroupTypeEnum.HOST); + return HostGroupConvert.MAPPER.toList(rows); } - @OperatorLog(HostOperatorType.UPDATE) + @OperatorLog(HostGroupOperatorType.RENAME) @PutMapping("/rename") @Operation(summary = "修改名称") @PreAuthorize("@ss.hasPermission('asset:host-group:update')") - public Integer updateHostGroupName(@Validated @RequestBody DataGroupUpdateDTO request) { + public Integer updateHostGroupName(@Validated @RequestBody DataGroupRenameDTO request) { return dataGroupApi.renameDataGroup(request); } - @OperatorLog(HostOperatorType.DELETE) + @OperatorLog(HostGroupOperatorType.MOVE) + @PutMapping("/move") + @Operation(summary = "移动位置") + @PreAuthorize("@ss.hasPermission('asset:host-group:update')") + public Integer moveHostGroup(@Validated @RequestBody DataGroupMoveDTO request) { + return dataGroupApi.moveDataGroup(request); + } + + @OperatorLog(HostGroupOperatorType.DELETE) @DeleteMapping("/delete") @Operation(summary = "删除主机分组") @PreAuthorize("@ss.hasPermission('asset:host-group:delete')") @@ -81,5 +87,11 @@ public class HostGroupController { return dataGroupApi.deleteDataGroupById(id); } + + // TODO 关联操作配置权限 + // TODO 关联操作配置操作日志类型 + // TODO 关联 增 删 查 + // TODO 聚合查询关联 + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostGroupConvert.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostGroupConvert.java new file mode 100644 index 00000000..a3c3636c --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostGroupConvert.java @@ -0,0 +1,24 @@ +package com.orion.ops.module.asset.convert; + +import com.orion.ops.module.asset.entity.vo.HostGroupTreeVO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 主机配置 内部对象转换器 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-9-11 14:16 + */ +@Mapper +public interface HostGroupConvert { + + HostGroupConvert MAPPER = Mappers.getMapper(HostGroupConvert.class); + + List toList(List list); + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostGroupOperatorType.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostGroupOperatorType.java new file mode 100644 index 00000000..197196c5 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostGroupOperatorType.java @@ -0,0 +1,38 @@ +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.H; +import static com.orion.ops.framework.biz.operator.log.core.enums.OperatorRiskLevel.L; + +/** + * 主机分组 操作日志类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/10/10 17:30 + */ +@Module("asset:host-group") +public class HostGroupOperatorType extends InitializingOperatorTypes { + + public static final String CREATE = "host-group:create"; + + public static final String RENAME = "host-group:rename"; + + public static final String MOVE = "host-group:move"; + + public static final String DELETE = "host-group:delete"; + + @Override + public OperatorType[] types() { + return new OperatorType[]{ + new OperatorType(L, CREATE, "创建主机分组 ${name}"), + new OperatorType(L, RENAME, "重命名主机分组 ${before} -> ${name}"), + new OperatorType(L, MOVE, "移动主机分组 ${source}${target}(${position})"), + new OperatorType(H, DELETE, "删除主机分组 ${name}"), + }; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostGroupTreeVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostGroupTreeVO.java new file mode 100644 index 00000000..1ffdc78c --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostGroupTreeVO.java @@ -0,0 +1,45 @@ +package com.orion.ops.module.asset.entity.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +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.0 + * @since 2023-9-20 11:55 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "HostGroupTreeVO", description = "主机秘钥 视图响应对象") +public class HostGroupTreeVO implements Serializable { + private static final long serialVersionUID = 1L; + + @JsonProperty("key") + @Schema(description = "id") + private Long id; + + @Schema(description = "父id") + private Long parentId; + + @JsonProperty("title") + @Schema(description = "组名称") + private String name; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "子节点") + private List children; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataGroupApi.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataGroupApi.java index ab78a5d0..f4d25b09 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataGroupApi.java +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataGroupApi.java @@ -2,7 +2,8 @@ package com.orion.ops.module.infra.api; import com.orion.ops.module.infra.entity.dto.data.DataGroupCreateDTO; import com.orion.ops.module.infra.entity.dto.data.DataGroupDTO; -import com.orion.ops.module.infra.entity.dto.data.DataGroupUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupMoveDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupRenameDTO; import com.orion.ops.module.infra.enums.DataGroupTypeEnum; import java.util.List; @@ -31,9 +32,15 @@ public interface DataGroupApi { * @param dto dto * @return effect */ - Integer renameDataGroup(DataGroupUpdateDTO dto); + Integer renameDataGroup(DataGroupRenameDTO dto); - // FIXME drag + /** + * 移动分组 + * + * @param dto dto + * @return effect + */ + Integer moveDataGroup(DataGroupMoveDTO dto); /** * 通过缓存查询数据分组 diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupMoveDTO.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupMoveDTO.java new file mode 100644 index 00000000..7ed6dda9 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupMoveDTO.java @@ -0,0 +1,38 @@ +package com.orion.ops.module.infra.entity.dto.data; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 数据分组 移动请求业务对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-11-7 18:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "DataGroupMoveDTO", description = "数据分组 移动请求业务对象") +public class DataGroupMoveDTO implements Serializable { + + @NotNull + @Schema(description = "id") + private Long id; + + @NotNull + @Schema(description = "目标id") + private Long targetId; + + @NotNull + @Schema(description = "移动位置") + private Integer position; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupUpdateDTO.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupRenameDTO.java similarity index 66% rename from orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupUpdateDTO.java rename to orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupRenameDTO.java index 7d52ac26..fb949a11 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupUpdateDTO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupRenameDTO.java @@ -6,12 +6,13 @@ 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; /** - * 数据分组 更新请求业务对象 + * 数据分组 重命名请求业务对象 * * @author Jiahang Li * @version 1.0.0 @@ -21,21 +22,16 @@ import java.io.Serializable; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "DataGroupUpdateDTO", description = "数据分组 更新请求业务对象") -public class DataGroupUpdateDTO implements Serializable { +@Schema(name = "DataGroupRenameDTO", description = "数据分组 重命名请求业务对象") +public class DataGroupRenameDTO implements Serializable { @NotNull @Schema(description = "id") private Long id; - @Schema(description = "父id") - private Long parentId; - + @NotBlank @Size(max = 32) @Schema(description = "组名称") private String name; - @Schema(description = "排序") - private Integer sort; - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataGroupApiImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataGroupApiImpl.java index 736d7e05..fb1ca671 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataGroupApiImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataGroupApiImpl.java @@ -6,9 +6,11 @@ import com.orion.ops.module.infra.convert.DataGroupProviderConvert; import com.orion.ops.module.infra.entity.dto.DataGroupCacheDTO; import com.orion.ops.module.infra.entity.dto.data.DataGroupCreateDTO; import com.orion.ops.module.infra.entity.dto.data.DataGroupDTO; -import com.orion.ops.module.infra.entity.dto.data.DataGroupUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupMoveDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupRenameDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupCreateRequest; -import com.orion.ops.module.infra.entity.request.data.DataGroupUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupMoveRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRenameRequest; import com.orion.ops.module.infra.enums.DataGroupTypeEnum; import com.orion.ops.module.infra.service.DataGroupService; import lombok.extern.slf4j.Slf4j; @@ -40,12 +42,19 @@ public class DataGroupApiImpl implements DataGroupApi { } @Override - public Integer renameDataGroup(DataGroupUpdateDTO dto) { + public Integer renameDataGroup(DataGroupRenameDTO dto) { Valid.valid(dto); - DataGroupUpdateRequest request = DataGroupProviderConvert.MAPPER.toRequest(dto); + DataGroupRenameRequest request = DataGroupProviderConvert.MAPPER.toRequest(dto); return dataGroupService.renameDataGroup(request); } + @Override + public Integer moveDataGroup(DataGroupMoveDTO dto) { + Valid.valid(dto); + DataGroupMoveRequest request = DataGroupProviderConvert.MAPPER.toRequest(dto); + return dataGroupService.moveDataGroup(request); + } + @Override public List getDataGroupList(DataGroupTypeEnum type) { List rows = dataGroupService.getDataGroupListByCache(type.name()); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupConvert.java index 279785ea..4c7b830e 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupConvert.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupConvert.java @@ -3,7 +3,7 @@ package com.orion.ops.module.infra.convert; import com.orion.ops.module.infra.entity.domain.DataGroupDO; import com.orion.ops.module.infra.entity.dto.DataGroupCacheDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupCreateRequest; -import com.orion.ops.module.infra.entity.request.data.DataGroupUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRenameRequest; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -21,7 +21,7 @@ public interface DataGroupConvert { DataGroupDO to(DataGroupCreateRequest request); - DataGroupDO to(DataGroupUpdateRequest request); + DataGroupDO to(DataGroupRenameRequest request); DataGroupCacheDTO toCache(DataGroupDO domain); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupProviderConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupProviderConvert.java index e426387b..4181edad 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupProviderConvert.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupProviderConvert.java @@ -4,9 +4,11 @@ import com.orion.ops.module.infra.entity.domain.DataGroupDO; import com.orion.ops.module.infra.entity.dto.DataGroupCacheDTO; import com.orion.ops.module.infra.entity.dto.data.DataGroupCreateDTO; import com.orion.ops.module.infra.entity.dto.data.DataGroupDTO; -import com.orion.ops.module.infra.entity.dto.data.DataGroupUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupMoveDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupRenameDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupCreateRequest; -import com.orion.ops.module.infra.entity.request.data.DataGroupUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupMoveRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRenameRequest; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -28,11 +30,13 @@ public interface DataGroupProviderConvert { DataGroupDTO to(DataGroupDO domain); - DataGroupDO to(DataGroupUpdateDTO update); + DataGroupDO to(DataGroupRenameDTO update); DataGroupCreateRequest toRequest(DataGroupCreateDTO request); - DataGroupUpdateRequest toRequest(DataGroupUpdateDTO request); + DataGroupRenameRequest toRequest(DataGroupRenameDTO request); + + DataGroupMoveRequest toRequest(DataGroupMoveDTO request); List toList(List list); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/DataGroupDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/DataGroupDAO.java index d45af183..806a38e7 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/DataGroupDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/DataGroupDAO.java @@ -27,6 +27,20 @@ public interface DataGroupDAO extends IMapper { */ Integer selectMaxSort(@Param("parentId") Long parentId, @Param("type") String type); + /** + * 修改排序 + * + * @param parentId parentId + * @param condition 条件 + * @param referSort 对比值 + * @param addition 自增步长 + * @return effect + */ + Integer updateSort(@Param("parentId") Long parentId, + @Param("condition") String condition, + @Param("referSort") Integer referSort, + @Param("addition") Integer addition); + /** * 通过 parentId 查询 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupMoveRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupMoveRequest.java new file mode 100644 index 00000000..44977fbe --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupMoveRequest.java @@ -0,0 +1,38 @@ +package com.orion.ops.module.infra.entity.request.data; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 数据分组 移动请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-11-7 18:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "DataGroupMoveRequest", description = "数据分组 移动请求对象") +public class DataGroupMoveRequest implements Serializable { + + @NotNull + @Schema(description = "id") + private Long id; + + @NotNull + @Schema(description = "目标id") + private Long targetId; + + @NotNull + @Schema(description = "移动位置") + private Integer position; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupRenameRequest.java similarity index 79% rename from orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupUpdateRequest.java rename to orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupRenameRequest.java index 3db01fd2..bbc0114c 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupUpdateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupRenameRequest.java @@ -22,20 +22,14 @@ import java.io.Serializable; @NoArgsConstructor @AllArgsConstructor @Schema(name = "DataGroupUpdateRequest", description = "数据分组 更新请求对象") -public class DataGroupUpdateRequest implements Serializable { +public class DataGroupRenameRequest implements Serializable { @NotNull @Schema(description = "id") private Long id; - @Schema(description = "父id") - private Long parentId; - @Size(max = 32) @Schema(description = "组名称") private String name; - @Schema(description = "排序") - private Integer sort; - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataGroupService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataGroupService.java index 135e77c9..2dd7dba8 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataGroupService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataGroupService.java @@ -2,7 +2,8 @@ package com.orion.ops.module.infra.service; import com.orion.ops.module.infra.entity.dto.DataGroupCacheDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupCreateRequest; -import com.orion.ops.module.infra.entity.request.data.DataGroupUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupMoveRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRenameRequest; import java.util.List; @@ -29,9 +30,15 @@ public interface DataGroupService { * @param request request * @return effect */ - Integer renameDataGroup(DataGroupUpdateRequest request); + Integer renameDataGroup(DataGroupRenameRequest request); - // FIXME drag + /** + * 移动分组 + * + * @param request request + * @return effect + */ + Integer moveDataGroup(DataGroupMoveRequest request); /** * 通过缓存查询数据分组 - 列表 diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataGroupServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataGroupServiceImpl.java index 0a9442b7..2937d289 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataGroupServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataGroupServiceImpl.java @@ -3,8 +3,10 @@ package com.orion.ops.module.infra.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs; import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.enums.MovePosition; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.redis.core.utils.RedisStrings; import com.orion.ops.module.infra.convert.DataGroupConvert; @@ -13,7 +15,8 @@ import com.orion.ops.module.infra.define.cache.DataGroupCacheKeyDefine; import com.orion.ops.module.infra.entity.domain.DataGroupDO; import com.orion.ops.module.infra.entity.dto.DataGroupCacheDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupCreateRequest; -import com.orion.ops.module.infra.entity.request.data.DataGroupUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupMoveRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRenameRequest; import com.orion.ops.module.infra.service.DataGroupRelService; import com.orion.ops.module.infra.service.DataGroupService; import lombok.extern.slf4j.Slf4j; @@ -63,7 +66,7 @@ public class DataGroupServiceImpl implements DataGroupService { } @Override - public Integer renameDataGroup(DataGroupUpdateRequest request) { + public Integer renameDataGroup(DataGroupRenameRequest request) { Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); String name = Valid.notBlank(request.getName()); // 查询 @@ -77,6 +80,8 @@ public class DataGroupServiceImpl implements DataGroupService { .build(); // 查询数据是否冲突 this.checkDataGroupPresent(updateRecord); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.BEFORE, record.getName()); // 更新 int effect = dataGroupDAO.updateById(updateRecord); // 删除缓存 @@ -85,12 +90,71 @@ public class DataGroupServiceImpl implements DataGroupService { return effect; } + @Override + @Transactional(rollbackFor = Exception.class) + public Integer moveDataGroup(DataGroupMoveRequest request) { + Long id = request.getId(); + Long targetId = request.getTargetId(); + MovePosition position = Valid.valid(MovePosition::of, request.getPosition()); + // 查询节点是否存在 + DataGroupDO moveRecord = dataGroupDAO.selectById(id); + DataGroupDO targetRecord = dataGroupDAO.selectById(targetId); + Valid.notNull(moveRecord, ErrorMessage.GROUP_ABSENT); + Valid.notNull(targetRecord, ErrorMessage.GROUP_ABSENT); + // 更新 + String type = moveRecord.getType(); + Long targetParentId = targetRecord.getParentId(); + int effect = 0; + // 修改排序 + if (MovePosition.TOP.equals(position)) { + // 移动到元素上 将大于等于 targetRecord 的排序都加 10 + dataGroupDAO.updateSort(targetParentId, ">=", + targetRecord.getSort(), Const.DEFAULT_SORT); + // 修改 parentId sort + DataGroupDO update = DataGroupDO.builder() + .id(id) + .parentId(targetParentId) + .sort(targetRecord.getSort()) + .build(); + effect = dataGroupDAO.updateById(update); + } else if (MovePosition.IN.equals(position)) { + // 移动到元素中 获取最大排序 + Integer newSort = dataGroupDAO.selectMaxSort(targetId, type) + Const.DEFAULT_SORT; + // 修改 parentId sort + DataGroupDO update = DataGroupDO.builder() + .id(id) + .parentId(targetId) + .sort(newSort) + .build(); + effect = dataGroupDAO.updateById(update); + } else if (MovePosition.BOTTOM.equals(position)) { + // 移动到元素下 将大于 targetRecord 的排序都加 10 + dataGroupDAO.updateSort(targetParentId, ">", + targetRecord.getSort(), Const.DEFAULT_SORT); + // 修改 parentId sort + DataGroupDO update = DataGroupDO.builder() + .id(id) + .parentId(targetParentId) + .sort(targetRecord.getSort() + 1) + .build(); + effect = dataGroupDAO.updateById(update); + } + // 删除缓存 + RedisStrings.delete(DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type), + DataGroupCacheKeyDefine.DATA_GROUP_TREE.format(type)); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.SOURCE, moveRecord.getName()); + OperatorLogs.add(OperatorLogs.TARGET, targetRecord.getName()); + OperatorLogs.add(OperatorLogs.POSITION_NAME, position.name()); + return effect; + } + @Override public List getDataGroupListByCache(String type) { // 查询缓存 String key = DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type); List list = RedisStrings.getJsonArray(key, DataGroupCacheKeyDefine.DATA_GROUP_LIST); - if (list.isEmpty()) { + if (Lists.isEmpty(list)) { // 查询数据库 list = dataGroupDAO.of() .createWrapper() @@ -116,7 +180,7 @@ public class DataGroupServiceImpl implements DataGroupService { // 查询缓存 String key = DataGroupCacheKeyDefine.DATA_GROUP_TREE.format(type); List treeData = RedisStrings.getJsonArray(key, DataGroupCacheKeyDefine.DATA_GROUP_TREE); - if (treeData.isEmpty()) { + if (Lists.isEmpty(treeData)) { // 查询列表缓存 List rows = this.getDataGroupListByCache(type); // 添加默认值 防止穿透 @@ -127,7 +191,7 @@ public class DataGroupServiceImpl implements DataGroupService { } else { // 构建树 DataGroupCacheDTO rootNode = DataGroupCacheDTO.builder() - .parentId(Const.ROOT_PARENT_ID) + .id(Const.ROOT_PARENT_ID) .sort(Const.DEFAULT_SORT) .build(); this.buildGroupTree(rootNode, rows); @@ -151,7 +215,7 @@ public class DataGroupServiceImpl implements DataGroupService { List nodes) { // 获取子节点 List childrenNodes = nodes.stream() - .filter(s -> parentNode.getParentId().equals(s.getParentId())) + .filter(s -> parentNode.getId().equals(s.getParentId())) .sorted(Comparator.comparing(DataGroupCacheDTO::getSort)) .collect(Collectors.toList()); if (childrenNodes.isEmpty()) { @@ -183,6 +247,8 @@ public class DataGroupServiceImpl implements DataGroupService { // 删除缓存 RedisStrings.delete(DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type), DataGroupCacheKeyDefine.DATA_GROUP_TREE.format(type)); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.NAME, record.getName()); return effect; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/DataGroupMapper.xml b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/DataGroupMapper.xml index 24e5f7ef..cea2ba06 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/DataGroupMapper.xml +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/resources/mapper/DataGroupMapper.xml @@ -21,6 +21,13 @@ id, parent_id, name, type, sort, create_time, update_time, creator, updater, deleted + + UPDATE data_group + SET sort = sort + #{addition} + WHERE parent_id = #{parentId} + AND sort ${condition} #{referSort} + +