package org.jeecg.modules.doc.controller; import com.alibaba.fastjson.JSON; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.doc.component.AsyncTaskComp; import org.jeecg.modules.doc.component.DocFileDealComp; import org.jeecg.modules.doc.component.PathPermissionComp; import org.jeecg.modules.doc.constant.Constant; import org.jeecg.modules.doc.dto.BatchDeleteRecoveryFileDTO; import org.jeecg.modules.doc.dto.DeleteRecoveryFileDTO; import org.jeecg.modules.doc.entity.DocFilePath; import org.jeecg.modules.doc.entity.RecoveryFile; import org.jeecg.modules.doc.dto.RestoreFileDTO; import org.jeecg.modules.doc.service.IRecoveryFileService; import org.jeecg.modules.doc.vo.RecoveryFileListVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @Slf4j @RestController @RequestMapping("/recoveryfile") public class RecoveryFileController { @Autowired private IRecoveryFileService recoveryFileService; @Resource AsyncTaskComp asyncTaskComp; @Autowired PathPermissionComp pathPermissionComp; @Autowired DocFileDealComp fileDealComp; @ApiOperation(value = "删除回收文件", notes = "删除回收文件", tags = {"recoveryfile"}) @RequestMapping(value = "/deleterecoveryfile", method = RequestMethod.POST) @ResponseBody public Result deleteRecoveryFile(@RequestBody DeleteRecoveryFileDTO deleteRecoveryFileDTO) { RecoveryFile recoveryFile = recoveryFileService.getById(deleteRecoveryFileDTO.getRecoveryFileId()); asyncTaskComp.deleteUserFile(recoveryFile.getPathId()); recoveryFileService.removeById(deleteRecoveryFileDTO.getRecoveryFileId()); return Result.OK("删除成功"); } @ApiOperation(value = "批量删除回收文件", notes = "批量删除回收文件", tags = {"recoveryfile"}) @RequestMapping(value = "/batchdelete", method = RequestMethod.POST) @ResponseBody public Result batchDeleteRecoveryFile(@RequestBody BatchDeleteRecoveryFileDTO batchDeleteRecoveryFileDTO) { List recoveryFileList = JSON.parseArray(batchDeleteRecoveryFileDTO.getRecoveryFileIds(), RecoveryFile.class); for (RecoveryFile recoveryFile : recoveryFileList) { RecoveryFile recoveryFile1 = recoveryFileService.getById(recoveryFile.getRecoveryFileId()); if (recoveryFile1 != null) { asyncTaskComp.deleteUserFile(recoveryFile1.getPathId()); recoveryFileService.removeById(recoveryFile1.getRecoveryFileId()); } } return Result.OK("批量删除成功"); } @ApiOperation(value = "回收文件列表", notes = "回收文件列表", tags = {"recoveryfile"}) @RequestMapping(value = "/list", method = RequestMethod.POST) @ResponseBody public Map getRecoveryFileList() { Map map = new HashMap<>(); LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 访问、下载、管理权限包 Map> pathPermission = pathPermissionComp.getPathPermission(); // 拥有访问权限的文件id集合 Map visits = pathPermission.get(Constant.VISIT); // 拥有下载权限的文件id集合 //Map downloads = pathPermission.get(Constant.DOWNLOAD); // 拥有管理权限的文件id集合 Map manages = pathPermission.get(Constant.MANAGE); Result> restResult = new Result<>(); List filePaths = recoveryFileService.selectRecoveryFileList(loginUser.getId()); // 当前查询结果中可访问的文件集合 filePaths = filePaths.stream().filter( i -> visits.get(i.getPathId())!=null || fileDealComp.isParentsOrChild(visits,i, true) ).collect(Collectors.toList()); // Set downloadSet = filePaths.stream().filter( // i -> downloads.get(i.getPathId()) != null || fileDealComp.isParentsOrChild(downloads,i, false) // ).map(DocFilePath::getPathId).collect(Collectors.toSet()); Set manageSet = filePaths.stream().filter( i -> manages.get(i.getPathId()) != null || fileDealComp.isParentsOrChild(manages,i, false) ).map(RecoveryFileListVo::getPathId).collect(Collectors.toSet()); restResult.setResult(filePaths); restResult.setSuccess(true); map.put("result", filePaths); map.put("success", true); map.put("managePrem", manageSet); return map; } @ApiOperation(value = "还原文件", notes = "还原文件", tags = {"recoveryfile"}) @RequestMapping(value = "/restorefile", method = RequestMethod.POST) @ResponseBody public Result restoreFile(@RequestBody RestoreFileDTO restoreFileDto) { LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); recoveryFileService.restorefile(restoreFileDto.getDeleteBatchNum(), restoreFileDto.getFilePath(), restoreFileDto.getPathId(), loginUser.getId()); return Result.OK("还原成功!"); } }