excel查询缓存

Raod 11 months ago
parent 13e4872bb7
commit a0bfd8861f

@ -27,16 +27,15 @@ import com.anjiplus.template.gaea.business.modules.reportexcel.util.CellType;
import com.anjiplus.template.gaea.business.modules.reportexcel.util.XlsUtil; import com.anjiplus.template.gaea.business.modules.reportexcel.util.XlsUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.itextpdf.text.*; import com.itextpdf.text.*;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.lowagie.text.DocumentException;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -44,14 +43,15 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.*; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -422,10 +422,11 @@ public class ReportExcelServiceImpl implements ReportExcelService {
} }
private String getStringValue(Cell cell) { private String getStringValue(Cell cell) {
if (cell == null) if (cell == null) {
return ""; return "";
else } else {
return cell.toString(); return cell.toString();
}
} }
/** /**
* *
@ -436,9 +437,11 @@ public class ReportExcelServiceImpl implements ReportExcelService {
String setParam = reportExcelDto.getSetParam(); String setParam = reportExcelDto.getSetParam();
List<JSONObject> dbObjectList = (List<JSONObject>) JSON.parse(jsonStr); List<JSONObject> dbObjectList = (List<JSONObject>) JSON.parse(jsonStr);
if (dbObjectList != null && dbObjectList.size() > 0) { if (dbObjectList != null && !dbObjectList.isEmpty()) {
//数据集数据缓存
Map<String, OriginalDataDto> setMap = new HashMap<>();
for (int x = 0; x < dbObjectList.size(); x++) { for (int x = 0; x < dbObjectList.size(); x++) {
analysisSheetCellData(dbObjectList.get(x), setParam); analysisSheetCellData(dbObjectList.get(x), setParam, setMap);
} }
} }
//fastjson $ref 循环引用 //fastjson $ref 循环引用
@ -511,7 +514,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
* *
* @param dbObject * @param dbObject
*/ */
private void analysisSheetCellData(JSONObject dbObject, String setParam) { private void analysisSheetCellData(JSONObject dbObject, String setParam, Map<String, OriginalDataDto> setMap) {
//清空data值 //清空data值
dbObject.remove("data"); dbObject.remove("data");
//celldata是一个一维数组 //celldata是一个一维数组
@ -525,7 +528,9 @@ public class ReportExcelServiceImpl implements ReportExcelService {
dbObject.getJSONArray("celldata").clear(); dbObject.getJSONArray("celldata").clear();
//获取配置项中的合并属性 //获取配置项中的合并属性
JSONObject merge = dbObject.getJSONObject("config").getJSONObject("merge"); JSONObject merge = dbObject.getJSONObject("config").getJSONObject("merge");
if(merge != null) merge.clear(); if(merge != null) {
merge.clear();
}
//定义存储每一列动态扩展的行数 //定义存储每一列动态扩展的行数
Map<Integer,Integer> colAddCntMap = new HashMap<>(); Map<Integer,Integer> colAddCntMap = new HashMap<>();
// 遍历已存在的单元格,查看是否存在动态参数 // 遍历已存在的单元格,查看是否存在动态参数
@ -534,7 +539,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
JSONObject cellObj = celldata.get(i); JSONObject cellObj = celldata.get(i);
//fastjson深拷贝问题 //fastjson深拷贝问题
String cellStr = cellObj.toJSONString(); String cellStr = cellObj.toJSONString();
analysisCellData(cellObj,setParam,colAddCntMap,cellStr,merge, dbObject,cellDataMap); analysisCellData(cellObj,setParam,colAddCntMap,cellStr,merge, dbObject,cellDataMap, setMap);
} }
} }
} }
@ -544,7 +549,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
* @param cellObject * @param cellObject
*/ */
public void analysisCellData(JSONObject cellObject,String setParam,Map<Integer,Integer> colAddCntMap,String cellStr, public void analysisCellData(JSONObject cellObject,String setParam,Map<Integer,Integer> colAddCntMap,String cellStr,
JSONObject merge,JSONObject dbObject,Map<String,JSONObject> cellDataMap){ JSONObject merge,JSONObject dbObject,Map<String,JSONObject> cellDataMap, Map<String, OriginalDataDto> setMap){
//获取行号 //获取行号
Integer cellR = cellObject.getInteger("r"); Integer cellR = cellObject.getInteger("r");
//获取列数 //获取列数
@ -562,11 +567,11 @@ public class ReportExcelServiceImpl implements ReportExcelService {
//处理动态单元格 //处理动态单元格
String v = cellObject.getJSONObject("v").getString("v"); String v = cellObject.getJSONObject("v").getString("v");
DataSetDto dataSet = getDataSet(v, setParam); DataSetDto dataSet = getDataSet(v, setParam);
handleDynamicCellObject(dataSet,v,cellStr,cnt,cellR,cellC,merge,dbObject,colAddCntMap); handleDynamicCellObject(dataSet,v,cellStr,cnt,cellR,cellC,merge,dbObject,colAddCntMap, setMap);
break; break;
default: default:
//处理静态单元格 //处理静态单元格
handleStaticCellObject(cellStr,dbObject,cnt,cellR,cellC,cellDataMap,setParam,merge,colAddCntMap,cellType); handleStaticCellObject(cellStr,dbObject,cnt,cellR,cellC,cellDataMap,setParam,merge,colAddCntMap,cellType, setMap);
break; break;
} }
} }
@ -584,9 +589,15 @@ public class ReportExcelServiceImpl implements ReportExcelService {
* @param colAddCntMap * @param colAddCntMap
*/ */
public void handleDynamicCellObject(DataSetDto dataSet,String v,String cellStr,int cnt,int r,int c, public void handleDynamicCellObject(DataSetDto dataSet,String v,String cellStr,int cnt,int r,int c,
JSONObject merge,JSONObject dbObject,Map<Integer,Integer> colAddCntMap){ JSONObject merge,JSONObject dbObject,Map<Integer,Integer> colAddCntMap, Map<String, OriginalDataDto> setMap){
//获取动态数据 //获取动态数据
OriginalDataDto originalDataDto = dataSetService.getData(dataSet); OriginalDataDto originalDataDto;
if (dataSet != null && setMap.containsKey(dataSet.getSetCode())) {
originalDataDto = setMap.get(dataSet.getSetCode());
}else {
originalDataDto = dataSetService.getData(dataSet);
setMap.put(dataSet.getSetCode(), originalDataDto);
}
List<JSONObject> cellDynamicData = originalDataDto.getData(); List<JSONObject> cellDynamicData = originalDataDto.getData();
if(cellDynamicData != null){ if(cellDynamicData != null){
@ -643,7 +654,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
*/ */
public void handleStaticCellObject(String cellStr,JSONObject dbObject,int cnt,int r,int c, public void handleStaticCellObject(String cellStr,JSONObject dbObject,int cnt,int r,int c,
Map<String,JSONObject> cellDataMap,String setParam, Map<String,JSONObject> cellDataMap,String setParam,
JSONObject merge,Map<Integer,Integer> colAddCntMap,CellType cellType){ JSONObject merge,Map<Integer,Integer> colAddCntMap,CellType cellType,Map<String, OriginalDataDto> setMap){
//转字符串,解决深拷贝问题 //转字符串,解决深拷贝问题
JSONObject addCellData = JSONObject.parseObject(cellStr); JSONObject addCellData = JSONObject.parseObject(cellStr);
int rows = 0; int rows = 0;
@ -655,7 +666,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
break; break;
case STATIC_AUTO: case STATIC_AUTO:
//获取静态单元格右侧动态单元格的总行数 //获取静态单元格右侧动态单元格的总行数
rows = getRightDynamicCellRows(addCellData,cellDataMap,setParam,rows,cellType); rows = getRightDynamicCellRows(addCellData,cellDataMap,setParam,rows,cellType, setMap);
initCellPosition(addCellData,cnt,merge); initCellPosition(addCellData,cnt,merge);
if(rows > 1){ if(rows > 1){
//需要把这个静态扩展单元格 改变为 静态合并扩展单元格,就是增加合并属性 mc 以及merge配置 //需要把这个静态扩展单元格 改变为 静态合并扩展单元格,就是增加合并属性 mc 以及merge配置
@ -673,7 +684,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
break; break;
case STATIC_MERGE_AUTO: case STATIC_MERGE_AUTO:
//获取静态单元格右侧动态单元格的总行数 //获取静态单元格右侧动态单元格的总行数
rows = getRightDynamicCellRows(addCellData,cellDataMap,setParam,rows,cellType); rows = getRightDynamicCellRows(addCellData, cellDataMap, setParam, rows, cellType, setMap);
initCellPosition(addCellData,cnt,merge); initCellPosition(addCellData,cnt,merge);
if(rows > 0){ if(rows > 0){
//需要修改单元格mc中的rs //需要修改单元格mc中的rs
@ -724,7 +735,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
* @param cellType * @param cellType
* @return * @return
*/ */
public int getRightDynamicCellRows(JSONObject addCellData,Map<String,JSONObject> cellDataMap,String setParam,int sumRows,CellType cellType){ public int getRightDynamicCellRows(JSONObject addCellData,Map<String,JSONObject> cellDataMap,String setParam,int sumRows,CellType cellType,Map<String, OriginalDataDto> setMap){
//1、获取此单元格右侧关联的所有单元格 //1、获取此单元格右侧关联的所有单元格
List<JSONObject> rightCellList = getRightDynamicCell(addCellData,cellDataMap,cellType); List<JSONObject> rightCellList = getRightDynamicCell(addCellData,cellDataMap,cellType);
//2、循环获取每个单元格的扩展行数 //2、循环获取每个单元格的扩展行数
@ -735,7 +746,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
case STATIC_AUTO: case STATIC_AUTO:
case STATIC_MERGE_AUTO: case STATIC_MERGE_AUTO:
//递归查找 //递归查找
sumRows = getRightDynamicCellRows(rightCell,cellDataMap,setParam,sumRows,rightCellType); sumRows = getRightDynamicCellRows(rightCell,cellDataMap,setParam,sumRows,rightCellType, setMap);
break; break;
case BLACK: case BLACK:
case STATIC: case STATIC:
@ -745,7 +756,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
sumRows += rightCell.getJSONObject("v").getJSONObject("mc").getInteger("rs"); sumRows += rightCell.getJSONObject("v").getJSONObject("mc").getInteger("rs");
break; break;
default: default:
List<JSONObject> cellDynamicData = getDynamicDataList(rightCell.getJSONObject("v").getString("v"),setParam); List<JSONObject> cellDynamicData = getDynamicDataList(rightCell.getJSONObject("v").getString("v"),setParam, setMap);
if(cellDynamicData != null && cellDynamicData.size() > 1){ if(cellDynamicData != null && cellDynamicData.size() > 1){
int size = cellDynamicData.size(); int size = cellDynamicData.size();
sumRows += size; sumRows += size;
@ -880,13 +891,18 @@ public class ReportExcelServiceImpl implements ReportExcelService {
* @param setParam * @param setParam
* @return * @return
*/ */
private List<JSONObject> getDynamicDataList(String v, String setParam){ private List<JSONObject> getDynamicDataList(String v, String setParam, Map<String, OriginalDataDto> setMap){
if(StringUtils.isNotBlank(v)){ if(StringUtils.isNotBlank(v)){
DataSetDto dataSet = getDataSet(v,setParam); DataSetDto dataSet = getDataSet(v,setParam);
if(dataSet != null){ if(dataSet != null){
OriginalDataDto originalDataDto = dataSetService.getData(dataSet); OriginalDataDto originalDataDto;
List<JSONObject> cellDynamicData = originalDataDto.getData(); if (setMap.containsKey(dataSet.getSetCode())) {
return cellDynamicData; originalDataDto = setMap.get(dataSet.getSetCode());
}else {
originalDataDto = dataSetService.getData(dataSet);
setMap.put(dataSet.getSetCode(), originalDataDto);
}
return originalDataDto.getData();
}else{ }else{
return null; return null;
} }
@ -907,7 +923,7 @@ public class ReportExcelServiceImpl implements ReportExcelService {
// 查询条件 // 查询条件
if (setParamJson.containsKey(dto.getSetCode())) { if (setParamJson.containsKey(dto.getSetCode())) {
JSONObject paramCondition = setParamJson.getJSONObject(dto.getSetCode()); JSONObject paramCondition = setParamJson.getJSONObject(dto.getSetCode());
paramCondition.forEach(map::put); map.putAll(paramCondition);
} }
dto.setContextData(map); dto.setContextData(map);
} }

Loading…
Cancel
Save