package com.fdkankan.ucenter.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.common.constant.SceneConstant; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.ucenter.constant.LoginConstant; import com.fdkankan.ucenter.entity.Folder; import com.fdkankan.ucenter.entity.FolderScene; import com.fdkankan.ucenter.entity.User; import com.fdkankan.ucenter.mapper.IFolderMapper; import com.fdkankan.ucenter.service.IFolderSceneService; import com.fdkankan.ucenter.service.IFolderService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.ucenter.service.IUserService; import com.fdkankan.ucenter.util.DateUserUtil; import com.fdkankan.ucenter.util.FolderTree; import com.fdkankan.ucenter.util.FolderTreeUtil; import com.fdkankan.ucenter.vo.request.FolderParam; import com.fdkankan.ucenter.vo.request.SceneParam; import com.fdkankan.ucenter.vo.response.FolderVo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; /** *

* 文件夹表 服务实现类 *

* * @author * @since 2022-07-07 */ @Service public class FolderServiceImpl extends ServiceImpl implements IFolderService { @Autowired IUserService userService; @Autowired IFolderSceneService folderSceneService; @Override public void add(FolderParam param) { User user = userService.getByUserName(param.getUserName()); List list = findByParentIdAndName(param.getParentId(), param.getName(), user.getId(), param.getType()); if(list != null && list.size() > 0){ throw new BusinessException(SceneConstant.FAILURE_CODE_5030, SceneConstant.FAILURE_MSG_5030); } Folder folderEntity = new Folder(); BeanUtils.copyProperties(param, folderEntity); folderEntity.setUserId(user.getId()); folderEntity.setCreateTime(DateUserUtil.getDate(new Date())); folderEntity.setUpdateTime(DateUserUtil.getDate(new Date())); this.save(folderEntity); } @Override public void updateByParam(FolderParam param, String username) { User user = userService.getByUserName(param.getUserName()); if(StringUtils.isEmpty(param.getName()) || param.getId() == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } List list = findByParentIdAndName(param.getParentId(), param.getName(), user.getId(), param.getType()); if(list != null && list.size() > 0){ throw new BusinessException(SceneConstant.FAILURE_CODE_5030, SceneConstant.FAILURE_MSG_5030); } Folder folder = checkFolder(param.getId(), user.getId()); folder.setName(param.getName()); this.updateById(folder); } @Override public void delete(Long id, String username) { if(id == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } User user = userService.getByUserName(username); Folder folder = checkFolder(id, user.getId()); //删除子文件夹 List list = new ArrayList<>(); getAllFolder(id,list); list.add(folder); List delIds = list.parallelStream().map(Folder::getId).collect(Collectors.toList()); folderSceneService.deleteByFolderIds(delIds,user.getId()); this.removeByIds(delIds); } @Override public List findListTree(Integer type, String username) { if(type == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } User user = userService.getByUserName(username); if(user == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3004, LoginConstant.FAILURE_MSG_3004); } List list = this.getByUserAndType(user.getId(),type); return new FolderTreeUtil(list).buildTree(); } @Override public void move(FolderParam param, String username) { User user = userService.getByUserName(username); if(user == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3004, LoginConstant.FAILURE_MSG_3004); } if(StringUtils.isEmpty(param.getFolderIds()) && StringUtils.isEmpty(param.getSceneIds())){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } if(param.getType() == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } if(StringUtils.isNotEmpty(param.getFolderIds())){ String[] folderIds = param.getFolderIds().split(","); Folder folderEntity = null; for (String folderId : folderIds) { folderEntity = this.getById(Long.valueOf(folderId)); LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(Folder::getId,folderId); wrapper.set(Folder::getParentId,param.getParentId()); if(!folderEntity.getType().equals(param.getType())){ throw new BusinessException(SceneConstant.FAILURE_CODE_5030, SceneConstant.FAILURE_MSG_5030); } if(folderEntity.getParentId().equals(param.getParentId())){ throw new BusinessException(SceneConstant.FAILURE_CODE_5030, SceneConstant.FAILURE_MSG_5030); } List byParentIdAndName = findByParentIdAndName(param.getParentId(), folderEntity.getName(), user.getId(),param.getType()); if(byParentIdAndName != null && byParentIdAndName.size() > 0){ //表示迁移回当前目录,不做处理 if(byParentIdAndName.get(0).getId() == Long.parseLong(folderId)){ return; } throw new BusinessException(SceneConstant.FAILURE_CODE_5030, SceneConstant.FAILURE_MSG_5030); } this.update(wrapper); } } if(StringUtils.isNotEmpty(param.getSceneIds())){ String[] sceneIds = param.getSceneIds().split(","); FolderScene folderSceneEntity = null; for (String sceneId : sceneIds) { folderSceneEntity = folderSceneService.getByType(Long.valueOf(sceneId), param.getType()); if(folderSceneEntity != null){ folderSceneService.removeById(folderSceneEntity.getId()); } if(param.getParentId() != null){ Folder folderEntity = getById(param.getParentId()); if(!folderEntity.getType().equals(param.getType())){ throw new BusinessException(SceneConstant.FAILURE_CODE_5030, SceneConstant.FAILURE_MSG_5030); } folderSceneEntity = new FolderScene(); folderSceneEntity.setSceneId(Long.valueOf(sceneId)); folderSceneEntity.setFolderId(param.getParentId()); folderSceneService.save(folderSceneEntity); } } } } @Override public List getAllFolderIds(List folderIds) { List list = new ArrayList<>(); for (Long id : folderIds) { Folder byId = this.getById(id); List allFolder = new ArrayList<>(); this.getAllFolder(id,allFolder); list.add(byId); if(allFolder.size() >0){ list.addAll(allFolder); } } return list; } private List getByUserAndType(Long userId, Integer type) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Folder::getUserId,userId) .eq(Folder::getType,type); return this.list(wrapper); } private void getAllFolder(Long id ,List allFolder){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Folder::getParentId,id); List list = this.list(wrapper); if(list == null || list.size() <= 0){ return ; } for (Folder folder : list) { getAllFolder(folder.getId(),allFolder); } allFolder.addAll(list); } private Folder checkFolder(Long id, Long userId){ Folder folderEntity = this.getById(id); if(folderEntity == null){ throw new BusinessException(SceneConstant.FAILURE_CODE_5027, SceneConstant.FAILURE_MSG_5027); } if(folderEntity.getUserId().longValue() != userId){ throw new BusinessException(SceneConstant.FAILURE_CODE_5028, SceneConstant.FAILURE_MSG_5028); } return folderEntity; } private List findByParentIdAndName(Long parentId, String name, Long userId, Integer type){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Folder::getName,name) .eq(Folder::getUserId,userId); if(type !=null){ wrapper.eq(Folder::getType,type); } if(parentId!= null){ wrapper.eq(Folder::getParentId,parentId); }else { wrapper.isNull(Folder::getParentId); } return this.list(wrapper); } @Override public List findByUserIdAndType(Long userId, Integer type, String name) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Folder::getUserId,userId); wrapper.eq(Folder::getType,type); if(StringUtils.isNotBlank(name)){ wrapper.like(Folder::getName,name); } return this.list(wrapper); } }