FolderServiceImpl.java 9.6 KB

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