package org.jeecg.modules.ai.service.imp; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.modules.ai.entity.FileImgInfo; import org.jeecg.modules.ai.entity.FilePdfInfo; import org.jeecg.modules.ai.mapper.FilePdfInfoMapper; import org.jeecg.modules.ai.service.IFileImgInfoService; import org.jeecg.modules.ai.service.IFilePdfInfoService; import org.jeecg.modules.ai.vo.FilePdfSelectVo; import org.jeecg.modules.ai.vo.KeyWordPositionVo; import org.jeecg.modules.ai.vo.PhotoListVo; import org.jeecg.modules.utils.BeanMapper; import org.jeecg.modules.utils.DateUtil; import org.jeecg.modules.utils.PdfTurnPngUtils; import org.jeecg.modules.utils.PdfUtils; import org.jeecg.modules.utils.file.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.crypto.KeyGenerator; import java.io.File; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; /** * @author clown * * @date 2024/8/5 */ @Service public class FilePdfInfoServiceImp extends ServiceImpl implements IFilePdfInfoService { @Autowired private IFileImgInfoService fileImgInfoService; @Value("${jeecg.path.upload}") public String fileUploadFolder; @Override public boolean uploadFilePdf(File file) { FileUploadResult result = FileUtils.uploadFileInFile(file); FilePdfInfo info = new FilePdfInfo(); info.setFileName(result.getFileName()); info.setFileEncodeName(result.getFileEncodeName()); info.setFilePath(result.getFilePath()); info.setFileSize(result.getFileSize()); info.setFileSuffix(result.getFileSuffix()); boolean b = save(info); if (!b) { return false; } try { List pngList = PdfTurnPngUtils.pdf2pngList(file,"png",info.getId()); if (pngList == null || pngList.isEmpty() ) { return false; } List fileImgs = new ArrayList<>(); for (PhotoListVo vo : pngList) { FileImgInfo img = new FileImgInfo(); BeanMapper.copy(vo,img); img.setFileId(info.getId()); fileImgs.add(img); } boolean c = fileImgInfoService.saveBatch(fileImgs); if (c) { return true; } else { removeById(info.getId()); return false; } } catch (Exception e) { removeById(info.getId()); return false; } } @Override public List findImgPathList(FilePdfSelectVo fileVo) { FilePdfInfo info = new FilePdfInfo(); if (StringUtils.isNotBlank(fileVo.getPdfFileId())) { info = super.getById(fileVo.getPdfFileId()); } else { //待优化 List list = super.list(new LambdaQueryWrapper(). eq(FilePdfInfo::getFileName, fileVo.getPdfName()). orderByDesc(FilePdfInfo::getCreateTime) ); if (list == null || list.isEmpty()) { return null; } BeanMapper.copy(list.get(0),info); } if (info == null ) { return null; } List workVo = PdfUtils.findListWord(fileUploadFolder + "/" + info.getFilePath() + "/" + info.getFileEncodeName(),fileVo.getPdfContent()); if (workVo == null || workVo.isEmpty()) { return null; } List sb = new ArrayList<>(); for (KeyWordPositionVo key : workVo) { sb.add(key.getPage()); } List list = fileImgInfoService.findFileImgInfos(fileVo.getPdfFileId(),sb); return list; } @Override public FilePdfInfo findNewFilePDF(String fileName) { FilePdfInfo info = new FilePdfInfo(); List list = super.list(new LambdaQueryWrapper(). eq(FilePdfInfo::getFileName, fileName). orderByDesc(FilePdfInfo::getCreateTime) ); if (list == null || list.isEmpty()) { return null; } BeanMapper.copy(list.get(0),info); return info; } }