🔨 数据分组添加 userId.

This commit is contained in:
lijiahang
2024-04-23 16:26:55 +08:00
parent b6ee28731b
commit c14c0248cb
21 changed files with 477 additions and 102 deletions

View File

@@ -92,6 +92,5 @@ public class ExecTemplateController {
return execTemplateService.deleteExecTemplateById(id);
}
}

View File

@@ -29,7 +29,6 @@ import com.orion.ops.module.infra.api.DataExtraApi;
import com.orion.ops.module.infra.api.DataGroupRelApi;
import com.orion.ops.module.infra.api.FavoriteApi;
import com.orion.ops.module.infra.api.TagRelApi;
import com.orion.ops.module.infra.entity.dto.data.DataGroupRelCreateDTO;
import com.orion.ops.module.infra.entity.dto.tag.TagDTO;
import com.orion.ops.module.infra.enums.DataExtraTypeEnum;
import com.orion.ops.module.infra.enums.DataGroupTypeEnum;
@@ -103,13 +102,7 @@ public class HostServiceImpl implements HostService {
// 引用分组
List<Long> groupIdList = request.getGroupIdList();
if (!Lists.isEmpty(groupIdList)) {
List<DataGroupRelCreateDTO> groupRelList = groupIdList.stream()
.map(s -> DataGroupRelCreateDTO.builder()
.groupId(s)
.relId(id)
.build())
.collect(Collectors.toList());
dataGroupRelApi.addGroupRel(groupRelList);
dataGroupRelApi.updateRelGroup(DataGroupTypeEnum.HOST, request.getGroupIdList(), id);
}
// 创建配置
hostConfigService.initHostConfig(id);
@@ -134,7 +127,7 @@ public class HostServiceImpl implements HostService {
int effect = hostDAO.updateById(updateRecord);
log.info("HostService-updateHostById effect: {}", effect);
// 引用分组
dataGroupRelApi.updateGroupRel(DataGroupTypeEnum.HOST, request.getGroupIdList(), id);
dataGroupRelApi.updateRelGroup(DataGroupTypeEnum.HOST, request.getGroupIdList(), id);
// 更新 tag
tagRelApi.setTagRel(TagTypeEnum.HOST, id, request.getTags());
// 删除缓存

View File

@@ -32,7 +32,7 @@ public interface DataGroupRelApi {
* @param groupIdList groupIdList
* @param relId relId
*/
void updateGroupRel(DataGroupTypeEnum type, List<Long> groupIdList, Long relId);
void updateRelGroup(DataGroupTypeEnum type, List<Long> groupIdList, Long relId);
/**
* 添加关联
@@ -40,14 +40,14 @@ public interface DataGroupRelApi {
* @param groupId groupId
* @param relId relId
*/
void addGroupRel(Long groupId, Long relId);
void addGroupRel(DataGroupTypeEnum type, Long groupId, Long relId);
/**
* 批量添加关联
*
* @param list list
*/
void addGroupRel(List<DataGroupRelCreateDTO> list);
void addGroupRel(DataGroupTypeEnum type, List<DataGroupRelCreateDTO> list);
/**
* 通过 type 查询 relId 缓存

View File

@@ -0,0 +1,46 @@
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.enums.DataGroupTypeEnum;
import java.util.List;
/**
* 数据分组用户 对外服务类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-11-7 18:44
*/
public interface DataGroupUserApi {
/**
* 创建数据分组
*
* @param type type
* @param userId userId
* @param dto dto
* @return id
*/
Long createDataGroup(DataGroupTypeEnum type, Long userId, DataGroupCreateDTO dto);
/**
* 通过缓存查询数据分组
*
* @param type type
* @param userId userId
* @return rows
*/
List<DataGroupDTO> getDataGroupList(DataGroupTypeEnum type, Long userId);
/**
* 通过缓存查询数据分组
*
* @param type type
* @param userId userId
* @return rows
*/
List<DataGroupDTO> getDataGroupTree(DataGroupTypeEnum type, Long userId);
}

View File

@@ -0,0 +1,109 @@
package com.orion.ops.module.infra.api;
import com.orion.ops.module.infra.entity.dto.data.DataGroupRelCreateDTO;
import com.orion.ops.module.infra.enums.DataGroupTypeEnum;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Future;
/**
* 数据分组用户关联 对外服务类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-11-7 18:44
*/
public interface DataGroupUserRelApi {
/**
* 设置关联
*
* @param type type
* @param userId userId
* @param groupIdList groupIdList
* @param relId relId
*/
void updateGroupRel(DataGroupTypeEnum type, Long userId, List<Long> groupIdList, Long relId);
/**
* 添加关联
*
* @param type type
* @param userId userId
* @param groupId groupId
* @param relId relId
*/
void addGroupRel(DataGroupTypeEnum type, Long userId, Long groupId, Long relId);
/**
* 批量添加关联
*
* @param type type
* @param userId userId
* @param list list
*/
void addGroupRel(DataGroupTypeEnum type, Long userId, List<DataGroupRelCreateDTO> list);
/**
* 通过 type 查询 relId 缓存
* <p>
* groupId - relId
*
* @param type type
* @param userId userId
* @return rows
*/
Map<Long, Set<Long>> getGroupRelList(DataGroupTypeEnum type, Long userId);
/**
* 通过 groupId 查询 relId 缓存
*
* @param type type
* @param userId userId
* @param groupId groupId
* @return relId
*/
Set<Long> getGroupRelIdByGroupId(DataGroupTypeEnum type, Long userId, Long groupId);
/**
* 通过 relId 查询 groupId
*
* @param type type
* @param relId relId
* @return groupId
*/
Future<Set<Long>> getGroupIdByRelIdAsync(DataGroupTypeEnum type, Long userId, Long relId);
/**
* 删除数据分组关联
*
* @param type type
* @param userId userId
* @param relId relId
* @return effect
*/
Integer deleteByRelId(DataGroupTypeEnum type, Long userId, Long relId);
/**
* 批量删除数据分组关联
*
* @param type type
* @param userId userId
* @param relIdList relIdList
* @return effect
*/
Integer deleteByRelIdList(DataGroupTypeEnum type, Long userId, List<Long> relIdList);
/**
* 批量删除数据分组关联
*
* @param type type
* @param userId userId
* @param groupIdList groupIdList
* @return effect
*/
Integer deleteByGroupIdList(DataGroupTypeEnum type, Long userId, List<Long> groupIdList);
}

View File

@@ -1,5 +1,6 @@
package com.orion.ops.module.infra.api.impl;
import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.module.infra.api.DataGroupApi;
import com.orion.ops.module.infra.convert.DataGroupProviderConvert;
@@ -44,6 +45,7 @@ public class DataGroupApiImpl implements DataGroupApi {
Valid.valid(dto);
DataGroupCreateRequest request = DataGroupProviderConvert.MAPPER.toRequest(dto);
request.setType(type.name());
request.setUserId(Const.SYSTEM_USER_ID);
return dataGroupService.createDataGroup(request);
}
@@ -63,13 +65,13 @@ public class DataGroupApiImpl implements DataGroupApi {
@Override
public List<DataGroupDTO> getDataGroupList(DataGroupTypeEnum type) {
List<DataGroupCacheDTO> rows = dataGroupService.getDataGroupListByCache(type.name());
List<DataGroupCacheDTO> rows = dataGroupService.getDataGroupListByCache(type.name(), Const.SYSTEM_USER_ID);
return DataGroupProviderConvert.MAPPER.toList(rows);
}
@Override
public List<DataGroupDTO> getDataGroupTree(DataGroupTypeEnum type) {
List<DataGroupCacheDTO> rows = dataGroupService.getDataGroupTreeByCache(type.name());
List<DataGroupCacheDTO> rows = dataGroupService.getDataGroupTreeByCache(type.name(), Const.SYSTEM_USER_ID);
return DataGroupProviderConvert.MAPPER.toList(rows);
}

View File

@@ -1,5 +1,6 @@
package com.orion.ops.module.infra.api.impl;
import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.module.infra.api.DataGroupRelApi;
import com.orion.ops.module.infra.convert.DataGroupRelProviderConvert;
@@ -43,28 +44,28 @@ public class DataGroupRelApiImpl implements DataGroupRelApi {
}
@Override
public void updateGroupRel(DataGroupTypeEnum type, List<Long> groupIdList, Long relId) {
public void updateRelGroup(DataGroupTypeEnum type, List<Long> groupIdList, Long relId) {
Valid.notNull(relId);
dataGroupRelService.updateGroupRel(type.name(), groupIdList, relId);
dataGroupRelService.updateRelGroup(type.name(), Const.SYSTEM_USER_ID, groupIdList, relId);
}
@Override
public void addGroupRel(Long groupId, Long relId) {
public void addGroupRel(DataGroupTypeEnum type, Long groupId, Long relId) {
Valid.notNull(groupId);
Valid.notNull(relId);
dataGroupRelService.addGroupRel(groupId, relId);
dataGroupRelService.addGroupRel(type.name(), groupId, Const.SYSTEM_USER_ID, relId);
}
@Override
public void addGroupRel(List<DataGroupRelCreateDTO> list) {
public void addGroupRel(DataGroupTypeEnum type, List<DataGroupRelCreateDTO> list) {
Valid.valid(list);
List<DataGroupRelCreateRequest> rows = DataGroupRelProviderConvert.MAPPER.toList(list);
dataGroupRelService.addGroupRel(rows);
dataGroupRelService.addGroupRel(type.name(), Const.SYSTEM_USER_ID, rows);
}
@Override
public Map<Long, Set<Long>> getGroupRelList(DataGroupTypeEnum type) {
List<DataGroupRelCacheDTO> rows = dataGroupRelService.getGroupRelListByCache(type.name());
List<DataGroupRelCacheDTO> rows = dataGroupRelService.getGroupRelListByCache(type.name(), Const.SYSTEM_USER_ID);
return rows.stream().collect(
Collectors.groupingBy(
DataGroupRelCacheDTO::getGroupId,
@@ -81,7 +82,7 @@ public class DataGroupRelApiImpl implements DataGroupRelApi {
@Override
@Async("asyncExecutor")
public Future<Set<Long>> getGroupIdByRelIdAsync(DataGroupTypeEnum type, Long relId) {
Set<Long> groupIdList = dataGroupRelService.getGroupRelByRelId(type.name(), relId)
Set<Long> groupIdList = dataGroupRelService.getGroupRelByRelId(type.name(), Const.SYSTEM_USER_ID, relId)
.stream()
.map(DataGroupRelDO::getGroupId)
.collect(Collectors.toSet());
@@ -90,17 +91,17 @@ public class DataGroupRelApiImpl implements DataGroupRelApi {
@Override
public Integer deleteByRelId(DataGroupTypeEnum type, Long relId) {
return dataGroupRelService.deleteByRelId(type.name(), relId);
return dataGroupRelService.deleteByRelId(type.name(), Const.SYSTEM_USER_ID, relId);
}
@Override
public Integer deleteByRelIdList(DataGroupTypeEnum type, List<Long> relIdList) {
return dataGroupRelService.deleteByRelIdList(type.name(), relIdList);
return dataGroupRelService.deleteByRelIdList(type.name(), Const.SYSTEM_USER_ID, relIdList);
}
@Override
public Integer deleteByGroupIdList(DataGroupTypeEnum type, List<Long> groupIdList) {
return dataGroupRelService.deleteByGroupIdList(type.name(), groupIdList);
return dataGroupRelService.deleteByGroupIdList(type.name(), Const.SYSTEM_USER_ID, groupIdList);
}
}

View File

@@ -0,0 +1,53 @@
package com.orion.ops.module.infra.api.impl;
import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.module.infra.api.DataGroupUserApi;
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.request.data.DataGroupCreateRequest;
import com.orion.ops.module.infra.enums.DataGroupTypeEnum;
import com.orion.ops.module.infra.service.DataGroupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* 数据分组 对外服务实现类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-11-7 18:44
*/
@Slf4j
@Service
public class DataGroupUserApiImpl implements DataGroupUserApi {
@Resource
private DataGroupService dataGroupService;
@Override
public Long createDataGroup(DataGroupTypeEnum type, Long userId, DataGroupCreateDTO dto) {
Valid.valid(dto);
DataGroupCreateRequest request = DataGroupProviderConvert.MAPPER.toRequest(dto);
request.setType(type.name());
request.setUserId(userId);
return dataGroupService.createDataGroup(request);
}
@Override
public List<DataGroupDTO> getDataGroupList(DataGroupTypeEnum type, Long userId) {
List<DataGroupCacheDTO> rows = dataGroupService.getDataGroupListByCache(type.name(), userId);
return DataGroupProviderConvert.MAPPER.toList(rows);
}
@Override
public List<DataGroupDTO> getDataGroupTree(DataGroupTypeEnum type, Long userId) {
List<DataGroupCacheDTO> rows = dataGroupService.getDataGroupTreeByCache(type.name(), userId);
return DataGroupProviderConvert.MAPPER.toList(rows);
}
}

View File

@@ -0,0 +1,100 @@
package com.orion.ops.module.infra.api.impl;
import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.module.infra.api.DataGroupUserRelApi;
import com.orion.ops.module.infra.convert.DataGroupRelProviderConvert;
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.dto.data.DataGroupRelCreateDTO;
import com.orion.ops.module.infra.entity.request.data.DataGroupRelCreateRequest;
import com.orion.ops.module.infra.enums.DataGroupTypeEnum;
import com.orion.ops.module.infra.service.DataGroupRelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
/**
* 数据分组关联 对外服务实现类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-11-7 18:44
*/
@Slf4j
@Service
public class DataGroupUserRelApiImpl implements DataGroupUserRelApi {
@Resource
private DataGroupRelService dataGroupRelService;
@Override
public void updateGroupRel(DataGroupTypeEnum type, Long userId, List<Long> groupIdList, Long relId) {
Valid.notNull(relId);
dataGroupRelService.updateRelGroup(type.name(), userId, groupIdList, relId);
}
@Override
public void addGroupRel(DataGroupTypeEnum type, Long userId, Long groupId, Long relId) {
Valid.notNull(groupId);
Valid.notNull(relId);
dataGroupRelService.addGroupRel(type.name(), userId, groupId, relId);
}
@Override
public void addGroupRel(DataGroupTypeEnum type, Long userId, List<DataGroupRelCreateDTO> list) {
Valid.valid(list);
List<DataGroupRelCreateRequest> rows = DataGroupRelProviderConvert.MAPPER.toList(list);
dataGroupRelService.addGroupRel(type.name(), userId, rows);
}
@Override
public Map<Long, Set<Long>> getGroupRelList(DataGroupTypeEnum type, Long userId) {
List<DataGroupRelCacheDTO> rows = dataGroupRelService.getGroupRelListByCache(type.name(), userId);
return rows.stream().collect(
Collectors.groupingBy(
DataGroupRelCacheDTO::getGroupId,
Collectors.mapping(DataGroupRelCacheDTO::getRelId, Collectors.toSet())
));
}
@Override
public Set<Long> getGroupRelIdByGroupId(DataGroupTypeEnum type, Long userId, Long groupId) {
List<Long> rows = dataGroupRelService.getGroupRelIdListByCache(type.name(), groupId);
return new HashSet<>(rows);
}
@Override
@Async("asyncExecutor")
public Future<Set<Long>> getGroupIdByRelIdAsync(DataGroupTypeEnum type, Long userId, Long relId) {
Set<Long> groupIdList = dataGroupRelService.getGroupRelByRelId(type.name(), userId, relId)
.stream()
.map(DataGroupRelDO::getGroupId)
.collect(Collectors.toSet());
return CompletableFuture.completedFuture(groupIdList);
}
@Override
public Integer deleteByRelId(DataGroupTypeEnum type, Long userId, Long relId) {
return dataGroupRelService.deleteByRelId(type.name(), userId, relId);
}
@Override
public Integer deleteByRelIdList(DataGroupTypeEnum type, Long userId, List<Long> relIdList) {
return dataGroupRelService.deleteByRelIdList(type.name(), userId, relIdList);
}
@Override
public Integer deleteByGroupIdList(DataGroupTypeEnum type, Long userId, List<Long> groupIdList) {
return dataGroupRelService.deleteByGroupIdList(type.name(), userId, groupIdList);
}
}

View File

@@ -18,16 +18,16 @@ import java.util.concurrent.TimeUnit;
public interface DataGroupCacheKeyDefine {
CacheKeyDefine DATA_GROUP_LIST = new CacheKeyBuilder()
.key("data:group-list:{}")
.desc("数据分组列表结构 ${type}")
.key("data:group-list:{}:{}")
.desc("数据分组列表结构 ${type} ${userId}")
.type(DataGroupCacheDTO.class)
.struct(RedisCacheStruct.STRING)
.timeout(1, TimeUnit.DAYS)
.build();
CacheKeyDefine DATA_GROUP_TREE = new CacheKeyBuilder()
.key("data:group-tree:{}")
.desc("数据分组树结构 ${type}")
.key("data:group-tree:{}:{}")
.desc("数据分组树结构 ${type} ${userId}")
.type(DataGroupCacheDTO.class)
.struct(RedisCacheStruct.STRING)
.timeout(1, TimeUnit.DAYS)
@@ -42,8 +42,8 @@ public interface DataGroupCacheKeyDefine {
.build();
CacheKeyDefine DATA_GROUP_REL_TYPE = new CacheKeyBuilder()
.key("data:group-rel:type:{}")
.desc("数据分组数据关联-类型 ${type}")
.key("data:group-rel:type:{}:{}")
.desc("数据分组数据关联-类型 ${type} ${userId}")
.type(DataGroupRelCacheDTO.class)
.struct(RedisCacheStruct.STRING)
.timeout(1, TimeUnit.DAYS)

View File

@@ -42,6 +42,10 @@ public class DataGroupDO extends BaseDO {
@TableField("type")
private String type;
@Schema(description = "用户id")
@TableField("user_id")
private Long userId;
@Schema(description = "排序")
@TableField("sort")
private Integer sort;

View File

@@ -42,4 +42,8 @@ public class DataGroupRelDO extends BaseDO {
@TableField("type")
private String type;
@Schema(description = "用户id")
@TableField("user_id")
private Long userId;
}

View File

@@ -25,6 +25,15 @@ import java.io.Serializable;
@Schema(name = "DataGroupCreateRequest", description = "数据分组 创建请求对象")
public class DataGroupCreateRequest implements Serializable {
@NotBlank
@Size(max = 16)
@Schema(description = "组类型")
private String type;
@NotNull
@Schema(description = "用户id")
private Long userId;
@NotNull
@Schema(description = "父id")
private Long parentId;
@@ -34,9 +43,4 @@ public class DataGroupCreateRequest implements Serializable {
@Schema(description = "组名称")
private String name;
@NotBlank
@Size(max = 16)
@Schema(description = "组类型")
private String type;
}

View File

@@ -16,7 +16,7 @@ import java.util.List;
public interface DataGroupRelService {
/**
* 设置关联
* 设置分组关联
*
* @param groupId groupId
* @param relIdList relIdList
@@ -24,13 +24,14 @@ public interface DataGroupRelService {
void updateGroupRel(Long groupId, List<Long> relIdList);
/**
* 设置关联
* 设置关联分组
*
* @param type type
* @param userId userId
* @param groupIdList groupIdList
* @param relId relId
*/
void updateGroupRel(String type, List<Long> groupIdList, Long relId);
void updateRelGroup(String type, Long userId, List<Long> groupIdList, Long relId);
/**
* 添加关联
@@ -38,22 +39,23 @@ public interface DataGroupRelService {
* @param groupId groupId
* @param relId relId
*/
void addGroupRel(Long groupId, Long relId);
void addGroupRel(String type, Long userId, Long groupId, Long relId);
/**
* 添加关联
*
* @param list list
*/
void addGroupRel(List<DataGroupRelCreateRequest> list);
void addGroupRel(String type, Long userId, List<DataGroupRelCreateRequest> list);
/**
* 通过 type 查询 relId 缓存
*
* @param type type
* @param type type
* @param userId userId
* @return rows
*/
List<DataGroupRelCacheDTO> getGroupRelListByCache(String type);
List<DataGroupRelCacheDTO> getGroupRelListByCache(String type, Long userId);
/**
* 通过 groupId 查询 relId 缓存
@@ -67,37 +69,41 @@ public interface DataGroupRelService {
/**
* 通过 relId 查询 groupRel
*
* @param type type
* @param relId relId
* @param type type
* @param userId userId
* @param relId relId
* @return rows
*/
List<DataGroupRelDO> getGroupRelByRelId(String type, Long relId);
List<DataGroupRelDO> getGroupRelByRelId(String type, Long userId, Long relId);
/**
* 删除数据分组关联
*
* @param type type
* @param relId relId
* @param type type
* @param userId userId
* @param relId relId
* @return effect
*/
Integer deleteByRelId(String type, Long relId);
Integer deleteByRelId(String type, Long userId, Long relId);
/**
* 批量删除数据分组关联
*
* @param type type
* @param userId userId
* @param relIdList relIdList
* @return effect
*/
Integer deleteByRelIdList(String type, List<Long> relIdList);
Integer deleteByRelIdList(String type, Long userId, List<Long> relIdList);
/**
* 批量删除数据分组关联
*
* @param userId userId
* @param type type
* @param groupIdList groupIdList
* @return effect
*/
Integer deleteByGroupIdList(String type, List<Long> groupIdList);
Integer deleteByGroupIdList(String type, Long userId, List<Long> groupIdList);
}

View File

@@ -43,25 +43,35 @@ public interface DataGroupService {
/**
* 通过缓存查询数据分组 - 列表
*
* @param type type
* @param type type
* @param userId userId
* @return rows
*/
List<DataGroupCacheDTO> getDataGroupListByCache(String type);
List<DataGroupCacheDTO> getDataGroupListByCache(String type, Long userId);
/**
* 通过缓存查询数据分组 - 树结构
*
* @param type type
* @param type type
* @param userId userId
* @return rows
*/
List<DataGroupCacheDTO> getDataGroupTreeByCache(String type);
List<DataGroupCacheDTO> getDataGroupTreeByCache(String type, Long userId);
/**
* 删除数据分组
* 通过 id 删除数据分组
*
* @param id id
* @return effect
*/
Integer deleteDataGroupById(Long id);
/**
* 通过 userId 删除数据分组
*
* @param userId userId
* @return effect
*/
Integer deleteDataGroupByUserId(Long userId);
}

View File

@@ -55,6 +55,7 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
DataGroupDO group = dataGroupDAO.selectById(groupId);
Valid.notNull(group, ErrorMessage.GROUP_ABSENT);
String type = group.getType();
Long userId = group.getUserId();
// 设置日志参数
OperatorLogs.add(OperatorLogs.GROUP_NAME, group.getName());
if (Lists.isEmpty(relIdList)) {
@@ -76,15 +77,16 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
dataGroupRelDAO.deleteBatchIds(deleteIdList);
}
// 查询新增的部分
List<Long> persetRelIdList = records.stream()
List<Long> presentRelIdList = records.stream()
.map(DataGroupRelDO::getRelId)
.collect(Collectors.toList());
relIdList.removeIf(persetRelIdList::contains);
relIdList.removeIf(presentRelIdList::contains);
if (!relIdList.isEmpty()) {
List<DataGroupRelDO> insertRecords = relIdList.stream()
.map(s -> DataGroupRelDO.builder()
.groupId(groupId)
.type(type)
.userId(userId)
.groupId(groupId)
.relId(s)
.build())
.collect(Collectors.toList());
@@ -92,45 +94,46 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
}
}
// 删除缓存
this.deleteCache(type, Lists.of(groupId));
this.deleteCache(type, userId, Lists.singleton(groupId));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateGroupRel(String type, List<Long> groupIdList, Long relId) {
public void updateRelGroup(String type, Long userId, List<Long> groupIdList, Long relId) {
Valid.notNull(relId);
// 删除引用
this.deleteByRelId(type, relId);
this.deleteByRelId(type, userId, relId);
// 插入引用
if (!Lists.isEmpty(groupIdList)) {
List<DataGroupRelDO> relList = groupIdList.stream()
.map(s -> DataGroupRelDO.builder()
.type(type)
.userId(userId)
.groupId(s)
.relId(relId)
.build())
.collect(Collectors.toList());
dataGroupRelDAO.insertBatch(relList);
// 删除缓存
this.deleteCache(type, groupIdList);
this.deleteCache(type, userId, groupIdList);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addGroupRel(Long groupId, Long relId) {
public void addGroupRel(String type, Long userId, Long groupId, Long relId) {
DataGroupRelCreateRequest record = DataGroupRelCreateRequest.builder()
.groupId(Valid.notNull(groupId))
.relId(Valid.notNull(relId))
.build();
// 插入
SpringHolder.getBean(DataGroupRelService.class)
.addGroupRel(Lists.singleton(record));
.addGroupRel(type, userId, Lists.singleton(record));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addGroupRel(List<DataGroupRelCreateRequest> list) {
public void addGroupRel(String type, Long userId, List<DataGroupRelCreateRequest> list) {
if (Lists.isEmpty(list)) {
return;
}
@@ -140,7 +143,6 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
// 查询分组信息
List<DataGroupDO> groups = dataGroupDAO.selectBatchIds(groupMapping.keySet());
Valid.eq(groups.size(), groupMapping.size(), ErrorMessage.GROUP_ABSENT);
String type = groups.get(0).getType();
// 查询关联是否存在
groupMapping.forEach((k, v) -> {
List<Long> relIdList = v.stream()
@@ -167,18 +169,19 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
v.forEach(s -> records.add(DataGroupRelDO.builder()
.groupId(k)
.type(type)
.userId(userId)
.relId(s.getRelId())
.build()));
});
// 插入
dataGroupRelDAO.insertBatch(records);
// 删除缓存
this.deleteCache(type, groupMapping.keySet());
this.deleteCache(type, userId, groupMapping.keySet());
}
@Override
public List<DataGroupRelCacheDTO> getGroupRelListByCache(String type) {
String key = DataGroupCacheKeyDefine.DATA_GROUP_REL_TYPE.format(type);
public List<DataGroupRelCacheDTO> getGroupRelListByCache(String type, Long userId) {
String key = DataGroupCacheKeyDefine.DATA_GROUP_REL_TYPE.format(type, userId);
// 查询缓存
List<DataGroupRelCacheDTO> list = RedisStrings.getJsonArray(key, DataGroupCacheKeyDefine.DATA_GROUP_REL_TYPE);
if (Lists.isEmpty(list)) {
@@ -186,6 +189,7 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
list = dataGroupRelDAO.of()
.createWrapper()
.eq(DataGroupRelDO::getType, type)
.eq(DataGroupRelDO::getUserId, userId)
.then()
.list(DataGroupRelConvert.MAPPER::toCache);
// 设置屏障 防止穿透
@@ -224,10 +228,11 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
}
@Override
public List<DataGroupRelDO> getGroupRelByRelId(String type, Long relId) {
public List<DataGroupRelDO> getGroupRelByRelId(String type, Long userId, Long relId) {
return dataGroupRelDAO.of()
.createWrapper()
.eq(DataGroupRelDO::getType, type)
.eq(DataGroupRelDO::getUserId, userId)
.eq(DataGroupRelDO::getRelId, relId)
.then()
.list();
@@ -235,14 +240,14 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
@Override
@Transactional(rollbackFor = Exception.class)
public Integer deleteByRelId(String type, Long relId) {
public Integer deleteByRelId(String type, Long userId, Long relId) {
return SpringHolder.getBean(DataGroupRelService.class)
.deleteByRelIdList(type, Lists.singleton(relId));
.deleteByRelIdList(type, userId, Lists.singleton(relId));
}
@Override
@Transactional(rollbackFor = Exception.class)
public Integer deleteByRelIdList(String type, List<Long> relIdList) {
public Integer deleteByRelIdList(String type, Long userId, List<Long> relIdList) {
if (Strings.isBlank(type) || Lists.isEmpty(relIdList)) {
return 0;
}
@@ -250,6 +255,7 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
List<DataGroupRelDO> rows = dataGroupRelDAO.of()
.createWrapper()
.eq(DataGroupRelDO::getType, type)
.eq(DataGroupRelDO::getUserId, userId)
.in(DataGroupRelDO::getRelId, relIdList)
.then()
.list();
@@ -268,17 +274,17 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
// 删除数据库
int effect = dataGroupRelDAO.deleteBatchIds(idList);
// 删除缓存
this.deleteCache(type, groupIdList);
this.deleteCache(type, userId, groupIdList);
return effect;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Integer deleteByGroupIdList(String type, List<Long> groupIdList) {
public Integer deleteByGroupIdList(String type, Long userId, List<Long> groupIdList) {
// 删除数据库
int effect = dataGroupRelDAO.deleteByGroupId(groupIdList);
// 删除缓存
this.deleteCache(type, groupIdList);
this.deleteCache(type, userId, groupIdList);
return effect;
}
@@ -286,11 +292,12 @@ public class DataGroupRelServiceImpl implements DataGroupRelService {
* 删除缓存
*
* @param type type
* @param userId userId
* @param groupIdList groupIdList
*/
private void deleteCache(String type, Collection<Long> groupIdList) {
private void deleteCache(String type, Long userId, Collection<Long> groupIdList) {
// 类型缓存
List<String> keyList = Lists.of(DataGroupCacheKeyDefine.DATA_GROUP_REL_TYPE.format(type));
List<String> keyList = Lists.of(DataGroupCacheKeyDefine.DATA_GROUP_REL_TYPE.format(type, userId));
// 分组缓存
if (!Lists.isEmpty(groupIdList)) {
groupIdList.stream()

View File

@@ -13,8 +13,10 @@ import com.orion.ops.framework.redis.core.utils.RedisStrings;
import com.orion.ops.framework.redis.core.utils.barrier.CacheBarriers;
import com.orion.ops.module.infra.convert.DataGroupConvert;
import com.orion.ops.module.infra.dao.DataGroupDAO;
import com.orion.ops.module.infra.dao.DataGroupRelDAO;
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.domain.DataGroupRelDO;
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.DataGroupMoveRequest;
@@ -43,6 +45,9 @@ public class DataGroupServiceImpl implements DataGroupService {
@Resource
private DataGroupDAO dataGroupDAO;
@Resource
private DataGroupRelDAO dataGroupRelDAO;
@Resource
private DataGroupRelService dataGroupRelService;
@@ -61,7 +66,7 @@ public class DataGroupServiceImpl implements DataGroupService {
Long id = record.getId();
log.info("DataGroupService-createDataGroup id: {}, effect: {}", id, effect);
// 删除缓存
this.deleteCache(request.getType());
this.deleteCache(record.getUserId(), request.getType());
return id;
}
@@ -85,7 +90,7 @@ public class DataGroupServiceImpl implements DataGroupService {
// 更新
int effect = dataGroupDAO.updateById(updateRecord);
// 删除缓存
this.deleteCache(record.getType());
this.deleteCache(record.getUserId(), record.getType());
return effect;
}
@@ -139,7 +144,7 @@ public class DataGroupServiceImpl implements DataGroupService {
effect = dataGroupDAO.updateById(update);
}
// 删除缓存
this.deleteCache(type);
this.deleteCache(moveRecord.getUserId(), type);
// 添加日志参数
OperatorLogs.add(OperatorLogs.SOURCE, moveRecord.getName());
OperatorLogs.add(OperatorLogs.TARGET, targetRecord.getName());
@@ -148,15 +153,16 @@ public class DataGroupServiceImpl implements DataGroupService {
}
@Override
public List<DataGroupCacheDTO> getDataGroupListByCache(String type) {
public List<DataGroupCacheDTO> getDataGroupListByCache(String type, Long userId) {
// 查询缓存
String key = DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type);
String key = DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type, userId);
List<DataGroupCacheDTO> list = RedisStrings.getJsonArray(key, DataGroupCacheKeyDefine.DATA_GROUP_LIST);
if (Lists.isEmpty(list)) {
// 查询数据库
list = dataGroupDAO.of()
.createWrapper()
.eq(DataGroupDO::getType, type)
.eq(DataGroupDO::getUserId, userId)
.then()
.list(DataGroupConvert.MAPPER::toCache);
// 设置屏障 防止穿透
@@ -170,13 +176,13 @@ public class DataGroupServiceImpl implements DataGroupService {
}
@Override
public List<DataGroupCacheDTO> getDataGroupTreeByCache(String type) {
public List<DataGroupCacheDTO> getDataGroupTreeByCache(String type, Long userId) {
// 查询缓存
String key = DataGroupCacheKeyDefine.DATA_GROUP_TREE.format(type);
String key = DataGroupCacheKeyDefine.DATA_GROUP_TREE.format(type, userId);
List<DataGroupCacheDTO> treeData = RedisStrings.getJsonArray(key, DataGroupCacheKeyDefine.DATA_GROUP_TREE);
if (Lists.isEmpty(treeData)) {
// 查询列表缓存
List<DataGroupCacheDTO> rows = this.getDataGroupListByCache(type);
List<DataGroupCacheDTO> rows = this.getDataGroupListByCache(type, userId);
// 设置屏障 防止穿透
CacheBarriers.checkBarrier(rows, DataGroupCacheDTO::new);
if (!Lists.isEmpty(rows)) {
@@ -210,15 +216,29 @@ public class DataGroupServiceImpl implements DataGroupService {
// 删除分组
int effect = dataGroupDAO.deleteBatchIds(deleteIdList);
// 删除组内数据
dataGroupRelService.deleteByGroupIdList(type, deleteIdList);
dataGroupRelService.deleteByGroupIdList(type, record.getUserId(), deleteIdList);
log.info("DataGroupService-deleteDataGroupById id: {}, effect: {}", id, effect);
// 删除缓存
this.deleteCache(type);
this.deleteCache(record.getUserId(), type);
// 添加日志参数
OperatorLogs.add(OperatorLogs.GROUP_NAME, record.getName());
return effect;
}
@Override
public Integer deleteDataGroupByUserId(Long userId) {
// 删除分组
LambdaQueryWrapper<DataGroupDO> deleteGroup = dataGroupDAO.wrapper()
.eq(DataGroupDO::getUserId, userId);
int effect = dataGroupDAO.delete(deleteGroup);
// 删除分组引用
LambdaQueryWrapper<DataGroupRelDO> deleteRel = dataGroupRelDAO.wrapper()
.eq(DataGroupRelDO::getUserId, userId);
effect += dataGroupRelDAO.delete(deleteRel);
// 不删除缓存 自动过期
return effect;
}
/**
* 获取所有子节点 id
*
@@ -252,8 +272,9 @@ public class DataGroupServiceImpl implements DataGroupService {
.ne(DataGroupDO::getId, domain.getId())
// 用其他字段做重复校验
.eq(DataGroupDO::getParentId, domain.getParentId())
.eq(DataGroupDO::getName, domain.getName())
.eq(DataGroupDO::getType, domain.getType());
.eq(DataGroupDO::getType, domain.getType())
.eq(DataGroupDO::getUserId, domain.getUserId())
.eq(DataGroupDO::getName, domain.getName());
// 检查是否存在
boolean present = dataGroupDAO.of(wrapper).present();
Valid.isFalse(present, ErrorMessage.DATA_PRESENT);
@@ -262,11 +283,12 @@ public class DataGroupServiceImpl implements DataGroupService {
/**
* 删除缓存
*
* @param type type
* @param userId userId
* @param type type
*/
private void deleteCache(String type) {
RedisStrings.delete(DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type),
DataGroupCacheKeyDefine.DATA_GROUP_TREE.format(type));
private void deleteCache(Long userId, String type) {
RedisStrings.delete(DataGroupCacheKeyDefine.DATA_GROUP_LIST.format(type, userId),
DataGroupCacheKeyDefine.DATA_GROUP_TREE.format(type, userId));
}
}

View File

@@ -14,7 +14,6 @@ import com.orion.ops.framework.redis.core.utils.RedisStrings;
import com.orion.ops.framework.redis.core.utils.RedisUtils;
import com.orion.ops.framework.redis.core.utils.barrier.CacheBarriers;
import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.define.config.AppAuthenticationConfig;
import com.orion.ops.module.infra.convert.SystemUserConvert;
import com.orion.ops.module.infra.dao.OperatorLogDAO;
import com.orion.ops.module.infra.dao.SystemRoleDAO;
@@ -23,6 +22,7 @@ import com.orion.ops.module.infra.dao.SystemUserRoleDAO;
import com.orion.ops.module.infra.define.RoleDefine;
import com.orion.ops.module.infra.define.cache.TipsCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.UserCacheKeyDefine;
import com.orion.ops.module.infra.define.config.AppAuthenticationConfig;
import com.orion.ops.module.infra.entity.domain.SystemUserDO;
import com.orion.ops.module.infra.entity.dto.UserInfoDTO;
import com.orion.ops.module.infra.entity.request.user.*;
@@ -77,6 +77,9 @@ public class SystemUserServiceImpl implements SystemUserService {
@Resource
private DataExtraService dataExtraService;
@Resource
private DataGroupService dataGroupService;
@Override
public Long createSystemUser(SystemUserCreateRequest request) {
// 转换
@@ -253,6 +256,8 @@ public class SystemUserServiceImpl implements SystemUserService {
dataPermissionService.deleteByUserId(id);
// 删除用户拓展数据
dataExtraService.deleteByUserId(id);
// 删除分组数据
dataGroupService.deleteDataGroupByUserId(id);
}
@Override

View File

@@ -6,8 +6,9 @@
<resultMap id="BaseResultMap" type="com.orion.ops.module.infra.entity.domain.DataGroupDO">
<id column="id" property="id"/>
<result column="parent_id" property="parentId"/>
<result column="name" property="name"/>
<result column="type" property="type"/>
<result column="user_id" property="userId"/>
<result column="name" property="name"/>
<result column="sort" property="sort"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
@@ -18,7 +19,7 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, parent_id, name, type, sort, create_time, update_time, creator, updater, deleted
id, parent_id, type, user_id, name, sort, create_time, update_time, creator, updater, deleted
</sql>
<update id="updateSort">

View File

@@ -5,9 +5,10 @@
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.orion.ops.module.infra.entity.domain.DataGroupRelDO">
<id column="id" property="id"/>
<result column="type" property="type"/>
<result column="user_id" property="userId"/>
<result column="group_id" property="groupId"/>
<result column="rel_id" property="relId"/>
<result column="type" property="type"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="creator" property="creator"/>
@@ -17,7 +18,7 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, group_id, rel_id, type, create_time, update_time, creator, updater, deleted
id, type, user_id, group_id, rel_id, create_time, update_time, creator, updater, deleted
</sql>
</mapper>

View File

@@ -136,6 +136,7 @@
return;
}
node.editable = true;
node.originTitle = node.title;
nextTick(() => {
renameInput.value?.focus();
});
@@ -267,10 +268,17 @@
}
}
}
} else {
// 修改为空则设置为之前的值
node.title = node.originTitle;
}
node.editable = false;
}
node.modCount = 0;
// 重置 modCount
setTimeout(() => {
node.modCount = 0;
node.originTitle = undefined;
}, 50);
};
// 移动分组