diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java index c6625dc5b7..6afb467b8f 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java @@ -198,10 +198,12 @@ public class EmailTaskHandler extends TaskHandler implements Job { List files = null; String viewIds = emailTemplateDTO.getViewIds(); if (StringUtils.isNotBlank(viewIds)) { + String viewDataRange = emailTemplateDTO.getViewDataRange(); + Boolean justExportView = StringUtils.isBlank(viewDataRange) || StringUtils.equals("view", viewDataRange); List 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 channels = null; diff --git a/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java b/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java index a162996fb5..a575cc7fbc 100644 --- a/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java +++ b/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java @@ -14,12 +14,12 @@ public abstract class FilterBuildTemplate { protected abstract FilterParamTO buildParam(Map component); - public Map> buildFilters(List> components) { + public static Map> buildFilters(List> components) { Map 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> filters = componentsFilter(components, "custom", null, null); @@ -45,9 +45,11 @@ public abstract class FilterBuildTemplate { return emptyResult; } - private Map> fillFilters(Map> emptyResult, List> filters) { + private static Map> fillFilters(Map> emptyResult, List> 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 viewIds, String viewId) { + private static Boolean viewIdMatch(List 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 value = filterParamTO.getValue(); @@ -111,14 +113,14 @@ public abstract class FilterBuildTemplate { return condition; } - private Map> buildEmpty(List> components) { + private static Map> buildEmpty(List> components) { Map> 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) 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> tabs = (List>) ((Map) 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); diff --git a/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java b/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java index e8fd9a9224..f6f685f6d2 100644 --- a/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java +++ b/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java @@ -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 export(String panelId, List viewIds, PermissionProxy proxy) throws Exception { + public List export(String panelId, List 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> 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 stringChartExtRequestMap = buildViewRequest(components); List results = new ArrayList<>(); - List sheets = viewIds.stream().map(viewId -> viewFiles(viewId, chartExtRequest)).collect(Collectors.toList()); + List 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> filters) { - ChartExtRequest chartExtRequest = new ChartExtRequest(); - filters = Optional.ofNullable(filters).orElse(new ArrayList<>()); - - List panelFilters = filters.stream().map(item -> { - ChartExtFilterRequest curentFilter = new ChartExtFilterRequest(); - return curentFilter; - }).collect(Collectors.toList()); - - chartExtRequest.setQueryFrom("panel"); - chartExtRequest.setFilter(panelFilters); - return chartExtRequest; + private Map buildViewRequest(List> component) { + Map result = new HashMap<>(); + Map> panelFilters = FilterBuildTemplate.buildFilters(component); + for (Map.Entry> entry : panelFilters.entrySet()) { + List chartExtFilterRequests = entry.getValue(); + ChartExtRequest chartExtRequest = new ChartExtRequest(); + chartExtRequest.setQueryFrom("panel"); + chartExtRequest.setFilter(chartExtFilterRequests); + result.put(entry.getKey(), chartExtRequest); + } + return result; } private List initFilters(List> components) { diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 98f7ae8299..f69afb6563 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -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: '设置默认值',