彻底删除不同于移入回收站,其会恢复用户的使用空间,并直接从数据库删除。当然这里也可以将状态置为DEL
,回收站也无法查询到。
定义Mapper
找到 FileInfoMapper 接口,在其中添加如下方法定义,批量更新文件的删除和回收状态
FileInfoMapperInteger delFileBatch(@Param("userId") String userId, @Param("pidList") List<String> delFilePidList, @Param("idList") List<String> idList, @Param("oldDelFlag") Integer oldDelFlag);
|
找到 FileInfoMapper.xml 文件,实现上述方法
FileInfoMapper.xml<delete id="delFileBatch"> delete from file_info <where> <if test="userId != null"> and user_id = #{userId} </if> <if test="pidList != null"> and file_pid in(<foreach collection="pidList" separator="," item="item">#{item}</foreach>) </if> <if test="idList != null"> and id in(<foreach collection="idList" separator="," item="item">#{item}</foreach>) </if> <if test="oldDelFlag != null"> and deleted = #{oldDelFlag} </if> </where> </delete>
|
定义Service
FileInfoService
这里定义批量删除文件的方法,找到 FileInfoService 接口,在其中添加:
FileInfoService
Boolean delFileBatch(String userId, List<String> delFilePidList, List<String> idList, Integer oldDelFlag);
|
在 UserInfoServiceImpl 中实现该方法
@Override public Boolean delFileBatch(String userId, List<String> delFilePidList, List<String> idList, Integer oldDelFlag) { Integer deleted = baseMapper.delFileBatch(userId, delFilePidList, idList, oldDelFlag); return deleted != null && deleted > 0; }
|
UserFileService
彻底删除设计到更新用户信息表,这里将方法写在 UserFileService 中:
UserFileService
void delFileBatch(String userId, String ids, Boolean isAdmin);
|
在 UserFileServiceImpl 中实现该方法。
UserFileServiceImpl@Override @Transactional(rollbackFor = Exception.class) public void delFileBatch(String userId, String ids, Boolean isAdmin) { List<String> idList = Arrays.asList(ids.split(",")); LambdaQueryWrapper<FileInfo> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(FileInfo::getUserId, userId) .eq(FileInfo::getDeleted, FileDelFlagEnums.RECYCLE.getFlag()) .in(!idList.isEmpty(), FileInfo::getId, idList); List<FileInfo> fileInfoList = fileInfoService.list(wrapper);
List<String> delFileSubFolderFileList = new ArrayList<>(); for (FileInfo fileInfo : fileInfoList) { if (FileFolderTypeEnums.FOLDER.getType().equals(fileInfo.getFolderType())) { fileInfoServiceImpl.findAllSubFolderList(delFileSubFolderFileList, userId, fileInfo.getId(), FileDelFlagEnums.DEL.getFlag()); } } if (!delFileSubFolderFileList.isEmpty()) { fileInfoService.delFileBatch(userId, delFileSubFolderFileList, null, isAdmin ? null : FileDelFlagEnums.DEL.getFlag()); } fileInfoService.delFileBatch(userId, null, idList, isAdmin ? null : FileDelFlagEnums.RECYCLE.getFlag());
Long useSpace = fileInfoService.getUseSpace(userId); UserInfo userInfo = new UserInfo(); userInfo.setId(userId); userInfo.setUseSpace(useSpace); userInfoService.updateById(userInfo);
UserSpaceDTO userSpaceUse = redisComponent.getUserSpaceUse(userId); userSpaceUse.setUseSpace(useSpace); redisComponent.saveUserSpaceUse(userId, userSpaceUse); }
|
定义Controller
在 RecycleController 下定义彻底删除文件方法。
RecycleController @DeleteMapping ("/delFile/{ids}") public void delFile(HttpSession session, @PathVariable("ids") @NotEmpty String ids) { SessionWebUserVO user = (SessionWebUserVO) session.getAttribute(Constants.SESSION_KEY); userFileService.delFileBatch(user.getId(), ids, false); }
|