feat: 从模板新建的仪表板支持查看模板缓存数据

This commit is contained in:
wangjiahao 2022-03-15 18:00:19 +08:00
parent 5b363b985b
commit 945f7008a1
7 changed files with 112 additions and 12 deletions

View File

@ -71,9 +71,9 @@
</delete>
<insert id="savePanelView">
INSERT INTO `panel_view` (id,chart_view_id, panel_id) VALUES
INSERT INTO `panel_view` (id,chart_view_id, panel_id,data_from) VALUES
<foreach collection="panelViews" item="panelView" index="index" separator=",">
(uuid(),#{panelView.chartViewId},#{panelView.panelId})
(uuid(),#{panelView.chartViewId},#{panelView.panelId},#{panelView.dataFrom})
</foreach>
</insert>
@ -110,6 +110,4 @@
and chart_view.id is not null
</insert>
</mapper>

View File

@ -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";
}
}

View File

@ -30,4 +30,6 @@ public class ChartViewDTO extends ChartViewWithBLOBs {
private boolean drill;
@ApiModelProperty("下钻条件集合")
private List<ChartExtFilterRequest> drillFilters;
@ApiModelProperty("当前数据来源")
private String dataFrom;
}

View File

@ -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<? extends ChartViewFieldBaseDTO> chartViewFieldDTOS, List<DatasetTableField> fields, List<String> desensitizationList, Boolean alowDesensitization) throws Exception {

View File

@ -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<PanelGroupExtendData> 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;
}
}

View File

@ -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<PanelView> 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<PanelView> result = panelViewMapper.selectByExample(panelViewExample);
if(CollectionUtils.isNotEmpty(result)&& CommonConstants.VIEW_DATA_FROM.TEMPLATE.equals(result.get(0).getDataFrom())){
return "template";
}else{
return "chart";
}
}
}

View File

@ -1327,6 +1327,7 @@ export default {
}
},
created() {
debugger
// this.get(this.$store.state.chart.viewId);
// this.initAreas()
},