add custom multicolumn processing
This commit is contained in:
parent
e138171039
commit
cf983c57d6
1 changed files with 57 additions and 3 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.micord.ervu_dashboard.service;
|
package ru.micord.ervu_dashboard.service;
|
||||||
|
|
||||||
import model.FileModel;
|
import model.FileModel;
|
||||||
|
import model.column.GridDisplayColumn;
|
||||||
import model.grid.GridColumnAggregationValues;
|
import model.grid.GridColumnAggregationValues;
|
||||||
import model.grid.GridDataExportFormat;
|
import model.grid.GridDataExportFormat;
|
||||||
import model.grid.GridRow;
|
import model.grid.GridRow;
|
||||||
|
|
@ -8,18 +9,25 @@ import model.grid.GridRows;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
||||||
|
import org.springframework.web.util.HtmlUtils;
|
||||||
|
import property.enums.GridDisplayType;
|
||||||
|
import property.grid.Formatter;
|
||||||
import property.grid.GridColumn;
|
import property.grid.GridColumn;
|
||||||
|
import ru.cg.webbpm.modules.database.bean.entity_graph.EntityColumn;
|
||||||
import service.GridV2ServiceImpl;
|
import service.GridV2ServiceImpl;
|
||||||
|
import utils.ComplexColumnUtils;
|
||||||
|
import utils.GridUtils;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Base64;
|
import java.util.*;
|
||||||
import java.util.Date;
|
import java.util.stream.Collectors;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
//todo: Убрать этот костыльный сервис, обсудить и реализовать аналогичную логику в платформе
|
||||||
public class ExportGridV2Service extends GridV2ServiceImpl {
|
public class ExportGridV2Service extends GridV2ServiceImpl {
|
||||||
|
|
||||||
protected FileModel getFileModelWithContent(String[] columnIdsToExport,
|
protected FileModel getFileModelWithContent(String[] columnIdsToExport,
|
||||||
|
|
@ -173,4 +181,50 @@ public class ExportGridV2Service extends GridV2ServiceImpl {
|
||||||
boldStyle.setAlignment(HorizontalAlignment.CENTER);
|
boldStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||||
return boldStyle;
|
return boldStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map.Entry<String, Object> getValueEntry(GridColumn column, Map<EntityColumn, Object> columnToDataMap) {
|
||||||
|
if (column.isMultiColumn()) {
|
||||||
|
return getEntryFromMultiColumn(column, columnToDataMap);
|
||||||
|
}
|
||||||
|
else return super.getValueEntry(column, columnToDataMap);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map.Entry<String, Object> getEntryFromMultiColumn(final GridColumn column,
|
||||||
|
final Map<EntityColumn, Object> columnToDataMap) {
|
||||||
|
String multiColumnName = evaluateMultiColumnName(column);
|
||||||
|
String multiColumnValue = evaluateMultiColumnValue(column, columnToDataMap);
|
||||||
|
return new AbstractMap.SimpleEntry<>(multiColumnName, multiColumnValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String evaluateMultiColumnName(final GridColumn column) {
|
||||||
|
List<EntityColumn> entityColumns = Arrays.stream(column.displayColumns)
|
||||||
|
.map(GridDisplayColumn::getEntityColumn)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return GridUtils.toGridColumnName(entityColumns, GridDisplayType.MULTI_COLUMN);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String evaluateMultiColumnValue(final GridColumn column,
|
||||||
|
final Map<EntityColumn, Object> columnToDataMap) {
|
||||||
|
GridDisplayColumn[] displayColumns = column.displayColumns;
|
||||||
|
return Arrays.stream(displayColumns)
|
||||||
|
.map(displayColumn -> getMultiColFormattedValue(displayColumn, columnToDataMap))
|
||||||
|
.filter(value -> !value.equals(""))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getMultiColFormattedValue(final GridDisplayColumn column,
|
||||||
|
final Map<EntityColumn, Object> columnToDataMap) {
|
||||||
|
EntityColumn entityColumn = column.getEntityColumn();
|
||||||
|
Object formattedValue = GridUtils.getFormattedValue(
|
||||||
|
columnToDataMap.get(entityColumn), entityColumn.getType(), column.getFormatter()
|
||||||
|
);
|
||||||
|
String formattedResult = formattedValue == null || formattedValue.equals("")
|
||||||
|
? column.getEmptyValue()
|
||||||
|
: column.getPrefix() + formattedValue + column.getPostfix();
|
||||||
|
return HtmlUtils.htmlEscape(formattedResult, StandardCharsets.UTF_8.name());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue