文件检索模块

This commit is contained in:
筱锋xiao_lfeng 2023-08-18 15:58:29 +08:00
parent 303cb9104b
commit 23b6ca073c
4 changed files with 192 additions and 0 deletions

View File

@ -0,0 +1,38 @@
package com.wxjw.controller.openapi;
import com.wxjw.common.BaseResponse;
import com.wxjw.common.ResultUtil;
import com.wxjw.dal.dao.ExcelInfoMapper;
import com.wxjw.dal.pojo.ErrorCode;
import com.wxjw.dal.pojo.data.RetrieveFilesData;
import com.wxjw.service.RetrieveFilesService;
import jakarta.annotation.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Controller 文件检索
*
* @author 筱锋xiao_lfeng
*/
@RestController
@RequestMapping("/openapi/retrieve")
public class RetrieveFilesController {
@Resource
private ExcelInfoMapper excelInfoMapper;
@PostMapping("/files")
public ResponseEntity<BaseResponse<Object>> retrieveFiles(@RequestBody RetrieveFilesData requestBody) {
if ("search".equals(requestBody.getAction())) {
RetrieveFilesService retrieveFilesService = new RetrieveFilesService(excelInfoMapper);
retrieveFilesService.getSearchFile(requestBody);
return retrieveFilesService.getReturnResult();
} else {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
}
}
}

View File

