feat: 移动主机分组.
This commit is contained in:
@@ -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);
|
||||
|
||||
/**
|
||||
* 通过缓存查询数据分组
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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<DataGroupDTO> getDataGroupList(DataGroupTypeEnum type) {
|
||||
List<DataGroupCacheDTO> rows = dataGroupService.getDataGroupListByCache(type.name());
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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<DataGroupDTO> toList(List<DataGroupCacheDTO> list);
|
||||
|
||||
|
||||
@@ -27,6 +27,20 @@ public interface DataGroupDAO extends IMapper<DataGroupDO> {
|
||||
*/
|
||||
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 查询
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
* 通过缓存查询数据分组 - 列表
|
||||
|
||||
@@ -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<DataGroupCacheDTO> getDataGroupListByCache(String type) {
|
||||
// 查询缓存
|
||||
String key = DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type);
|
||||
List<DataGroupCacheDTO> 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<DataGroupCacheDTO> treeData = RedisStrings.getJsonArray(key, DataGroupCacheKeyDefine.DATA_GROUP_TREE);
|
||||
if (treeData.isEmpty()) {
|
||||
if (Lists.isEmpty(treeData)) {
|
||||
// 查询列表缓存
|
||||
List<DataGroupCacheDTO> 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<DataGroupCacheDTO> nodes) {
|
||||
// 获取子节点
|
||||
List<DataGroupCacheDTO> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,13 @@
|
||||
id, parent_id, name, type, sort, create_time, update_time, creator, updater, deleted
|
||||
</sql>
|
||||
|
||||
<update id="updateSort">
|
||||
UPDATE data_group
|
||||
SET sort = sort + #{addition}
|
||||
WHERE parent_id = #{parentId}
|
||||
AND sort ${condition} #{referSort}
|
||||
</update>
|
||||
|
||||
<select id="selectMaxSort" resultType="java.lang.Integer">
|
||||
SELECT IFNULL(MAX(sort), 0)
|
||||
FROM data_group
|
||||
|
||||
Reference in New Issue
Block a user