From 894edb52a78974de12a065351c51268461444927 Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Tue, 14 Nov 2023 00:57:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=BE=E7=BD=AE=E4=B8=BB=E6=9C=BA?= =?UTF-8?q?=E5=88=86=E7=BB=84=E5=86=85=E5=85=83=E7=B4=A0.?= 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 | 66 ++- .../asset/convert/HostGroupConvert.java | 24 + .../operator/HostGroupOperatorType.java | 40 ++ .../host/HostGroupRelUpdateRequest.java | 36 ++ .../asset/entity/vo/HostGroupTreeVO.java | 45 ++ .../ops/module/infra/api/DataGroupApi.java | 13 +- .../ops/module/infra/api/DataGroupRelApi.java | 8 + .../entity/dto/data/DataGroupMoveDTO.java | 38 ++ .../dto/data/DataGroupRelUpdateDTO.java | 34 ++ ...UpdateDTO.java => DataGroupRenameDTO.java} | 14 +- .../infra/api/impl/DataGroupApiImpl.java | 17 +- .../infra/api/impl/DataGroupRelApiImpl.java | 9 + .../infra/convert/DataGroupConvert.java | 4 +- .../convert/DataGroupProviderConvert.java | 12 +- .../convert/DataGroupRelProviderConvert.java | 4 + .../ops/module/infra/dao/DataGroupDAO.java | 14 + .../ops/module/infra/dao/DataGroupRelDAO.java | 12 + .../request/data/DataGroupMoveRequest.java | 38 ++ .../data/DataGroupRelUpdateRequest.java | 34 ++ ...quest.java => DataGroupRenameRequest.java} | 8 +- .../infra/service/DataGroupRelService.java | 8 + .../infra/service/DataGroupService.java | 13 +- .../service/impl/DataGroupRelServiceImpl.java | 48 ++ .../service/impl/DataGroupServiceImpl.java | 78 +++- .../main/resources/mapper/DataGroupMapper.xml | 7 + orion-ops-ui/src/api/asset/host-group-rel.ts | 114 ----- orion-ops-ui/src/api/asset/host-group.ts | 59 ++- orion-ops-ui/src/assets/style/global.less | 6 +- .../src/components/app/navbar/index.vue | 46 +- .../src/components/app/tab-bar/index.vue | 4 +- .../src/components/app/tab-bar/tab-item.vue | 3 +- .../system/menu/grant/menu-grant-table.vue | 119 ++--- .../menu/selector/menu-selector-tree.vue | 148 ------ orion-ops-ui/src/utils/index.ts | 7 + orion-ops-ui/src/utils/tree.ts | 153 +++++++ .../host-group/components/host-group-tree.vue | 420 ++++++++++-------- .../components/host-group-view-setting.vue | 70 ++- .../host-group/components/host-transfer.vue | 139 ++++++ .../src/views/asset/host-group/index.vue | 1 - .../src/views/asset/host-group/types/const.ts | 8 +- .../components/categories-percent.vue | 2 +- .../workplace/components/content-chart.vue | 2 +- .../system/menu/components/menu-table.vue | 44 +- .../role/components/role-menu-grant-modal.vue | 4 +- .../src/views/user/role/types/const.ts | 2 +- 49 files changed, 1410 insertions(+), 660 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/request/host/HostGroupRelUpdateRequest.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 create mode 100644 orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupRelUpdateDTO.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 create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupRelUpdateRequest.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%) delete mode 100644 orion-ops-ui/src/api/asset/host-group-rel.ts delete mode 100644 orion-ops-ui/src/components/system/menu/selector/menu-selector-tree.vue create mode 100644 orion-ops-ui/src/utils/tree.ts create mode 100644 orion-ops-ui/src/views/asset/host-group/components/host-transfer.vue 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..e80c11eb 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 @@ -1,17 +1,19 @@ package com.orion.ops.module.asset.controller; +import com.orion.lang.define.wrapper.HttpWrapper; 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.service.HostService; +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.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.api.DataGroupRelApi; +import com.orion.ops.module.infra.entity.dto.data.*; import com.orion.ops.module.infra.enums.DataGroupTypeEnum; 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; @@ -20,6 +22,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; +import java.util.Set; /** * 主机分组 api @@ -37,43 +40,46 @@ import java.util.List; @SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) public class HostGroupController { - @Resource - private HostService hostService; - @Resource private DataGroupApi dataGroupApi; - // TODO 配置权限 - // TODO 配置操作日志类型 - // TODO 拖拽 - // TODO http - // TODO 聚合查询关联 + @Resource + private DataGroupRelApi dataGroupRelApi; - @OperatorLog(HostOperatorType.CREATE) + @OperatorLog(HostGroupOperatorType.CREATE) @PostMapping("/create") @Operation(summary = "创建主机分组") @PreAuthorize("@ss.hasPermission('asset:host-group:create')") - public Long createHostGroup(@Validated @RequestBody DataGroupCreateDTO request) { + public Long updateGroupHost(@Validated @RequestBody DataGroupCreateDTO request) { return dataGroupApi.createDataGroup(DataGroupTypeEnum.HOST, request); } @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,23 @@ public class HostGroupController { return dataGroupApi.deleteDataGroupById(id); } + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/rel-list") + @Operation(summary = "查询分组主机") + @Parameter(name = "groupId", description = "groupId", required = true) + @PreAuthorize("@ss.hasPermission('asset:host-group:query-rel')") + public Set queryHostGroupRel(@RequestParam("groupId") Long groupId) { + return dataGroupRelApi.getGroupRelList(DataGroupTypeEnum.HOST, groupId); + } + + @OperatorLog(HostGroupOperatorType.UPDATE_REL) + @PostMapping("/update-rel") + @Operation(summary = "修改分组主机") + @PreAuthorize("@ss.hasPermission('asset:host-group:update-rel')") + public HttpWrapper updateGroupHost(@Validated @RequestBody DataGroupRelUpdateDTO request) { + dataGroupRelApi.updateGroupRel(request); + return HttpWrapper.ok(); + } + } 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..1df386ca --- /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,40 @@ +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.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"; + + public static final String UPDATE_REL = "host-group:update-rel"; + + @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}"), + new OperatorType(M, UPDATE_REL, "修改分组内主机 ${name}"), + }; + } + +} 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 new file mode 100644 index 00000000..f3aa6bc0 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostGroupRelUpdateRequest.java @@ -0,0 +1,36 @@ +package com.orion.ops.module.asset.entity.request.host; + +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.NotNull; +import javax.validation.constraints.Size; +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 = "HostGroupRelUpdateRequest", description = "主机分组引用 更新请求对象") +public class HostGroupRelUpdateRequest implements Serializable { + + @NotNull + @Schema(description = "分组id") + private Long groupId; + + @Schema(description = "主机id") + private List hostIdList; + +} 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/api/DataGroupRelApi.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataGroupRelApi.java index f3da663c..975c85fd 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataGroupRelApi.java +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataGroupRelApi.java @@ -1,6 +1,7 @@ package com.orion.ops.module.infra.api; import com.orion.ops.module.infra.entity.dto.data.DataGroupRelCreateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupRelUpdateDTO; import com.orion.ops.module.infra.enums.DataGroupTypeEnum; import java.util.List; @@ -16,6 +17,13 @@ import java.util.Set; */ public interface DataGroupRelApi { + /** + * 设置关联 + * + * @param dto dto + */ + void updateGroupRel(DataGroupRelUpdateDTO 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/DataGroupRelUpdateDTO.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupRelUpdateDTO.java new file mode 100644 index 00000000..ba334135 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataGroupRelUpdateDTO.java @@ -0,0 +1,34 @@ +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; +import java.util.List; + +/** + * 数据分组关联 更新请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-11-7 18:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "DataGroupRelUpdateDTO", description = "数据分组关联 更新请求对象") +public class DataGroupRelUpdateDTO implements Serializable { + + @NotNull + @Schema(description = "组id") + private Long groupId; + + @Schema(description = "引用id") + private List relIdList; + +} 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/api/impl/DataGroupRelApiImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataGroupRelApiImpl.java index e81fb8f7..5f2d43cb 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataGroupRelApiImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataGroupRelApiImpl.java @@ -5,7 +5,9 @@ import com.orion.ops.module.infra.api.DataGroupRelApi; import com.orion.ops.module.infra.convert.DataGroupRelProviderConvert; import com.orion.ops.module.infra.entity.dto.DataGroupRelCacheDTO; import com.orion.ops.module.infra.entity.dto.data.DataGroupRelCreateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupRelUpdateDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupRelCreateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRelUpdateRequest; import com.orion.ops.module.infra.enums.DataGroupTypeEnum; import com.orion.ops.module.infra.service.DataGroupRelService; import lombok.extern.slf4j.Slf4j; @@ -31,6 +33,13 @@ public class DataGroupRelApiImpl implements DataGroupRelApi { @Resource private DataGroupRelService dataGroupRelService; + @Override + public void updateGroupRel(DataGroupRelUpdateDTO dto) { + Valid.valid(dto); + DataGroupRelUpdateRequest request = DataGroupRelProviderConvert.MAPPER.toRequest(dto); + dataGroupRelService.updateGroupRel(request); + } + @Override public void addGroupRel(DataGroupRelCreateDTO dto) { Valid.valid(dto); 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/convert/DataGroupRelProviderConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupRelProviderConvert.java index a83a0cd2..249029cd 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupRelProviderConvert.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataGroupRelProviderConvert.java @@ -1,7 +1,9 @@ package com.orion.ops.module.infra.convert; import com.orion.ops.module.infra.entity.dto.data.DataGroupRelCreateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataGroupRelUpdateDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupRelCreateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRelUpdateRequest; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -21,6 +23,8 @@ public interface DataGroupRelProviderConvert { DataGroupRelCreateRequest toRequest(DataGroupRelCreateDTO request); + DataGroupRelUpdateRequest toRequest(DataGroupRelUpdateDTO 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/dao/DataGroupRelDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/DataGroupRelDAO.java index c96a8207..9f5bcef4 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/DataGroupRelDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/DataGroupRelDAO.java @@ -17,6 +17,18 @@ import java.util.List; @Mapper public interface DataGroupRelDAO extends IMapper { + /** + * 通过 groupId 删除 + * + * @param groupId groupId + * @return effect + */ + default int deleteByGroupId(Long groupId) { + LambdaQueryWrapper wrapper = this.lambda() + .eq(DataGroupRelDO::getGroupId, groupId); + return this.delete(wrapper); + } + /** * 通过 groupId 删除 * 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/DataGroupRelUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupRelUpdateRequest.java new file mode 100644 index 00000000..ec252e59 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataGroupRelUpdateRequest.java @@ -0,0 +1,34 @@ +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; +import java.util.List; + +/** + * 数据分组关联 更新请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-11-7 18:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "DataGroupRelUpdateRequest", description = "数据分组关联 更新请求对象") +public class DataGroupRelUpdateRequest implements Serializable { + + @NotNull + @Schema(description = "组id") + private Long groupId; + + @Schema(description = "引用id") + private List relIdList; + +} 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/DataGroupRelService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataGroupRelService.java index 5782dc84..afb6bb68 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataGroupRelService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataGroupRelService.java @@ -2,6 +2,7 @@ package com.orion.ops.module.infra.service; import com.orion.ops.module.infra.entity.dto.DataGroupRelCacheDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupRelCreateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRelUpdateRequest; import java.util.List; @@ -14,6 +15,13 @@ import java.util.List; */ public interface DataGroupRelService { + /** + * 设置关联 + * + * @param request request + */ + void updateGroupRel(DataGroupRelUpdateRequest request); + /** * 添加关联 * 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/DataGroupRelServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataGroupRelServiceImpl.java index bd725746..8dcf4e7f 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataGroupRelServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataGroupRelServiceImpl.java @@ -3,6 +3,7 @@ package com.orion.ops.module.infra.service.impl; import com.orion.lang.define.cache.CacheKeyDefine; import com.orion.lang.utils.Strings; 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.utils.Valid; @@ -15,6 +16,7 @@ import com.orion.ops.module.infra.entity.domain.DataGroupDO; import com.orion.ops.module.infra.entity.domain.DataGroupRelDO; import com.orion.ops.module.infra.entity.dto.DataGroupRelCacheDTO; import com.orion.ops.module.infra.entity.request.data.DataGroupRelCreateRequest; +import com.orion.ops.module.infra.entity.request.data.DataGroupRelUpdateRequest; import com.orion.ops.module.infra.service.DataGroupRelService; import com.orion.spring.SpringHolder; import lombok.extern.slf4j.Slf4j; @@ -45,6 +47,52 @@ public class DataGroupRelServiceImpl implements DataGroupRelService { @Resource private DataGroupRelDAO dataGroupRelDAO; + @Override + @Transactional(rollbackFor = Exception.class) + public void updateGroupRel(DataGroupRelUpdateRequest request) { + Long groupId = request.getGroupId(); + // 查询分组 + DataGroupDO group = dataGroupDAO.selectById(groupId); + Valid.notNull(group, ErrorMessage.GROUP_ABSENT); + List relIdList = request.getRelIdList(); + // 设置日志参数 + OperatorLogs.add(OperatorLogs.NAME, group.getName()); + if (Lists.isEmpty(relIdList)) { + // 为空删除 + dataGroupRelDAO.deleteByGroupId(groupId); + } else { + // 差异变更 + List records = dataGroupRelDAO.of() + .createWrapper() + .eq(DataGroupRelDO::getGroupId, group) + .then() + .list(); + // 查询删除的部分 + List deleteIdList = records.stream() + .filter(s -> !relIdList.contains(s.getRelId())) + .map(DataGroupRelDO::getId) + .collect(Collectors.toList()); + if (!deleteIdList.isEmpty()) { + dataGroupRelDAO.deleteBatchIds(deleteIdList); + } + // 查询新增的部分 + List persetRelIdList = records.stream() + .map(DataGroupRelDO::getRelId) + .collect(Collectors.toList()); + relIdList.removeIf(persetRelIdList::contains); + if (!relIdList.isEmpty()) { + List insertRecords = relIdList.stream() + .map(s -> DataGroupRelDO.builder() + .groupId(groupId) + .type(group.getType()) + .relId(s) + .build()) + .collect(Collectors.toList()); + dataGroupRelDAO.insertBatch(insertRecords); + } + } + } + @Override @Transactional(rollbackFor = Exception.class) public void addGroupRel(DataGroupRelCreateRequest 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} + +