FolderServiceImpl.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. package com.fdkankan.scene.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  8. import com.fdkankan.common.constant.RecStatus;
  9. import com.fdkankan.common.constant.SceneConstant;
  10. import com.fdkankan.common.constant.TbStatus;
  11. import com.fdkankan.common.response.ResultData;
  12. import com.fdkankan.common.util.DateExtUtil;
  13. import com.fdkankan.scene.entity.Folder;
  14. import com.fdkankan.scene.entity.FolderScene;
  15. import com.fdkankan.scene.entity.ScenePro;
  16. import com.fdkankan.scene.mapper.IFolderMapper;
  17. import com.fdkankan.scene.service.IFolderSceneService;
  18. import com.fdkankan.scene.service.IFolderService;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import com.fdkankan.scene.service.ISceneProService;
  21. import com.fdkankan.scene.vo.FolderParamVO;
  22. import com.fdkankan.scene.vo.FolderVO;
  23. import com.fdkankan.common.constant.ErrorCode;
  24. import com.fdkankan.common.exception.BusinessException;
  25. import org.springframework.beans.BeanUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Service;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. import java.util.Objects;
  31. import java.util.Set;
  32. /**
  33. * <p>
  34. * 文件夹表 服务实现类
  35. * </p>
  36. *
  37. * @author dengsixing
  38. * @since 2021-12-24
  39. */
  40. @Service
  41. public class FolderServiceImpl extends ServiceImpl<IFolderMapper, Folder> implements IFolderService {
  42. @Autowired
  43. IFolderSceneService folderSceneService;
  44. @Autowired
  45. ISceneProService sceneProService;
  46. @Override
  47. public List<Folder> findByParentId(Long parentId) {
  48. return baseMapper.selectList(
  49. new LambdaQueryWrapper<Folder>()
  50. .eq(Folder::getTbStatus, TbStatus.VALID.code())
  51. .eq(Folder::getParentId, parentId));
  52. }
  53. @Override
  54. public List<Folder> findByParentIdAndName(Long parentId, String folderName, Long userId) {
  55. return baseMapper.selectByCondition(
  56. FolderVO.builder()
  57. .recStatus(RecStatus.VALID.code())
  58. .folderName(folderName)
  59. .userId(userId)
  60. .parentId(parentId).build());
  61. }
  62. @Override
  63. public List<Folder> findByUserIdAndType(Long userId, Integer folderType, String folderName) {
  64. return baseMapper.selectByUserIdAndType(
  65. FolderVO.builder()
  66. .folderName(folderName)
  67. .userId(userId)
  68. .folderType(folderType).build());
  69. }
  70. /**
  71. * 这里的ids似乎没用
  72. * @param id
  73. * @param ids
  74. */
  75. @Override
  76. public void deleteAllFile(Long id, Set<Long> ids) {
  77. Folder folder = new Folder();
  78. folder.setTbStatus(TbStatus.DELETE.code());
  79. this.update(new LambdaUpdateWrapper<Folder>()
  80. .eq(Folder::getId, id)
  81. .set(Folder::getTbStatus, TbStatus.DELETE.code()));
  82. List<FolderScene> folderSceneList = folderSceneService.findByFolderId(id);
  83. if(CollUtil.isNotEmpty(folderSceneList)){
  84. folderSceneList.forEach(folderScene -> ids.add(folderScene.getSceneId()));
  85. }
  86. folderSceneService.deleteByFolderId(id);
  87. List<Folder> list = this.findByParentId(id);
  88. if(CollUtil.isNotEmpty(list)){
  89. for (Folder item : list) {
  90. deleteAllFile(item.getId(), ids);
  91. }
  92. }
  93. }
  94. @Override
  95. public void move(FolderVO folderVO) {
  96. if(StrUtil.isEmpty(folderVO.getFolderIds()) && StrUtil.isEmpty(folderVO.getSceneIds())){
  97. throw new BusinessException(ErrorCode.PARAM_REQUIRED);
  98. }
  99. if(Objects.isNull(folderVO.getFolderType())){
  100. throw new BusinessException(ErrorCode.PARAM_REQUIRED);
  101. }
  102. String[] folderIds = folderVO.getFolderIds().split(",");
  103. Folder folder = null;
  104. for (String folderId : folderIds) {
  105. folder = this.getOne(
  106. new LambdaQueryWrapper<Folder>()
  107. .eq(Folder::getTbStatus, TbStatus.VALID.code())
  108. .eq(Folder::getId, Long.valueOf(folderId)));
  109. if(Objects.isNull(folder)){
  110. continue;
  111. }
  112. folder.setParentId(folderVO.getParentId());
  113. List<Folder> subList = this.findByParentIdAndName(folderVO.getParentId(), folder.getFolderName(), folderVO.getUserId());
  114. if(CollUtil.isNotEmpty(subList)){
  115. //表示迁移回当前目录,不做处理
  116. if(subList.get(0).getId().equals(Long.parseLong(folderId))){
  117. return;
  118. }
  119. throw new BusinessException(ErrorCode.FAILURE_CODE_5030);
  120. }
  121. updateById(folder);
  122. }
  123. if(StrUtil.isNotEmpty(folderVO.getSceneIds())){
  124. String[] sceneIds = folderVO.getSceneIds().split(",");
  125. FolderScene folderScene = null;
  126. for (String sceneId : sceneIds) {
  127. folderScene = folderSceneService.findByType(Long.valueOf(sceneId), folderVO.getFolderType());
  128. if(Objects.nonNull(folderScene)){
  129. folderSceneService.removeById(folderScene.getId());
  130. }
  131. if(Objects.nonNull(folderVO.getParentId())){
  132. folderScene = new FolderScene();
  133. folderScene.setSceneId(Long.valueOf(sceneId));
  134. folderScene.setFolderId(folderVO.getParentId());
  135. folderSceneService.save(folderScene);
  136. }
  137. }
  138. }
  139. }
  140. @Override
  141. public List<FolderVO> convert(List<Folder> list) {
  142. List<FolderVO> responseFolders = new ArrayList<>();
  143. Integer sceneNumFile = 0;
  144. for (Folder folder : list){
  145. sceneNumFile = 0;
  146. FolderVO folderVO = FolderVO.builder().build();
  147. BeanUtils.copyProperties(folder, folderVO);
  148. folderVO.setName(folder.getFolderName());
  149. folderVO.setType(folder.getFolderType());
  150. if(folder.getCreateTime() != null){
  151. folderVO.setCreateTimeStr(DateUtil.format(folder.getCreateTime(), DateExtUtil.dateStyle4));
  152. }
  153. folderVO.setIsFolder(1);
  154. Integer sceneNum = 0;
  155. List<FolderScene> folderSceneList =
  156. folderSceneService.list(
  157. new LambdaQueryWrapper<FolderScene>()
  158. .eq(FolderScene::getFolderId, folder.getId())
  159. .orderByDesc(FolderScene::getId));
  160. if(CollUtil.isNotEmpty(folderSceneList)){
  161. sceneNumFile = sceneProService.findFolderIdScence(folder.getId(),folder.getUserId());
  162. }
  163. sceneNum += sceneNumFile;
  164. //获取当前文件夹里面文件夹的场景数
  165. sceneNum = folderChildrenSceneNum(folderVO.getId(), sceneNum);
  166. // log.info(responseFolder.getName() + ",该场景最终数量:" + sceneNum);
  167. folderVO.setSceneNum(sceneNum);
  168. if(CollUtil.isNotEmpty(folderSceneList)){
  169. ScenePro scenePro = sceneProService.getOne(
  170. new LambdaQueryWrapper<ScenePro>()
  171. .select(ScenePro::getThumb)
  172. .eq(ScenePro::getId,folderSceneList.get(0).getSceneId()));
  173. folderVO.setImg(scenePro == null? "" : scenePro.getThumb());
  174. }
  175. responseFolders.add(folderVO);
  176. }
  177. return responseFolders;
  178. }
  179. @Override
  180. public ResultData save(FolderParamVO param) {
  181. LambdaQueryWrapper<Folder> wrapper = new LambdaQueryWrapper<Folder>()
  182. .eq(Folder::getFolderName, param.getName()).eq(Folder::getUserId, param.getUserId());
  183. if(Objects.isNull(param.getParentId())){
  184. wrapper.isNull(Folder::getParentId);
  185. }else{
  186. wrapper.eq(Folder::getParentId, param.getParentId());
  187. }
  188. long count = this.count(wrapper);
  189. if(count > 0){
  190. throw new BusinessException(ErrorCode.FAILURE_CODE_5030);
  191. }
  192. Folder folder = new Folder();
  193. BeanUtils.copyProperties(param, folder);
  194. folder.setFolderName(param.getName());
  195. folder.setFolderType(param.getType());
  196. this.save(folder);
  197. return ResultData.ok();
  198. }
  199. //根据文件夹,递归获取该文件夹中所有文件夹的场景数量之和
  200. public int folderChildrenSceneNum(Long parentId, Integer sceneNum){
  201. List<Folder> byParentId = this.findByParentId(parentId);
  202. if(byParentId != null && byParentId.size() > 0){
  203. Integer sceneNumFile = 0;
  204. for (Folder folder : byParentId) {
  205. sceneNumFile = 0;
  206. List<FolderScene> folderSceneList =
  207. folderSceneService.list(
  208. new LambdaQueryWrapper<FolderScene>()
  209. .eq(FolderScene::getFolderId, folder.getId())
  210. .orderByDesc(FolderScene::getId));
  211. if(CollUtil.isNotEmpty(folderSceneList)){
  212. sceneNumFile = sceneProService.findFolderIdScence(folder.getId(),folder.getUserId());
  213. }
  214. sceneNum += sceneNumFile;
  215. sceneNum = folderChildrenSceneNum(folder.getId(), sceneNum);
  216. }
  217. }
  218. return sceneNum;
  219. }
  220. }