perf(X-Pack): 前端同步请求优化合并

This commit is contained in:
fit2cloud-chenyw 2024-09-24 14:20:22 +08:00
parent 820bc785ce
commit 87523d54f2
6 changed files with 88 additions and 5 deletions

View File

@ -0,0 +1,42 @@
package io.dataease.visualization.manage;
import io.dataease.dataset.manage.DatasetGroupManage;
import io.dataease.datasource.manage.DataSourceManage;
import io.dataease.model.BusiNodeRequest;
import io.dataease.model.BusiNodeVO;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component("coreBusiManage")
public class CoreBusiManage {
@Resource
private CoreVisualizationManage coreVisualizationManage;
@Resource
private DataSourceManage dataSourceManage;
@Resource
private DatasetGroupManage datasetGroupManage;
public Map<String, List<BusiNodeVO>> interactiveTree(Map<String, BusiNodeRequest> requestMap) {
Map<String, List<BusiNodeVO>> result = new HashMap<>();
for (Map.Entry<String, BusiNodeRequest> entry : requestMap.entrySet()) {
BusiNodeRequest busiNodeRequest = entry.getValue();
String key = entry.getKey();
if (StringUtils.equalsIgnoreCase(key, "datasource")) {
result.put(key, dataSourceManage.tree(busiNodeRequest));
} else if (StringUtils.equalsIgnoreCase(key, "dataset")) {
result.put(key, datasetGroupManage.tree(busiNodeRequest));
} else if (StringUtils.equalsAnyIgnoreCase(key, "dashboard", "dataV")) {
result.put(key, coreVisualizationManage.tree(busiNodeRequest));
}
}
return result;
}
}

View File

@ -51,6 +51,7 @@ import io.dataease.visualization.dao.auto.entity.VisualizationWatermark;
import io.dataease.visualization.dao.auto.mapper.DataVisualizationInfoMapper;
import io.dataease.visualization.dao.auto.mapper.VisualizationWatermarkMapper;
import io.dataease.visualization.dao.ext.mapper.ExtDataVisualizationMapper;
import io.dataease.visualization.manage.CoreBusiManage;
import io.dataease.visualization.manage.CoreVisualizationManage;
import io.dataease.visualization.utils.VisualizationUtils;
import jakarta.annotation.Resource;
@ -128,6 +129,9 @@ public class DataVisualizationServer implements DataVisualizationApi {
@Autowired
private CoreDatasourceMapper coreDatasourceMapper;
@Resource
private CoreBusiManage coreBusiManage;
@Override
public DataVisualizationVO findCopyResource(Long dvId, String busiFlag) {
DataVisualizationVO result = findById(new DataVisualizationBaseRequest(dvId, busiFlag));
@ -484,6 +488,11 @@ public class DataVisualizationServer implements DataVisualizationApi {
return coreVisualizationManage.tree(request);
}
@Override
public Map<String, List<BusiNodeVO>> interactiveTree(Map<String, BusiNodeRequest> requestMap) {
return coreBusiManage.interactiveTree(requestMap);
}
@DeLog(id = "#p0.id", pid = "#p0.pid", ot = LogOT.MODIFY, stExp = "#p0.type")
@Transactional
@Override

View File

@ -41,6 +41,12 @@ export const queryTreeApi = async (data: BusiTreeRequest): Promise<IResponse> =>
})
}
export const queryBusiTreeApi = async (data): Promise<IResponse> => {
return request.post({ url: '/dataVisualization/interactiveTree', data }).then(res => {
return res?.data
})
}
export const findDvType = async dvId =>
request.get({ url: `/dataVisualization/findDvType/${dvId}` })

View File

@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { store } from '@/store'
import { queryTreeApi } from '@/api/visualization/dataVisualization'
import { queryTreeApi, queryBusiTreeApi } from '@/api/visualization/dataVisualization'
import { getDatasetTree } from '@/api/dataset'
import { listDatasources } from '@/api/datasource'
import type { BusiTreeRequest, BusiTreeNode } from '@/models/tree/TreeNode'
@ -47,7 +47,7 @@ export const interactiveStore = defineStore('interactive', {
}
},
actions: {
async setInteractive(param: BusiTreeRequest) {
async setInteractive(param: BusiTreeRequest, resParam?: object) {
const flag = busiFlagMap.findIndex(item => item === param.busiFlag)
if (!hasMenuAuth(flag) && !window.DataEaseBi && !appStore.getIsIframe) {
const tempData: InnerInteractive = {
@ -66,8 +66,11 @@ export const interactiveStore = defineStore('interactive', {
}
return []
}
const method = apiMap[flag]
const res = await method(param)
let res = resParam
if (!resParam) {
const method = apiMap[flag]
res = await method(param)
}
this.data[flag] = convertInteractive(res)
if (flag === 0) {
wsCache.set('panel-weight', convertLocalStorage(this.data[flag]))
@ -78,6 +81,10 @@ export const interactiveStore = defineStore('interactive', {
return res
},
async initInteractive(refresh?: boolean) {
if (refresh) {
await this.loadBusiInteractive()
return
}
let index = 4
while (index--) {
if (!this.data[index] || refresh) {
@ -88,6 +95,20 @@ export const interactiveStore = defineStore('interactive', {
}
}
},
async loadBusiInteractive() {
const param = {}
for (let i = 0; i < busiFlagMap.length; i++) {
const key = busiFlagMap[i]
if (window.DataEaseBi || appStore.getIsIframe || hasMenuAuth(i)) {
param[key] = { busiFlag: key }
}
}
const data = await queryBusiTreeApi(param)
for (const busiKey in data) {
const res = data[busiKey]
this.setInteractive(param[busiKey], res)
}
},
clear() {
this.data = {}
wsCache.set('panel-weight', {})

@ -1 +1 @@
Subproject commit 82b33709e27888f38ec4f2fd974efc405a0a9506
Subproject commit 9c5aa6bd7d255286384f86b1a50ff153b041d929

View File

@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
import static io.dataease.constant.AuthResourceEnum.PANEL;
@ -72,6 +73,10 @@ public interface DataVisualizationApi {
@Operation(summary = "查询可视化资源树")
List<BusiNodeVO> tree(@RequestBody BusiNodeRequest request);
@PostMapping("/interactiveTree")
@Operation(summary = "查询业务资源树")
Map<String, List<BusiNodeVO>> interactiveTree(@RequestBody Map<String, BusiNodeRequest> requestMap);
@PostMapping("/move")
@DePermit(value = {"#p0.id+':manage'", "#p0.pid+':manage'"}, busiFlag = "#p0.type")
@Operation(summary = "移动可视化资源")