package com.chinaztt.mes.docx.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ObjectUtil; import com.chinaztt.mes.docx.dto.GetFileDto; import com.chinaztt.mes.docx.dto.ThicknessData; import com.chinaztt.mes.docx.service.DocxService; import com.chinaztt.mes.docx.util.R; import com.chinaztt.mes.docx.util.TakeWords; import net.sourceforge.tess4j.TesseractException; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import java.io.*; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Service public class DocxServiceImpl implements DocxService { @Override public R getFile(GetFileDto getFileDto) throws IOException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, TesseractException { File file = getFileStart(getFileDto.getFilePath(), getFileDto.getFileExtension()); if (file != null) { return R.failed("未查询到该路径:" + getFileDto.getFilePath() + "下存在:" + getFileDto.getFileExtension() + "结尾的文件!"); } switch (getFileDto.getFileExtension()) { case ".docx": return R.ok(TakeWords.readWordFile(file)); //后缀为.xls的文件 case ".xls": return R.ok(TakeWords.readExcelxlsFile(file)); case ".xlsx": try { return R.ok(TakeWords.readExcelFile(file)); } catch (FileNotFoundException e) { return R.failed("另一个程序正在使用此文件,无法进行数据采集。"); } case ".txt": return R.ok(TakeWords.readTxtFile(file)); case ".csv": return R.ok(TakeWords.readCsvFile(file)); case ".mdb": if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) { return R.failed("未配置.mdb采集文件名称!"); } return R.ok(TakeWords.readMdbFile(file, getFileDto)); case ".db": if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) { return R.failed("未配置.db采集文件名称!"); } return R.ok(TakeWords.readDbFile(file, getFileDto)); case ".mysql": if (ObjectUtil.isEmpty(getFileDto.getDbFileName()) || Objects.equals(getFileDto.getDbFileName(), "null")) { return R.failed("未配置.mysql采集文件名称!"); } return R.ok(TakeWords.getMysqlFile(getFileDto)); case ".png": return R.ok(TakeWords.readPngFile(file)); default: return R.failed("后缀名配置错误!"); } } @Override public R moveFile(String startFilePath, String endFilePath, String fileType) { // 源文件路径 File startFile= getFileStart(startFilePath, fileType); // 目的目录路径 File endDirection=new File(endFilePath); // 如果目的目录路径不存在,则进行创建 if(!endDirection.exists()) { endDirection.mkdirs(); } // 目的文件路径=目的目录路径+源文件名称 File endFile=new File(endDirection+ File.separator+ startFile.getName()); try { // 调用File类的核心方法renameTo if (startFile.renameTo(endFile)) { return R.ok("文件移动成功!"); } else { return R.failed("文件移动失败!"); } }catch(Exception e) { return R.failed("文件移动出现异常!"); } } public static File getLatestFile(List files) { File latestFile = null; long latestTime = 0; for (File file : files) { long lastModified = file.lastModified(); if (lastModified > latestTime) { latestTime = lastModified; latestFile = file; } } return latestFile; } public static File getFileStart(String filePath, String fileExtension) { List files = FileUtil.loopFiles(filePath); List list = new ArrayList<>(); files.forEach(i -> { boolean b; switch (fileExtension) { case ".docx": b = i.getName().endsWith(".docx") || i.getName().endsWith(".doc"); break; case ".xlsx": b = i.getName().endsWith(".xlsx") || i.getName().endsWith(".xls"); break; default: b = i.getName().endsWith(fileExtension); break; } if (b) { list.add(i); } }); return getLatestFile(list); } }