package cn.lili.modules.file.serviceimpl; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.modules.file.entity.File; import cn.lili.modules.file.entity.dto.FileOwnerDTO; import cn.lili.modules.file.mapper.FileMapper; import cn.lili.modules.file.plugin.FilePluginFactory; import cn.lili.modules.file.service.FileService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * 文件管理业务层实现 * * @author Chopper * @since 2020/11/26 17:50 */ @Service public class FileServiceImpl extends ServiceImpl implements FileService { @Autowired private FilePluginFactory filePluginFactory; @Override public void batchDelete(List ids) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(File::getId, ids); List files = this.list(queryWrapper); List keys = new ArrayList<>(); files.forEach(item -> keys.add(item.getFileKey())); if (!keys.isEmpty()) { filePluginFactory.filePlugin().deleteFile(keys); } this.remove(queryWrapper); } @Override public void batchDeleteByDirectory(String directoryId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(File::getFileDirectoryId, directoryId); List files = this.list(queryWrapper); List keys = new ArrayList<>(); files.forEach(item -> keys.add(item.getFileKey())); if (!keys.isEmpty()) { filePluginFactory.filePlugin().deleteFile(keys); } this.remove(queryWrapper); } @Override public Boolean countByDirectory(String directoryId) { return this.count(new LambdaQueryWrapper().eq(File::getFileDirectoryId, directoryId))>0; } @Override public void batchDelete(List ids, AuthUser authUser) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(File::getId, ids); queryWrapper.eq(File::getUserEnums, authUser.getRole().name()); //操作图片属性判定 switch (authUser.getRole()) { case MEMBER: queryWrapper.eq(File::getOwnerId, authUser.getId()); break; case STORE: queryWrapper.eq(File::getOwnerId, authUser.getStoreId()); break; case MANAGER: break; default: throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } List files = this.list(queryWrapper); List keys = new ArrayList<>(); files.forEach(item -> keys.add(item.getFileKey())); filePluginFactory.filePlugin().deleteFile(keys); this.remove(queryWrapper); } @Override public IPage customerPage(FileOwnerDTO fileOwnerDTO) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getName()), File::getName, fileOwnerDTO.getName()) .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getOwnerName()), File::getOwnerName, fileOwnerDTO.getOwnerName()) .eq(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileDirectoryId()), File::getFileDirectoryId, fileOwnerDTO.getFileDirectoryId()) .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileKey()), File::getFileKey, fileOwnerDTO.getFileKey()) .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileType()), File::getFileType, fileOwnerDTO.getFileType()).between( CharSequenceUtil.isNotEmpty(fileOwnerDTO.getStartDate()) && CharSequenceUtil.isNotEmpty( fileOwnerDTO.getEndDate()), File::getCreateTime, fileOwnerDTO.getStartDate(), fileOwnerDTO.getEndDate()); return this.page(PageUtil.initPage(fileOwnerDTO), queryWrapper); } @Override public IPage customerPageOwner(FileOwnerDTO fileOwnerDTO) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getOwnerId()), File::getOwnerId, fileOwnerDTO.getOwnerId()).eq(File::getUserEnums, fileOwnerDTO.getUserEnums()) .eq(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileDirectoryId()), File::getFileDirectoryId, fileOwnerDTO.getFileDirectoryId()) .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getName()), File::getName, fileOwnerDTO.getName()) .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileKey()), File::getFileKey, fileOwnerDTO.getFileKey()) .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileType()), File::getFileType, fileOwnerDTO.getFileType()).between( CharSequenceUtil.isNotEmpty(fileOwnerDTO.getStartDate()) && CharSequenceUtil.isNotEmpty( fileOwnerDTO.getEndDate()), File::getCreateTime, fileOwnerDTO.getStartDate(), fileOwnerDTO.getEndDate()); return this.page(PageUtil.initPage(fileOwnerDTO), queryWrapper); } }