diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java index b01b6bea37..aca169acb0 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java @@ -70,11 +70,11 @@ public class DataSetTableController { @ApiOperation("修改") @PostMapping("alter") @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, - sourcetype = SysLogConstants.SOURCE_TYPE.DATASET, - value = "id", - positionIndex = 0, - positionKey = "sceneId" + operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, + sourcetype = SysLogConstants.SOURCE_TYPE.DATASET, + value = "id", + positionIndex = 0, + positionKey = "sceneId" ) public void alter(@RequestBody DataSetTableRequest request) throws Exception { dataSetTableService.alter(request); @@ -135,6 +135,16 @@ public class DataSetTableController { return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize, null); } + @ApiOperation("db数据库表预览数据") + @PostMapping("dbPreview") + @DePermissions(value = { + @DePermission(type = DePermissionType.DATASET, value = "id", level = ResourceAuthLevel.DATASET_LEVEL_USE), + @DePermission(type = DePermissionType.DATASOURCE, value = "dataSourceId", level = ResourceAuthLevel.DATASOURCE_LEVEL_USE) + }, logical = Logical.AND) + public Map getDBPreview(@RequestBody DataSetTableRequest dataSetTableRequest) throws Exception { + return dataSetTableService.getDBPreview(dataSetTableRequest); + } + @ApiOperation("根据sql查询预览数据") @PostMapping("sqlPreview") @DePermissions(value = { @@ -212,7 +222,13 @@ public class DataSetTableController { @ApiOperation("根据仪表板视图ID查询数据集变量") @PostMapping("/paramsWithIds/{type}") - List paramsWithIds(@PathVariable String type, @RequestBody List viewIds){ + List paramsWithIds(@PathVariable String type, @RequestBody List viewIds) { return dataSetTableService.paramsWithIds(type, viewIds); - }; + } + + @ApiOperation("根据数据集文件夹ID查询数据集名称") + @PostMapping("/getDatasetNameFromGroup/{sceneId}") + public List getDatasetNameFromGroup(@PathVariable String sceneId) { + return dataSetTableService.getDatasetNameFromGroup(sceneId); + } } diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java index 14944e9f4e..00910fd834 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java @@ -4,7 +4,6 @@ import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.dataease.auth.annotation.DePermission; -import io.dataease.plugins.common.base.domain.DatasetTableTask; import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.constants.ResourceAuthLevel; import io.dataease.commons.utils.PageUtils; @@ -12,6 +11,7 @@ import io.dataease.commons.utils.Pager; import io.dataease.controller.request.dataset.DataSetTaskRequest; import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.dto.dataset.DataSetTaskDTO; +import io.dataease.plugins.common.base.domain.DatasetTableTask; import io.dataease.service.dataset.DataSetTableTaskLogService; import io.dataease.service.dataset.DataSetTableTaskService; import io.swagger.annotations.Api; @@ -62,6 +62,14 @@ public class DataSetTableTaskController { return dataSetTableTaskService.list(datasetTableTask); } + @DePermission(type = DePermissionType.DATASET, value = "tableId", level = ResourceAuthLevel.DATASET_LEVEL_MANAGE) + @ApiOperation("分页查询") + @PostMapping("list/{goPage}/{pageSize}") + public Pager> list(@RequestBody DatasetTableTask datasetTableTask, @PathVariable int goPage, @PathVariable int pageSize) { + Page page = PageHelper.startPage(goPage, pageSize, true); + return PageUtils.setPageInfo(page, dataSetTableTaskService.list(datasetTableTask)); + } + @ApiOperation("分页查询") @PostMapping("/pageList/{goPage}/{pageSize}") public Pager> taskList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody BaseGridRequest request) { diff --git a/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java b/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java index 773d5b0853..63543ee308 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java @@ -115,7 +115,7 @@ public class SystemParameterController { return GlobalFileUtil.down(fileId, fileName); } - @GetMapping("/showpicture/{fileId}") + @GetMapping(value = "/showpicture/{fileId}", produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE}) public ResponseEntity showPicture(@PathVariable("fileId") String fileId) throws Exception { return GlobalFileUtil.showPicture(fileId); diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java index 32cac1edc0..6b7becc484 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java @@ -5,6 +5,7 @@ import io.dataease.auth.entity.TokenInfo; import io.dataease.auth.service.AuthUserService; import io.dataease.auth.service.impl.AuthUserServiceImpl; import io.dataease.auth.util.JWTUtils; +import io.dataease.commons.exception.DEException; import io.dataease.dto.PermissionProxy; import io.dataease.ext.ExtTaskMapper; import io.dataease.commons.utils.CommonBeanFactory; @@ -16,10 +17,16 @@ import io.dataease.job.sechedule.strategy.TaskHandler; import io.dataease.plugins.common.entity.GlobalTaskEntity; import io.dataease.plugins.common.entity.GlobalTaskInstance; import io.dataease.plugins.config.SpringContextUtil; +import io.dataease.plugins.xpack.dingtalk.dto.entity.DingtalkMsgResult; +import io.dataease.plugins.xpack.dingtalk.service.DingtalkXpackService; import io.dataease.plugins.xpack.email.dto.request.XpackEmailTaskRequest; import io.dataease.plugins.xpack.email.dto.request.XpackPixelEntity; import io.dataease.plugins.xpack.email.dto.response.XpackEmailTemplateDTO; import io.dataease.plugins.xpack.email.service.EmailXpackService; +import io.dataease.plugins.xpack.lark.dto.entity.LarkMsgResult; +import io.dataease.plugins.xpack.lark.service.LarkXpackService; +import io.dataease.plugins.xpack.wecom.dto.entity.WecomMsgResult; +import io.dataease.plugins.xpack.wecom.service.WecomXpackService; import io.dataease.service.chart.ViewExportExcel; import io.dataease.service.system.EmailService; import org.apache.commons.lang3.ObjectUtils; @@ -30,6 +37,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.File; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -176,9 +184,54 @@ public class EmailTaskHandler extends TaskHandler implements Job { proxy.setUserId(user.getUserId()); files = viewExportExcel.export(panelId, viewIdList, proxy); } - - emailService.sendWithImageAndFiles(recipients, emailTemplateDTO.getTitle(), contentStr, bytes, files); + List channels = null; + String recisetting = emailTemplateDTO.getRecisetting(); + if (StringUtils.isBlank(recisetting)) { + channels = new ArrayList<>(); + channels.add("email"); + } else { + channels = Arrays.stream(recisetting.split(",")).collect(Collectors.toList()); + } + + List reciLists = Arrays.stream(recipients.split(",")).collect(Collectors.toList()); + for (int i = 0; i < channels.size(); i++) { + String channel = channels.get(i); + switch (channel) { + case "email" : + emailService.sendWithImageAndFiles(recipients, emailTemplateDTO.getTitle(), contentStr, bytes, files); + break; + case "wecom" : + if (SpringContextUtil.getBean(AuthUserService.class).supportWecom()) { + WecomXpackService wecomXpackService = SpringContextUtil.getBean(WecomXpackService.class); + WecomMsgResult wecomMsgResult = wecomXpackService.pushOaMsg(reciLists, emailTemplateDTO.getTitle(), contentStr, bytes, files); + if (wecomMsgResult.getErrcode() != 0) { + DEException.throwException(wecomMsgResult.getErrmsg()); + } + } + break; + case "dingtalk" : + if (SpringContextUtil.getBean(AuthUserService.class).supportDingtalk()) { + DingtalkXpackService dingtalkXpackService = SpringContextUtil.getBean(DingtalkXpackService.class); + DingtalkMsgResult dingtalkMsgResult = dingtalkXpackService.pushOaMsg(reciLists, emailTemplateDTO.getTitle(), contentStr, bytes, files); + if (dingtalkMsgResult.getErrcode() != 0) { + DEException.throwException(dingtalkMsgResult.getErrmsg()); + } + } + break; + case "lark" : + if (SpringContextUtil.getBean(AuthUserService.class).supportLark()) { + LarkXpackService larkXpackService = SpringContextUtil.getBean(LarkXpackService.class); + LarkMsgResult larkMsgResult = larkXpackService.pushOaMsg(reciLists, emailTemplateDTO.getTitle(), contentStr, bytes, files); + if (larkMsgResult.getCode() != 0) { + DEException.throwException(larkMsgResult.getMsg()); + } + } + break; + default: + break; + } + } success(taskInstance); } catch (Exception e) { error(taskInstance, e); @@ -186,6 +239,7 @@ public class EmailTaskHandler extends TaskHandler implements Job { } } + private XpackPixelEntity buildPixel(XpackEmailTemplateDTO emailTemplateDTO) { XpackPixelEntity pixelEntity = new XpackPixelEntity(); String pixelStr = emailTemplateDTO.getPixel(); 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 b0499d4bc2..b496c0a131 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -33,6 +33,7 @@ import io.dataease.plugins.common.base.mapper.ChartViewMapper; import io.dataease.plugins.common.base.mapper.DatasetTableFieldMapper; import io.dataease.plugins.common.base.mapper.PanelViewMapper; import io.dataease.plugins.common.constants.DatasetType; +import io.dataease.plugins.common.constants.datasource.SQLConstants; import io.dataease.plugins.common.dto.chart.ChartFieldCompareDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; @@ -55,6 +56,8 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.pentaho.di.core.util.UUIDUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -114,6 +117,8 @@ public class ChartViewService { @Resource private DatasetTableFieldMapper datasetTableFieldMapper; + private static final Logger logger = LoggerFactory.getLogger(ChartViewService.class); + //默认使用非公平 private ReentrantLock lock = new ReentrantLock(); @@ -659,7 +664,8 @@ public class ChartViewService { } boolean hasParameters = false; if (StringUtils.isNotEmpty(table.getSqlVariableDetails())) { - List sqlVariables = new Gson().fromJson(table.getSqlVariableDetails(), new TypeToken>() {}.getType()); + List sqlVariables = new Gson().fromJson(table.getSqlVariableDetails(), new TypeToken>() { + }.getType()); for (String parameter : Optional.ofNullable(request.getParameters()).orElse(new ArrayList<>())) { if (sqlVariables.stream().map(SqlVariableDetails::getVariableName).collect(Collectors.toList()).contains(parameter)) { hasParameters = true; @@ -816,7 +822,7 @@ public class ChartViewService { || StringUtils.containsIgnoreCase(view.getType(), "scatter") || StringUtils.containsIgnoreCase(view.getType(), "mix") ) { - assistFields = getAssistFields(dynamicAssistFields); + assistFields = getAssistFields(dynamicAssistFields, yAxis); } // 如果是插件视图 走插件内部的逻辑 @@ -866,9 +872,6 @@ public class ChartViewService { } else { datasourceRequest.setQuery(qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } - if (CollectionUtils.isNotEmpty(assistFields)) { - datasourceAssistRequest.setQuery(qp.getSQLSummary(dataTableInfoDTO.getTable(), assistFields, null, null, null, view, ds)); - } } else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.SQL.name())) { String sql = dataTableInfoDTO.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfoDTO.getSql())) : dataTableInfoDTO.getSql(); sql = handleVariable(sql, requestList, qp, table); @@ -883,9 +886,6 @@ public class ChartViewService { } else { datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view)); } - if (CollectionUtils.isNotEmpty(assistFields)) { - datasourceAssistRequest.setQuery(qp.getSQLSummaryAsTmp(sql, assistFields, fieldCustomFilter, rowPermissionsTree, extFilterList, view)); - } } else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.CUSTOM.name())) { DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); List list = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId()); @@ -901,9 +901,6 @@ public class ChartViewService { } else { datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view)); } - if (CollectionUtils.isNotEmpty(assistFields)) { - datasourceAssistRequest.setQuery(qp.getSQLSummaryAsTmp(sql, assistFields, fieldCustomFilter, rowPermissionsTree, extFilterList, view)); - } } else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.UNION.name())) { DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); Map sqlMap = dataSetTableService.getUnionSQLDatasource(dt, ds); @@ -920,12 +917,11 @@ public class ChartViewService { } else { datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view)); } - if (CollectionUtils.isNotEmpty(assistFields)) { - datasourceAssistRequest.setQuery(qp.getSQLSummaryAsTmp(sql, assistFields, fieldCustomFilter, rowPermissionsTree, extFilterList, view)); - } } data = datasourceProvider.getData(datasourceRequest); if (CollectionUtils.isNotEmpty(assistFields)) { + datasourceAssistRequest.setQuery(assistSQL(datasourceRequest.getQuery(), assistFields)); + logger.info(datasourceAssistRequest.getQuery()); assistData = datasourceProvider.getData(datasourceAssistRequest); } } else if (table.getMode() == 1) {// 抽取 @@ -946,7 +942,8 @@ public class ChartViewService { datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } if (CollectionUtils.isNotEmpty(assistFields)) { - datasourceAssistRequest.setQuery(qp.getSQLSummary(tableName, assistFields, fieldCustomFilter, rowPermissionsTree, extFilterList, view, ds)); + datasourceAssistRequest.setQuery(assistSQL(datasourceRequest.getQuery(), assistFields)); + logger.info(datasourceAssistRequest.getQuery()); assistData = datasourceProvider.getData(datasourceAssistRequest); } // 仪表板有参数不使用缓存 @@ -1143,6 +1140,19 @@ public class ChartViewService { return res; } + public String assistSQL(String sql, List assistFields) { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < assistFields.size(); i++) { + ChartViewFieldDTO dto = assistFields.get(i); + if (i == (assistFields.size() - 1)) { + stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + ")"); + } else { + stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + "),"); + } + } + return "SELECT " + stringBuilder + " FROM (" + sql + ") tmp"; + } + public ChartViewDTO uniteViewResult(String sql, Map chartData, Map tabelData, ChartViewDTO view, Boolean isDrill, List drillFilters, List dynamicAssistFields, List assistData) { Map map = new HashMap<>(); @@ -1563,7 +1573,8 @@ public class ChartViewService { private String handleVariable(String sql, ChartExtRequest requestList, QueryProvider qp, DataSetTableDTO table) throws Exception { - List sqlVariables = new Gson().fromJson(table.getSqlVariableDetails(), new TypeToken>() {}.getType()); + List sqlVariables = new Gson().fromJson(table.getSqlVariableDetails(), new TypeToken>() { + }.getType()); if (requestList != null && CollectionUtils.isNotEmpty(requestList.getFilter())) { for (ChartExtFilterRequest chartExtFilterRequest : requestList.getFilter()) { @@ -1577,7 +1588,7 @@ public class ChartViewService { for (String parameter : chartExtFilterRequest.getParameters()) { List parameters = sqlVariables.stream().filter(item -> item.getVariableName().equalsIgnoreCase(parameter)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(parameters)) { - String filter = qp.transFilter(chartExtFilterRequest,parameters.get(0)); + String filter = qp.transFilter(chartExtFilterRequest, parameters.get(0)); sql = sql.replace("${" + parameter + "}", filter); } @@ -1687,13 +1698,28 @@ public class ChartViewService { return list; } - private List getAssistFields(List list) { + private List getAssistFields(List list, List yAxis) { List res = new ArrayList<>(); for (ChartSeniorAssistDTO dto : list) { DatasetTableField curField = dto.getCurField(); + ChartViewFieldDTO yField = null; + String alias = ""; + for (int i = 0; i < yAxis.size(); i++) { + ChartViewFieldDTO field = yAxis.get(i); + if (StringUtils.equalsIgnoreCase(field.getId(), curField.getId())) { + yField = field; + alias = String.format(SQLConstants.FIELD_ALIAS_Y_PREFIX, i); + break; + } + } + if (ObjectUtils.isEmpty(yField)) { + continue; + } + ChartViewFieldDTO chartViewFieldDTO = new ChartViewFieldDTO(); BeanUtils.copyBean(chartViewFieldDTO, curField); chartViewFieldDTO.setSummary(dto.getSummary()); + chartViewFieldDTO.setOriginName(alias);// yAxis的字段别名,就是查找的字段名 res.add(chartViewFieldDTO); } return res; diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index ebc68f3e43..b0503f299c 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -153,6 +153,8 @@ public class DataSetTableService { @DeCleaner(value = DePermissionType.DATASET, key = "sceneId") public void batchInsert(List datasetTable) throws Exception { + // 保存之前校验table名称 + checkNames(datasetTable); for (DataSetTableRequest table : datasetTable) { save(table); // 清理权限缓存 @@ -382,6 +384,13 @@ public class DataSetTableService { } } + public List getDatasetNameFromGroup(String sceneId) { + DatasetTableExample example = new DatasetTableExample(); + example.createCriteria().andSceneIdEqualTo(sceneId); + List datasetTables = datasetTableMapper.selectByExample(example); + return datasetTables.stream().map(DatasetTable::getName).collect(Collectors.toList()); + } + public List list(DataSetTableRequest dataSetTableRequest) { dataSetTableRequest.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); dataSetTableRequest.setTypeFilter(dataSetTableRequest.getTypeFilter()); @@ -936,7 +945,7 @@ public class DataSetTableService { return new ArrayList<>(); } - if(!Arrays.asList("DATE", "TEXT", "NUM").contains(type)){ + if (!Arrays.asList("DATE", "TEXT", "NUM").contains(type)) { return new ArrayList<>(); } ChartViewExample chartViewExample = new ChartViewExample(); @@ -965,24 +974,28 @@ public class DataSetTableService { } } } - switch (type){ + switch (type) { case "DATE": - sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("DATETIME")).collect(Collectors.toList()); + sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("DATETIME")).collect(Collectors.toList()); sqlVariableDetails.forEach(item -> { - if(item.getType().size()> 1){ + if (item.getType().size() > 1) { item.setAlias(item.getVariableName() + "[" + item.getType().get(1) + "]"); - }else { + } else { item.setAlias(item.getVariableName()); } }); break; case "TEXT": - sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("TEXT")).collect(Collectors.toList()); - sqlVariableDetails.forEach(item -> {item.setAlias(item.getVariableName());}); + sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("TEXT")).collect(Collectors.toList()); + sqlVariableDetails.forEach(item -> { + item.setAlias(item.getVariableName()); + }); break; case "NUM": - sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("LONG") || item.getType().get(0).contains("DOUBLE")).collect(Collectors.toList()); - sqlVariableDetails.forEach(item -> {item.setAlias(item.getVariableName());}); + sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("LONG") || item.getType().get(0).contains("DOUBLE")).collect(Collectors.toList()); + sqlVariableDetails.forEach(item -> { + item.setAlias(item.getVariableName()); + }); break; } return sqlVariableDetails; @@ -1072,7 +1085,7 @@ public class DataSetTableService { return handleWith(plainSelect, select); } - private String handleWith(PlainSelect plainSelect, Select select)throws Exception{ + private String handleWith(PlainSelect plainSelect, Select select) throws Exception { StringBuilder builder = new StringBuilder(); if (CollectionUtils.isNotEmpty(select.getWithItemsList())) { builder.append("WITH"); @@ -1089,6 +1102,45 @@ public class DataSetTableService { builder.append(" " + plainSelect); return builder.toString(); } + + public Map getDBPreview(DataSetTableRequest dataSetTableRequest) throws Exception { + Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); + if (ds == null) { + throw new Exception(Translator.get("i18n_invalid_ds")); + } + Provider datasourceProvider = ProviderFactory.getProvider(ds.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); + DataTableInfoDTO dataTableInfo = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class); + String sql = "SELECT * FROM " + dataTableInfo.getTable(); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + String sqlAsTable = qp.createSQLPreview(sql, null); + datasourceRequest.setQuery(sqlAsTable); + Map result = datasourceProvider.fetchResultAndField(datasourceRequest); + List data = result.get("dataList"); + List fields = result.get("fieldList"); + String[] fieldArray = fields.stream().map(TableField::getFieldName).toArray(String[]::new); + if (checkIsRepeat(fieldArray)) { + DataEaseException.throwException(Translator.get("i18n_excel_field_repeat")); + } + List> jsonArray = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(data)) { + jsonArray = data.stream().map(ele -> { + Map map = new HashMap<>(); + for (int i = 0; i < ele.length; i++) { + map.put(fieldArray[i], ele[i]); + } + return map; + }).collect(Collectors.toList()); + } + + Map map = new HashMap<>(); + map.put("fields", fields); + map.put("data", jsonArray); + + return map; + } + public Map getSQLPreview(DataSetTableRequest dataSetTableRequest) throws Exception { Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); if (ds == null) { @@ -2090,6 +2142,31 @@ public class DataSetTableService { } } + private void checkNames(List datasetTable) { + if (CollectionUtils.isEmpty(datasetTable)) { + return; + } + Set nameSet = new HashSet<>(); + for (DataSetTableRequest table : datasetTable) { + nameSet.add(table.getName()); + } + if (nameSet.size() != datasetTable.size()) { + throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group")); + } + DatasetTableExample datasetTableExample = new DatasetTableExample(); + DatasetTableExample.Criteria criteria = datasetTableExample.createCriteria(); + if (StringUtils.isNotEmpty(datasetTable.get(0).getSceneId())) { + criteria.andSceneIdEqualTo(datasetTable.get(0).getSceneId()); + } + if (CollectionUtils.isNotEmpty(nameSet)) { + criteria.andNameIn(new ArrayList<>(nameSet)); + } + List list = datasetTableMapper.selectByExample(datasetTableExample); + if (list.size() > 0) { + throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group")); + } + } + public DataSetDetail getDatasetDetail(String id) { DataSetDetail dataSetDetail = new DataSetDetail(); DatasetTable table = datasetTableMapper.selectByPrimaryKey(id); diff --git a/frontend/src/assets/xianshiqi-2.png b/frontend/src/assets/xianshiqi-2.png new file mode 100644 index 0000000000..16b1942161 Binary files /dev/null and b/frontend/src/assets/xianshiqi-2.png differ diff --git a/frontend/src/assets/xianshiqi.png b/frontend/src/assets/xianshiqi.png new file mode 100644 index 0000000000..e2fb798a77 Binary files /dev/null and b/frontend/src/assets/xianshiqi.png differ diff --git a/frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue b/frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue index 4275be9218..e51d97009a 100644 --- a/frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue +++ b/frontend/src/views/chart/components/senior/dialog/AssistLineEdit.vue @@ -37,14 +37,9 @@ - - - - - diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index d0e4dae9ab..a302147ec2 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -803,7 +803,7 @@ :param="param" class="attr-selector" :chart="chart" - :quota-data="quotaData" + :quota-data="view.yaxis" @onAssistLineChange="onAssistLineChange" /> diff --git a/frontend/src/views/login/index.vue b/frontend/src/views/login/index.vue index 7681a713f3..ac5062f01a 100644 --- a/frontend/src/views/login/index.vue +++ b/frontend/src/views/login/index.vue @@ -6,7 +6,7 @@