feat(定时报告): 视图数据选项

This commit is contained in:
fit2cloud-chenyw 2022-10-19 11:19:19 +08:00
parent cfd9df8389
commit f80e85e2d6
4 changed files with 42 additions and 36 deletions

View File

@ -198,10 +198,12 @@ public class EmailTaskHandler extends TaskHandler implements Job {
List<File> files = null;
String viewIds = emailTemplateDTO.getViewIds();
if (StringUtils.isNotBlank(viewIds)) {
String viewDataRange = emailTemplateDTO.getViewDataRange();
Boolean justExportView = StringUtils.isBlank(viewDataRange) || StringUtils.equals("view", viewDataRange);
List<String> viewIdList = Arrays.asList(viewIds.split(",")).stream().filter(StringUtils::isNotBlank).map(s -> (s.trim())).collect(Collectors.toList());
PermissionProxy proxy = new PermissionProxy();
proxy.setUserId(user.getUserId());
files = viewExportExcel.export(panelId, viewIdList, proxy);
files = viewExportExcel.export(panelId, viewIdList, proxy, justExportView);
}
List<String> channels = null;

View File

@ -14,12 +14,12 @@ public abstract class FilterBuildTemplate {
protected abstract FilterParamTO buildParam(Map<String, Object> component);
public Map<String, List<ChartExtFilterRequest>> buildFilters(List<Map<String, Object>> components) {
public static Map<String, List<ChartExtFilterRequest>> buildFilters(List<Map<String, Object>> components) {
Map<String, Object> searchButton = components.stream().filter(item -> {
if (ObjectUtils.isEmpty(item.get("type"))) return false;
if (ObjectUtils.isEmpty(item.get("serviceName"))) return false;
return StringUtils.equals("custom-button", item.get("type").toString()) && StringUtils.equals("buttonSureWidget", item.get("serviceName").toString());
}).findFirst().orElseGet(null);
}).findFirst().orElse(null);
List<Map<String, Object>> filters = componentsFilter(components, "custom", null, null);
@ -45,9 +45,11 @@ public abstract class FilterBuildTemplate {
return emptyResult;
}
private Map<String, List<ChartExtFilterRequest>> fillFilters(Map<String, List<ChartExtFilterRequest>> emptyResult, List<Map<String, Object>> filters) {
private static Map<String, List<ChartExtFilterRequest>> fillFilters(Map<String, List<ChartExtFilterRequest>> emptyResult, List<Map<String, Object>> filters) {
filters.forEach(element -> {
FilterParamTO filterParamTO = buildParam(element);
String serviceName = element.get("serviceName").toString();
FilterBuildTemplate template = getInstance(serviceName);
FilterParamTO filterParamTO = template.buildParam(element);
ChartExtFilterRequest condition = formatCondition(filterParamTO);
Boolean vValid = valueValid(condition);
String filterComponentId = condition.getComponentId();
@ -71,15 +73,15 @@ public abstract class FilterBuildTemplate {
return emptyResult;
}
private Boolean valueValid(ChartExtFilterRequest condition) {
private static Boolean valueValid(ChartExtFilterRequest condition) {
return ObjectUtils.isNotEmpty(condition) && CollectionUtils.isNotEmpty(condition.getValue()) && StringUtils.isNotBlank(condition.getValue().get(0));
}
private Boolean viewIdMatch(List<String> viewIds, String viewId) {
private static Boolean viewIdMatch(List<String> viewIds, String viewId) {
return CollectionUtils.isEmpty(viewIds) || viewIds.contains(viewId);
}
private ChartExtFilterRequest formatCondition(FilterParamTO filterParamTO) {
private static ChartExtFilterRequest formatCondition(FilterParamTO filterParamTO) {
Boolean isTree = filterParamTO.getIsTree();
List<String> value = filterParamTO.getValue();
@ -111,14 +113,14 @@ public abstract class FilterBuildTemplate {
return condition;
}
private Map<String, List<ChartExtFilterRequest>> buildEmpty(List<Map<String, Object>> components) {
private static Map<String, List<ChartExtFilterRequest>> buildEmpty(List<Map<String, Object>> components) {
Map<String, List<ChartExtFilterRequest>> result = new HashMap<>();
components.forEach(element -> {
if (StringUtils.equals(element.get("type").toString(), "'view'")) {
if (StringUtils.equals(element.get("type").toString(), "view")) {
String viewId = ((Map<String, Object>) element.get("propValue")).get("viewId").toString();
result.put(viewId, new ArrayList<>());
}
if (StringUtils.equals(element.get("type").toString(), "'de-tabs'")) {
if (StringUtils.equals(element.get("type").toString(), "de-tabs")) {
List<Map<String, Object>> tabs = (List<Map<String, Object>>) ((Map<String, Object>) element.get("options")).get("tabList");
if (CollectionUtils.isNotEmpty(tabs)) {
tabs.forEach(tab -> {
@ -179,7 +181,7 @@ public abstract class FilterBuildTemplate {
beanMapping.put("textSelectTreeWidget", "textSelectTreeWidget");
beanMapping.put("textInputWidget", "textInputWidget");
String beanName = beanMapping.get(serviceName);
if (StringUtils.isBlank(beanName) && StringUtils.contains(serviceName, "select")) {
if (StringUtils.isBlank(beanName) && StringUtils.containsIgnoreCase(serviceName, "select")) {
beanName = "selectWidget";
}
return (FilterBuildTemplate)CommonBeanFactory.getBean(beanName);

View File

@ -23,10 +23,7 @@ import io.dataease.service.panel.PanelGroupService;
import java.io.File;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
import com.google.gson.reflect.TypeToken;
@ -42,7 +39,7 @@ public class ViewExportExcel {
}.getType();
@DePermissionProxy(paramIndex = 2)
public List<File> export(String panelId, List<String> viewIds, PermissionProxy proxy) throws Exception {
public List<File> export(String panelId, List<String> viewIds, PermissionProxy proxy, Boolean justView) throws Exception {
if (CollectionUtils.isEmpty(viewIds)) {
return null;
}
@ -51,28 +48,32 @@ public class ViewExportExcel {
PanelGroupDTO panelDto = panelGroupService.findOne(panelId);
String componentsJson = panelDto.getPanelData();
List<Map<String, Object>> components = gson.fromJson(componentsJson, tokenType);
ChartExtRequest chartExtRequest = buildViewRequest(FilterBuildTemplate.componentsFilter(components, "custom", null, null));
ChartExtRequest chartExtRequest = new ChartExtRequest();
chartExtRequest.setQueryFrom("panel");
chartExtRequest.setFilter(new ArrayList<>());
Map<String, ChartExtRequest> stringChartExtRequestMap = buildViewRequest(components);
List<File> results = new ArrayList<>();
List<ExcelSheetModel> sheets = viewIds.stream().map(viewId -> viewFiles(viewId, chartExtRequest)).collect(Collectors.toList());
List<ExcelSheetModel> sheets = viewIds.stream().map(viewId -> viewFiles(viewId, justView ? stringChartExtRequestMap.get(viewId) : chartExtRequest)).collect(Collectors.toList());
File excelFile = ExcelUtils.exportExcel(sheets, panelDto.getName());
results.add(excelFile);
return results;
}
private ChartExtRequest buildViewRequest(List<Map<String, Object>> filters) {
ChartExtRequest chartExtRequest = new ChartExtRequest();
filters = Optional.ofNullable(filters).orElse(new ArrayList<>());
List<ChartExtFilterRequest> panelFilters = filters.stream().map(item -> {
ChartExtFilterRequest curentFilter = new ChartExtFilterRequest();
return curentFilter;
}).collect(Collectors.toList());
chartExtRequest.setQueryFrom("panel");
chartExtRequest.setFilter(panelFilters);
return chartExtRequest;
private Map<String, ChartExtRequest> buildViewRequest(List<Map<String, Object>> component) {
Map<String, ChartExtRequest> result = new HashMap<>();
Map<String, List<ChartExtFilterRequest>> panelFilters = FilterBuildTemplate.buildFilters(component);
for (Map.Entry<String, List<ChartExtFilterRequest>> entry : panelFilters.entrySet()) {
List<ChartExtFilterRequest> chartExtFilterRequests = entry.getValue();
ChartExtRequest chartExtRequest = new ChartExtRequest();
chartExtRequest.setQueryFrom("panel");
chartExtRequest.setFilter(chartExtFilterRequests);
result.put(entry.getKey(), chartExtRequest);
}
return result;
}
private List<ChartExtFilterRequest> initFilters(List<Map<String, Object>> components) {

View File

@ -2479,18 +2479,19 @@ export default {
exec_time: '执行时间',
start_time: '开始时间',
end_time: '结束时间',
chart_data: '视图数据',
preview: '预览',
emial_preview: '邮件预览',
chart_data_range: '视图数据范围',
simple_repeat: '简单重复',
once_a_day: '每天一次',
once_a_week: '每周一次',
once_a_month: '每月一次',
complex_repeat: '复杂重复',
pixel_tip: '可直接输入自定义分辨率(例如:2560 * 1600)或选择',
task_type: '任务类型'
task_type: '任务类型',
range_view: '展示数据',
range_all: '全部数据'
},
dynamic_time: {
set_default: '设置默认值',