package cc.mrbird.febs.server.hr.service.impl; import java.io.*; import java.util.*; import java.util.stream.Collectors; import cc.mrbird.febs.common.core.constant.ModuleCode; import cc.mrbird.febs.common.core.exception.FebsException; import cc.mrbird.febs.common.core.utils.FebsUtil; import cc.mrbird.febs.common.core.utils.MyUtil; import cc.mrbird.febs.common.core.utils.SequenceUtil; import cc.mrbird.febs.server.hr.entity.FilesUpload; import cc.mrbird.febs.server.hr.entity.Folder; import cc.mrbird.febs.server.hr.mapper.FilesUploadMapper; import cc.mrbird.febs.server.hr.properties.FebsServerHrProperties; import cc.mrbird.febs.server.hr.service.IFilesUploadService; import cc.mrbird.febs.server.hr.service.IFolderService; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Propagation; import lombok.RequiredArgsConstructor; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cc.mrbird.febs.common.core.entity.QueryRequest; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 文件上传 Service实现 * * @author yz * @date 2021-02-05 22:51:00 */ @Service @RequiredArgsConstructor @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public class FilesUploadServiceImpl extends ServiceImpl implements IFilesUploadService { private final IFolderService iFolderService; private final FebsServerHrProperties properties; private final String operatorId = Optional.ofNullable(FebsUtil.getCurrentUser()) .map(u -> u.getUserId().toString()) .orElse("1"); /** * 参数2为数据中心ID 参数1为终端ID */ private Snowflake snowflake = IdUtil.getSnowflake(ModuleCode.HR_FIlE, 1); @Override public IPage findFilesUploads(QueryRequest request, FilesUpload filesUpload) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); Page page = new Page<>(request.getPageNum(), request.getPageSize()); return this.page(page, queryWrapper); } @Override public List findFilesUploads(FilesUpload filesUpload) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(FilesUpload::getDelFlag, 0); if (null != filesUpload.getFolderid()) { queryWrapper.eq(FilesUpload::getFolderid, filesUpload.getFolderid()); } if (StrUtil.isNotBlank(filesUpload.getFilesname())) { queryWrapper.like(FilesUpload::getFilesname, filesUpload.getFilesname()); } queryWrapper.orderByDesc(FilesUpload::getModifytime); return this.baseMapper.selectList(queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void createFilesUpload(Long folderid, MultipartFile file) throws FebsException, IOException { Folder folder = iFolderService.getById(folderid); Dict dict = MyUtil.filesUpload(file, properties.getUploadCommonPath() + folder.getFoldername() + "/", snowflake.nextIdStr()); FilesUpload filesUpload = new FilesUpload(); filesUpload.setCreatetime(new Date()); filesUpload.setCreator(operatorId); filesUpload.setDelFlag(0); filesUpload.setFilesaddress(dict.getStr("newName")); filesUpload.setFilesformat(StrUtil.isBlank(dict.getStr("suffix")) ? dict.getStr("suffix") : dict.getStr("suffix").substring(1)); filesUpload.setFilesid(SequenceUtil.generateId(0L, ModuleCode.HR_FIlE)); filesUpload.setFilesname(dict.getStr("fileName")); filesUpload.setFolderid(folderid); filesUpload.setModifier(operatorId); filesUpload.setModifytime(new Date()); filesUpload.setVersion(0); this.save(filesUpload); } @Override @Transactional(rollbackFor = Exception.class) public void updateFilesUpload(FilesUpload filesUpload) { this.saveOrUpdate(filesUpload); } @Override @Transactional(rollbackFor = Exception.class) public void deleteFilesUpload(String fileids) { String[] arr = fileids.split(","); LambdaUpdateWrapper wapper = new LambdaUpdateWrapper<>(); wapper.in(FilesUpload::getFilesid, arr); wapper.set(FilesUpload::getDelFlag,1); wapper.set(FilesUpload::getModifier,operatorId); wapper.set(FilesUpload::getModifytime,new Date()); this.update(wapper); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(FilesUpload::getFilesid, arr); List list = this.list(queryWrapper); list.parallelStream().forEach(i -> { Folder folder = iFolderService.getById(i.getFolderid()); FileUtil.del(properties.getUploadCommonPath() + folder.getFoldername() + "/" + i.getFilesaddress()); }); } @Override public void download(String fileids, HttpServletRequest request, HttpServletResponse response) { String[] arr = fileids.split(","); List files = new ArrayList<>(); List fileName = new ArrayList<>(); Arrays.stream(arr).forEach(i -> { FilesUpload filesUpload = this.getById(i); Folder folder = iFolderService.getById(filesUpload.getFolderid()); files.add(new File(properties.getUploadCommonPath() + folder.getFoldername() + "/" + filesUpload.getFilesaddress())); if ( fileName.parallelStream().filter(filter->StrUtil.equals(filesUpload.getFilesname(),filter)).count()==0){ fileName.add(filesUpload.getFilesname()); }else{ fileName.add(filesUpload.getFilesname()+fileName.parallelStream().filter(filter->StrUtil.equals(filesUpload.getFilesname(),filter)).count()+1); } }); MyUtil.download(request, response, files, fileName); } @Override public void mvFiles(String fileids,Long folderid) { String[] arr = fileids.split(","); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(FilesUpload::getFilesid, arr); List list = this.list(queryWrapper); list.parallelStream().forEach(i -> { Folder folder = iFolderService.getById(i.getFolderid()); Folder newfolder = iFolderService.getById(folderid); File oldfile = new File(properties.getUploadCommonPath() + folder.getFoldername() + "/" + i.getFilesaddress()); File newfile = new File(properties.getUploadCommonPath() + newfolder.getFoldername() + "/" + i.getFilesaddress()); FileUtil.move(oldfile,newfile,true); }); LambdaUpdateWrapper wapper = new LambdaUpdateWrapper<>(); wapper.in(FilesUpload::getFilesid, arr); wapper.set(FilesUpload::getFolderid,fileids); wapper.set(FilesUpload::getModifier,operatorId); wapper.set(FilesUpload::getModifytime,new Date()); this.update(wapper); } }