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 {