From 945f7008a1fdb58f8dc851b5aeab7e612f95034e Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Tue, 15 Mar 2022 18:00:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BB=8E=E6=A8=A1=E6=9D=BF=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E7=9A=84=E4=BB=AA=E8=A1=A8=E6=9D=BF=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E6=A8=A1=E6=9D=BF=E7=BC=93=E5=AD=98=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/mapper/ext/ExtPanelViewMapper.xml | 6 +-- .../commons/constants/CommonConstants.java | 11 +++++ .../io/dataease/dto/chart/ChartViewDTO.java | 2 + .../service/chart/ChartViewService.java | 37 +++++++++++++--- .../panel/PanelGroupExtendDataService.java | 42 +++++++++++++++++++ .../service/panel/PanelViewService.java | 25 ++++++++++- frontend/src/views/chart/view/ChartEdit.vue | 1 + 7 files changed, 112 insertions(+), 12 deletions(-) create mode 100644 backend/src/main/java/io/dataease/service/panel/PanelGroupExtendDataService.java diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewMapper.xml index 1772e2b8e3..f069ba5423 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewMapper.xml @@ -71,9 +71,9 @@ - INSERT INTO `panel_view` (id,chart_view_id, panel_id) VALUES + INSERT INTO `panel_view` (id,chart_view_id, panel_id,data_from) VALUES - (uuid(),#{panelView.chartViewId},#{panelView.panelId}) + (uuid(),#{panelView.chartViewId},#{panelView.panelId},#{panelView.dataFrom}) @@ -110,6 +110,4 @@ and chart_view.id is not null - - diff --git a/backend/src/main/java/io/dataease/commons/constants/CommonConstants.java b/backend/src/main/java/io/dataease/commons/constants/CommonConstants.java index 88c87e6db5..a0ec952d86 100644 --- a/backend/src/main/java/io/dataease/commons/constants/CommonConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/CommonConstants.java @@ -69,4 +69,15 @@ public class CommonConstants { public static final String CACHE = "cache"; } + + //视图数据读取来源 + public static final class VIEW_DATA_FROM { + + // 模板数据 + public static final String TEMPLATE = "template"; + + // 视图数据 + public static final String CHART = "chart"; + + } } diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java index baf32b4497..b2b87efef1 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java @@ -30,4 +30,6 @@ public class ChartViewDTO extends ChartViewWithBLOBs { private boolean drill; @ApiModelProperty("下钻条件集合") private List drillFilters; + @ApiModelProperty("当前数据来源") + private String dataFrom; } diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 69778f5f6e..a776aaff94 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -7,6 +7,7 @@ import io.dataease.auth.service.AuthUserService; import io.dataease.base.domain.*; import io.dataease.base.mapper.ChartViewCacheMapper; import io.dataease.base.mapper.ChartViewMapper; +import io.dataease.base.mapper.PanelViewMapper; import io.dataease.base.mapper.ext.ExtChartGroupMapper; import io.dataease.base.mapper.ext.ExtChartViewMapper; import io.dataease.commons.constants.ColumnPermissionConstants; @@ -23,6 +24,7 @@ import io.dataease.dto.chart.*; import io.dataease.dto.dataset.DataSetTableDTO; import io.dataease.dto.dataset.DataSetTableUnionDTO; import io.dataease.dto.dataset.DataTableInfoDTO; +import io.dataease.exception.DataEaseException; import io.dataease.i18n.Translator; import io.dataease.listener.util.CacheUtils; import io.dataease.provider.ProviderFactory; @@ -34,6 +36,8 @@ import io.dataease.service.dataset.DataSetTableUnionService; import io.dataease.service.dataset.PermissionService; import io.dataease.service.datasource.DatasourceService; import io.dataease.service.engine.EngineService; +import io.dataease.service.panel.PanelGroupExtendDataService; +import io.dataease.service.panel.PanelViewService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -76,6 +80,12 @@ public class ChartViewService { private EngineService engineService; @Resource private ChartViewCacheMapper chartViewCacheMapper; + @Resource + private PanelViewService panelViewService; + @Resource + private PanelGroupExtendDataService extendDataService; + + //默认使用非公平 private ReentrantLock lock = new ReentrantLock(); @@ -249,13 +259,28 @@ public class ChartViewService { } public ChartViewDTO getData(String id, ChartExtRequest request) throws Exception { - ChartViewDTO view = this.getOne(id,request.getQueryFrom()); - // 如果是从仪表板获取视图数据,则仪表板的查询模式,查询结果的数量,覆盖视图对应的属性 - if (CommonConstants.VIEW_QUERY_FROM.PANEL.equals(request.getQueryFrom()) && CommonConstants.VIEW_RESULT_MODE.CUSTOM.equals(request.getResultMode())) { - view.setResultMode(request.getResultMode()); - view.setResultCount(request.getResultCount()); + try{ + String dataFrom = panelViewService.findViewDataFrom(id); + + if(CommonConstants.VIEW_DATA_FROM.TEMPLATE.equals(dataFrom)){ + return extendDataService.getChartInfo(id); + }else{// 从视图读取数据 + + ChartViewDTO view = this.getOne(id,request.getQueryFrom()); + view.setDataFrom(dataFrom); + // 如果是从仪表板获取视图数据,则仪表板的查询模式,查询结果的数量,覆盖视图对应的属性 + if (CommonConstants.VIEW_QUERY_FROM.PANEL.equals(request.getQueryFrom()) && CommonConstants.VIEW_RESULT_MODE.CUSTOM.equals(request.getResultMode())) { + view.setResultMode(request.getResultMode()); + view.setResultCount(request.getResultCount()); + } + return calcData(view, request, request.isCache()); + } + }catch (Exception e){ + e.printStackTrace(); + DataEaseException.throwException(e); } - return calcData(view, request, request.isCache()); + return null; + } // private void checkPermissions(List chartViewFieldDTOS, List fields, List desensitizationList, Boolean alowDesensitization) throws Exception { diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupExtendDataService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupExtendDataService.java new file mode 100644 index 0000000000..ef7df79585 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupExtendDataService.java @@ -0,0 +1,42 @@ +package io.dataease.service.panel; + +import com.alibaba.fastjson.JSONObject; +import io.dataease.base.domain.PanelGroupExtendData; +import io.dataease.base.domain.PanelGroupExtendDataExample; +import io.dataease.base.mapper.PanelGroupExtendDataMapper; +import io.dataease.commons.constants.CommonConstants; +import io.dataease.dto.chart.ChartViewDTO; +import io.dataease.exception.DataEaseException; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/3/15 + * Description: + */ +@Service +public class PanelGroupExtendDataService { + + @Resource + private PanelGroupExtendDataMapper panelGroupExtendDataMapper; + + public ChartViewDTO getChartInfo(String viewId){ + PanelGroupExtendDataExample extendDataExample = new PanelGroupExtendDataExample(); + extendDataExample.createCriteria().andViewIdEqualTo(viewId); + List extendDataList = panelGroupExtendDataMapper.selectByExampleWithBLOBs(extendDataExample); + if(CollectionUtils.isNotEmpty(extendDataList)){ + ChartViewDTO chartView = JSONObject.parseObject(extendDataList.get(0).getViewDetails(),ChartViewDTO.class); + chartView.setDataFrom(CommonConstants.VIEW_DATA_FROM.TEMPLATE); + return chartView; + }else{ + DataEaseException.throwException("模板缓存数据中未获取指定视图数据:"+viewId); + } + return null; + } + + +} diff --git a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java index e18bc677af..73a90ef673 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java @@ -10,6 +10,7 @@ import io.dataease.base.mapper.PanelViewMapper; import io.dataease.base.mapper.ext.ExtChartViewMapper; import io.dataease.base.mapper.ext.ExtPanelGroupMapper; import io.dataease.base.mapper.ext.ExtPanelViewMapper; +import io.dataease.commons.constants.CommonConstants; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.dto.panel.PanelViewDto; @@ -130,8 +131,6 @@ public class PanelViewService { } } panelGroup.setMobileLayout(mobileLayout); - //移除没有用到的仪表板私有视图 - extPanelGroupMapper.removeUselessViews(panelId,viewIds); return viewIds; } @@ -144,4 +143,26 @@ public class PanelViewService { panelViewExample.createCriteria().andCopyIdEqualTo(copyId); return panelViewMapper.selectByExample(panelViewExample); } + + public PanelView findByViewId(String viewId){ + PanelViewExample panelViewExample = new PanelViewExample(); + panelViewExample.createCriteria().andChartViewIdEqualTo(viewId); + List result = panelViewMapper.selectByExample(panelViewExample); + if(CollectionUtils.isNotEmpty(result)){ + return result.get(0); + }else{ + return null; + } + } + + public String findViewDataFrom(String viewId){ + PanelViewExample panelViewExample = new PanelViewExample(); + panelViewExample.createCriteria().andChartViewIdEqualTo(viewId); + List result = panelViewMapper.selectByExample(panelViewExample); + if(CollectionUtils.isNotEmpty(result)&& CommonConstants.VIEW_DATA_FROM.TEMPLATE.equals(result.get(0).getDataFrom())){ + return "template"; + }else{ + return "chart"; + } + } } diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index a853736e20..000ad09c5c 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -1327,6 +1327,7 @@ export default { } }, created() { + debugger // this.get(this.$store.state.chart.viewId); // this.initAreas() },