diff --git a/backend/pom.xml b/backend/pom.xml index 5415073b33..2c3cc33110 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -214,7 +214,7 @@ org.jsoup jsoup - 1.10.3 + 1.14.2 @@ -226,7 +226,7 @@ org.apache.commons commons-compress - 1.20 + 1.21 @@ -255,7 +255,7 @@ org.apache.httpcomponents httpclient - 4.5.6 + 4.5.13 diff --git a/backend/src/main/java/io/dataease/commons/utils/ExcelReaderUtil.java b/backend/src/main/java/io/dataease/commons/utils/ExcelReaderUtil.java index d90f453cb2..53249d256b 100644 --- a/backend/src/main/java/io/dataease/commons/utils/ExcelReaderUtil.java +++ b/backend/src/main/java/io/dataease/commons/utils/ExcelReaderUtil.java @@ -57,13 +57,11 @@ public class ExcelReaderUtil { ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader(); excelXlsxReader.process(inputStream); System.out.println(excelXlsxReader.totalSheets.size()); - System.out.println(excelXlsxReader.totalSheets.get(1).getExcelLable()); - for (TableFiled field : excelXlsxReader.totalSheets.get(1).getFields()) { + System.out.println(excelXlsxReader.totalSheets.get(0).getExcelLable()); + for (TableFiled field : excelXlsxReader.totalSheets.get(0).getFields()) { System.out.println(new Gson().toJson(field)); } System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(0)); - System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(1)); - System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(2)); } else { throw new Exception("文件格式错误,fileName的扩展名只能是xls或xlsx。"); @@ -71,7 +69,7 @@ public class ExcelReaderUtil { } public static void main(String[] args) throws Exception { - String file ="赤收管理 2.xlsx"; + String file ="Metersphere_case_DataEase功能用例.xlsx"; ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file)); } } diff --git a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java index 43396bcf8f..63f8950914 100644 --- a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java +++ b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java @@ -237,6 +237,14 @@ public class ExcelXlsxReader extends DefaultHandler { if (isTElement) {//这个程序没经过 //将单元格内容加入rowlist中,在这之前先去掉字符串前后的空白符 String value = lastIndex.trim(); + if(curRow==1){ + TableFiled tableFiled = new TableFiled(); + tableFiled.setFieldType("TEXT"); + tableFiled.setFieldSize(65533); + tableFiled.setFieldName(value); + tableFiled.setRemarks(value); + this.fields.add(tableFiled); + } cellList.add(curCol, value); curCol++; isTElement = false; @@ -432,6 +440,10 @@ public class ExcelXlsxReader extends DefaultHandler { } } } + if(curCol==1){ + System.out.println(type); + System.out.println(nextDataType); + } return thisStr; } 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 ab6c300345..76c2288b81 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java @@ -46,6 +46,12 @@ public class DataSetTableController { } } + @ApiOperation("修改") + @PostMapping("alter") + public void alter(@RequestBody DataSetTableRequest request) throws Exception { + dataSetTableService.alter(request); + } + @ApiOperation("删除") @PostMapping("delete/{id}") public void delete(@PathVariable String id) throws Exception { diff --git a/backend/src/main/java/io/dataease/controller/sys/MsgController.java b/backend/src/main/java/io/dataease/controller/sys/MsgController.java index 729edbae37..b100aea861 100644 --- a/backend/src/main/java/io/dataease/controller/sys/MsgController.java +++ b/backend/src/main/java/io/dataease/controller/sys/MsgController.java @@ -6,7 +6,6 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.dataease.base.domain.SysMsgChannel; import io.dataease.base.domain.SysMsgSetting; import io.dataease.base.domain.SysMsgType; -import io.dataease.commons.exception.DEException; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.PageUtils; import io.dataease.commons.utils.Pager; @@ -71,6 +70,12 @@ public class MsgController { sysMsgService.setBatchReaded(msgIds); } + @ApiOperation("全部设置已读") + @PostMapping("/allRead") + public void allRead() { + sysMsgService.setAllRead(); + } + @ApiOperation("批量删除") @PostMapping("/batchDelete") public void batchDelete(@RequestBody List msgIds) { diff --git a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java index 529cdb16af..0687144638 100644 --- a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java +++ b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java @@ -7,6 +7,7 @@ import io.dataease.base.mapper.*; import io.dataease.base.mapper.ext.ExtDataSourceMapper; import io.dataease.base.mapper.ext.query.GridExample; import io.dataease.commons.exception.DEException; +import io.dataease.commons.model.AuthURD; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.CommonThreadPool; import io.dataease.commons.utils.LogUtil; @@ -25,6 +26,8 @@ import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.exception.DataEaseException; import io.dataease.i18n.Translator; import io.dataease.service.dataset.DataSetGroupService; +import io.dataease.service.message.DeMsgutil; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -34,7 +37,10 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.UUID; @Service @@ -238,7 +244,8 @@ public class DatasourceService { public void updateDatasourceStatus(){ List datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample()); datasources.forEach(datasource -> { - checkAndUpdateDatasourceStatus(datasource); + // checkAndUpdateDatasourceStatus(datasource); + checkAndUpdateDatasourceStatus(datasource, true); }); } @@ -255,4 +262,43 @@ public class DatasourceService { datasourceMapper.updateByPrimaryKeySelective(datasource); } } + + private void checkAndUpdateDatasourceStatus(Datasource datasource, Boolean withMsg){ + try { + DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(datasource); + datasourceProvider.checkStatus(datasourceRequest); + datasource.setStatus("Success"); + datasourceMapper.updateByPrimaryKeySelective(datasource); + } catch (Exception e) { + Datasource temp = datasourceMapper.selectByPrimaryKey(datasource.getId()); + datasource.setStatus("Error"); + if (!StringUtils.equals(temp.getStatus(), "Error")) { + sendWebMsg(datasource); + datasourceMapper.updateByPrimaryKeySelective(datasource); + } + + } + } + + + private void sendWebMsg(Datasource datasource) { + + String id = datasource.getId(); + AuthURD authURD = AuthUtils.authURDR(id); + Set userIds = AuthUtils.userIdsByURD(authURD); + Long typeId = 8L;// 代表数据源失效 + Gson gson = new Gson(); + userIds.forEach(userId -> { + Map param = new HashMap<>(); + param.put("id", id); + param.put("name", datasource.getName()); + + + String content = "数据源【" + datasource.getName() + "】无效"; + + DeMsgutil.sendMsg(userId, typeId, 1L, content, gson.toJson(param)); + }); + } } diff --git a/backend/src/main/java/io/dataease/map/utils/MapUtils.java b/backend/src/main/java/io/dataease/map/utils/MapUtils.java index 15d64ce2e7..523c6fd447 100644 --- a/backend/src/main/java/io/dataease/map/utils/MapUtils.java +++ b/backend/src/main/java/io/dataease/map/utils/MapUtils.java @@ -121,7 +121,7 @@ public class MapUtils { } private static AreaEntity root() { - return AreaEntity.builder().code("100000").name("中华人名共和国").build(); + return AreaEntity.builder().code("100000").name("中华人民共和国").build(); } public static void recursionWrite(List areaEntityList) { diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java index f7638fe8c9..8fe11624f3 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -121,6 +121,8 @@ public class DorisQueryProvider extends QueryProvider { fieldName = String.format(DorisConstants.FROM_UNIXTIME, cast, DorisConstants.DEFAULT_DATE_FORMAT); } else if (f.getDeType() == 2) { fieldName = String.format(DorisConstants.CAST, originField, DorisConstants.DEFAULT_INT_FORMAT); + } else if (f.getDeType() == 3) { + fieldName = String.format(DorisConstants.CAST, originField, DorisConstants.DEFAULT_FLOAT_FORMAT); } else { fieldName = originField; } diff --git a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java index 37d0ec4881..a9a07b1ce0 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java @@ -37,6 +37,7 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public Integer transFieldType(String field) { + field = field.toUpperCase(); switch (field) { case "CHAR": case "NCHAR": 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 d3cb79db85..93e1158b4a 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -251,6 +251,11 @@ public class DataSetTableService { return datasetTable; } + public void alter(DataSetTableRequest request)throws Exception { + checkName(request); + datasetTableMapper.updateByPrimaryKeySelective(request); + } + public void delete(String id) throws Exception { DatasetTable table = datasetTableMapper.selectByPrimaryKey(id); datasetTableMapper.deleteByPrimaryKey(id); diff --git a/backend/src/main/java/io/dataease/service/message/SysMsgService.java b/backend/src/main/java/io/dataease/service/message/SysMsgService.java index 798e0b42a2..4344b0e247 100644 --- a/backend/src/main/java/io/dataease/service/message/SysMsgService.java +++ b/backend/src/main/java/io/dataease/service/message/SysMsgService.java @@ -312,4 +312,12 @@ public class SysMsgService { return sourceLists; } + public void setAllRead() { + SysMsg record = new SysMsg(); + record.setStatus(true); + SysMsgExample example = new SysMsgExample(); + example.createCriteria().andUserIdEqualTo(AuthUtils.getUser().getUserId()).andStatusEqualTo(false); + sysMsgMapper.updateByExampleSelective(record, example); + } + } diff --git a/backend/src/main/resources/db/migration/V26__de1.3.sql b/backend/src/main/resources/db/migration/V26__de1.3.sql new file mode 100644 index 0000000000..ef59aa58cb --- /dev/null +++ b/backend/src/main/resources/db/migration/V26__de1.3.sql @@ -0,0 +1,7 @@ +-- ---------------------------- +-- Records of sys_msg_type +-- ---------------------------- +BEGIN; +INSERT INTO `sys_msg_type` VALUES (7, 0, 'i18n_msg_type_ds_invalid', 'datasource', 'to-msg-ds'); +INSERT INTO `sys_msg_type` VALUES (8, 7, 'i18n_msg_type_ds_invalid', 'datasource', 'to-msg-ds'); +COMMIT; \ No newline at end of file diff --git a/frontend/src/api/dataset/dataset.js b/frontend/src/api/dataset/dataset.js index 5813b7611c..be73f0862d 100644 --- a/frontend/src/api/dataset/dataset.js +++ b/frontend/src/api/dataset/dataset.js @@ -43,6 +43,15 @@ export function addTable(data) { }) } +export function alter(data) { + return request({ + url: '/dataset/table/alter', + method: 'post', + loading: true, + data + }) +} + export function delTable(tableId) { return request({ url: '/dataset/table/delete/' + tableId, diff --git a/frontend/src/api/system/msg.js b/frontend/src/api/system/msg.js index 45ac7c687b..4dc120ae61 100644 --- a/frontend/src/api/system/msg.js +++ b/frontend/src/api/system/msg.js @@ -35,6 +35,14 @@ export function batchRead(data) { }) } +export function allRead() { + return request({ + url: '/api/sys_msg/allRead', + method: 'post', + loading: true + }) +} + export function batchDelete(data) { return request({ url: '/api/sys_msg/batchDelete', diff --git a/frontend/src/components/canvas/components/Editor/index.vue b/frontend/src/components/canvas/components/Editor/index.vue index a8b3e2af37..0065e5f052 100644 --- a/frontend/src/components/canvas/components/Editor/index.vue +++ b/frontend/src/components/canvas/components/Editor/index.vue @@ -72,6 +72,7 @@ 0) { + this.value = this.options.value[0] + } }, methods: { search() { // this.options.value && this.setCondition() + this.options.value = [] + if (this.inDraw && this.value) { + this.options.value = [this.value] + } + this.setCondition() }, setCondition() { const param = { component: this.element, - value: !this.values ? [] : Array.isArray(this.values) ? this.values : [this.values], + value: !this.options.value ? [] : Array.isArray(this.options.value) ? this.options.value : [this.options.value], operator: this.operator } this.inDraw && this.$store.commit('addViewFilter', param) diff --git a/frontend/src/components/widget/DeWidget/DeNumberRange.vue b/frontend/src/components/widget/DeWidget/DeNumberRange.vue index 17dc4cde31..c005736cbe 100644 --- a/frontend/src/components/widget/DeWidget/DeNumberRange.vue +++ b/frontend/src/components/widget/DeWidget/DeNumberRange.vue @@ -66,6 +66,12 @@ export default { }, created() { this.options = this.element.options + if (this.inDraw && this.options.value && this.options.value.length > 0) { + this.form.min = this.options.value[0] + if (this.options.value.length > 1) { + this.form.max = this.options.value[1] + } + } }, methods: { searchWithKey(index) { @@ -134,6 +140,7 @@ export default { if (!valid) { return false } + this.setCondition() this.styleChange() }) @@ -145,6 +152,8 @@ export default { value: [this.form.min, this.form.max], operator: this.operator } + + this.inDraw && (this.options.value = param.value) if (this.form.min && this.form.max) { this.inDraw && this.$store.commit('addViewFilter', param) return diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 011ffcfa21..cd87e7173b 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1351,6 +1351,7 @@ export default { read_time: 'Read Time', type: 'Message Type', mark_readed: 'Mark As Read', + all_mark_readed: 'Mark All As Read', please_select: 'Please select at least one message', mark_success: 'Mark read successfully', receive_manage: 'Receive Manage', @@ -1360,6 +1361,7 @@ export default { i18n_msg_type_dataset_sync_success: 'Dataset synchronization successful', i18n_msg_type_dataset_sync_faild: 'Dataset synchronization failed', i18n_msg_type_all: 'All type', + i18n_msg_type_ds_invalid: 'Datasource invalid', channel_inner_msg: 'On site news' }, denumberrange: { diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index f251e2d5a6..3142165b89 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1350,6 +1350,7 @@ export default { read_time: '查看時間', type: '消息類型', mark_readed: '標記已讀', + all_mark_readed: '全部已讀', please_select: '請至少選擇一條消息', mark_success: '標記已讀成功', receive_manage: '接收管理', @@ -1358,6 +1359,7 @@ export default { i18n_msg_type_dataset_sync: '數據集同步', i18n_msg_type_dataset_sync_success: '數據集同步成功', i18n_msg_type_dataset_sync_faild: '數據集同步失敗', + i18n_msg_type_ds_invalid: '數據源失效', i18n_msg_type_all: '全部類型', channel_inner_msg: '站內消息' }, diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index add3e55efc..b243e71fa4 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1353,6 +1353,7 @@ export default { read_time: '查看时间', type: '消息类型', mark_readed: '标记已读', + all_mark_readed: '全部已读', please_select: '请至少选择一条消息', mark_success: '标记已读成功', receive_manage: '接收管理', @@ -1361,6 +1362,7 @@ export default { i18n_msg_type_dataset_sync: '数据集同步', i18n_msg_type_dataset_sync_success: '数据集同步成功', i18n_msg_type_dataset_sync_faild: '数据集同步失败', + i18n_msg_type_ds_invalid: '数据源失效', i18n_msg_type_all: '全部类型', channel_inner_msg: '站内消息' }, diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index 701346fe3d..5b939fd1e4 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -349,3 +349,7 @@ div:focus { width: 5px; height: 5px; } + +.el-color-dropdown__link-btn { + display: none!important; +} diff --git a/frontend/src/views/chart/chart/treemap/treemap.js b/frontend/src/views/chart/chart/treemap/treemap.js index c4b7dc719f..4db4572bea 100644 --- a/frontend/src/views/chart/chart/treemap/treemap.js +++ b/frontend/src/views/chart/chart/treemap/treemap.js @@ -54,6 +54,7 @@ export function baseTreemapOption(chart_option, chart) { // y.type = 'treemap' chart_option.series[0].data.push(y) } + chart_option.series[0].name = chart.data.series[0].name } } // console.log(chart_option); diff --git a/frontend/src/views/chart/components/drag-item/ChartDragItem.vue b/frontend/src/views/chart/components/drag-item/ChartDragItem.vue index 329b7d9154..0b5ba92f6f 100644 --- a/frontend/src/views/chart/components/drag-item/ChartDragItem.vue +++ b/frontend/src/views/chart/components/drag-item/ChartDragItem.vue @@ -55,7 +55,7 @@ {{ $t('chart.sort') }} - ({{ $t('chart.'+item.sort) }}) + ({{ $t('chart.'+item.sort) }}) @@ -171,11 +171,6 @@ export default { font-size: 12px; } - .summary-span{ - margin-left: 4px; - color: #878d9f;; - } - .inner-dropdown-menu{ display: flex; justify-content: space-between; @@ -185,7 +180,7 @@ export default { .item-span-style{ display: inline-block; - width: 100px; + width: 80px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; diff --git a/frontend/src/views/chart/components/drag-item/DimensionItem.vue b/frontend/src/views/chart/components/drag-item/DimensionItem.vue index dbbfea12b7..acbc047608 100644 --- a/frontend/src/views/chart/components/drag-item/DimensionItem.vue +++ b/frontend/src/views/chart/components/drag-item/DimensionItem.vue @@ -227,7 +227,7 @@ export default { .item-span-style{ display: inline-block; - width: 100px; + width: 80px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; diff --git a/frontend/src/views/chart/components/drag-item/QuotaItem.vue b/frontend/src/views/chart/components/drag-item/QuotaItem.vue index 93e33f59a2..203db6db54 100644 --- a/frontend/src/views/chart/components/drag-item/QuotaItem.vue +++ b/frontend/src/views/chart/components/drag-item/QuotaItem.vue @@ -237,7 +237,7 @@ export default { .item-span-style{ display: inline-block; - width: 70px; + width: 80px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; diff --git a/frontend/src/views/dataset/group/Group.vue b/frontend/src/views/dataset/group/Group.vue index 2163d42f21..1d86c4b06b 100644 --- a/frontend/src/views/dataset/group/Group.vue +++ b/frontend/src/views/dataset/group/Group.vue @@ -341,7 +341,7 @@