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;
|
||||
|
||||
import model.FileModel;
|
||||
import model.column.GridDisplayColumn;
|
||||
import model.grid.GridColumnAggregationValues;
|
||||
import model.grid.GridDataExportFormat;
|
||||
import model.grid.GridRow;
|
||||
|
|
@ -8,18 +9,25 @@ import model.grid.GridRows;
|
|||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
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 ru.cg.webbpm.modules.database.bean.entity_graph.EntityColumn;
|
||||
import service.GridV2ServiceImpl;
|
||||
import utils.ComplexColumnUtils;
|
||||
import utils.GridUtils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//todo: Убрать этот костыльный сервис, обсудить и реализовать аналогичную логику в платформе
|
||||
public class ExportGridV2Service extends GridV2ServiceImpl {
|
||||
|
||||
protected FileModel getFileModelWithContent(String[] columnIdsToExport,
|
||||
|
|
@ -173,4 +181,50 @@ public class ExportGridV2Service extends GridV2ServiceImpl {
|
|||
boldStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
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