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 @@