diff --git a/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java b/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java index c7b36bb416..119dd15667 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java +++ b/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java @@ -394,7 +394,11 @@ public class ChartDataServer implements ChartDataApi { detailsSheet.setColumnWidth(j, 255 * 20); } else if (cellValObj != null) { try { - cell.setCellValue(cellValObj.toString()); + if ((excelTypes[j].equals(DeTypeConstants.DE_INT) || excelTypes[j].equals(DeTypeConstants.DE_FLOAT)) && StringUtils.isNotEmpty(cellValObj.toString())) { + cell.setCellValue(Double.valueOf(cellValObj.toString())); + } else if (cellValObj != null) { + cell.setCellValue(cellValObj.toString()); + } } catch (Exception e) { LogUtil.warn("export excel data transform error"); } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java b/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java index a9f22716b9..9807a444bd 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java @@ -70,7 +70,7 @@ public class DatasourceSyncManage { if (updateType.equals(DatasourceServer.UpdateType.all_scope)) { createEngineTable(TableUtils.tmpName(datasourceRequest.getTable()), tableFields); } - extractExcelData(datasourceRequest, updateType); + extractExcelData(datasourceRequest, updateType, tableFields); if (updateType.equals(DatasourceServer.UpdateType.all_scope)) { replaceTable(datasourceRequest.getTable()); } @@ -145,7 +145,7 @@ public class DatasourceSyncManage { if (updateType.equals(DatasourceServer.UpdateType.all_scope)) { createEngineTable(TableUtils.tmpName(datasourceRequest.getTable()), tableFields); } - extractApiData(datasourceRequest, updateType); + extractApiData(datasourceRequest, updateType, tableFields); if (updateType.equals(DatasourceServer.UpdateType.all_scope)) { replaceTable(datasourceRequest.getTable()); } @@ -198,7 +198,7 @@ public class DatasourceSyncManage { if (updateType.equals(DatasourceServer.UpdateType.all_scope)) { createEngineTable(TableUtils.tmpName(datasourceRequest.getTable()), tableFields); } - extractApiData(datasourceRequest, updateType); + extractApiData(datasourceRequest, updateType, tableFields); if (updateType.equals(DatasourceServer.UpdateType.all_scope)) { replaceTable(datasourceRequest.getTable()); } @@ -222,20 +222,10 @@ public class DatasourceSyncManage { } } - private void extractApiData(DatasourceRequest datasourceRequest, DatasourceServer.UpdateType extractType) throws Exception { + private void extractApiData(DatasourceRequest datasourceRequest, DatasourceServer.UpdateType extractType, List tableFields) throws Exception { Map result = ApiUtils.fetchResultField(datasourceRequest); List dataList = (List) result.get("dataList"); - String engineTableName; - switch (extractType) { - case all_scope: - engineTableName = TableUtils.tmpName(TableUtils.tableName(datasourceRequest.getTable())); - break; - default: - engineTableName = TableUtils.tableName(datasourceRequest.getTable()); - break; - } CoreDeEngine engine = engineManage.info(); - EngineRequest engineRequest = new EngineRequest(); engineRequest.setEngine(engine); EngineProvider engineProvider = ProviderUtil.getEngineProvider(engine.getType()); @@ -246,14 +236,13 @@ public class DatasourceSyncManage { } else { totalPage = dataList.size() / pageNumber; } - for (int page = 1; page <= totalPage; page++) { - engineRequest.setQuery(engineProvider.insertSql(engineTableName, dataList, page, pageNumber)); + engineRequest.setQuery(engineProvider.insertSql(datasourceRequest.getTable(), extractType, dataList, page, pageNumber, tableFields)); calciteProvider.exec(engineRequest); } } - private void extractExcelData(DatasourceRequest datasourceRequest, DatasourceServer.UpdateType extractType) throws Exception { + private void extractExcelData(DatasourceRequest datasourceRequest, DatasourceServer.UpdateType extractType, List tableFields) throws Exception { ExcelUtils excelUtils = new ExcelUtils(); List dataList = excelUtils.fetchDataList(datasourceRequest); String engineTableName; @@ -278,7 +267,7 @@ public class DatasourceSyncManage { totalPage = dataList.size() / pageNumber; } for (int page = 1; page <= totalPage; page++) { - engineRequest.setQuery(engineProvider.insertSql(engineTableName, dataList, page, pageNumber)); + engineRequest.setQuery(engineProvider.insertSql(engineTableName, extractType, dataList, page, pageNumber, tableFields)); calciteProvider.exec(engineRequest); } } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java index b55cb447d1..9a6ca85974 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java @@ -580,6 +580,7 @@ public class ApiUtils { o.put("checked", true); o.put("name", field.getName()); o.put("primaryKey", field.isPrimaryKey()); + o.put("length", field.getLength()); o.put("deExtractType", field.getDeExtractType()); } } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/EngineProvider.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/EngineProvider.java index 695c9decc7..1618a273ac 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/EngineProvider.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/EngineProvider.java @@ -2,6 +2,7 @@ package io.dataease.datasource.provider; import io.dataease.datasource.dao.auto.entity.CoreDeEngine; import io.dataease.datasource.request.EngineRequest; +import io.dataease.datasource.server.DatasourceServer; import io.dataease.extensions.datasource.dto.TableField; import java.util.List; @@ -21,7 +22,7 @@ public abstract class EngineProvider { public abstract String createTableSql(String name, List tableFields, CoreDeEngine engine); - public abstract String insertSql(String name, List dataList, int page, int pageNumber); + public abstract String insertSql(String tableName, DatasourceServer.UpdateType extractType, List dataList, int page, int pageNumber, List tableFields); } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/H2EngineProvider.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/H2EngineProvider.java index f63f418631..b0c9adedd1 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/H2EngineProvider.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/H2EngineProvider.java @@ -3,20 +3,11 @@ package io.dataease.datasource.provider; import io.dataease.dataset.utils.TableUtils; import io.dataease.datasource.dao.auto.entity.CoreDeEngine; -import io.dataease.datasource.request.EngineRequest; -import io.dataease.datasource.type.H2; -import io.dataease.datasource.type.Mysql; -import io.dataease.extensions.datasource.dto.ConnectionObj; -import io.dataease.extensions.datasource.dto.DatasourceDTO; +import io.dataease.datasource.server.DatasourceServer; import io.dataease.extensions.datasource.dto.TableField; -import io.dataease.extensions.datasource.vo.DatasourceConfiguration; -import io.dataease.utils.BeanUtils; -import io.dataease.utils.JsonUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.sql.PreparedStatement; -import java.sql.Statement; import java.util.Arrays; import java.util.List; @@ -34,8 +25,17 @@ public class H2EngineProvider extends EngineProvider { } @Override - public String insertSql(String name, List dataList, int page, int pageNumber) { - String insertSql = "INSERT INTO `TABLE_NAME` VALUES ".replace("TABLE_NAME", name); + public String insertSql(String tableName, DatasourceServer.UpdateType extractType, List dataList, int page, int pageNumber,List tableFields) { + String engineTableName; + switch (extractType) { + case all_scope: + engineTableName = TableUtils.tmpName(TableUtils.tableName(tableName)); + break; + default: + engineTableName = TableUtils.tableName(tableName); + break; + } + String insertSql = "INSERT INTO `TABLE_NAME` VALUES ".replace("TABLE_NAME", engineTableName); StringBuffer values = new StringBuffer(); Integer realSize = page * pageNumber < dataList.size() ? page * pageNumber : dataList.size(); @@ -88,7 +88,11 @@ public class H2EngineProvider extends EngineProvider { int size = tableField.getPrecision() * 4; switch (tableField.getDeType()) { case 0: - columnFields.append("varchar(2048)").append(",`"); + if (StringUtils.isNotEmpty(tableField.getLength())) { + columnFields.append("varchar(length)".replace("length", tableField.getLength())).append(",`"); + } else { + columnFields.append("longtext").append(",`"); + } break; case 1: columnFields.append("varchar(2048)").append(",`"); @@ -103,7 +107,7 @@ public class H2EngineProvider extends EngineProvider { columnFields.append("TINYINT(length)".replace("length", String.valueOf(tableField.getPrecision()))).append(",`"); break; default: - columnFields.append("varchar(2048)").append(",`"); + columnFields.append("longtext").append(",`"); break; } } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/MysqlEngineProvider.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/MysqlEngineProvider.java index b45e28c5fd..5edc98e7d3 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/MysqlEngineProvider.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/MysqlEngineProvider.java @@ -3,21 +3,15 @@ package io.dataease.datasource.provider; import io.dataease.dataset.utils.TableUtils; import io.dataease.datasource.dao.auto.entity.CoreDeEngine; -import io.dataease.datasource.request.EngineRequest; -import io.dataease.datasource.type.Mysql; -import io.dataease.extensions.datasource.dto.ConnectionObj; -import io.dataease.extensions.datasource.dto.DatasourceDTO; +import io.dataease.datasource.server.DatasourceServer; import io.dataease.extensions.datasource.dto.TableField; -import io.dataease.extensions.datasource.vo.DatasourceConfiguration; -import io.dataease.utils.BeanUtils; -import io.dataease.utils.JsonUtil; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; - -import java.sql.PreparedStatement; -import java.sql.Statement; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * @Author gin @@ -37,8 +31,18 @@ public class MysqlEngineProvider extends EngineProvider { } @Override - public String insertSql(String name, List dataList, int page, int pageNumber) { - String insertSql = "INSERT INTO `TABLE_NAME` VALUES ".replace("TABLE_NAME", name); + public String insertSql(String tableName, DatasourceServer.UpdateType extractType, List dataList, int page, int pageNumber, List tableFields) { + String engineTableName; + switch (extractType) { + case all_scope: + engineTableName = TableUtils.tmpName(TableUtils.tableName(tableName)); + break; + default: + engineTableName = TableUtils.tableName(tableName); + break; + } + + String insertSql = "INSERT INTO `TABLE_NAME` VALUES ".replace("TABLE_NAME", engineTableName); StringBuffer values = new StringBuffer(); Integer realSize = page * pageNumber < dataList.size() ? page * pageNumber : dataList.size(); @@ -54,7 +58,18 @@ public class MysqlEngineProvider extends EngineProvider { values.append("('").append(String.join("','", Arrays.asList(strings1))) .append("'),"); } - return (insertSql + values.substring(0, values.length() - 1)).replaceAll("'null'", "null"); + List keys = tableFields.stream().filter(TableField::isPrimaryKey).toList(); + List notKeys = tableFields.stream().filter(tableField -> !tableField.isPrimaryKey()).toList(); + String insetSql = (insertSql + values.substring(0, values.length() - 1)).replaceAll("'null'", "null"); + if (CollectionUtils.isNotEmpty(keys) && extractType.equals(DatasourceServer.UpdateType.add_scope)) { + insetSql = insetSql + " ON DUPLICATE KEY UPDATE "; + List updateColumes = new ArrayList<>(); + for (TableField notKey : notKeys) { + updateColumes.add("column = VALUES(column)".replace("column", notKey.getName())); + } + insetSql = insetSql + updateColumes.stream().collect(Collectors.joining(",")); + } + return insetSql; } @@ -93,7 +108,11 @@ public class MysqlEngineProvider extends EngineProvider { int size = tableField.getPrecision() * 4; switch (tableField.getDeExtractType()) { case 0: - columnFields.append("varchar(1024)").append(",`"); + if (StringUtils.isNotEmpty(tableField.getLength())) { + columnFields.append("varchar(length)".replace("length", tableField.getLength())).append(",`"); + } else { + columnFields.append("longtext").append(",`"); + } break; case 1: columnFields.append("datetime").append(",`"); @@ -108,7 +127,7 @@ public class MysqlEngineProvider extends EngineProvider { columnFields.append("TINYINT(length)".replace("length", String.valueOf(tableField.getPrecision()))).append(",`"); break; default: - columnFields.append("varchar(1024)").append(",`"); + columnFields.append("longtext").append(",`"); break; } } diff --git a/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java b/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java index 8a33f1c07f..4770e47bec 100644 --- a/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java +++ b/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java @@ -21,6 +21,7 @@ import io.dataease.dataset.dao.auto.entity.CoreDatasetGroup; import io.dataease.dataset.dao.auto.mapper.CoreDatasetGroupMapper; import io.dataease.dataset.manage.*; import io.dataease.datasource.utils.DatasourceUtils; +import io.dataease.engine.constant.DeTypeConstants; import io.dataease.engine.sql.SQLProvider; import io.dataease.engine.trans.Field2SQLObj; import io.dataease.engine.trans.Order2SQLObj; @@ -349,7 +350,7 @@ public class ExportCenterManage implements BaseExportApi { startViewTask(exportTask, request); } - public void addTask(Long exportFrom, String exportFromType, DataSetExportRequest request)throws Exception{ + public void addTask(Long exportFrom, String exportFromType, DataSetExportRequest request) throws Exception { datasetGroupManage.getDatasetGroupInfoDTO(exportFrom, null); CoreExportTask exportTask = new CoreExportTask(); exportTask.setId(UUID.randomUUID().toString()); @@ -571,7 +572,15 @@ public class ExportCenterManage implements BaseExportApi { cell.setCellStyle(cellStyle); detailsSheet.setColumnWidth(j, 255 * 20); } else { - cell.setCellValue(rowData.get(j)); + if ((allFields.get(j).getDeType().equals(DeTypeConstants.DE_INT) || allFields.get(j).getDeType() == DeTypeConstants.DE_FLOAT) && StringUtils.isNotEmpty(rowData.get(j))) { + try { + cell.setCellValue(Double.valueOf(rowData.get(j))); + } catch (Exception e) { + cell.setCellValue(rowData.get(j)); + } + } else { + cell.setCellValue(rowData.get(j)); + } } } } @@ -668,7 +677,6 @@ public class ExportCenterManage implements BaseExportApi { Sheet detailsSheet = wb.createSheet("数据"); ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); } - } else { //多个sheet for (int i = 0; i < request.getMultiInfo().size(); i++) { diff --git a/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue b/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue index f04209fb99..0fa80ad43b 100644 --- a/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue +++ b/core/core-frontend/src/components/dashboard/subject-setting/dashboard-style/OverallSetting.vue @@ -298,7 +298,11 @@ const onRefreshChange = val => { themeChange() } const fontFamilyChange = () => { - appearanceStore.setCurrentFont(canvasStyleData.fontFamily) + appearanceStore.setCurrentFont(canvasStyleData.value.fontFamily) + document.documentElement.style.setProperty( + '--de-canvas_custom_font', + `${canvasStyleData.value.fontFamily}` + ) } const themeChange = (modifyName?) => { diff --git a/core/core-frontend/src/components/data-visualization/CanvasAttr.vue b/core/core-frontend/src/components/data-visualization/CanvasAttr.vue index b313920963..a664d55c08 100644 --- a/core/core-frontend/src/components/data-visualization/CanvasAttr.vue +++ b/core/core-frontend/src/components/data-visualization/CanvasAttr.vue @@ -24,7 +24,8 @@ const canvasAttrActiveNames = ref(['size', 'baseSetting', 'background', 'color'] const screenAdaptorList = [ { label: '宽度优先', value: 'widthFirst' }, { label: '高度优先', value: 'heightFirst' }, - { label: '铺满全屏', value: 'full' } + { label: '铺满全屏', value: 'full' }, + { label: '不缩放', value: 'keep' } ] const init = () => { nextTick(() => { diff --git a/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue b/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue index 063dd6c8d8..4253cef799 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/CanvasCore.vue @@ -172,6 +172,11 @@ const props = defineProps({ type: Boolean, required: false, default: true + }, + fontFamily: { + type: String, + required: false, + default: 'inherit' } }) @@ -1628,6 +1633,7 @@ defineExpose({ :dv-info="dvInfo" :canvas-active="canvasActive" :show-position="'canvas'" + :font-family="fontFamily" /> diff --git a/core/core-frontend/src/components/data-visualization/canvas/ComponentWrapper.vue b/core/core-frontend/src/components/data-visualization/canvas/ComponentWrapper.vue index 4fc82cdac1..aef95bbb7d 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/ComponentWrapper.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/ComponentWrapper.vue @@ -107,6 +107,12 @@ const props = defineProps({ type: String, required: false, default: 'common' + }, + // 字体 + fontFamily: { + type: String, + required: false, + default: 'inherit' } }) const { @@ -424,6 +430,7 @@ const showActive = computed(() => props.popActive || (dvMainStore.mobileInPc && :disabled="true" :is-edit="false" :suffix-id="suffixId" + :font-family="fontFamily" @onPointClick="onPointClick" /> diff --git a/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue b/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue index 67ebec8c8c..77b5318254 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue @@ -141,9 +141,12 @@ const canvasStyle = computed(() => { style['overflowY'] = 'hidden !important' } if (canvasStyleData.value && canvasStyleData.value.width && isMainCanvas(canvasId.value)) { - style = { - ...getCanvasStyle(canvasStyleData.value), - height: dashboardActive.value + style = getCanvasStyle(canvasStyleData.value) + if (canvasStyleData.value?.screenAdaptor === 'keep') { + style['height'] = canvasStyleData.value?.height + 'px' + style['width'] = canvasStyleData.value?.width + 'px' + } else { + style['height'] = dashboardActive.value ? downloadStatus.value ? getDownloadStatusMainHeight() : '100%' @@ -151,11 +154,11 @@ const canvasStyle = computed(() => { canvasStyleData.value?.screenAdaptor === 'widthFirst' ? changeStyleWithScale(canvasStyleData.value?.height, scaleMin.value) + 'px' : '100%' + style['width'] = + !dashboardActive.value && canvasStyleData.value?.screenAdaptor === 'heightFirst' + ? changeStyleWithScale(canvasStyleData.value?.width, scaleHeightPoint.value) + 'px' + : '100%' } - style['width'] = - !dashboardActive.value && canvasStyleData.value?.screenAdaptor === 'heightFirst' - ? changeStyleWithScale(canvasStyleData.value?.width, scaleHeightPoint.value) + 'px' - : '100%' } return style }) diff --git a/core/core-frontend/src/components/visualization/CanvasBaseSetting.vue b/core/core-frontend/src/components/visualization/CanvasBaseSetting.vue index 2cf666b38f..4d0cb6d3fa 100644 --- a/core/core-frontend/src/components/visualization/CanvasBaseSetting.vue +++ b/core/core-frontend/src/components/visualization/CanvasBaseSetting.vue @@ -96,7 +96,11 @@ const fontFamily = CHART_FONT_FAMILY.concat( })) ) const onFontFamilyChange = () => { - appearanceStore.setCurrentFont(canvasStyleData.fontFamily) + appearanceStore.setCurrentFont(canvasStyleData.value.fontFamily) + document.documentElement.style.setProperty( + '--de-canvas_custom_font', + `${canvasStyleData.value.fontFamily}` + ) } const onThemeChange = () => { snapshotStore.recordSnapshotCache() diff --git a/core/core-frontend/src/components/visualization/ViewTrackBar.vue b/core/core-frontend/src/components/visualization/ViewTrackBar.vue index cafa0ace5d..7611ff7350 100644 --- a/core/core-frontend/src/components/visualization/ViewTrackBar.vue +++ b/core/core-frontend/src/components/visualization/ViewTrackBar.vue @@ -3,7 +3,11 @@ + diff --git a/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue b/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue index 4715db89dd..270d53edbd 100644 --- a/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue +++ b/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue @@ -147,8 +147,15 @@ const formatDate = computed(() => { :type="timeInterval" :prefix-icon="Calendar" :format="formatDate" + :popper-class="'custom-dynamic-time-range-filter-popper_class'" :range-separator="$t('cron.to')" :start-placeholder="$t('datasource.start_time')" :end-placeholder="$t('datasource.end_time')" /> + + diff --git a/core/core-frontend/src/custom-component/v-query/Select.vue b/core/core-frontend/src/custom-component/v-query/Select.vue index 920bf6e3e1..2cc0c9b969 100644 --- a/core/core-frontend/src/custom-component/v-query/Select.vue +++ b/core/core-frontend/src/custom-component/v-query/Select.vue @@ -648,6 +648,7 @@ defineExpose({