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.*; import com.gs.simple.mapper.BiViewMapper; 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 com.gs.simple.domain.BiView; 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; @Service @Transactional(rollbackFor = Exception.class) @RequiredArgsConstructor public class MesSimpleServiceImpl extends ServiceImpl implements MesSimpleService { private final BiViewMapper biViewMapper; private final Executor dbExecutor = Executors.newFixedThreadPool(10); @Override public ResultDto> getTree() { List tree = toTree(); return ResultDto.ok(tree, tree.size()); } @Override public List toTree() { return convertToTreeViewList(getTopList()); } //GetTree树形 @Override public ResultDto getMenuList() { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(MesSimplesimple::getDisabled, 0).gt(MesSimplesimple::getIsTop, 0); List list = list(wrapper); return ResultDto.ok(list, list.size()); } //List列表 // @Override // public ResultDto> getMenuList() { // LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // wrapper.eq(MesSimplesimple::getDisabled, 0) // .gt(MesSimplesimple::getIsTop, 0) // .orderByAsc(MesSimplesimple::getIsTop); // // List list = list(wrapper); // // // return ResultDto.ok(list, list.size()); // } @Override public ResultDto> getBiViewsByMenuId(Integer menuId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BiView::getPid, menuId) .isNotNull(BiView::getHref); List list = biViewMapper.selectList(wrapper); if (!list.isEmpty()) { LambdaQueryWrapper simpleWrapper = new LambdaQueryWrapper<>(); simpleWrapper.eq(MesSimplesimple::getId, menuId); MesSimplesimple simple = getOne(simpleWrapper); if (simple != null) { list.forEach(biView -> biView.setLbtime(simple.getLbtime())); } } return ResultDto.ok(list, list.size()); } private List getTopList() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MesSimplesimple::getIsTop, 0).eq(MesSimplesimple::getDisabled, 0); return list(queryWrapper); } private List convertToTreeViewList(List mesSimplesimpleList) { List> treeViewFutures = mesSimplesimpleList.stream() .map(mesSimplesimple -> convertToTreeViewAsync(mesSimplesimple, dbExecutor)) .toList(); CompletableFuture allFutures = CompletableFuture.allOf(treeViewFutures.toArray(new CompletableFuture[0])); return allFutures.thenApply(v -> treeViewFutures.stream() .map(CompletableFuture::join) .collect(Collectors.toList())) .join(); } private CompletableFuture 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 wrapper = new LambdaQueryWrapper<>(); wrapper.eq(MesSimplesimple::getDisabled, 0).eq(MesSimplesimple::getFid, mesSimplesimple.getId()); List list = list(wrapper); List childrenList = new ArrayList<>(); list.forEach(s -> { Children children = new Children(); children.setId(s.getId()); children.setTitle(s.getTitle()); children.setField(s.getField()); if ("轮播".equals(s.getHref())) { children.setHref("bi_view.html?menuId=" + s.getId() + "&lbsj=" + s.getLbtime()); // 跳转到中间页面 } else { children.setHref(s.getHref()); } childrenList.add(children); }); treeView.setChildren(childrenList); return treeView; } }