package com.ruoyi.system.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.net.URLEncoder; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.system.domain.grallery.ZbPicToPic; import com.ruoyi.system.domain.grallery.ZbZip; import com.ruoyi.system.dto.PicToPicDto; import com.ruoyi.system.dto.UploadResult; import com.ruoyi.system.mapper.ZbPicToPicMapper; import com.ruoyi.system.service.IFileService; import com.ruoyi.system.service.IZbFileService; import com.ruoyi.system.service.IZbPicToPicService; import com.ruoyi.system.service.IZbZipService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.Charset; import java.util.List; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 图来图往Service业务层处理 * * @author ruoyi * @date 2020-12-02 */ @Service @RequiredArgsConstructor public class ZbPicToPicServiceImpl extends ServiceImpl implements IZbPicToPicService { private final IFileService fileService; private final RuoYiConfig ruoYiConfig; private final IZbZipService zbZipService; private final IZbFileService zbFileService; /** * 查询图来图往列表 * * @param zbPicToPic 图来图往 * @return 图来图往 */ @Override public List selectZbPicToPicList(ZbPicToPic zbPicToPic, Page page) { return baseMapper.selectZbPicToPicList(zbPicToPic, page).stream().peek(x -> { x.setZipUrl(ObjectUtil.isEmpty(x.getZipUrl()) ? null : ruoYiConfig.getUrl() + x.getZipUrl()); x.setQrCodeUrl(ObjectUtil.isEmpty(x.getQrCodeUrl()) ? null : ruoYiConfig.getUrl() + x.getQrCodeUrl()); }).collect(Collectors.toList()); } /** * 新增图来图往 * * @param zbPicToPic 图来图往 * @return 结果 */ @Override public int insertZbPicToPic(ZbPicToPic zbPicToPic) { zbPicToPic.setCreateTime(DateUtils.getNowDate()); //Long qrCodeId = zbPicToPic.getQrCodeId(); return baseMapper.insert(zbPicToPic); } /** * 修改图来图往 * * @param zbPicToPic 图来图往 * @return 结果 */ @Override public int updateZbPicToPic(ZbPicToPic zbPicToPic) { zbPicToPic.setUpdateTime(DateUtils.getNowDate()); return baseMapper.updateById(zbPicToPic); } /** * 门户图来图往上传压缩包接口 * @param files * @return */ @Override public ZbZip uploadToZip(MultipartFile[] files) { List upload = fileService.upload(files, false); String profile = RuoYiConfig.getProfile(); String timeFormat = FileUtils.getTimeFileDir(); String pathname = timeFormat + RandomUtil.randomString(20) + ".zip"; File file = new File(profile + File.separator + pathname); FileUtils.checkOrCreateParentDir(file); try { FileOutputStream fileOutputStream = new FileOutputStream(file); ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream); for (MultipartFile multipartFile : files) { String originalFilename = multipartFile.getOriginalFilename(); zipOutputStream.putNextEntry(new ZipEntry(originalFilename)); zipOutputStream.write(multipartFile.getBytes()); zipOutputStream.flush(); } zipOutputStream.finish(); zipOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } fileService.upload(file); ZbZip zbZip = new ZbZip(); zbZip.setFileIds(CollectionUtil.join(upload.stream().map(UploadResult::getFileId).collect(Collectors.toList()), ",")); zbZip.setFileNum(files.length); zbZip.setName(file.getName()); zbZip.setPath(pathname); zbZip.setSize(file.length()); zbZip.setUploadTime(DateUtils.getNowDate()); zbZip.setUrl("?path=" + URLEncoder.createDefault().encode(pathname, Charset.defaultCharset())); zbZipService.save(zbZip); return zbZip; } @Override public PicToPicDto getDetailById(Long picId) { PicToPicDto detail = baseMapper.getDetailById(picId); if (detail != null) { detail.setQrCodeUrl(StrUtil.isNotBlank(detail.getQrCodeUrl()) ? ruoYiConfig.getUrl() + detail.getQrCodeUrl() : null); detail.setZipUrl(StrUtil.isNotBlank(detail.getZipUrl()) ? ruoYiConfig.getUrl() + detail.getZipUrl() : null); } return detail; } }