de/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java

336 lines
17 KiB
Java

package io.dataease.service.panel;
import com.google.gson.Gson;
import io.dataease.commons.constants.CommonConstants;
import io.dataease.commons.constants.PanelConstants;
import io.dataease.commons.utils.AuthUtils;
import io.dataease.commons.utils.BeanUtils;
import io.dataease.controller.datasource.request.UpdataDsRequest;
import io.dataease.controller.request.dataset.DataSetTableRequest;
import io.dataease.controller.request.panel.PanelAppTemplateApplyRequest;
import io.dataease.controller.request.panel.PanelAppTemplateRequest;
import io.dataease.controller.request.panel.PanelGroupRequest;
import io.dataease.ext.ExtPanelAppTemplateMapper;
import io.dataease.plugins.common.base.domain.*;
import io.dataease.plugins.common.base.mapper.PanelAppTemplateMapper;
import io.dataease.plugins.common.constants.DatasetType;
import io.dataease.service.chart.ChartViewFieldService;
import io.dataease.service.chart.ChartViewService;
import io.dataease.service.dataset.DataSetGroupService;
import io.dataease.service.dataset.DataSetTableFieldsService;
import io.dataease.service.dataset.DataSetTableService;
import io.dataease.service.datasource.DatasourceService;
import io.dataease.service.staticResource.StaticResourceService;
import org.apache.commons.lang3.StringUtils;
import org.pentaho.di.core.util.UUIDUtil;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static io.dataease.commons.constants.StaticResourceConstants.UPLOAD_URL_PREFIX;
/**
* Author: wangjiahao
* Date: 2022/9/8
* Description:
*/
@Service
public class PanelAppTemplateService {
private static Gson gson = new Gson();
@Resource
private ExtPanelAppTemplateMapper extPanelAppTemplateMapper;
@Resource
private PanelAppTemplateMapper panelAppTemplateMapper;
@Resource
private DatasourceService datasourceService;
@Resource
private ChartViewService chartViewService;
@Resource
private ChartViewFieldService chartViewFieldService;
@Resource
private DataSetTableService dataSetTableService;
@Resource
private DataSetTableFieldsService dataSetTableFieldsService;
@Resource
@Lazy
private PanelGroupService panelGroupService;
@Resource
private PanelViewService panelViewService;
@Resource
private DataSetGroupService dataSetGroupService;
@Resource
private StaticResourceService staticResourceService;
public List<PanelAppTemplateWithBLOBs> list(PanelAppTemplateRequest request) {
return extPanelAppTemplateMapper.queryBaseInfo(request.getNodeType(),request.getPid());
}
public void save(PanelAppTemplateRequest request) {
request.setId(UUIDUtil.getUUIDAsString());
request.setCreateUser(AuthUtils.getUser().getUsername());
request.setCreateTime(System.currentTimeMillis());
PanelAppTemplateWithBLOBs requestTemplate = new PanelAppTemplateWithBLOBs();
BeanUtils.copyBean(requestTemplate, request);
if (StringUtils.isEmpty(requestTemplate.getNodeType())) {
requestTemplate.setNodeType("template");
}
if(StringUtils.isNotEmpty(request.getSnapshot())){
//Store static resource into the server
String snapshotName = "app-template-" + request.getId() + ".jpeg";
staticResourceService.saveSingleFileToServe(snapshotName, request.getSnapshot().replace("data:image/jpeg;base64,", ""));
requestTemplate.setSnapshot("/" + UPLOAD_URL_PREFIX + '/' + snapshotName);
}
panelAppTemplateMapper.insertSelective(requestTemplate);
}
public void update(PanelAppTemplateRequest request) {
nameCheck(CommonConstants.OPT_TYPE.UPDATE, request.getName(), request.getPid(), request.getId());
request.setUpdateUser(AuthUtils.getUser().getUsername());
request.setUpdateTime(System.currentTimeMillis());
PanelAppTemplateWithBLOBs requestTemplate = new PanelAppTemplateWithBLOBs();
BeanUtils.copyBean(requestTemplate, request);
//Store static resource into the server
if(StringUtils.isNotEmpty(request.getSnapshot())){
String snapshotName = "app-template-" + request.getId() + ".jpeg";
staticResourceService.saveSingleFileToServe(snapshotName, request.getSnapshot().replace("data:image/jpeg;base64,", ""));
requestTemplate.setSnapshot("/" + UPLOAD_URL_PREFIX + '/' + snapshotName);
}
panelAppTemplateMapper.updateByPrimaryKeySelective(requestTemplate);
}
public void delete(String appTemplateId) {
panelAppTemplateMapper.deleteByPrimaryKey(appTemplateId);
}
public String nameCheck(PanelAppTemplateRequest request) {
return nameCheck(request.getOptType(), request.getName(), request.getPid(), request.getId());
}
//名称检查
public String nameCheck(String optType, String name, String pid, String id) {
PanelAppTemplateExample example = new PanelAppTemplateExample();
if (CommonConstants.OPT_TYPE.INSERT.equals(optType)) {
example.createCriteria().andPidEqualTo(pid).andNameEqualTo(name);
} else if (CommonConstants.OPT_TYPE.UPDATE.equals(optType)) {
example.createCriteria().andPidEqualTo(pid).andNameEqualTo(name).andIdNotEqualTo(id);
}
List<PanelAppTemplate> panelTemplates = panelAppTemplateMapper.selectByExample(example);
if (CollectionUtils.isEmpty(panelTemplates)) {
return CommonConstants.CHECK_RESULT.NONE;
} else {
return CommonConstants.CHECK_RESULT.EXIST_ALL;
}
}
@Transactional(rollbackFor = Exception.class)
public Map<String, String> applyDatasource(List<Datasource> oldDatasourceList, List<Datasource> newDatasourceList) throws Exception {
Map<String, String> datasourceRealMap = new HashMap<>();
for (int i = 0; i < newDatasourceList.size(); i++) {
Datasource datasource = newDatasourceList.get(0);
datasource.setId(null);
Datasource newDatasource = datasourceService.addDatasource(datasource);
datasourceRealMap.put(oldDatasourceList.get(i).getId(), newDatasource.getId());
}
return datasourceRealMap;
}
@Transactional(rollbackFor = Exception.class)
public void applyPanelView(List<PanelView> panelViewsInfo, Map<String, String> chartViewsRealMap, String panelId) {
Long time = System.currentTimeMillis();
String userName = AuthUtils.getUser().getUsername();
panelViewsInfo.forEach(panelView -> {
panelView.setId(UUIDUtil.getUUIDAsString());
panelView.setPanelId(panelId);
panelView.setCreateTime(time);
panelView.setCreateBy(userName);
panelView.setChartViewId(chartViewsRealMap.get(panelView.getChartViewId()));
panelViewService.save(panelView);
});
}
@Transactional(rollbackFor = Exception.class)
public String applyPanel(PanelGroupRequest panelInfo, Map<String, String> chartViewsRealMap, String newPanelId, String panelName, String pid) {
panelInfo.setId(newPanelId);
panelInfo.setPid(pid);
panelInfo.setName(panelName);
panelInfo.setNodeType("panel");
panelInfo.setPanelType("self");
panelInfo.setCreateBy(AuthUtils.getUser().getUsername());
panelInfo.setCreateTime(System.currentTimeMillis());
panelGroupService.newPanelFromApp(panelInfo, chartViewsRealMap);
return newPanelId;
}
@Transactional(rollbackFor = Exception.class)
public Map<String, String> applyDataset(List<DatasetTable> datasetTablesInfo, Map<String, String> datasourceRealMap, String sceneId) throws Exception {
Map<String, String> datasetsRealMap = new HashMap<>();
for (DatasetTable datasetTable : datasetTablesInfo) {
String oldId = datasetTable.getId();
datasetTable.setId(null);
datasetTable.setSceneId(sceneId);
datasetTable.setDataSourceId(datasourceRealMap.get(datasetTable.getDataSourceId()));
DataSetTableRequest datasetRequest = new DataSetTableRequest();
BeanUtils.copyBean(datasetRequest, datasetTable);
datasetRequest.setOptFrom("appApply");
datasetRequest.setSyncType("sync_now");
DatasetTable newDataset = dataSetTableService.save(datasetRequest);
datasetsRealMap.put(oldId, newDataset.getId());
}
return datasetsRealMap;
}
@Transactional(rollbackFor = Exception.class)
public Map<String, String> applyDatasetField(List<DatasetTableField> datasetTableFieldsInfo, Map<String, String> datasetsRealMap) {
Map<String, String> datasetFieldsRealMap = new HashMap<>();
for (DatasetTableField datasetTableField : datasetTableFieldsInfo) {
if(datasetTableField.getExtField()!=2){
String oldId = datasetTableField.getId();
datasetTableField.setTableId(datasetsRealMap.get(datasetTableField.getTableId()));
datasetTableField.setId(null);
DatasetTableField newTableField = dataSetTableFieldsService.save(datasetTableField);
datasetFieldsRealMap.put(oldId, newTableField.getId());
}
}
//数据集计算字段替换
for (DatasetTableField datasetTableField : datasetTableFieldsInfo) {
if(datasetTableField.getExtField()==2){
String oldId = datasetTableField.getId();
datasetTableField.setTableId(datasetsRealMap.get(datasetTableField.getTableId()));
datasetTableField.setId(null);
datasetFieldsRealMap.forEach((k, v) -> {
datasetTableField.setOriginName(datasetTableField.getOriginName().replaceAll(k, v));
});
DatasetTableField newTableField = dataSetTableFieldsService.save(datasetTableField);
datasetFieldsRealMap.put(oldId, newTableField.getId());
}
}
return datasetFieldsRealMap;
}
@Transactional(rollbackFor = Exception.class)
public void resetCustomAndUnionDataset(List<DatasetTable> datasetTablesInfo, Map<String, String> datasetRealMap, Map<String, String> datasetFieldsRealMap) throws Exception {
for (DatasetTable datasetTable : datasetTablesInfo) {
if ((DatasetType.CUSTOM.name().equalsIgnoreCase(datasetTable.getType()) || DatasetType.UNION.name().equalsIgnoreCase(datasetTable.getType()))) {
datasetRealMap.forEach((k, v) -> {
datasetTable.setInfo(datasetTable.getInfo().replaceAll(k, v));
});
datasetFieldsRealMap.forEach((k, v) -> {
datasetTable.setInfo(datasetTable.getInfo().replaceAll(k, v));
});
if (1 == datasetTable.getMode()) {
if (DatasetType.CUSTOM.name().equalsIgnoreCase(datasetTable.getType())) {
dataSetTableService.createAppCustomDorisView(datasetTable.getInfo(), datasetTable.getId());
} else if (DatasetType.UNION.name().equalsIgnoreCase(datasetTable.getType())) {
dataSetTableService.createAppUnionDorisView(datasetTable.getInfo(), datasetTable.getId());
}
}
}
}
}
@Transactional(rollbackFor = Exception.class)
public Map<String, String> applyViews(List<ChartViewWithBLOBs> chartViewsInfo, Map<String, String> datasetsRealMap, Map<String, String> datasetFieldsRealMap, String sceneId) throws Exception {
Map<String, String> chartViewsRealMap = new HashMap<>();
for (ChartViewWithBLOBs chartView : chartViewsInfo) {
String oldViewId = chartView.getId();
// 替换datasetId
chartView.setTableId(datasetsRealMap.get(chartView.getTableId()));
datasetsRealMap.forEach((k, v) -> {
chartView.setXAxis(chartView.getXAxis().replaceAll(k, v));
chartView.setXAxisExt(chartView.getXAxisExt().replaceAll(k, v));
chartView.setYAxis(chartView.getYAxis().replaceAll(k, v));
chartView.setYAxisExt(chartView.getYAxisExt().replaceAll(k, v));
chartView.setExtStack(chartView.getExtStack().replaceAll(k, v));
chartView.setExtBubble(chartView.getExtBubble().replaceAll(k, v));
chartView.setCustomAttr(chartView.getCustomAttr().replaceAll(k, v));
chartView.setCustomStyle(chartView.getCustomStyle().replaceAll(k, v));
chartView.setCustomFilter(chartView.getCustomFilter().replaceAll(k, v));
chartView.setDrillFields(chartView.getDrillFields().replaceAll(k, v));
});
//替换datasetFieldId
datasetFieldsRealMap.forEach((k, v) -> {
chartView.setXAxis(chartView.getXAxis().replaceAll(k, v));
chartView.setXAxisExt(chartView.getXAxisExt().replaceAll(k, v));
chartView.setYAxis(chartView.getYAxis().replaceAll(k, v));
chartView.setYAxisExt(chartView.getYAxisExt().replaceAll(k, v));
chartView.setExtStack(chartView.getExtStack().replaceAll(k, v));
chartView.setExtBubble(chartView.getExtBubble().replaceAll(k, v));
chartView.setCustomAttr(chartView.getCustomAttr().replaceAll(k, v));
chartView.setCustomStyle(chartView.getCustomStyle().replaceAll(k, v));
chartView.setCustomFilter(chartView.getCustomFilter().replaceAll(k, v));
chartView.setDrillFields(chartView.getDrillFields().replaceAll(k, v));
});
chartView.setId(null);
chartView.setSceneId(sceneId);
ChartViewWithBLOBs newOne = chartViewService.newOne(chartView);
chartViewsRealMap.put(oldViewId, newOne.getId());
}
return chartViewsRealMap;
}
@Transactional(rollbackFor = Exception.class)
public Map<String, String> applyViewsField(List<ChartViewField> chartViewFieldsInfo, Map<String, String> chartViewsRealMap, Map<String, String> datasetsRealMap, Map<String, String> datasetFieldsRealMap) {
Map<String, String> chartViewFieldsRealMap = new HashMap<>();
if (!CollectionUtils.isEmpty(chartViewFieldsInfo)) {
for (ChartViewField chartViewField : chartViewFieldsInfo) {
String oldChartFieldId = chartViewField.getId();
chartViewField.setId(null);
//替换datasetId
chartViewField.setTableId(datasetsRealMap.get(chartViewField.getTableId()));
//替换chartViewId
chartViewField.setChartId(chartViewsRealMap.get(chartViewField.getId()));
//替换datasetFieldId
datasetFieldsRealMap.forEach((k, v) -> {
chartViewField.setOriginName(chartViewField.getOriginName().replaceAll(k, v));
});
ChartViewField newChartViewField = chartViewFieldService.save(chartViewField);
chartViewFieldsRealMap.put(oldChartFieldId, newChartViewField.getId());
}
}
return chartViewFieldsRealMap;
}
public void nameCheck(PanelAppTemplateApplyRequest request, String optType) {
if ("add".equals(optType)) {
panelGroupService.checkPanelName(request.getPanelName(), request.getPanelGroupPid(), PanelConstants.OPT_TYPE_INSERT, null, "panel");
DatasetGroup datasetGroup = new DatasetGroup();
datasetGroup.setPid(request.getDatasetGroupPid());
datasetGroup.setName(request.getDatasetGroupName());
dataSetGroupService.checkName(datasetGroup);
request.getDatasourceList().stream().forEach(datasource -> {
datasourceService.checkName(datasource.getName(), datasource.getType(), null);
});
} else {
DatasetGroup datasetGroup = new DatasetGroup();
datasetGroup.setPid(request.getDatasetGroupPid());
datasetGroup.setName(request.getDatasetGroupName());
datasetGroup.setId(request.getDatasetGroupId());
dataSetGroupService.checkName(datasetGroup);
request.getDatasourceList().stream().forEach(datasource -> {
datasourceService.checkName(datasource.getName(), datasource.getType(), datasource.getId());
});
}
}
@Transactional(rollbackFor = Exception.class)
public void editDatasource(List<Datasource> updateDatasourceList) throws Exception {
for (int i = 0; i < updateDatasourceList.size(); i++) {
UpdataDsRequest updataDsRequest = new UpdataDsRequest();
BeanUtils.copyBean(updataDsRequest, updateDatasourceList.get(i));
datasourceService.updateDatasource(updataDsRequest);
}
}
}