Merge pull request #9977 from dataease/pr@dev@fix_export-details

fix(仪表板): 修复导出原始明细可能出现越权情况,部分明细表无法导出情况 #9702
This commit is contained in:
王嘉豪 2024-05-30 16:00:01 +08:00 committed by GitHub
commit c2f98f31e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 32 additions and 10 deletions

View File

@ -185,13 +185,8 @@ public class PanelGroupController {
@DePermissionProxy(value = "proxy")
@I18n
public void innerExportDetails(@RequestBody PanelViewDetailsRequest request) throws Exception {
if("dataset".equals(request.getDownloadType())){
DataSetExportRequest exportRequest = panelGroupService.composeDatasetExportRequest(request);
exportCenterService.addTask(exportRequest.getId(), "dataset", exportRequest);
}else{
exportCenterService.addTask(request.getViewId(), "chart", request);
}
}
@ApiOperation("更新仪表板状态")
@PostMapping("/updatePanelStatus/{panelId}")

View File

@ -51,4 +51,7 @@ public class ChartExtRequest {
private Boolean excelExportFlag = false;
@ApiModelProperty(hidden = true)
private String downloadType;
}

View File

@ -44,4 +44,6 @@ public class PanelViewDetailsRequest {
private String downloadType;
private String viewType;
}

View File

@ -338,7 +338,24 @@ public class ChartViewService {
if (CommonConstants.VIEW_DATA_FROM.TEMPLATE.equals(view.getDataFrom())) {
return extendDataService.getChartDataInfo(id, view);
} else {
return calcData(view, request, request.isCache());
String[] dsHeader = null;
Integer[] dsTypes = null;
//downloadType = dataset 为下载原始名字 这里做数据转换模拟 table-info类型图表导出
if("dataset".equals(request.getDownloadType())){
view.setType("table-info");
List<DatasetTableField> sourceFields = dataSetTableFieldsService.getFieldsByTableId(view.getTableId());
dsHeader = sourceFields.stream()
.map(DatasetTableField::getName)
.toArray(String[]::new);
dsTypes = sourceFields.stream()
.map(DatasetTableField::getDeType)
.toArray(Integer[]::new);
view.setXAxis(JSONObject.toJSONString(sourceFields));
}
ChartViewDTO result = calcData(view, request, request.isCache());
result.getData().put("header",dsHeader);
result.getData().put("dsTypes",dsTypes);
return result;
}
} catch (Exception e) {

View File

@ -309,8 +309,8 @@ public class ExportCenterService {
public void findExcelData(PanelViewDetailsRequest request) {
ChartViewWithBLOBs viewInfo = chartViewService.get(request.getViewId());
request.setDownloadType(viewInfo.getType());
if ("table-info".equals(viewInfo.getType())) {
request.setViewType(viewInfo.getType());
if ("table-info".equals(viewInfo.getType()) || "dataset".equals(request.getDownloadType())) {
try {
ChartExtRequest componentFilterInfo = request.getComponentFilterInfo();
componentFilterInfo.setGoPage(1L);
@ -318,9 +318,14 @@ public class ExportCenterService {
componentFilterInfo.setExcelExportFlag(true);
componentFilterInfo.setProxy(request.getProxy());
componentFilterInfo.setUser(request.getUserId());
componentFilterInfo.setDownloadType(request.getDownloadType());
ChartViewDTO chartViewInfo = chartViewService.getData(request.getViewId(), componentFilterInfo);
List<Object[]> tableRow = (List) chartViewInfo.getData().get("sourceData");
request.setDetails(tableRow);
if("dataset".equals(request.getDownloadType())){
request.setHeader((String[]) chartViewInfo.getData().get("header"));
request.setExcelTypes((Integer[]) chartViewInfo.getData().get("dsTypes"));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
@ -409,7 +414,7 @@ public class ExportCenterService {
cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
//设置单元格填充样式(使用纯色背景颜色填充)
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
if ("table-info".equals(request.getDownloadType())) {
if ("table-info".equals(request.getViewType())||"dataset".equals(request.getDownloadType())) {
exportTableDetails(request, wb, cellStyle, detailsSheet);
} else {
Boolean mergeHead = false;