@ -18,6 +18,7 @@ public enum ErrorCode {
FILE_TYPE_IS_INCORRECT("FileTypeIncorrect", 40014, "文件类型错误", HttpCode.BAD_REQUEST), FILE_TYPE_IS_INCORRECT("FileTypeIncorrect", 40014, "文件类型错误", HttpCode.BAD_REQUEST),
FILE_CREATION_FAILED("FileCreationFailed", 40015, "文件创建失败", HttpCode.BAD_REQUEST), FILE_CREATION_FAILED("FileCreationFailed", 40015, "文件创建失败", HttpCode.BAD_REQUEST),
FILE_ALREADY_EXISTS("FileAlreadyExists", 40016, "文件已经存在", HttpCode.BAD_REQUEST), FILE_ALREADY_EXISTS("FileAlreadyExists", 40016, "文件已经存在", HttpCode.BAD_REQUEST),
RETRIEVE_EMPTY("RetrieveEmpty", 40017, "文件检索为空", HttpCode.BAD_REQUEST),
THERE_IS_NO_SUCH_RECORD("ThereIsNoSuchRecord", 40017, "记录不存在", HttpCode.BAD_REQUEST); THERE_IS_NO_SUCH_RECORD("ThereIsNoSuchRecord", 40017, "记录不存在", HttpCode.BAD_REQUEST);
private final String output; private final String output;

View File

@ -0,0 +1,14 @@
package com.wxjw.dal.pojo.data;
import lombok.Getter;
/**
* 获取前端文件列表数据
* @author 筱锋xiao_lfeng
*/
@Getter
public class RetrieveFilesData {
private String action;
private String searchConent;
private int nodeId;
}

View File

@ -0,0 +1,139 @@
package com.wxjw.service;
import com.wxjw.common.BaseResponse;
import com.wxjw.common.ResultUtil;
import com.wxjw.dal.dao.ExcelInfoMapper;
import com.wxjw.dal.pojo.ErrorCode;
import com.wxjw.dal.pojo.data.RetrieveFilesData;
import com.wxjw.dal.pojo.entity.ExcelInfoEntity;
import lombok.Getter;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jetbrains.annotations.NotNull;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
/**
* Service 文件查找
*
* @author 筱锋xiao_lfeng
*/
@Service
public class RetrieveFilesService {
private final ExcelInfoMapper excelInfoMapper;
@Getter
private ResponseEntity<BaseResponse<Object>> returnResult;
public RetrieveFilesService(ExcelInfoMapper excelInfoMapper) {
this.excelInfoMapper = excelInfoMapper;
}
public void getSearchFile(@NotNull RetrieveFilesData requestBody) {
// 检查 nodeId 是否存在
ExcelInfoEntity getExcel = excelInfoMapper.getExcelForId(requestBody.getNodeId());
if (getExcel != null && getExcel.getId() != null) {
// 获取数据
String getFileName = getExcel.getFileName();
String getSheetName = getExcel.getSheetName();
// 构建文件夹位置
String filePathForXlsx = "./src/main/resources/excel/" + getFileName + "/" + getSheetName + ".xlsx";
String filePathForXls = "./src/main/resources/excel/" + getFileName + "/" + getSheetName + ".xls";
// 获取文件
Workbook workbook;
try {
FileInputStream inputStream;
if (Files.exists(Paths.get(filePathForXlsx))) {
inputStream = new FileInputStream(filePathForXlsx);
} else {
inputStream = new FileInputStream(filePathForXls);
}
// 流输入工作目录
workbook = new XSSFWorkbook(inputStream);
// 关闭流
inputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
// 进入循环配置
// 获取单元行Row内容
Sheet sheet = workbook.getSheetAt(0);
ArrayList<Object[]> searchList = new ArrayList<>();
boolean isEmpty = true;
for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
// 获取单元格内容
for (int j = 0; j < sheet.getRow(i).getPhysicalNumberOfCells(); j++) {
// 检索Cell
if (sheet.getRow(i).getCell(j).getStringCellValue().contains(requestBody.getSearchConent())) {
searchList.add(new Object[]{sheet.getRow(i).getCell(j).getStringCellValue(), i, j});
isEmpty = false;
}
}
}
if (isEmpty) {
returnResult = ResultUtil.error(ErrorCode.RETRIEVE_EMPTY);
return;
}
// 生成新
Workbook newWorkbook = new XSSFWorkbook();
Sheet newSheet = newWorkbook.createSheet("searchSheetName");
newSheet.createRow(0).createCell(0).setCellValue("内容查找");
newSheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
for (int i = 1; i <= searchList.size() + 1; i++) {
if (i > 1) {
newSheet.createRow(i).createCell(0).setCellValue(i - 1);
newSheet.getRow(i).createCell(1).setCellValue(requestBody.getSearchConent());
newSheet.getRow(i).createCell(2).setCellValue(searchList.get(i - 2)[0].toString());
newSheet.getRow(i).createCell(3).setCellValue((int)searchList.get(i - 2)[1]);
newSheet.getRow(i).createCell(4).setCellValue((int)searchList.get(i - 2)[2]);
} else {
newSheet.createRow(1).createCell(0).setCellValue("序号");
newSheet.getRow(1).createCell(1).setCellValue("查找");
newSheet.getRow(1).createCell(2).setCellValue("找到");
newSheet.getRow(1).createCell(3).setCellValue("Row");
newSheet.getRow(1).createCell(4).setCellValue("Column");
}
}
// 获取命名规则
long date = new Date().getTime();
String newSheetName = "sheet1";
File file = new File("./src/main/resources/excel/" + date);
if (file.mkdirs()) {
try (FileOutputStream outputStream = new FileOutputStream("./src/main/resources/excel/" + date + "/" + newSheetName + ".xlsx")) {
newWorkbook.write(outputStream);
// 插入数据库
ExcelInfoEntity excelInfoEntity = new ExcelInfoEntity();
excelInfoEntity
.setFileName(String.valueOf(date))
.setSheetName(newSheetName)
.setType(2)
.setParentId(getExcel.getId())
.setCreateBy(getExcel.getCreateBy())
.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
// 数据库写入
excelInfoMapper.insertExcelInfo(excelInfoEntity);
// 返回结果
returnResult = ResultUtil.success();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} else {
// 为空操作
returnResult = ResultUtil.error(ErrorCode.THERE_IS_NO_SUCH_RECORD);
}
}
}