From 5f8f93f7d44a5caaee143a22d0a5cfd4a0a9b233 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Sat, 28 May 2022 10:49:49 +0800 Subject: [PATCH 01/14] =?UTF-8?q?fix:=20excel=20=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E3=80=81=E8=BF=BD=E5=8A=A0=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/service/dataset/DataSetTableService.java | 4 +++- .../java/io/dataease/service/dataset/ExtractDataService.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) 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 753420b979..e47240e1ba 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -53,6 +53,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -146,6 +147,7 @@ public class DataSetTableService { } } + @Transactional(propagation = Propagation.NOT_SUPPORTED) @DeCleaner(value = DePermissionType.DATASET, key = "sceneId") public void saveExcel(DataSetTableRequest datasetTable) throws Exception { List datasetIdList = new ArrayList<>(); @@ -357,7 +359,7 @@ public class DataSetTableService { public List list(List datasetIds) { DatasetTableExample example = new DatasetTableExample(); example.createCriteria().andIdIn(datasetIds); - return datasetTableMapper.selectByExample(example); + return datasetTableMapper.selectByExampleWithBLOBs(example); } public List listAndGroup(DataSetTableRequest dataSetTableRequest) { diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 8be0a597d3..79bc9c6476 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -432,7 +432,8 @@ public class ExtractDataService { } private void extractApiData(DatasetTable datasetTable, Datasource datasource, List datasetTableFields, String extractType) throws Exception { - List lists = new Gson().fromJson(datasource.getConfiguration(), new TypeToken>(){}.getType()); + List lists = new Gson().fromJson(datasource.getConfiguration(), new TypeToken>() { + }.getType()); lists = lists.stream().filter(item -> item.getName().equalsIgnoreCase(new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class).getTable())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(lists)) { throw new Exception("未找到API数据表"); From 39ed55c1bb01a76a7e5817680a608cddbb3cf675 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sat, 28 May 2022 13:13:24 +0800 Subject: [PATCH 02/14] =?UTF-8?q?feat:=20=E7=AC=A6=E5=8F=B7=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E6=8F=92=E4=BB=B6=E8=AE=B0=E5=BD=95sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/db/migration/V35__1.11.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/main/resources/db/migration/V35__1.11.sql b/backend/src/main/resources/db/migration/V35__1.11.sql index f8681985aa..8d60fec0e5 100644 --- a/backend/src/main/resources/db/migration/V35__1.11.sql +++ b/backend/src/main/resources/db/migration/V35__1.11.sql @@ -57,6 +57,8 @@ UPDATE `chart_view` SET `view_fields` = '[]'; ALTER TABLE `chart_view_cache` ADD COLUMN `view_fields` LONGTEXT COMMENT '视图字段集合'; UPDATE `chart_view_cache` SET `view_fields` = '[]'; +INSERT INTO `my_plugin`(`plugin_id`, `name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `install_type`, `creator`, `load_mybatis`, `release_time`, `install_time`, `module_name`, `icon`, `ds_type`) VALUES (11, '符号地图插件', 'default', 0, 10000, 'view', '请购买正式许可', '1.0-SNAPSHOT', NULL, 'DATAEASE', 0, NULL, 1652174790928, 'view-symbolmap-backend', NULL, NULL); + INSERT INTO `my_plugin` (`name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `creator`, `load_mybatis`, `install_time`, `module_name`, `ds_type`) From 5973f9beac0d10f05157a012d89d505c342e8762 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sat, 28 May 2022 21:35:06 +0800 Subject: [PATCH 03/14] =?UTF-8?q?fix:=20=E6=81=A2=E5=A4=8D=E5=9B=A0?= =?UTF-8?q?=E4=B8=BA=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=9A=84api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/DataSetGroupController.java | 17 +++-- .../datasource/DatasourceController.java | 23 ++++--- .../datasource/request/DeleteDsRequest.java | 16 ----- frontend/src/api/dataset/dataset.js | 7 +- frontend/src/api/system/datasource.js | 7 +- frontend/src/views/dataset/group/Group.vue | 3 +- .../src/views/system/datasource/DsTree.vue | 65 ++++++++++--------- 7 files changed, 59 insertions(+), 79 deletions(-) delete mode 100644 backend/src/main/java/io/dataease/controller/datasource/request/DeleteDsRequest.java diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetGroupController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetGroupController.java index 7379928d79..d6d8620060 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetGroupController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetGroupController.java @@ -7,8 +7,10 @@ import io.dataease.auth.annotation.DePermissions; import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.constants.ResourceAuthLevel; import io.dataease.commons.constants.SysLogConstants; +import io.dataease.commons.utils.DeLogUtils; import io.dataease.controller.dataset.request.DeleteGroupRequest; import io.dataease.controller.request.dataset.DataSetGroupRequest; +import io.dataease.dto.SysLogDTO; import io.dataease.dto.dataset.DataSetGroupDTO; import io.dataease.plugins.common.base.domain.DatasetGroup; import io.dataease.service.dataset.DataSetGroupService; @@ -60,15 +62,12 @@ public class DataSetGroupController { @DePermission(type = DePermissionType.DATASET, level = ResourceAuthLevel.DATASET_LEVEL_MANAGE) @ApiOperation("删除") - @PostMapping("/delete") - @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.DELETE, - sourcetype = SysLogConstants.SOURCE_TYPE.DATASET, - positionIndex = 0,positionKey = "pid", - value = "id" - ) - public void tree(@RequestBody DeleteGroupRequest request) throws Exception { - dataSetGroupService.delete(request.getId()); + @PostMapping("/delete/{id}") + public void delete(@PathVariable String id) throws Exception { + DatasetGroup datasetGroup = dataSetGroupService.getScene(id); + SysLogDTO sysLogDTO = DeLogUtils.buildLog(SysLogConstants.OPERATE_TYPE.DELETE, SysLogConstants.SOURCE_TYPE.DATASET, id, datasetGroup.getPid(), null, null); + dataSetGroupService.delete(id); + DeLogUtils.save(sysLogDTO); } @ApiIgnore diff --git a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java index c8de6b1d16..060d9b4e60 100644 --- a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java +++ b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java @@ -4,7 +4,8 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.dataease.auth.annotation.DeLog; import io.dataease.auth.annotation.DePermission; import io.dataease.commons.constants.SysLogConstants; -import io.dataease.controller.datasource.request.DeleteDsRequest; +import io.dataease.commons.utils.DeLogUtils; +import io.dataease.dto.SysLogDTO; import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.constants.ResourceAuthLevel; @@ -14,13 +15,12 @@ import io.dataease.controller.datasource.request.UpdataDsRequest; import io.dataease.controller.request.DatasourceUnionRequest; import io.dataease.controller.request.datasource.ApiDefinition; import io.dataease.dto.datasource.DBTableDTO; -import io.dataease.plugins.common.dto.datasource.DataSourceType; import io.dataease.service.datasource.DatasourceService; import io.dataease.dto.DatasourceDTO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.ObjectUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.pentaho.di.core.database.DataSourceProviderInterface; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -90,15 +90,14 @@ public class DatasourceController { @RequiresPermissions("datasource:read") @DePermission(type = DePermissionType.DATASOURCE, level = ResourceAuthLevel.DATASOURCE_LEVEL_MANAGE, value = "id") @ApiOperation("删除数据源") - @PostMapping("/delete") - @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.DELETE, - sourcetype = SysLogConstants.SOURCE_TYPE.DATASOURCE, - positionIndex = 0,positionKey = "type", - value = "id" - ) - public ResultHolder deleteDatasource(@RequestBody DeleteDsRequest request) throws Exception { - return datasourceService.deleteDatasource(request.getId()); + @PostMapping("/delete/{datasourceID}") + public ResultHolder deleteDatasource(@PathVariable(value = "datasourceID") String datasourceID) throws Exception { + Datasource datasource = datasourceService.get(datasourceID); + SysLogDTO sysLogDTO = DeLogUtils.buildLog(SysLogConstants.OPERATE_TYPE.DELETE, SysLogConstants.SOURCE_TYPE.DATASOURCE, datasourceID, datasource.getType(), null, null); + ResultHolder resultHolder = datasourceService.deleteDatasource(datasourceID); + if (ObjectUtils.isNotEmpty(resultHolder) && resultHolder.isSuccess()) + DeLogUtils.save(sysLogDTO); + return resultHolder; } @RequiresPermissions("datasource:read") diff --git a/backend/src/main/java/io/dataease/controller/datasource/request/DeleteDsRequest.java b/backend/src/main/java/io/dataease/controller/datasource/request/DeleteDsRequest.java deleted file mode 100644 index c31818bbf8..0000000000 --- a/backend/src/main/java/io/dataease/controller/datasource/request/DeleteDsRequest.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.dataease.controller.datasource.request; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; - -@Data -public class DeleteDsRequest implements Serializable { - - @ApiModelProperty(value = "ID",required = true) - private String id; - - @ApiModelProperty(value = "类型", required = true) - private String type; -} diff --git a/frontend/src/api/dataset/dataset.js b/frontend/src/api/dataset/dataset.js index 0a18529a89..5a8d5d891b 100644 --- a/frontend/src/api/dataset/dataset.js +++ b/frontend/src/api/dataset/dataset.js @@ -26,12 +26,11 @@ export function addGroup(data) { }) } -export function delGroup(data) { +export function delGroup(groupId) { return request({ - url: '/dataset/group/delete', + url: '/dataset/group/delete/' + groupId, loading: true, - method: 'post', - data + method: 'post' }) } diff --git a/frontend/src/api/system/datasource.js b/frontend/src/api/system/datasource.js index f7ff85e801..346bdadbf4 100644 --- a/frontend/src/api/system/datasource.js +++ b/frontend/src/api/system/datasource.js @@ -61,12 +61,11 @@ export function editDs(data) { }) } -export function delDs(data) { +export function delDs(id) { return request({ - url: 'datasource/delete', + url: 'datasource/delete/' + id, loading: true, - method: 'post', - data + method: 'post' }) } diff --git a/frontend/src/views/dataset/group/Group.vue b/frontend/src/views/dataset/group/Group.vue index 5f31e07346..91b952da3d 100644 --- a/frontend/src/views/dataset/group/Group.vue +++ b/frontend/src/views/dataset/group/Group.vue @@ -461,8 +461,7 @@ export default { cancelButtonText: this.$t('dataset.cancel'), type: 'warning' }).then(() => { - const param = { id: data.id, pid: data.pid } - delGroup(param).then(response => { + delGroup(data.id).then(response => { this.$message({ type: 'success', message: this.$t('dataset.delete_success'), diff --git a/frontend/src/views/system/datasource/DsTree.vue b/frontend/src/views/system/datasource/DsTree.vue index aa0b557a72..98e9c4e011 100644 --- a/frontend/src/views/system/datasource/DsTree.vue +++ b/frontend/src/views/system/datasource/DsTree.vue @@ -2,13 +2,12 @@ - - - + + - + @@ -39,16 +38,16 @@ - + - + - + - + - + - + - From 319df86b5b782381aacb10189d68448c04d5c313 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sat, 28 May 2022 21:42:53 +0800 Subject: [PATCH 04/14] =?UTF-8?q?fix:=20=E6=9A=82=E6=97=B6=E5=B1=8F?= =?UTF-8?q?=E8=94=BD=E8=A7=86=E5=9B=BE=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/dataease/service/sys/log/LogService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/service/sys/log/LogService.java b/backend/src/main/java/io/dataease/service/sys/log/LogService.java index 634f6f3305..b3687f1cbc 100644 --- a/backend/src/main/java/io/dataease/service/sys/log/LogService.java +++ b/backend/src/main/java/io/dataease/service/sys/log/LogService.java @@ -48,7 +48,10 @@ public class LogService { // 排除驱动和驱动文件的公共操作的资源类型 - private static Integer[] COMMON_SOURCE = {1, 2,3,4,6,7,8,9}; + // 暂时屏蔽视图日志 + // private static Integer[] COMMON_SOURCE = {1, 2,3,4,6,7,8,9}; + + private static Integer[] COMMON_SOURCE = {1, 2,3,6,7,8,9}; // 增 改 删 针对公共资源的操作 private static Integer[] COMMON_SOURCE_OPERATE = {1 ,2 , 3}; From 960040be9a6d4300eade4e5e92a0c231898cfc18 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sun, 29 May 2022 09:41:09 +0800 Subject: [PATCH 05/14] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E4=B8=AA?= =?UTF-8?q?=E4=BA=BA=E4=BF=A1=E6=81=AF=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/controller/sys/SysUserController.java | 3 ++- .../src/main/java/io/dataease/service/sys/SysUserService.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java index 53d488862b..05eeeb75ee 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java @@ -26,6 +26,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresRoles; import org.springframework.web.bind.annotation.*; @@ -148,7 +149,7 @@ public class SysUserController { DataEaseException.throwException(Translator.get("i18n_wrong_content")); } // 再次验证,匹配格式 - if (!request.getPhone().isEmpty() && !request.getPhone().matches("^1[3|4|5|7|8][0-9]{9}$")) { + if (StringUtils.isNotBlank(request.getPhone()) && !request.getPhone().matches("^1[3|4|5|7|8][0-9]{9}$")) { DataEaseException.throwException(Translator.get("i18n_wrong_tel")); } if (!request.getEmail().matches("^[a-zA-Z0-9_._-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$")) { diff --git a/backend/src/main/java/io/dataease/service/sys/SysUserService.java b/backend/src/main/java/io/dataease/service/sys/SysUserService.java index 80025e9252..20a8ac5fd2 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysUserService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysUserService.java @@ -219,6 +219,8 @@ public class SysUserService { @CacheEvict(value = AuthConstants.USER_CACHE_NAME, key = "'user' + #request.userId") @Transactional public int updatePersonBasicInfo(SysUserCreateRequest request) { + checkEmail(request); + checkNickName(request); SysUser user = new SysUser(); long now = System.currentTimeMillis(); user.setUserId(request.getUserId()); From 32108e86869e6edbae8cc9e8a86ab0ee4732cd6b Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sun, 29 May 2022 13:37:26 +0800 Subject: [PATCH 06/14] =?UTF-8?q?fix:=20=E7=BA=AF=E5=86=85=E7=BD=91?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E4=B8=BB=E9=A2=98=E5=88=87=E6=8D=A2=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/plugins/server/PluginCommonServer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/plugins/server/PluginCommonServer.java b/backend/src/main/java/io/dataease/plugins/server/PluginCommonServer.java index 03d1e3bca7..214a23e2b6 100644 --- a/backend/src/main/java/io/dataease/plugins/server/PluginCommonServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/PluginCommonServer.java @@ -126,7 +126,8 @@ public class PluginCommonServer { os.write(buffer, 0, i); i = bis.read(buffer); } - response.setContentType("image/svg+xml"); + if (suffix.indexOf("svg") != -1) + response.setContentType("image/svg+xml"); os.flush(); }catch (Exception e) { e.printStackTrace(); From 5e6e00e84cefafa18bee5f0808e1320534861cec Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 30 May 2022 10:06:50 +0800 Subject: [PATCH 07/14] =?UTF-8?q?fix:=20=E6=93=8D=E4=BD=9C=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=A4=9A=E4=B8=AA=E6=93=8D=E4=BD=9C=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=BB=93=E6=9E=9C=E9=9B=86=E9=80=BB=E8=BE=91=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/service/sys/log/LogService.java | 50 ++++++++----------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/sys/log/LogService.java b/backend/src/main/java/io/dataease/service/sys/log/LogService.java index b3687f1cbc..9d17948db8 100644 --- a/backend/src/main/java/io/dataease/service/sys/log/LogService.java +++ b/backend/src/main/java/io/dataease/service/sys/log/LogService.java @@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.springframework.stereotype.Service; + import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; @@ -46,15 +47,14 @@ public class LogService { private static Integer[] driver_file_ope = {11, 3}; - // 排除驱动和驱动文件的公共操作的资源类型 // 暂时屏蔽视图日志 // private static Integer[] COMMON_SOURCE = {1, 2,3,4,6,7,8,9}; - private static Integer[] COMMON_SOURCE = {1, 2,3,6,7,8,9}; + private static Integer[] COMMON_SOURCE = {1, 2, 3, 6, 7, 8, 9}; // 增 改 删 针对公共资源的操作 - private static Integer[] COMMON_SOURCE_OPERATE = {1 ,2 , 3}; + private static Integer[] COMMON_SOURCE_OPERATE = {1, 2, 3}; // 授权相关操作 private static Integer[] AUTH_OPERATE = {6, 7}; @@ -63,10 +63,6 @@ public class LogService { private static Integer[] AUTH_SOURCE = {1, 2, 3, 11}; - - - - @Resource private SysLogMapper sysLogMapper; @@ -77,7 +73,6 @@ public class LogService { private LogManager logManager; - public List query(BaseGridRequest request) { request = detailRequest(request); @@ -90,8 +85,8 @@ public class LogService { private BaseGridRequest detailRequest(BaseGridRequest request) { List conditions = request.getConditions(); if (CollectionUtils.isNotEmpty(conditions)) { - ConditionEntity optypeCondition = null; - ConditionEntity sourceCondition = null; + + ConditionEntity uninCondition = null; int matchIndex = -1; for (int i = 0; i < conditions.size(); i++) { ConditionEntity conditionEntity = conditions.get(i); @@ -100,23 +95,21 @@ public class LogService { if (StringUtils.isNotBlank(field) && StringUtils.equals("optype", field) && ObjectUtils.isNotEmpty(value)) { matchIndex = i; - optypeCondition = new ConditionEntity(); - sourceCondition = new ConditionEntity(); + uninCondition = new ConditionEntity(); + List values = (List) value; - sourceCondition.setField("source_type"); - optypeCondition.setField("operate_type"); - List opValue = values.stream().map(v -> Integer.parseInt(v.split("-")[0])).collect(Collectors.toList()); - List soValue = values.stream().map(v -> Integer.parseInt(v.split("-")[1])).collect(Collectors.toList()); - optypeCondition.setValue(opValue); - sourceCondition.setValue(soValue); - optypeCondition.setOperator(conditionEntity.getOperator()); - sourceCondition.setOperator(conditionEntity.getOperator()); + uninCondition.setField("concat(operate_type, '-de-', source_type)"); + + List uninValue = values.stream().map(v -> v.replace("-", "-de-")).collect(Collectors.toList()); + + uninCondition.setValue(uninValue); + uninCondition.setOperator(conditionEntity.getOperator()); } } - if (matchIndex >= 0 ) { + if (matchIndex >= 0) { conditions.remove(matchIndex); - if (ObjectUtils.isNotEmpty(optypeCondition))conditions.add(optypeCondition); - if (ObjectUtils.isNotEmpty(sourceCondition))conditions.add(sourceCondition); + + if (ObjectUtils.isNotEmpty(uninCondition)) conditions.add(uninCondition); } } return request; @@ -140,7 +133,7 @@ public class LogService { String operateTypeName = SysLogConstants.operateTypeName(operateVal); FolderItem folderItem = new FolderItem(); folderItem.setId(operateVal + "-" + sourceVal); - folderItem.setName( Translator.get(operateTypeName) + Translator.get(sourceTypeName)); + folderItem.setName(Translator.get(operateTypeName) + Translator.get(sourceTypeName)); results.add(folderItem); } } @@ -152,7 +145,7 @@ public class LogService { folderItem.setId(driver_file_ope[i] + "-" + sourceType.getValue()); String operateTypeName = SysLogConstants.operateTypeName(driver_file_ope[i]); String sourceTypeName = sourceType.getName(); - folderItem.setName( Translator.get(operateTypeName) + Translator.get(sourceTypeName)); + folderItem.setName(Translator.get(operateTypeName) + Translator.get(sourceTypeName)); results.add(folderItem); } @@ -166,7 +159,7 @@ public class LogService { String operateTypeName = SysLogConstants.operateTypeName(operateVal); FolderItem folderItem = new FolderItem(); folderItem.setId(operateVal + "-" + sourceVal); - folderItem.setName( Translator.get(operateTypeName) + Translator.get(sourceTypeName)); + folderItem.setName(Translator.get(operateTypeName) + Translator.get(sourceTypeName)); results.add(folderItem); } } @@ -177,12 +170,11 @@ public class LogService { folderItem.setId(panel_ext_ope[i] + "-" + sourceType.getValue()); String operateTypeName = SysLogConstants.operateTypeName(panel_ext_ope[i]); String sourceTypeName = sourceType.getName(); - folderItem.setName( Translator.get(operateTypeName) + Translator.get(sourceTypeName)); + folderItem.setName(Translator.get(operateTypeName) + Translator.get(sourceTypeName)); results.add(folderItem); } - return results; } @@ -215,7 +207,6 @@ public class LogService { } - public void exportExcel(BaseGridRequest request) throws Exception { request = detailRequest(request); HttpServletResponse response = ServletUtils.response(); @@ -285,5 +276,4 @@ public class LogService { } - } From fb446e394339e0066b8af8df5c00c3a31fe262bb Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 30 May 2022 10:22:23 +0800 Subject: [PATCH 08/14] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9log=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/dataease/service/sys/log/LogService.java | 5 ++++- frontend/src/views/system/log/index.vue | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/sys/log/LogService.java b/backend/src/main/java/io/dataease/service/sys/log/LogService.java index 9d17948db8..fd94d87688 100644 --- a/backend/src/main/java/io/dataease/service/sys/log/LogService.java +++ b/backend/src/main/java/io/dataease/service/sys/log/LogService.java @@ -30,6 +30,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -266,7 +267,9 @@ public class LogService { response.setContentType("application/vnd.ms-excel"); //文件名称 - response.setHeader("Content-disposition", "attachment;filename=log.xlsx"); + String fileName = "DataEase操作日志"; + String encodeFileName = URLEncoder.encode(fileName, "UTF-8"); + response.setHeader("Content-disposition", "attachment;filename="+encodeFileName+".xlsx"); wb.write(outputStream); outputStream.flush(); outputStream.close(); diff --git a/frontend/src/views/system/log/index.vue b/frontend/src/views/system/log/index.vue index fb374e5e07..dfc935abe7 100644 --- a/frontend/src/views/system/log/index.vue +++ b/frontend/src/views/system/log/index.vue @@ -116,7 +116,7 @@ export default { const link = document.createElement('a') link.style.display = 'none' link.href = URL.createObjectURL(blob) - link.download = 'log.xlsx' // 下载的文件名 + link.download = 'DataEase操作日志.xlsx' // 下载的文件名 document.body.appendChild(link) link.click() document.body.removeChild(link) From 7879eed3ffde8adbf7db4b271d9b7053237fe478 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Sat, 28 May 2022 21:57:46 +0800 Subject: [PATCH 09/14] =?UTF-8?q?fix:=20API=20=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/DatasourceController.java | 2 +- .../request/datasource/ApiDefinition.java | 5 ++- .../datasource/ApiDefinitionRequest.java | 6 ++- .../java/io/dataease/dto/DatasourceDTO.java | 6 ++- .../provider/datasource/ApiProvider.java | 33 ++++++-------- .../service/datasource/DatasourceService.java | 43 ++++++++++--------- 6 files changed, 48 insertions(+), 47 deletions(-) diff --git a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java index 060d9b4e60..a8b5335cd0 100644 --- a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java +++ b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java @@ -61,7 +61,7 @@ public class DatasourceController { @ApiIgnore @PostMapping("/validate") - public ResultHolder validate(@RequestBody DatasourceDTO datasource) throws Exception { + public ResultHolder validate(@RequestBody Datasource datasource) throws Exception { return datasourceService.validate(datasource); } diff --git a/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinition.java b/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinition.java index 5fb024cbab..7885b80684 100644 --- a/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinition.java +++ b/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinition.java @@ -6,6 +6,7 @@ import lombok.Data; import java.util.ArrayList; import java.util.List; +import java.util.Map; @Data public class ApiDefinition { @@ -14,8 +15,8 @@ public class ApiDefinition { private String url; private String method = "GET"; private List fields; - private String request; + private ApiDefinitionRequest request; private String dataPath; private String status; - private List datas = new ArrayList<>(); + private List> datas = new ArrayList<>(); } diff --git a/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinitionRequest.java b/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinitionRequest.java index 59dc793ff9..ef07542903 100644 --- a/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinitionRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/datasource/ApiDefinitionRequest.java @@ -3,12 +3,14 @@ package io.dataease.controller.request.datasource; import com.google.gson.JsonObject; import lombok.Data; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Data public class ApiDefinitionRequest { - private List headers = new ArrayList<>(); - private JsonObject body = new JsonObject(); + private List> headers = new ArrayList<>(); + private Map body = new HashMap<>(); private AuthManager authManager = new AuthManager(); diff --git a/backend/src/main/java/io/dataease/dto/DatasourceDTO.java b/backend/src/main/java/io/dataease/dto/DatasourceDTO.java index 81a76a54c6..47d39bd4cf 100644 --- a/backend/src/main/java/io/dataease/dto/DatasourceDTO.java +++ b/backend/src/main/java/io/dataease/dto/DatasourceDTO.java @@ -1,11 +1,13 @@ package io.dataease.dto; -import com.google.gson.JsonArray; +import io.dataease.controller.request.datasource.ApiDefinition; import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.plugins.common.constants.DatasourceCalculationMode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * Author: wangjiahao * Date: 2021-05-18 @@ -16,7 +18,7 @@ public class DatasourceDTO extends Datasource { @ApiModelProperty("权限") private String privileges; - private JsonArray apiConfiguration; + private List apiConfiguration; private String typeDesc; private DatasourceCalculationMode calculationMode; } diff --git a/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java b/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java index a46ef243f4..d588d617d8 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java @@ -1,8 +1,6 @@ package io.dataease.provider.datasource; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import com.google.gson.*; import com.google.gson.reflect.TypeToken; import io.dataease.plugins.common.dto.datasource.TableDesc; import io.dataease.plugins.common.dto.datasource.TableField; @@ -22,7 +20,6 @@ import org.springframework.stereotype.Service; import java.util.*; -import java.util.stream.Collectors; @Service("apiProvider") public class ApiProvider extends Provider { @@ -122,11 +119,10 @@ public class ApiProvider extends Provider { static public String execHttpRequest(ApiDefinition apiDefinition) throws Exception { String response = ""; HttpClientConfig httpClientConfig = new HttpClientConfig(); - ApiDefinitionRequest apiDefinitionRequest = new Gson().fromJson(apiDefinition.getRequest(), ApiDefinitionRequest.class); - //headers - for (JsonObject header : apiDefinitionRequest.getHeaders()) { - if (header.get("name") != null && StringUtils.isNotEmpty(header.get("name").getAsString()) && header.get("value") != null && StringUtils.isNotEmpty(header.get("value").getAsString())) { - httpClientConfig.addHeader(header.get("name").getAsString(), header.get("value").getAsString()); + ApiDefinitionRequest apiDefinitionRequest = apiDefinition.getRequest(); + for (Map header : apiDefinitionRequest.getHeaders()) { + if (header.get("name") != null && StringUtils.isNotEmpty(header.get("name").toString()) && header.get("value") != null && StringUtils.isNotEmpty(header.get("value").toString())) { + httpClientConfig.addHeader(header.get("name").toString(), header.get("value").toString()); } } @@ -147,18 +143,18 @@ public class ApiProvider extends Provider { if (apiDefinitionRequest.getBody().get("type") == null) { throw new Exception("请求类型不能为空"); } - String type = apiDefinitionRequest.getBody().get("type").getAsString(); + String type = apiDefinitionRequest.getBody().get("type").toString(); if (StringUtils.equalsAny(type, "JSON", "XML", "Raw")) { String raw = null; if (apiDefinitionRequest.getBody().get("raw") != null) { - raw = apiDefinitionRequest.getBody().get("raw").getAsString(); + raw = apiDefinitionRequest.getBody().get("raw").toString(); response = HttpClientUtil.post(apiDefinition.getUrl(), raw, httpClientConfig); } } if (StringUtils.equalsAny(type, "Form_Data", "WWW_FORM")) { if (apiDefinitionRequest.getBody().get("kvs") != null) { Map body = new HashMap<>(); - JsonArray kvsArr = apiDefinitionRequest.getBody().getAsJsonArray("kvs"); + JsonArray kvsArr = JsonParser.parseString(apiDefinitionRequest.getBody().get("kvs").toString()).getAsJsonArray(); for (int i = 0; i < kvsArr.size(); i++) { JsonObject kv = kvsArr.get(i).getAsJsonObject(); if (kv.get("name") != null) { @@ -191,7 +187,7 @@ public class ApiProvider extends Provider { throw new Exception("jsonPath 路径错误:" + e.getMessage()); } - List dataList = new ArrayList<>(); + List> dataList = new ArrayList<>(); List fields = new ArrayList<>(); Set fieldKeys = new HashSet<>(); //第一遍获取 field @@ -213,11 +209,11 @@ public class ApiProvider extends Provider { } //第二遍获取 data for (LinkedHashMap data : datas) { - JsonObject jsonObject = new JsonObject(); + Map mapData = new HashMap<>(); for (String key : fieldKeys) { - jsonObject.addProperty(key, Optional.ofNullable(data.get(key)).orElse("").toString().replaceAll("\n", " ").replaceAll("\r", " ")); + mapData.put(key, Optional.ofNullable(data.get(key)).orElse("").toString().replaceAll("\n", " ").replaceAll("\r", " ")); } - dataList.add(jsonObject); + dataList.add(mapData); } apiDefinition.setDatas(dataList); apiDefinition.setFields(fields); @@ -248,9 +244,8 @@ public class ApiProvider extends Provider { private ApiDefinition checkApiDefinition(DatasourceRequest datasourceRequest) throws Exception { List apiDefinitionList = new ArrayList<>(); - List apiDefinitionListTemp = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), new TypeToken>() { - }.getType()); - if (CollectionUtils.isEmpty(apiDefinitionListTemp)) { + List apiDefinitionListTemp = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), new TypeToken>() {}.getType()); + if (CollectionUtils.isNotEmpty(apiDefinitionListTemp)) { for (ApiDefinition apiDefinition : apiDefinitionListTemp) { if (apiDefinition.getName().equalsIgnoreCase(datasourceRequest.getTable())) { apiDefinitionList.add(apiDefinition); diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index e1562c49ae..7fc5e98756 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -7,6 +7,7 @@ import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import io.dataease.auth.annotation.DeCleaner; import io.dataease.commons.constants.RedisConstants; +import io.dataease.commons.utils.BeanUtils; import io.dataease.ext.ExtDataSourceMapper; import io.dataease.ext.query.GridExample; import io.dataease.commons.constants.DePermissionType; @@ -144,16 +145,15 @@ public class DatasourceService { datasourceDTO.setConfiguration(datasourceDTO.getConfiguration()); } if (datasourceDTO.getType().equalsIgnoreCase(DatasourceTypes.api.toString())) { - JsonArray apiDefinitionList = JsonParser.parseString(datasourceDTO.getConfiguration()).getAsJsonArray(); - JsonArray apiDefinitionListWithStatus = new JsonArray(); + List apiDefinitionList = new Gson().fromJson(datasourceDTO.getConfiguration(), new TypeToken>() {}.getType()); + List apiDefinitionListWithStatus = new ArrayList<>(); int success = 0; if (StringUtils.isNotEmpty(datasourceDTO.getStatus())) { JsonObject apiItemStatuses = JsonParser.parseString(datasourceDTO.getStatus()).getAsJsonObject(); - for (Object apiDefinition : apiDefinitionList) { - String status = apiItemStatuses.get(JsonParser.parseString(apiDefinition.toString()).getAsJsonObject().get("name").getAsString()).getAsString(); - JsonObject object = JsonParser.parseString(apiDefinition.toString()).getAsJsonObject(); - object.addProperty("status", status); - apiDefinitionListWithStatus.add(object); + for (ApiDefinition apiDefinition : apiDefinitionList) { + String status = apiItemStatuses.get(apiDefinition.getName()).getAsString(); + apiDefinition.setStatus(status); + apiDefinitionListWithStatus.add(apiDefinition); if (StringUtils.isNotEmpty(status) && status.equalsIgnoreCase("Success")) { success++; } @@ -232,40 +232,41 @@ public class DatasourceService { } } - public ResultHolder validate(DatasourceDTO datasource) throws Exception { + public ResultHolder validate(Datasource datasource) throws Exception { + DatasourceDTO datasourceDTO = new DatasourceDTO(); + BeanUtils.copyBean(datasourceDTO, datasource); try { Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); String datasourceStatus = datasourceProvider.checkStatus(datasourceRequest); if (datasource.getType().equalsIgnoreCase("api")) { - Gson gson = new Gson(); int success = 0; - JsonArray apiDefinitionList = JsonParser.parseString(datasource.getConfiguration()).getAsJsonArray(); - JsonArray apiDefinitionListWithStatus = new JsonArray(); + List apiDefinitionList = new Gson().fromJson(datasource.getConfiguration(), new TypeToken>() {}.getType()); + List apiDefinitionListWithStatus = new ArrayList<>(); + if (StringUtils.isNotEmpty(datasourceStatus)) { JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus).getAsJsonObject(); - for (Object apiDefinition : apiDefinitionList) { - String status = apiItemStatuses.get(JsonParser.parseString(apiDefinition.toString()).getAsJsonObject().get("name").getAsString()).getAsString(); - JsonObject object = JsonParser.parseString(apiDefinition.toString()).getAsJsonObject(); - object.addProperty("status", status); - apiDefinitionListWithStatus.add(object); + for (ApiDefinition apiDefinition : apiDefinitionList) { + String status = apiItemStatuses.get(apiDefinition.getName()).getAsString(); + apiDefinition.setStatus(status); + apiDefinitionListWithStatus.add(apiDefinition); if (StringUtils.isNotEmpty(status) && status.equalsIgnoreCase("Success")) { success++; } } } - datasource.setApiConfiguration(apiDefinitionListWithStatus); + datasourceDTO.setApiConfiguration(apiDefinitionListWithStatus); if (success == apiDefinitionList.size()) { - return ResultHolder.success(datasource); + return ResultHolder.success(datasourceDTO); } if (success > 0 && success < apiDefinitionList.size()) { - return ResultHolder.error("Datasource has invalid tables", datasource); + return ResultHolder.error("Datasource has invalid tables", datasourceDTO); } - return ResultHolder.error("Datasource is invalid.", datasource); + return ResultHolder.error("Datasource is invalid.", datasourceDTO); } - return ResultHolder.success(datasource); + return ResultHolder.success(datasourceDTO); } catch (Exception e) { return ResultHolder.error("Datasource is invalid: " + e.getMessage()); } From a132fa3891629795de20220c817c81369d600b14 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Sat, 28 May 2022 22:21:28 +0800 Subject: [PATCH 10/14] =?UTF-8?q?fix:=20API=20=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/system/datasource/DsConfiguration.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/views/system/datasource/DsConfiguration.vue b/frontend/src/views/system/datasource/DsConfiguration.vue index 4d2d421fbb..f2b7a8478d 100644 --- a/frontend/src/views/system/datasource/DsConfiguration.vue +++ b/frontend/src/views/system/datasource/DsConfiguration.vue @@ -463,7 +463,6 @@ export default { this.$refs.apiItem.validate(valid => { if (valid) { const data = JSON.parse(JSON.stringify(this.apiItem)) - data.request = JSON.stringify(data.request) this.loading = true this.disabledNext = true checkApiDatasource(data).then(res => { From 2ae62dff1ed50ca69ce76b05350fb5ee5f3faacb Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 30 May 2022 01:11:53 +0800 Subject: [PATCH 11/14] =?UTF-8?q?fix:=20=E6=9B=BF=E6=8D=A2excel=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E7=A4=BA=E5=BD=B1=E5=93=8D=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/dto/dataset/ExcelSheetData.java | 4 ++ .../service/dataset/DataSetTableService.java | 65 +++++++++++++++---- frontend/src/lang/en.js | 3 +- frontend/src/lang/tw.js | 3 +- frontend/src/lang/zh.js | 3 +- frontend/src/views/dataset/add/AddExcel.vue | 15 ++++- 6 files changed, 76 insertions(+), 17 deletions(-) diff --git a/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java b/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java index 77e92f703f..9380de31f9 100644 --- a/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java +++ b/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java @@ -3,6 +3,7 @@ package io.dataease.dto.dataset; import io.dataease.plugins.common.dto.datasource.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import springfox.documentation.annotations.ApiIgnore; import java.util.List; import java.util.Map; @@ -29,4 +30,7 @@ public class ExcelSheetData { private String path; @ApiModelProperty("字段MD5") private String fieldsMd5; + @ApiModelProperty("字段变更") + private Boolean changeFiled = false; + private Boolean effectExtField = false; } 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 e47240e1ba..52972307a8 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -66,6 +66,8 @@ import java.text.MessageFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static io.dataease.commons.constants.ColumnPermissionConstants.Desensitization_desc; @@ -1890,9 +1892,9 @@ public class DataSetTableService { List excelSheetDataList = parseExcel2(filename, file.getInputStream(), true); List retrunSheetDataList = new ArrayList<>(); - if (StringUtils.isNotEmpty(tableId) && editType == 1) { - List datasetTableFields = dataSetTableFieldsService.getFieldsByTableId(tableId) - .stream().filter(datasetTableField -> datasetTableField.getExtField() == 0).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(tableId)) { + List fields = dataSetTableFieldsService.getFieldsByTableId(tableId); + List datasetTableFields = fields.stream().filter(datasetTableField -> datasetTableField.getExtField() == 0).collect(Collectors.toList()); datasetTableFields.sort((o1, o2) -> { if (o1.getColumnIndex() == null) { return -1; @@ -1904,18 +1906,57 @@ public class DataSetTableService { }); List oldFields = datasetTableFields.stream().map(DatasetTableField::getOriginName).collect(Collectors.toList()); - for (ExcelSheetData excelSheetData : excelSheetDataList) { - List fields = excelSheetData.getFields(); - List newFields = fields.stream().map(TableField::getRemarks).collect(Collectors.toList()); - if (oldFields.equals(newFields)) { + + if(editType == 1){ + for (ExcelSheetData excelSheetData : excelSheetDataList) { + List tableFields = excelSheetData.getFields(); + List newFields = tableFields.stream().map(TableField::getRemarks).collect(Collectors.toList()); + if (oldFields.equals(newFields)) { + retrunSheetDataList.add(excelSheetData); + } + } + if (retrunSheetDataList.size() == 0) { + DataEaseException.throwException(Translator.get("i18n_excel_column_change")); + } + }else { + List extFields = fields.stream().filter(datasetTableField -> datasetTableField.getExtField() > 0).collect(Collectors.toList()); + List extFieldsRefIds = new ArrayList<>(); + for (DatasetTableField extField : extFields) { + String originField = extField.getOriginName().replaceAll("[\\t\\n\\r]]", ""); + String regex = "\\[(.*?)]"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(originField); + while (matcher.find()) { + String id = matcher.group(1); + if(!extFieldsRefIds.contains(id)){ + extFieldsRefIds.add(id); + } + } + } + List extFieldsRefNames = datasetTableFields.stream().filter(datasetTableField -> extFieldsRefIds.contains(datasetTableField.getId())).map(DatasetTableField::getOriginName).collect(Collectors.toList()); + for (ExcelSheetData excelSheetData : excelSheetDataList) { + List tableFields = excelSheetData.getFields(); + List newFields = tableFields.stream().map(TableField::getRemarks).collect(Collectors.toList()); + if (oldFields.equals(newFields)) { + excelSheetData.setChangeFiled(false); + }else { + excelSheetData.setChangeFiled(true); + } + boolean effectExtField = false; + for (String extFieldsRefName : extFieldsRefNames) { + if(!newFields.contains(extFieldsRefName)){ + effectExtField = true; + } + } + excelSheetData.setEffectExtField(effectExtField); + retrunSheetDataList.add(excelSheetData); } + if (retrunSheetDataList.size() == 0) { + DataEaseException.throwException(Translator.get("i18n_excel_column_change")); + } } - - if (retrunSheetDataList.size() == 0) { - DataEaseException.throwException(Translator.get("i18n_excel_column_change")); - } - } else { + }else { retrunSheetDataList = excelSheetDataList; } retrunSheetDataList = retrunSheetDataList.stream() diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 0847bfb01d..fafa49afef 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1249,7 +1249,8 @@ export default { exec: 'Execute Once', confirm_exec: 'Manual trigger execution?', change_success: 'State switch successful', - excel_replace_msg: 'Calculation fields, custom datasets, associated datasets, dashboards, etc. may be affected. Confirm the replacement?' + excel_replace_msg: 'Calculation fields, custom datasets, associated datasets, dashboards, etc. may be affected. Confirm the replacement?', + effect_ext_field: 'Affect calculated fields' }, field_group_type: 'Type', location: 'Location', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index f5ed387650..1b9fa015a8 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1249,7 +1249,8 @@ export default { exec: '執行一次', confirm_exec: '手動觸發執行?', change_success: '狀態切換成功', - excel_replace_msg: '可能會影響計算欄位、自定義數据集、關聯數据集、儀錶板等,確認替換?' + excel_replace_msg: '可能會影響計算欄位、自定義數据集、關聯數据集、儀錶板等,確認替換?', + effect_ext_field: '會影響計算欄位' }, field_group_type: '分類', location: '地理位置', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 261b63bb54..b07eba1603 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1250,7 +1250,8 @@ export default { exec: '执行一次', confirm_exec: '手动触发执行?', change_success: '状态切换成功', - excel_replace_msg: '可能会影响计算字段、自定义数据集、关联数据集、仪表板等,确认替换?' + excel_replace_msg: '可能会影响自定义数据集、关联数据集、仪表板等,确认替换?', + effect_ext_field: '会影响计算字段' }, field_group_type: '分类', location: '地理位置', diff --git a/frontend/src/views/dataset/add/AddExcel.vue b/frontend/src/views/dataset/add/AddExcel.vue index 8c03010a88..0b013ae397 100644 --- a/frontend/src/views/dataset/add/AddExcel.vue +++ b/frontend/src/views/dataset/add/AddExcel.vue @@ -310,6 +310,8 @@ export default { var validate = true var selectedSheet = [] var sheetFileMd5 = [] + var effectExtField = false + var changeFiled = false var selectNode = this.$refs.tree.getCheckedNodes() for (var i = 0; i < selectNode.length; i++) { if (selectNode[i].sheet) { @@ -331,6 +333,12 @@ export default { }) return } + if(selectNode[i].effectExtField){ + effectExtField = true + } + if(selectNode[i].changeFiled){ + changeFiled = true + } selectedSheet.push(selectNode[i]) sheetFileMd5.push(selectNode[i].fieldsMd5) } @@ -366,8 +374,11 @@ export default { editType: this.param.editType ? this.param.editType : 0 } } - if (this.param.editType === 0 && this.param.tableId) { - $confirm(i18n.t('dataset.task.excel_replace_msg'), () => { + + if (this.param.editType === 0 && this.param.tableId && (effectExtField || changeFiled)) { + + var msg = effectExtField ? i18n.t('dataset.task.effect_ext_field') + ', ' + i18n.t('dataset.task.excel_replace_msg') : i18n.t('dataset.task.excel_replace_msg') + $confirm(msg, () => { this.saveExcelData(sheetFileMd5, table) }) }else { From 9be4a14b27d3c1488f74d51eddfa6cf42b1091da Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 30 May 2022 15:08:19 +0800 Subject: [PATCH 12/14] =?UTF-8?q?fix:=20=E5=88=9B=E5=BB=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=A1=A8=E6=97=B6=E9=9C=80=E8=A6=81=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E4=B8=BA=20utf8mb4=5Fgeneral=5Fci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/db/migration/V35__1.11.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/main/resources/db/migration/V35__1.11.sql b/backend/src/main/resources/db/migration/V35__1.11.sql index 8d60fec0e5..3189f656fa 100644 --- a/backend/src/main/resources/db/migration/V35__1.11.sql +++ b/backend/src/main/resources/db/migration/V35__1.11.sql @@ -9,7 +9,7 @@ CREATE TABLE `de_driver` ( `driver_class` varchar(255) DEFAULT NULL COMMENT '驱动类', `desc` varchar(255) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='驱动'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='驱动'; CREATE TABLE `de_driver_details` ( @@ -19,7 +19,7 @@ CREATE TABLE `de_driver_details` ( `version` varchar(255) DEFAULT NULL COMMENT '版本', `driver_class` longtext DEFAULT NULL COMMENT '驱动类', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='驱动详情'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='驱动详情'; UPDATE `sys_menu` SET `sub_count` = 1 WHERE `menu_id` = 40; @@ -43,7 +43,7 @@ CREATE TABLE `sys_log` ( `remark` longtext COMMENT '备注信息', `time` bigint(13) NOT NULL COMMENT '操作时间', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci; SET FOREIGN_KEY_CHECKS = 1; From fe2473241b3054a5c0f8891c65f2a859f4d66054 Mon Sep 17 00:00:00 2001 From: junjun Date: Mon, 30 May 2022 15:18:55 +0800 Subject: [PATCH 13/14] =?UTF-8?q?refactor:=20=E8=A7=86=E5=9B=BE=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=BF=AB=E9=80=9F=E5=88=A0=E9=99=A4=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/chart/components/drag-item/ChartDragItem.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/chart/components/drag-item/ChartDragItem.vue b/frontend/src/views/chart/components/drag-item/ChartDragItem.vue index 0f77f73cb9..134968c658 100644 --- a/frontend/src/views/chart/components/drag-item/ChartDragItem.vue +++ b/frontend/src/views/chart/components/drag-item/ChartDragItem.vue @@ -272,6 +272,6 @@ export default { margin-left: 4px; color: #878d9f; position: absolute; - right: 25px; + right: 40px; } From 987fd074039e8302953597c15dcd0e13cce81cf8 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 30 May 2022 15:51:39 +0800 Subject: [PATCH 14/14] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/lang/en.js | 1 + frontend/src/lang/tw.js | 1 + frontend/src/lang/zh.js | 1 + .../src/views/system/datasource/DsTree.vue | 71 ++++++++++++------- 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index fafa49afef..5348297bd4 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1334,6 +1334,7 @@ export default { driver: 'Driver', please_choose_driver: 'Please choose driver', mgm: 'Driver', + exit_mgm: 'Exit Driver', add: 'ADD Driver', modify: 'Modify', show_info: 'Driver info', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 1b9fa015a8..21d143a8aa 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1334,6 +1334,7 @@ export default { driver: '驅動', please_choose_driver: '青選擇驅動', mgm: '驅動管理', + exit_mgm: '退出驅動管理', add: '添加驅動', modify: '修改', show_info: '驅動信息', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index b07eba1603..954491ad27 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1336,6 +1336,7 @@ export default { driver: '驱动', please_choose_driver: '请选择驱动', mgm: '驱动管理', + exit_mgm: '退出驱动管理', add: '添加驱动', modify: '修改', show_info: '驱动信息', diff --git a/frontend/src/views/system/datasource/DsTree.vue b/frontend/src/views/system/datasource/DsTree.vue index 98e9c4e011..f3e91a7156 100644 --- a/frontend/src/views/system/datasource/DsTree.vue +++ b/frontend/src/views/system/datasource/DsTree.vue @@ -1,14 +1,27 @@