package com.gs.simple.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.gs.simple.common.ResultDto;
|
import com.gs.simple.domain.Children;
|
import com.gs.simple.domain.MesSimplesimple;
|
import com.gs.simple.domain.TreeView;
|
import com.gs.simple.mapper.MesSimpleMapper;
|
import com.gs.simple.service.MesSimpleService;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executors;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author 28567
|
* @description 针对表【MES_SIMPLE(菜单维护表)】的数据库操作Service实现
|
* @createDate 2023-11-08 14:19:52
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
@RequiredArgsConstructor
|
public class MesSimpleServiceImpl extends ServiceImpl<MesSimpleMapper, MesSimplesimple> implements MesSimpleService {
|
|
|
// 创建一个包含10个线程的线程池,用于数据库操作
|
private final Executor dbExecutor = Executors.newFixedThreadPool(10);
|
|
@Override
|
public ResultDto<List<TreeView>> getTree() {
|
List<TreeView> tree = toTree();
|
return ResultDto.ok(tree, tree.size());
|
}
|
|
@Override
|
public List<TreeView> toTree() {
|
return convertToTreeViewList(getTopList());
|
}
|
|
@Override
|
public ResultDto<List<MesSimplesimple>> getMenuList() {
|
LambdaQueryWrapper<MesSimplesimple> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(MesSimplesimple::getDisabled, 0).gt(MesSimplesimple::getIsTop, 0);
|
List<MesSimplesimple> list = list(wrapper);
|
return ResultDto.ok(list, list.size());
|
}
|
|
/**
|
* <p>
|
* 获取根节点
|
* </p>
|
*
|
* @return java.util.List<com.gs.simple.domain.MesSimplesimple>
|
* @author tjx
|
* @date 2023/11/8 14:39
|
*/
|
private List<MesSimplesimple> getTopList() {
|
LambdaQueryWrapper<MesSimplesimple> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(MesSimplesimple::getIsTop, 0).eq(MesSimplesimple::getDisabled, 0);
|
return list(queryWrapper);
|
}
|
|
// 将MesSimplesimple列表转换为TreeView列表
|
private List<TreeView> convertToTreeViewList(List<MesSimplesimple> mesSimplesimpleList) {
|
// 使用CompletableFuture异步处理每个MesSimplesimple对象,并收集为一个CompletableFuture列表
|
List<CompletableFuture<TreeView>> treeViewFutures = mesSimplesimpleList.stream().map(mesSimplesimple -> convertToTreeViewAsync(mesSimplesimple, dbExecutor)).toList();
|
|
// 创建一个CompletableFuture,等待所有异步任务完成
|
CompletableFuture<Void> allFutures = CompletableFuture.allOf(treeViewFutures.toArray(new CompletableFuture[0]));
|
|
// 在所有异步任务完成后,将结果收集为一个TreeView列表
|
return allFutures.thenApply(v -> treeViewFutures.stream().map(CompletableFuture::join).collect(Collectors.toList())).join();
|
}
|
|
// 将MesSimplesimple对象转换为TreeView对象,并使用自定义线程池执行异步任务
|
private CompletableFuture<TreeView> convertToTreeViewAsync(MesSimplesimple mesSimplesimple, Executor executor) {
|
return CompletableFuture.supplyAsync(() -> convertToTreeView(mesSimplesimple), executor);
|
}
|
|
private TreeView convertToTreeView(MesSimplesimple mesSimplesimple) {
|
TreeView treeView = new TreeView();
|
treeView.setId(mesSimplesimple.getId());
|
treeView.setTitle(mesSimplesimple.getTitle());
|
treeView.setField(mesSimplesimple.getField());
|
treeView.setSpread(mesSimplesimple.getSpread() == 1);
|
|
//搜索子节点
|
LambdaQueryWrapper<MesSimplesimple> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(MesSimplesimple::getDisabled, 0).eq(MesSimplesimple::getFid, mesSimplesimple.getId());
|
List<MesSimplesimple> list = list(wrapper);
|
|
List<Children> childrenList = new ArrayList<>();
|
list.forEach(s -> {
|
Children children = new Children();
|
children.setId(s.getId());
|
children.setTitle(s.getTitle());
|
children.setField(s.getField());
|
children.setHref(s.getHref());
|
childrenList.add(children);
|
});
|
treeView.setChildren(childrenList);
|
|
return treeView;
|
}
|
}
|