package com.fdkankan.ucenter.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fdkankan.ucenter.entity.Folder; import com.fdkankan.ucenter.entity.FolderScene; import com.fdkankan.ucenter.entity.ScenePlus; import com.fdkankan.ucenter.entity.ScenePro; import com.fdkankan.ucenter.mapper.IFolderSceneMapper; import com.fdkankan.ucenter.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.ucenter.vo.response.GroupByCount; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; /** *

* 文件夹和场景关联表 服务实现类 *

* * @author * @since 2022-07-08 */ @Service public class FolderSceneServiceImpl extends ServiceImpl implements IFolderSceneService { @Autowired private ISceneProService sceneProService; @Autowired private IScenePlusService scenePlusService; @Autowired private IFolderService folderService; @Override public void deleteByFolderIds(List delIds,Long userId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(FolderScene::getFolderId,delIds); List list = this.list(wrapper); List sceneIds = list.parallelStream().map(FolderScene::getSceneId).collect(Collectors.toList()); if(sceneIds.size() >0){ sceneProService.deleteByIds(sceneIds,userId); } List ids = list.parallelStream().map(FolderScene::getId).collect(Collectors.toList()); this.removeByIds(ids); } @Override public FolderScene getByTypeNum(String num, Integer type) { return getBaseMapper().getByTypeNum(num,type); } @Override public FolderScene getByType(String sceneId, Integer type) { return getBaseMapper().getByType(sceneId,type); } @Override public HashMap getGroupByFolderIds(List folderIds) { List ids = folderIds.parallelStream().map(Folder::getId).collect(Collectors.toList()); List list = getBaseMapper().getGroupByFolderIds(ids); HashMap folderMap = new HashMap<>(); for (Folder folder : folderIds) { folderMap.put(folder.getId(),folder); } HashMap map = new HashMap<>(); for (GroupByCount groupByCount : list) { Folder folder = this.getParentFolder(folderMap,groupByCount.getId()); map.merge(folder.getId(), groupByCount.getCount(), Long::sum); } return map; } private Folder getParentFolder(HashMap folderMap, Long id) { Folder folder = folderMap.get(id); if(folder != null && folder.getParentId()!=null && folderMap.containsKey(folder.getParentId())){ return getParentFolder(folderMap,folder.getParentId()); } return folder; } @Override public Long getCountByFolderAndSon(Long folderId) { List folderIdList = new ArrayList<>(); folderIdList.add(folderId); this.getFolderSon(folderId,folderIdList); if(folderIdList.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(FolderScene::getFolderId,folderIdList); return this.count(wrapper); } return 0L; } private void getFolderSon(Long folderId, List folderIdList) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Folder::getParentId,folderId); List list = folderService.list(wrapper); if(list.size() <=0){ return; } List collect = list.stream().map(Folder::getId).collect(Collectors.toList()); folderIdList.addAll(collect); for (Long aLong : collect) { this.getFolderSon(aLong,folderIdList); } } @Override public void delBySceneId(List proIds) { if(proIds.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(FolderScene::getSceneId,proIds); this.remove(wrapper); } } @Override public void delByCameraIds(List cameraIds) { if(cameraIds.size() >0){ List proList = sceneProService.getListByCameraIds(cameraIds); List plusList = scenePlusService.getListByCameraIds(cameraIds); List sceneIds = new ArrayList<>(); if(proList.size() >0){ List proIds = proList.stream().map(ScenePro::getId).collect(Collectors.toList()); if(proIds.size() >0){ sceneIds.addAll(proIds); } } if(plusList.size() >0){ List plusIds = plusList.stream().map(ScenePlus::getId).collect(Collectors.toList()); if(plusIds.size() >0){ sceneIds.addAll(plusIds); } } if(sceneIds.size() >0){ this.delBySceneId(sceneIds); } } } }