From f28c945131c2c701823b76a6c4fa9cfa133810ba Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 15 Sep 2022 15:04:50 +0800 Subject: [PATCH 1/6] =?UTF-8?q?perf(=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E6=8A=A5=E5=91=8A):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1=E3=80=81=E9=92=89=E9=92=89?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=B8=A0=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/SystemParameterController.java | 2 +- .../strategy/impl/EmailTaskHandler.java | 58 ++++++++++++++++++- 2 files changed, 57 insertions(+), 3 deletions(-) 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(); From 15f6ccde1450089a8be30e675f307e9d584dfddf Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 15 Sep 2022 17:19:07 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E8=BE=85?= =?UTF-8?q?=E5=8A=A9=E7=BA=BF=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/chart/components/senior/dialog/AssistLineEdit.vue | 5 ----- 1 file changed, 5 deletions(-) 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 @@ - - - - - From efac2b381a78280303d4c1507f7d2971c6f4dae7 Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 15 Sep 2022 17:22:02 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E8=BE=85?= =?UTF-8?q?=E5=8A=A9=E7=BA=BF=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/chart/ChartViewService.java | 56 +++++++++++++------ frontend/src/views/chart/view/ChartEdit.vue | 2 +- 2 files changed, 39 insertions(+), 19 deletions(-) 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..1a6c222f0a 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; @@ -659,7 +660,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 +818,7 @@ public class ChartViewService { || StringUtils.containsIgnoreCase(view.getType(), "scatter") || StringUtils.containsIgnoreCase(view.getType(), "mix") ) { - assistFields = getAssistFields(dynamicAssistFields); + assistFields = getAssistFields(dynamicAssistFields, yAxis); } // 如果是插件视图 走插件内部的逻辑 @@ -866,9 +868,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 +882,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 +897,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 +913,10 @@ 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)); assistData = datasourceProvider.getData(datasourceAssistRequest); } } else if (table.getMode() == 1) {// 抽取 @@ -946,7 +937,7 @@ 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)); assistData = datasourceProvider.getData(datasourceAssistRequest); } // 仪表板有参数不使用缓存 @@ -1143,6 +1134,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 +1567,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 +1582,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 +1692,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/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" /> From d50c0a1d8fc34a980bb7bf1f7152d362452ea75a Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 15 Sep 2022 17:45:47 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=95=B0=E6=8D=AE=E9=9B=86=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/DataSetTableController.java | 30 ++++-- .../dataset/DataSetTableTaskController.java | 10 +- .../service/dataset/DataSetTableService.java | 97 +++++++++++++++++-- 3 files changed, 119 insertions(+), 18 deletions(-) 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/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); From 137b4ba9a69217f22f64b8a2938eb69c2a98bc15 Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 15 Sep 2022 18:14:41 +0800 Subject: [PATCH 5/6] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=95=B0=E6=8D=AE=E9=9B=86=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/service/chart/ChartViewService.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 1a6c222f0a..b496c0a131 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -56,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; @@ -115,6 +117,8 @@ public class ChartViewService { @Resource private DatasetTableFieldMapper datasetTableFieldMapper; + private static final Logger logger = LoggerFactory.getLogger(ChartViewService.class); + //默认使用非公平 private ReentrantLock lock = new ReentrantLock(); @@ -917,6 +921,7 @@ public class ChartViewService { 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) {// 抽取 @@ -938,6 +943,7 @@ public class ChartViewService { } if (CollectionUtils.isNotEmpty(assistFields)) { datasourceAssistRequest.setQuery(assistSQL(datasourceRequest.getQuery(), assistFields)); + logger.info(datasourceAssistRequest.getQuery()); assistData = datasourceProvider.getData(datasourceAssistRequest); } // 仪表板有参数不使用缓存 From 5fc7ac3ae68cfe8b33d6d17e462e27320709ec63 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 15 Sep 2022 18:39:00 +0800 Subject: [PATCH 6/6] =?UTF-8?q?style(=E7=99=BB=E5=BD=95):=20=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=A1=B5=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=9B=9E=E5=AF=86=E7=A0=81=E7=99=BB=E5=BD=95=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/assets/xianshiqi-2.png | Bin 0 -> 422 bytes frontend/src/assets/xianshiqi.png | Bin 0 -> 428 bytes frontend/src/views/login/index.vue | 12 +++++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 frontend/src/assets/xianshiqi-2.png create mode 100644 frontend/src/assets/xianshiqi.png diff --git a/frontend/src/assets/xianshiqi-2.png b/frontend/src/assets/xianshiqi-2.png new file mode 100644 index 0000000000000000000000000000000000000000..16b1942161d68e33792856c9e554dfb242c090a5 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UV>C6dj$D1FjT2AFf_CpL3oBz|D??*#0}CqygP!=G{3sf7^HVa@ zDsgN0%jCEjsKFa#LvdNURZ?Pcs%~jfCPP|gPO6o@zJ5l2ZmND_N^WMJer9rho^D!x zUWtB5ZULAVU!0$8Tv?u(n`N$Fk(roRoRL|WsRuMi)AEr&&{zgfS3j3^P6!lvI6;x#X;^) z4C~IxyaaL-l0AZeimKEY7#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f-}G; z#1%;Y|NkFI79VRa1X7G8L4Lsu4$p3+fjCLt?k)@+tg;?J4rhT!WHFEiu{{{vPG;Ky z89JUWjv*GOlM^IV6hwF@s5YcMS#dx?P(r8Bo3&iQC)vS#o(dz6@JRs)76yiG)$t2Y z|33zF8-r?zYeY#(Vo9o1a#1RfVlXl=GSW4$)HO5>F|@EUGPg1@)HblNGBB9!I`apL zhTQy=%(P0}8eT~#x&Sr!fNUr(OSei&EKb!eEy`p_%gjl&(%09|$j?pHPfW?p%+t?I z&d<|L%g-y(FUc(c^Wswz4Jz|2Eh|!s^7Sh+6Z48QG7B^HfCjzzlxqz%m%-E3&t;uc GLK6Tekai9L literal 0 HcmV?d00001 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 @@