优化excel预览逻辑
This commit is contained in:
parent
11315eca05
commit
22d52ac529
|
@ -1,6 +1,5 @@
|
|||
package com.diboot.file.controller;
|
||||
|
||||
import com.diboot.file.excel.listener.DynamicHeadExcelListener;
|
||||
import com.diboot.file.excel.listener.FixedHeadExcelListener;
|
||||
import com.diboot.file.util.ExcelHelper;
|
||||
import com.diboot.file.util.FileHelper;
|
||||
|
@ -61,9 +60,8 @@ public abstract class BaseExcelFileController extends BaseFileController {
|
|||
String fileUid = S.substringBefore(previewFileName, ".");
|
||||
String fullPath = FileHelper.getFullPath(previewFileName);
|
||||
String ext = FileHelper.getFileExtByName(originFileName);
|
||||
String description = getString(request, "description");
|
||||
// 保存文件上传记录
|
||||
createUploadFile(entityClass, fileUid, originFileName, fullPath, ext, description);
|
||||
createUploadFile(entityClass, fileUid, originFileName, fullPath, ext, request);
|
||||
return new JsonResult(Status.OK);
|
||||
}
|
||||
|
||||
|
@ -94,13 +92,10 @@ public abstract class BaseExcelFileController extends BaseFileController {
|
|||
String newFileName = S.newUuid() + "." + ext;
|
||||
String fullPath = FileHelper.saveFile(file, newFileName);
|
||||
// 预览
|
||||
DynamicHeadExcelListener listener = new DynamicHeadExcelListener() {
|
||||
@Override
|
||||
protected void saveData(Map<Integer, String> headMap, List<Map<Integer, String>> dataList) {
|
||||
}
|
||||
};
|
||||
FixedHeadExcelListener listener = getExcelDataListener();
|
||||
listener.setRequestParams(super.getParamsMap(request));
|
||||
try {
|
||||
ExcelHelper.readDynamicHeadExcel(fullPath, listener);
|
||||
ExcelHelper.previewReadExcel(fullPath, listener);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.warn("解析并校验excel文件失败", e);
|
||||
|
@ -125,11 +120,13 @@ public abstract class BaseExcelFileController extends BaseFileController {
|
|||
* 保存文件之后的处理逻辑,如解析excel
|
||||
*/
|
||||
@Override
|
||||
protected int extractDataCount(String fileUuid, String fullPath) throws Exception{
|
||||
protected int extractDataCount(String fileUuid, String fullPath, HttpServletRequest request) throws Exception{
|
||||
FixedHeadExcelListener listener = getExcelDataListener();
|
||||
listener.setUploadFileUuid(fileUuid);
|
||||
listener.setPreview(false);
|
||||
listener.setRequestParams(super.getParamsMap(request));
|
||||
try{
|
||||
ExcelHelper.readAndSave(fullPath, listener);
|
||||
ExcelHelper.readAndSaveExcel(fullPath, listener);
|
||||
}
|
||||
catch(Exception e){
|
||||
log.warn("上传数据错误: "+ e.getMessage(), e);
|
||||
|
|
|
@ -68,9 +68,8 @@ public abstract class BaseFileController extends BaseController {
|
|||
String fileUid = S.newUuid();
|
||||
String newFileName = fileUid + "." + ext;
|
||||
String fullPath = FileHelper.saveFile(file, newFileName);
|
||||
String description = getString(request, "description");
|
||||
// 保存文件上传记录
|
||||
createUploadFile(entityClass, fileUid, originFileName, fullPath, ext, description);
|
||||
createUploadFile(entityClass, fileUid, originFileName, fullPath, ext, request);
|
||||
Map<String, String> dataMap = new HashMap<>();
|
||||
dataMap.put("uuid", fileUid);
|
||||
return new JsonResult(Status.OK).data(dataMap);
|
||||
|
@ -83,17 +82,18 @@ public abstract class BaseFileController extends BaseController {
|
|||
* @param originFileName
|
||||
* @param storagePath
|
||||
* @param fileType
|
||||
* @param description
|
||||
* @param request
|
||||
* @param <T>
|
||||
* @throws Exception
|
||||
*/
|
||||
protected <T> void createUploadFile(Class<T> entityClass, String fileUid, String originFileName, String storagePath, String fileType, String description) throws Exception{
|
||||
protected <T> void createUploadFile(Class<T> entityClass, String fileUid, String originFileName, String storagePath, String fileType, HttpServletRequest request) throws Exception{
|
||||
// 保存文件之后的处理逻辑
|
||||
int dataCount = extractDataCount(fileUid, storagePath);
|
||||
int dataCount = extractDataCount(fileUid, storagePath, request);
|
||||
UploadFile uploadFile = new UploadFile();
|
||||
uploadFile.setUuid(fileUid).setFileName(originFileName).setFileType(fileType);
|
||||
uploadFile.setRelObjType(entityClass.getSimpleName()).setStoragePath(storagePath);
|
||||
// 初始设置为0,批量保存数据后更新
|
||||
String description = getString(request, "description");
|
||||
uploadFile.setDataCount(dataCount).setDescription(description);
|
||||
// 保存文件上传记录
|
||||
uploadFileService.createEntity(uploadFile);
|
||||
|
@ -102,7 +102,7 @@ public abstract class BaseFileController extends BaseController {
|
|||
/**
|
||||
* 保存文件之后的处理逻辑,如解析excel
|
||||
*/
|
||||
protected int extractDataCount(String fileUuid, String fullPath) throws Exception{
|
||||
protected int extractDataCount(String fileUuid, String fullPath, HttpServletRequest request) throws Exception{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.diboot.core.vo.Status;
|
|||
import com.diboot.file.excel.cache.DictTempCache;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.*;
|
||||
|
||||
/***
|
||||
|
@ -29,10 +30,21 @@ public abstract class FixedHeadExcelListener<T extends BaseExcelModel> extends A
|
|||
private List<String> validateErrorMsgs = new ArrayList<>();
|
||||
// 导入文件的uuid
|
||||
protected String uploadFileUuid;
|
||||
// 是否为预览模式
|
||||
private boolean preview = false;
|
||||
// 注入request
|
||||
private Map<String, Object> requestParams;
|
||||
|
||||
public FixedHeadExcelListener(){
|
||||
}
|
||||
|
||||
public void setPreview(boolean isPrevieew){
|
||||
this.preview = isPrevieew;
|
||||
}
|
||||
public void setRequestParams(Map<String, Object> requestParams){
|
||||
this.requestParams = requestParams;
|
||||
}
|
||||
|
||||
public void setUploadFileUuid(String uploadFileUuid){
|
||||
this.uploadFileUuid = uploadFileUuid;
|
||||
}
|
||||
|
@ -70,9 +82,9 @@ public abstract class FixedHeadExcelListener<T extends BaseExcelModel> extends A
|
|||
throw new BusinessException(Status.FAIL_VALIDATION, S.join(this.validateErrorMsgs, "; "));
|
||||
}
|
||||
// 保存
|
||||
if(V.notEmpty(dataList)){
|
||||
if(preview == false && V.notEmpty(dataList)){
|
||||
// 保存数据
|
||||
saveData(dataList);
|
||||
saveData(dataList, requestParams);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,7 +149,7 @@ public abstract class FixedHeadExcelListener<T extends BaseExcelModel> extends A
|
|||
/**
|
||||
* 保存数据
|
||||
*/
|
||||
protected abstract void saveData(List<T> dataList);
|
||||
protected abstract void saveData(List<T> dataList, Map<String, Object> requestParams);
|
||||
|
||||
/**
|
||||
* 校验错误信息
|
||||
|
|
|
@ -24,12 +24,23 @@ import java.util.List;
|
|||
public class ExcelHelper {
|
||||
|
||||
/**
|
||||
* 简单读取excel文件数据并保存到数据库
|
||||
* 预览读取excel文件数据
|
||||
* @param filePath
|
||||
* @param listener
|
||||
* @return
|
||||
*/
|
||||
public static <T extends BaseExcelModel> boolean readAndSave(String filePath, FixedHeadExcelListener listener) throws Exception{
|
||||
public static <T extends BaseExcelModel> boolean previewReadExcel(String filePath, FixedHeadExcelListener listener) throws Exception{
|
||||
listener.setPreview(true);
|
||||
return readAndSaveExcel(filePath, listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取excel文件数据并保存到数据库
|
||||
* @param filePath
|
||||
* @param listener
|
||||
* @return
|
||||
*/
|
||||
public static <T extends BaseExcelModel> boolean readAndSaveExcel(String filePath, FixedHeadExcelListener listener) throws Exception{
|
||||
File excel = getExcelFile(filePath);
|
||||
Class<T> headClazz = BeanUtils.getGenericityClass(listener, 0);
|
||||
EasyExcel.read(excel).registerReadListener(listener).head(headClazz).sheet().doRead();
|
||||
|
|
|
@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <Description>
|
||||
|
@ -39,7 +40,7 @@ public class DepartmentImportListener extends FixedHeadExcelListener<DepartmentE
|
|||
* @param dataList
|
||||
*/
|
||||
@Override
|
||||
protected void saveData(List<DepartmentExcelModel> dataList) {
|
||||
protected void saveData(List<DepartmentExcelModel> dataList, Map<String,Object> paramsMap) {
|
||||
// 转换数据
|
||||
List<Department> departmentList = BeanUtils.convertList(getDataList(), Department.class);
|
||||
// 保存数据
|
||||
|
|
|
@ -33,7 +33,7 @@ public class FixedHeadExcelReadTest extends ExcelWriteTest {
|
|||
prepareNormalDataExcel();
|
||||
// 读且保存
|
||||
DepartmentImportListener listener = new DepartmentImportListener();
|
||||
boolean success = ExcelHelper.readAndSave(getTempFilePath(), listener);
|
||||
boolean success = ExcelHelper.previewReadExcel(getTempFilePath(), listener);
|
||||
Assert.assertTrue(success);
|
||||
System.out.println(JSON.stringify(listener.getDataList()));
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ public class FixedHeadExcelReadTest extends ExcelWriteTest {
|
|||
// 预览读
|
||||
//ExcelHelper.previewRead(getTempFilePath(), new DepartmentImportListener());
|
||||
// 读且保存
|
||||
ExcelHelper.readAndSave(getTempFilePath(), new DepartmentImportListener());
|
||||
ExcelHelper.previewReadExcel(getTempFilePath(), new DepartmentImportListener());
|
||||
}
|
||||
catch (Exception e){
|
||||
e.printStackTrace();
|
||||
|
|
Loading…
Reference in New Issue