Merge pull request #11013 from dataease/pr@dev-v2@refactor_app

refactor(数据大屏): 优化应用导入
This commit is contained in:
王嘉豪 2024-07-18 11:26:27 +08:00 committed by GitHub
commit dc36c6a597
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 167 additions and 106 deletions

View File

@ -172,6 +172,7 @@ public class DataVisualizationServer implements DataVisualizationApi {
@Override @Override
@Transactional @Transactional
public String saveCanvas(DataVisualizationBaseRequest request) throws Exception{ public String saveCanvas(DataVisualizationBaseRequest request) throws Exception{
Boolean isAppSave = false;
Long time = System.currentTimeMillis(); Long time = System.currentTimeMillis();
// 如果是应用 则新进行应用校验 数据集名称和 数据源名称校验 // 如果是应用 则新进行应用校验 数据集名称和 数据源名称校验
VisualizationExport2AppVO appData = request.getAppData(); VisualizationExport2AppVO appData = request.getAppData();
@ -179,6 +180,7 @@ public class DataVisualizationServer implements DataVisualizationApi {
Map<Long,Long> dsTableIdMap = new HashMap<>(); Map<Long,Long> dsTableIdMap = new HashMap<>();
Map<Long,Long> dsTableFieldsIdMap = new HashMap<>(); Map<Long,Long> dsTableFieldsIdMap = new HashMap<>();
if(appData != null){ if(appData != null){
isAppSave = true;
try { try {
Map<Long,Long> datasourceIdMap = appData.getDatasourceInfo().stream() Map<Long,Long> datasourceIdMap = appData.getDatasourceInfo().stream()
.collect(Collectors.toMap(AppCoreDatasourceVO::getId, AppCoreDatasourceVO::getSystemDatasourceId)); .collect(Collectors.toMap(AppCoreDatasourceVO::getId, AppCoreDatasourceVO::getSystemDatasourceId));
@ -265,6 +267,13 @@ public class DataVisualizationServer implements DataVisualizationApi {
Long newDvId = coreVisualizationManage.innerSave(visualizationInfo); Long newDvId = coreVisualizationManage.innerSave(visualizationInfo);
request.setId(newDvId); request.setId(newDvId);
// TODO 还原ID信息 // TODO 还原ID信息
if(isAppSave){
request.getCanvasViewInfo().forEach((key,viewInfo) ->{
viewInfo.setTableId(dsGroupIdMap.get(viewInfo.getTableId()));
viewInfo.setDataFrom("dataset");
});
}
//保存图表信息 //保存图表信息
chartDataManage.saveChartViewFromVisualization(request.getComponentData(), newDvId, request.getCanvasViewInfo()); chartDataManage.saveChartViewFromVisualization(request.getComponentData(), newDvId, request.getCanvasViewInfo());
return newDvId.toString(); return newDvId.toString();
@ -395,6 +404,7 @@ public class DataVisualizationServer implements DataVisualizationApi {
@Override @Override
public DataVisualizationVO decompression(DataVisualizationBaseRequest request) throws Exception { public DataVisualizationVO decompression(DataVisualizationBaseRequest request) throws Exception {
try{
Long newDvId = IDUtils.snowID(); Long newDvId = IDUtils.snowID();
String newFrom = request.getNewFrom(); String newFrom = request.getNewFrom();
String templateStyle = null; String templateStyle = null;
@ -444,6 +454,13 @@ public class DataVisualizationServer implements DataVisualizationApi {
// 模板市场记录 // 模板市场记录
coreOptRecentManage.saveOpt(request.getResourceName(), OptConstants.OPT_RESOURCE_TYPE.TEMPLATE, OptConstants.OPT_TYPE.NEW); coreOptRecentManage.saveOpt(request.getResourceName(), OptConstants.OPT_RESOURCE_TYPE.TEMPLATE, OptConstants.OPT_TYPE.NEW);
} }
if(StringUtils.isNotEmpty(appDataStr)){
VisualizationExport2AppVO appDataFormat = JsonUtil.parseObject(appDataStr,VisualizationExport2AppVO.class);
String dvInfo = appDataFormat.getVisualizationInfo();
VisualizationBaseInfoVO baseInfoVO = JsonUtil.parseObject(dvInfo,VisualizationBaseInfoVO.class);
Long sourceDvId = baseInfoVO.getId();
appDataStr = appDataStr.replaceAll(sourceDvId.toString(), newDvId.toString());
}
// 解析动态数据 // 解析动态数据
Map<String, String> dynamicDataMap = JsonUtil.parseObject(dynamicData, Map.class); Map<String, String> dynamicDataMap = JsonUtil.parseObject(dynamicData, Map.class);
List<ChartViewDTO> chartViews = new ArrayList<>(); List<ChartViewDTO> chartViews = new ArrayList<>();
@ -475,10 +492,7 @@ public class DataVisualizationServer implements DataVisualizationApi {
extendDataInfo.put(newViewId, extendDataDTO); extendDataInfo.put(newViewId, extendDataDTO);
templateData = templateData.replaceAll(originViewId, newViewId.toString()); templateData = templateData.replaceAll(originViewId, newViewId.toString());
if(StringUtils.isNotEmpty(appDataStr)){ if(StringUtils.isNotEmpty(appDataStr)){
VisualizationExport2AppVO appDataFormat = JsonUtil.parse(appDataStr,VisualizationExport2AppVO.class); appDataStr = appDataStr.replaceAll(originViewId, newViewId.toString());
Map dvInfo = JsonUtil.parse(appDataFormat.getVisualizationInfo(),Map.class);
String sourceDvId = (String) dvInfo.get("id");
appDataStr = appDataStr.replaceAll(originViewId, newViewId.toString()).replaceAll(sourceDvId, newDvId.toString());
} }
canvasViewInfo.put(chartView.getId(), chartView); canvasViewInfo.put(chartView.getId(), chartView);
//插入模板数据 此处预先插入减少数据交互量 //插入模板数据 此处预先插入减少数据交互量
@ -490,6 +504,12 @@ public class DataVisualizationServer implements DataVisualizationApi {
//Store static resource into the server //Store static resource into the server
staticResourceServer.saveFilesToServe(staticResource); staticResourceServer.saveFilesToServe(staticResource);
return new DataVisualizationVO(newDvId, name, dvType, version, templateStyle, templateData,appDataStr, canvasViewInfo, null); return new DataVisualizationVO(newDvId, name, dvType, version, templateStyle, templateData,appDataStr, canvasViewInfo, null);
}catch (Exception e){
e.printStackTrace();
DEException.throwException("解析错误");
return null;
}
} }
@Override @Override

View File

@ -99,13 +99,6 @@ const resourceOptFinish = param => {
saveCanvasWithCheck() saveCanvasWithCheck()
} }
} }
const appOptFinish = param => {
if (param && param.opt === 'newLeaf') {
dvInfo.value.dataState = 'ready'
dvInfo.value.pid = param.pid
dvInfo.value.name = param.name
}
}
const saveCanvasWithCheck = () => { const saveCanvasWithCheck = () => {
const appData = dvMainStore.getAppDataInfo() const appData = dvMainStore.getAppDataInfo()
@ -382,7 +375,7 @@ const fullScreenPreview = () => {
:dv-info="dvInfo" :dv-info="dvInfo"
:canvas-view-info="canvasViewInfo" :canvas-view-info="canvasViewInfo"
cur-canvas-type="dataV" cur-canvas-type="dataV"
@saveApp="appOptFinish" @saveApp="saveCanvasWithCheck"
></de-app-apply> ></de-app-apply>
</div> </div>
<de-fullscreen ref="fullScreeRef" show-position="dvEdit"></de-fullscreen> <de-fullscreen ref="fullScreeRef" show-position="dvEdit"></de-fullscreen>

View File

@ -169,7 +169,11 @@ const downloadApp = () => {
const dsIds = [] const dsIds = []
gatherAppInfo(viewIds, dsIds) gatherAppInfo(viewIds, dsIds)
export2AppCheck({ dvId: dvInfo.value.id, viewIds, dsIds }).then(rsp => { export2AppCheck({ dvId: dvInfo.value.id, viewIds, dsIds }).then(rsp => {
const params = { ...rsp.data, ...state.form } const params = {
...rsp.data,
...state.form,
visualizationInfo: JSON.stringify(dvInfo.value)
}
emits('downLoadApp', params) emits('downLoadApp', params)
state.applyDownloadDrawer = false state.applyDownloadDrawer = false
}) })

View File

@ -522,10 +522,7 @@ export async function decompressionPre(params, callBack) {
.then(response => { .then(response => {
const deTemplateDataTemp = response.data const deTemplateDataTemp = response.data
const sourceComponentData = JSON.parse(deTemplateDataTemp['componentData']) const sourceComponentData = JSON.parse(deTemplateDataTemp['componentData'])
let appData const appData = deTemplateDataTemp['appData']
if (deTemplateDataTemp['appData']) {
appData = JSON.parse(deTemplateDataTemp['appData'])
}
sourceComponentData.forEach(componentItem => { sourceComponentData.forEach(componentItem => {
// 2 为基础版本 此处需要增加仪表板矩阵密度 // 2 为基础版本 此处需要增加仪表板矩阵密度
if ( if (

View File

@ -207,8 +207,6 @@ const state = reactive({
pid: [ pid: [
{ {
required: true, required: true,
min: 2,
max: 25,
message: '请选择所属文件夹', message: '请选择所属文件夹',
trigger: 'blur' trigger: 'blur'
} }

View File

@ -186,7 +186,7 @@ public class DataVisualizationVO implements Serializable {
this.canvasViewInfo = canvasViewInfo; this.canvasViewInfo = canvasViewInfo;
this.extendDataInfo = extendDataInfo; this.extendDataInfo = extendDataInfo;
if(StringUtils.isNotEmpty(appDataStr)){ if(StringUtils.isNotEmpty(appDataStr)){
this.appData= JsonUtil.parse(appDataStr,VisualizationExport2AppVO.class); this.appData= JsonUtil.parseObject(appDataStr,VisualizationExport2AppVO.class);
} }
this.version = version; this.version = version;
} }

View File

@ -0,0 +1,48 @@
package io.dataease.api.visualization.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
@Data
public class VisualizationBaseInfoVO {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private String name;
private String label;
private String nodeType;
@JsonSerialize(using = ToStringSerializer.class)
private Long pid;
/**
* 移动端布局
*/
private String mobileLayout;
/**
* 创建时间
*/
private Long createTime;
/**
* 创建人
*/
private String createBy;
/**
* 更新时间
*/
private Long updateTime;
/**
* 更新人
*/
private String updateBy;
}

View File

@ -1,6 +1,7 @@
package io.dataease.api.visualization.vo; package io.dataease.api.visualization.vo;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.dataease.api.visualization.request.DataVisualizationBaseRequest;
import lombok.Data; import lombok.Data;
import java.util.ArrayList; import java.util.ArrayList;