From 87c5a4401683c58b59eca9c961645aeeb723253c Mon Sep 17 00:00:00 2001 From: junjie Date: Tue, 1 Jun 2021 14:03:06 +0800 Subject: [PATCH 01/12] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):excel?= =?UTF-8?q?=E8=A7=A3=E6=9E=90date=E6=95=B0=E6=8D=AE=EF=BC=8C=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=AD=98=E6=97=A5=E6=9C=9F=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 90 +++++++++++-------- 1 file changed, 54 insertions(+), 36 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 a9c61f76f7..2deb43e5e1 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -26,6 +26,7 @@ import io.dataease.provider.QueryProvider; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -45,6 +46,7 @@ import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.text.MessageFormat; import java.text.NumberFormat; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -273,16 +275,16 @@ public class DataSetTableService { map.put("status", "warnning"); map.put("msg", Translator.get("i18n_processing_data")); dataSetPreviewPage.setTotal(0); - }else if (datasetTable.getSyncStatus().equalsIgnoreCase(JobStatus.Error.name())) { + } else if (datasetTable.getSyncStatus().equalsIgnoreCase(JobStatus.Error.name())) { List datasetTableTaskLogs = dataSetTableTaskLogService.getByTableId(datasetTable.getId()); map.put("status", "error"); - if(CollectionUtils.isNotEmpty(datasetTableTaskLogs)){ + if (CollectionUtils.isNotEmpty(datasetTableTaskLogs)) { map.put("msg", "Failed to extract data: " + datasetTableTaskLogs.get(0).getInfo()); - }else { + } else { map.put("msg", "Failed to extract data."); } dataSetPreviewPage.setTotal(0); - }else { + } else { Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); DatasourceRequest datasourceRequest = new DatasourceRequest(); @@ -336,9 +338,9 @@ public class DataSetTableService { }).collect(Collectors.toList()); } - if(!map.containsKey("status")){ - map.put("status", "success"); - } + if (!map.containsKey("status")) { + map.put("status", "success"); + } map.put("fields", fields); map.put("data", jsonArray); map.put("page", dataSetPreviewPage); @@ -799,29 +801,38 @@ public class DataSetTableService { return map; } - private void inferFieldType(List fields, List data){ - if(CollectionUtils.isEmpty(fields) || CollectionUtils.isEmpty(data)) { + private void inferFieldType(List fields, List data) { + if (CollectionUtils.isEmpty(fields) || CollectionUtils.isEmpty(data)) { return; } String[] firstLine = data.get(0); - for (int i=0; i< fields.size()&& i < firstLine.length; i++) { + for (int i = 0; i < fields.size() && i < firstLine.length; i++) { TableFiled filed = fields.get(i); - try{ + try { Integer.valueOf(firstLine[i]); filed.setFieldType("INT"); continue; - }catch (Exception ignore ){ + } catch (Exception ignore) { } - try{ + try { Long.valueOf(firstLine[i]); filed.setFieldType("LONG"); continue; - }catch (Exception ignore ){} - try{ + } catch (Exception ignore) { + } + try { Double.valueOf(firstLine[i]); filed.setFieldType("DOUBLE"); continue; - }catch (Exception ignore ){} + } catch (Exception ignore) { + } + try { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + simpleDateFormat.parse(firstLine[i]); + filed.setFieldType("TIME"); + continue; + } catch (Exception ignore) { + } } } @@ -830,20 +841,27 @@ public class DataSetTableService { if (cellTypeEnum.equals(CellType.STRING)) { return cell.getStringCellValue(); } else if (cellTypeEnum.equals(CellType.NUMERIC)) { - double d = cell.getNumericCellValue(); - try { - Double value = new Double(d); - double eps = 1e-10; - if(value - Math.floor(value) < eps){ - return value.longValue() + ""; - }else { - NumberFormat nf = NumberFormat.getInstance(); - nf.setGroupingUsed(false); - return nf.format(value); + if (HSSFDateUtil.isCellDateFormatted(cell)) { + Date date = cell.getDateCellValue(); + //格式转换 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sdf.format(date); + } else { + double d = cell.getNumericCellValue(); + try { + Double value = new Double(d); + double eps = 1e-10; + if (value - Math.floor(value) < eps) { + return value.longValue() + ""; + } else { + NumberFormat nf = NumberFormat.getInstance(); + nf.setGroupingUsed(false); + return nf.format(value); + } + } catch (Exception e) { + BigDecimal b = new BigDecimal(d); + return b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() + ""; } - } catch (Exception e) { - BigDecimal b = new BigDecimal(d); - return b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() + ""; } } else if (cellTypeEnum.equals(CellType.BOOLEAN)) { return cell.getBooleanCellValue() ? "1" : "0"; @@ -885,20 +903,20 @@ public class DataSetTableService { private UtilMapper utilMapper; @QuartzScheduled(cron = "0 0/3 * * * ?") - public void updateDatasetTableStatus(){ + public void updateDatasetTableStatus() { List qrtzSchedulerStates = qrtzSchedulerStateMapper.selectByExample(null); List activeQrtzInstances = qrtzSchedulerStates.stream().filter(qrtzSchedulerState -> qrtzSchedulerState.getLastCheckinTime() + qrtzSchedulerState.getCheckinInterval() + 1000 > utilMapper.currentTimestamp()).map(QrtzSchedulerStateKey::getInstanceName).collect(Collectors.toList()); List jobStoppeddDatasetTables = new ArrayList<>(); DatasetTableExample example = new DatasetTableExample(); example.createCriteria().andSyncStatusEqualTo(JobStatus.Underway.name()); - datasetTableMapper.selectByExample(example).forEach(datasetTable -> { - if(StringUtils.isEmpty(datasetTable.getQrtzInstance()) || !activeQrtzInstances.contains(datasetTable.getQrtzInstance().substring(0, datasetTable.getQrtzInstance().length() - 13))){ - jobStoppeddDatasetTables.add(datasetTable); - } - }); + datasetTableMapper.selectByExample(example).forEach(datasetTable -> { + if (StringUtils.isEmpty(datasetTable.getQrtzInstance()) || !activeQrtzInstances.contains(datasetTable.getQrtzInstance().substring(0, datasetTable.getQrtzInstance().length() - 13))) { + jobStoppeddDatasetTables.add(datasetTable); + } + }); - if(CollectionUtils.isEmpty(jobStoppeddDatasetTables)){ + if (CollectionUtils.isEmpty(jobStoppeddDatasetTables)) { return; } From c699ebeed43733271657a7b774829bf6067cf1df Mon Sep 17 00:00:00 2001 From: taojinlong Date: Tue, 1 Jun 2021 14:05:45 +0800 Subject: [PATCH 02/12] =?UTF-8?q?feat:=20=E8=AF=86=E5=88=ABexcel=20data=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 89 +++++++++---------- .../service/dataset/ExtractDataService.java | 8 +- 2 files changed, 47 insertions(+), 50 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 a9c61f76f7..614db4ee08 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -26,6 +26,7 @@ import io.dataease.provider.QueryProvider; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -45,6 +46,7 @@ import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.text.MessageFormat; import java.text.NumberFormat; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -583,7 +585,7 @@ public class DataSetTableService { switch (field) { case "TEXT": return 0; - case "TIME": + case "DATETIME": return 1; case "LONG": case "INT": @@ -701,16 +703,17 @@ public class DataSetTableService { TableFiled tableFiled = new TableFiled(); tableFiled.setFieldType("TEXT"); tableFiled.setFieldSize(1024); - String columnName = readCell(row.getCell(j)); + String columnName = readCell(row.getCell(j), false, null); if (StringUtils.isEmpty(columnName)) { columnName = "NONE_" + String.valueOf(j); } tableFiled.setFieldName(columnName); tableFiled.setRemarks(columnName); - fields.add(tableFiled); - } else { - r[j] = readCell(row.getCell(j)); + } else if (i == 1){ + r[j] = readCell(row.getCell(j), true, fields.get(j)); + }else { + r[j] = readCell(row.getCell(j), false, null); } } if (i > 0) { @@ -740,15 +743,17 @@ public class DataSetTableService { TableFiled tableFiled = new TableFiled(); tableFiled.setFieldType("TEXT"); tableFiled.setFieldSize(1024); - String columnName = readCell(row.getCell(j)); + String columnName = readCell(row.getCell(j),false, null); if (StringUtils.isEmpty(columnName)) { columnName = "NONE_" + String.valueOf(j); } tableFiled.setFieldName(columnName); tableFiled.setRemarks(columnName); fields.add(tableFiled); - } else { - r[j] = readCell(row.getCell(j)); + } else if (i == 1){ + r[j] = readCell(row.getCell(j), true, fields.get(j)); + }else { + r[j] = readCell(row.getCell(j), false, null); } } if (i > 0) { @@ -792,58 +797,44 @@ public class DataSetTableService { inputStream.close(); Map map = new HashMap<>(); - inferFieldType(fields, data); map.put("fields", fields); map.put("data", jsonArray); map.put("sheets", sheets); return map; } - private void inferFieldType(List fields, List data){ - if(CollectionUtils.isEmpty(fields) || CollectionUtils.isEmpty(data)) { - return; - } - String[] firstLine = data.get(0); - for (int i=0; i< fields.size()&& i < firstLine.length; i++) { - TableFiled filed = fields.get(i); - try{ - Integer.valueOf(firstLine[i]); - filed.setFieldType("INT"); - continue; - }catch (Exception ignore ){ - } - try{ - Long.valueOf(firstLine[i]); - filed.setFieldType("LONG"); - continue; - }catch (Exception ignore ){} - try{ - Double.valueOf(firstLine[i]); - filed.setFieldType("DOUBLE"); - continue; - }catch (Exception ignore ){} - } - } - - private String readCell(Cell cell) { + private String readCell(Cell cell, boolean cellType, TableFiled tableFiled) { CellType cellTypeEnum = cell.getCellTypeEnum(); if (cellTypeEnum.equals(CellType.STRING)) { + if(cellType){ tableFiled.setFieldType("TEXT"); } return cell.getStringCellValue(); } else if (cellTypeEnum.equals(CellType.NUMERIC)) { - double d = cell.getNumericCellValue(); - try { - Double value = new Double(d); - double eps = 1e-10; - if(value - Math.floor(value) < eps){ - return value.longValue() + ""; - }else { - NumberFormat nf = NumberFormat.getInstance(); - nf.setGroupingUsed(false); - return nf.format(value); + if(HSSFDateUtil.isCellDateFormatted(cell)){ + if(cellType) { tableFiled.setFieldType("DATETIME"); } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + return sdf.format(cell.getDateCellValue()); + }catch (Exception e){ + return ""; + } + }else { + double d = cell.getNumericCellValue(); + try { + Double value = new Double(d); + double eps = 1e-10; + if(value - Math.floor(value) < eps){ + if(cellType) { tableFiled.setFieldType("LONG"); } + return value.longValue() + ""; + }else { + if(cellType){ tableFiled.setFieldType("DOUBLE");} + NumberFormat nf = NumberFormat.getInstance(); + nf.setGroupingUsed(false); + return nf.format(value); + } + } catch (Exception e) { + BigDecimal b = new BigDecimal(d); + return b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() + ""; } - } catch (Exception e) { - BigDecimal b = new BigDecimal(d); - return b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() + ""; } } else if (cellTypeEnum.equals(CellType.BOOLEAN)) { return cell.getBooleanCellValue() ? "1" : "0"; 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 aac392e3a5..b28d14cc2c 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -155,6 +155,7 @@ public class ExtractDataService { break; } } + Column_Fields = Column_Fields.substring(0, Column_Fields.length() - 2); Column_Fields = "(" + Column_Fields + ")\n"; return Column_Fields; @@ -637,7 +638,12 @@ public class ExtractDataService { for (int i = 0; i < datasetTableFields.size(); i++) { ExcelInputField field = new ExcelInputField(); field.setName(datasetTableFields.get(i).getOriginName()); - field.setType("String"); + if(datasetTableFields.get(i).getDeExtractType() == 1){ + field.setType("Date"); + field.setFormat("yyyy-MM-dd HH:mm:ss"); + }else { + field.setType("String"); + } fields[i] = field; } From 64cac2a9b35d98c4295e6b015261ab9e9e3adfc5 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 1 Jun 2021 15:20:26 +0800 Subject: [PATCH 03/12] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8lic=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E8=BF=87=E6=BB=A4xpack=E6=8F=92=E4=BB=B6=E8=8F=9C?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LicenseController.java | 6 ++-- .../io/dataease/plugins/loader/MyScanner.java | 10 ++---- .../io/dataease/plugins/util/PluginUtils.java | 32 ++++++++++++++++++- frontend/src/layout/components/Licbar.vue | 7 ++-- frontend/src/permission.js | 6 +--- frontend/src/store/modules/lic.js | 15 +++++++-- 6 files changed, 55 insertions(+), 21 deletions(-) diff --git a/backend/src/main/java/io/dataease/controller/LicenseController.java b/backend/src/main/java/io/dataease/controller/LicenseController.java index 4071f6b811..160dc80d1b 100644 --- a/backend/src/main/java/io/dataease/controller/LicenseController.java +++ b/backend/src/main/java/io/dataease/controller/LicenseController.java @@ -23,9 +23,9 @@ public class LicenseController { @GetMapping(value = "anonymous/license/validate") public ResultHolder validateLicense() throws Exception { -// if (!need_validate_lic) { -// return ResultHolder.success(null); -// } + if (!need_validate_lic) { + return ResultHolder.success(null); + } F2CLicenseResponse f2CLicenseResponse = defaultLicenseService.validateLicense(); System.out.println(new Gson().toJson(f2CLicenseResponse)); switch (f2CLicenseResponse.getStatus()) { diff --git a/backend/src/main/java/io/dataease/plugins/loader/MyScanner.java b/backend/src/main/java/io/dataease/plugins/loader/MyScanner.java index 8fbeada3fb..fa099f7f27 100644 --- a/backend/src/main/java/io/dataease/plugins/loader/MyScanner.java +++ b/backend/src/main/java/io/dataease/plugins/loader/MyScanner.java @@ -8,20 +8,16 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.stereotype.Component; -import javax.annotation.Resource; - @Component public class MyScanner implements BeanDefinitionRegistryPostProcessor { - @Resource - private MapperScannerConfigurer mapperScannerConfigurer; + private BeanDefinitionRegistry beanDefinitionRegistry; @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException { this.beanDefinitionRegistry = beanDefinitionRegistry; - System.out.println("-----"); } @Override @@ -30,9 +26,7 @@ public class MyScanner implements BeanDefinitionRegistryPostProcessor { } public void scanner() { - if (null == mapperScannerConfigurer){ - mapperScannerConfigurer = SpringContextUtil.getBean(MapperScannerConfigurer.class); - } + MapperScannerConfigurer mapperScannerConfigurer = SpringContextUtil.getBean(MapperScannerConfigurer.class); mapperScannerConfigurer.postProcessBeanDefinitionRegistry(this.beanDefinitionRegistry); } diff --git a/backend/src/main/java/io/dataease/plugins/util/PluginUtils.java b/backend/src/main/java/io/dataease/plugins/util/PluginUtils.java index b8bcb043a7..52c422b870 100644 --- a/backend/src/main/java/io/dataease/plugins/util/PluginUtils.java +++ b/backend/src/main/java/io/dataease/plugins/util/PluginUtils.java @@ -1,21 +1,51 @@ package io.dataease.plugins.util; +import io.dataease.commons.license.DefaultLicenseService; +import io.dataease.commons.license.F2CLicenseResponse; import io.dataease.plugins.common.dto.PluginSysMenu; import io.dataease.plugins.common.service.PluginMenuService; import io.dataease.plugins.config.SpringContextUtil; - +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +@Component public class PluginUtils { + + + private static DefaultLicenseService defaultLicenseService; + + @Autowired + public void setDefaultLicenseService(DefaultLicenseService defaultLicenseService) { + PluginUtils.defaultLicenseService = defaultLicenseService; + } + public static List pluginMenus() { + F2CLicenseResponse f2CLicenseResponse = currentLic(); + if (f2CLicenseResponse.getStatus() != F2CLicenseResponse.Status.valid) + return new ArrayList<>(); Map pluginMenuServiceMap = SpringContextUtil.getApplicationContext().getBeansOfType(PluginMenuService.class); List menus = pluginMenuServiceMap.values().stream().flatMap(item -> item.menus().stream()).collect(Collectors.toList()); return menus; } + public static F2CLicenseResponse currentLic() { + Environment environment = SpringContextUtil.getBean(Environment.class); + Boolean need_validate_lic = environment.getProperty("dataease.need_validate_lic", Boolean.class, true); + if (!need_validate_lic) { + F2CLicenseResponse f2CLicenseResponse = new F2CLicenseResponse(); + f2CLicenseResponse.setStatus(F2CLicenseResponse.Status.valid); + return f2CLicenseResponse; + } + F2CLicenseResponse f2CLicenseResponse = defaultLicenseService.validateLicense(); + return f2CLicenseResponse; + } + diff --git a/frontend/src/layout/components/Licbar.vue b/frontend/src/layout/components/Licbar.vue index e18e473f6a..96ffb1873c 100644 --- a/frontend/src/layout/components/Licbar.vue +++ b/frontend/src/layout/components/Licbar.vue @@ -1,5 +1,5 @@ @@ -20,9 +20,12 @@ export default { theme() { return this.$store.state.settings.theme }, - licstatus() { + licValidate() { return this.$store.state.lic.validate }, + licStatus() { + return this.$store.state.lic.licStatus || '' + }, licMsg() { return this.$store.state.lic.licMsg ? ('license.' + this.$store.state.lic.licMsg) : null } diff --git a/frontend/src/permission.js b/frontend/src/permission.js index 309e89e800..2fae911066 100644 --- a/frontend/src/permission.js +++ b/frontend/src/permission.js @@ -152,12 +152,8 @@ const hasPermission = (router, user_permissions) => { } return true } -const xpackMenuNames = ['system-param', 'system-plugin'] const filterLic = (router) => { - if (xpackMenuNames.some(name => name === router.name) && !store.getters.validate) { - return false - } - return true + return !router.isPlugin || store.getters.validate } router.afterEach(() => { // finish progress bar diff --git a/frontend/src/store/modules/lic.js b/frontend/src/store/modules/lic.js index e3380eb4ba..96aaa420d0 100644 --- a/frontend/src/store/modules/lic.js +++ b/frontend/src/store/modules/lic.js @@ -1,6 +1,7 @@ import { validateLic } from '@/api/system/lic' const state = { validate: true, + licStatus: null, licMsg: null } @@ -10,6 +11,9 @@ const mutations = { }, SET_LIC_MSG: (state, msg) => { state.licMsg = msg + }, + SET_LIC_STATUS: (state, data) => { + state.licStatus = data } } @@ -22,8 +26,15 @@ const actions = { return new Promise((resolve, reject) => { validateLic().then(response => { const { data } = response - commit('SET_VALIDATE', true) - commit('SET_LIC_MSG', null) + if (data && data.status && data.status === 'no_record') { + commit('SET_VALIDATE', false) + commit('SET_LIC_MSG', data.message) + commit('SET_LIC_STATUS', data.status) + } else { + commit('SET_VALIDATE', true) + commit('SET_LIC_MSG', null) + } + resolve(data) }).catch(error => { commit('SET_VALIDATE', false) From 4cbe01ca16aad086eb998d4edb9511be93a35488 Mon Sep 17 00:00:00 2001 From: junjie Date: Tue, 1 Jun 2021 15:44:33 +0800 Subject: [PATCH 04/12] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=E4=B8=BA?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E7=BB=B4=E5=BA=A6=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=98=BE=E7=A4=BA=E4=B8=8E=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/dto/chart/ChartViewFieldDTO.java | 4 ++ .../provider/doris/DorisQueryProvider.java | 32 ++++++++- .../provider/mysql/MysqlQueryProvider.java | 32 ++++++++- frontend/src/lang/en.js | 12 +++- frontend/src/lang/tw.js | 12 +++- frontend/src/lang/zh.js | 12 +++- .../components/drag-item/DimensionItem.vue | 70 +++++++++++++++++++ frontend/src/views/chart/view/ChartEdit.vue | 6 ++ 8 files changed, 175 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java index 6725720bdb..b21b9adc8c 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java @@ -38,4 +38,8 @@ public class ChartViewFieldDTO implements Serializable { private List filter; private Integer deExtractType; + + private String dateStyle; + + private String datePattern; } 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 d840005eb0..00791c6618 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -132,12 +132,16 @@ public class DorisQueryProvider extends QueryProvider { if (x.getDeExtractType() == 1) { if (x.getDeType() == 2 || x.getDeType() == 3) { stringBuilder.append("unix_timestamp(").append(x.getDataeaseName()).append(")*1000 as ").append(x.getDataeaseName()); + } else if (x.getDeType() == 1) { + String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); + stringBuilder.append("DATE_FORMAT(").append(x.getDataeaseName()).append(",'").append(format).append("')"); } else { stringBuilder.append(x.getDataeaseName()); } } else { if (x.getDeType() == 1) { - stringBuilder.append("FROM_UNIXTIME(cast(").append(x.getDataeaseName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') as ").append(x.getDataeaseName()); + String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); + stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(cast(").append(x.getDataeaseName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') as ").append(x.getDataeaseName()); } else { stringBuilder.append(x.getDataeaseName()); } @@ -330,4 +334,30 @@ public class DorisQueryProvider extends QueryProvider { } return filter.toString(); } + + private String transDateFormat(String dateStyle, String datePattern) { + String split = "-"; + if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) { + split = "-"; + } else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) { + split = "/"; + } + + switch (dateStyle) { + case "y": + return "%Y"; + case "y_M": + return "%Y" + split + "%m"; + case "y_M_d": + return "%Y" + split + "%m" + split + "%d"; + case "H_m_s": + return "%H:%i:%S"; + case "y_M_d_H_m": + return "%Y" + split + "%m" + split + "%d" + " %H:%i"; + case "y_M_d_H_m_s": + return "%Y" + split + "%m" + split + "%d" + " %H:%i:%S"; + default: + return "%Y-%m-%d %H:%i:%S"; + } + } } diff --git a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java index 9f1a8244ce..962bc07abf 100644 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java @@ -138,12 +138,16 @@ public class MysqlQueryProvider extends QueryProvider { if (x.getDeExtractType() == 1) { if (x.getDeType() == 2 || x.getDeType() == 3) { stringBuilder.append("unix_timestamp(").append(x.getDataeaseName()).append(")*1000 as ").append(x.getDataeaseName()); + } else if (x.getDeType() == 1) { + String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); + stringBuilder.append("DATE_FORMAT(").append(x.getDataeaseName()).append(",'").append(format).append("')"); } else { stringBuilder.append(x.getDataeaseName()); } } else { if (x.getDeType() == 1) { - stringBuilder.append("FROM_UNIXTIME(cast(").append(x.getDataeaseName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') as ").append(x.getDataeaseName()); + String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); + stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(cast(").append(x.getDataeaseName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') as ").append(x.getDataeaseName()); } else { stringBuilder.append(x.getDataeaseName()); } @@ -344,4 +348,30 @@ public class MysqlQueryProvider extends QueryProvider { } return sql; } + + private String transDateFormat(String dateStyle, String datePattern) { + String split = "-"; + if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) { + split = "-"; + } else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) { + split = "/"; + } + + switch (dateStyle) { + case "y": + return "%Y"; + case "y_M": + return "%Y" + split + "%m"; + case "y_M_d": + return "%Y" + split + "%m" + split + "%d"; + case "H_m_s": + return "%H:%i:%S"; + case "y_M_d_H_m": + return "%Y" + split + "%m" + split + "%d" + " %H:%i"; + case "y_M_d_H_m_s": + return "%Y" + split + "%m" + split + "%d" + " %H:%i:%S"; + default: + return "%Y-%m-%d %H:%i:%S"; + } + } } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 3aab9b858e..cab9e7f4d3 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -692,7 +692,17 @@ export default { chart_pie_rose: 'Rose Pie', chart_funnel: 'Funnel', chart_radar: 'Radar', - chart_gauge: 'Gauge' + chart_gauge: 'Gauge', + dateStyle: '日期顯示', + datePattern: '日期格式', + y: 'Year', + y_M: 'Year Month', + y_M_d: 'Year Month Day', + H_m_s: 'Hour Minute Second', + y_M_d_H_m: 'Year Month Day Hour Minute', + y_M_d_H_m_s: 'Year Month Day Hour Minute Second', + date_sub: 'yyyy-MM-dd', + date_split: 'yyyy/MM/dd' }, dataset: { sheet_warn: 'There are multiple sheet pages, and the first one is extracted by default', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 38de7d1eeb..1c404707c1 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -692,7 +692,17 @@ export default { chart_pie_rose: '南丁格爾玫瑰圖', chart_funnel: '漏鬥圖', chart_radar: '雷達圖', - chart_gauge: '儀表盤' + chart_gauge: '儀表盤', + dateStyle: '日期顯示', + datePattern: '日期格式', + y: '年', + y_M: '年月', + y_M_d: '年月日', + H_m_s: '時分秒', + y_M_d_H_m: '年月日時分', + y_M_d_H_m_s: '年月日時分秒', + date_sub: 'yyyy-MM-dd', + date_split: 'yyyy/MM/dd' }, dataset: { sheet_warn: '有多個sheet頁面,默認抽取第一個', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index f62c8a8e35..c30a864b76 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -692,7 +692,17 @@ export default { chart_pie_rose: '南丁格尔玫瑰图', chart_funnel: '漏斗图', chart_radar: '雷达图', - chart_gauge: '仪表盘' + chart_gauge: '仪表盘', + dateStyle: '日期显示', + datePattern: '日期格式', + y: '年', + y_M: '年月', + y_M_d: '年月日', + H_m_s: '时分秒', + y_M_d_H_m: '年月日时分', + y_M_d_H_m_s: '年月日时分秒', + date_sub: 'yyyy-MM-dd', + date_split: 'yyyy/MM/dd' }, dataset: { sheet_warn: '有多个Sheet页,默认抽取第一个', diff --git a/frontend/src/views/chart/components/drag-item/DimensionItem.vue b/frontend/src/views/chart/components/drag-item/DimensionItem.vue index 1c07723b81..6e9d770323 100644 --- a/frontend/src/views/chart/components/drag-item/DimensionItem.vue +++ b/frontend/src/views/chart/components/drag-item/DimensionItem.vue @@ -26,6 +26,44 @@ {{ $t('chart.filter') }}... + + + + + + + {{ $t('chart.dateStyle') }} + ({{ $t('chart.'+item.dateStyle) }}) + + + + + {{ $t('chart.y') }} + {{ $t('chart.y_M') }} + {{ $t('chart.y_M_d') }} + {{ $t('chart.H_m_s') }} + {{ $t('chart.y_M_d_H_m') }} + {{ $t('chart.y_M_d_H_m_s') }} + + + + + + + + + {{ $t('chart.datePattern') }} + ({{ $t('chart.'+item.datePattern) }}) + + + + + {{ $t('chart.date_sub') }}(1990-01-01) + {{ $t('chart.date_split') }}(1990/01/01) + + + + {{ $t('chart.show_name_set') }} @@ -91,6 +129,26 @@ export default { type: type } }, + dateStyle(param) { + // console.log(param) + this.item.dateStyle = param.type + this.$emit('onDimensionItemChange', this.item) + }, + beforeDateStyle(type) { + return { + type: type + } + }, + datePattern(param) { + // console.log(param) + this.item.datePattern = param.type + this.$emit('onDimensionItemChange', this.item) + }, + beforeDatePattern(type) { + return { + type: type + } + }, editFilter() { this.item.index = this.index this.$emit('editItemFilter', this.item) @@ -129,4 +187,16 @@ export default { span { font-size: 12px; } + + .summary-span{ + margin-left: 4px; + color: #878d9f;; + } + + .inner-dropdown-menu{ + display: flex; + justify-content: space-between; + align-items: center; + width: 100% + } diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 200c90dae6..6b49d78479 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -469,6 +469,12 @@ export default { // if (!ele.summary || ele.summary === '') { // ele.summary = 'sum' // } + if (!ele.dateStyle || ele.dateStyle === '') { + ele.dateStyle = 'y_M_d' + } + if (!ele.datePattern || ele.datePattern === '') { + ele.datePattern = 'date_sub' + } if (!ele.sort || ele.sort === '') { ele.sort = 'none' } From 196c003445384dad8a54b44ded65269aa00a143a Mon Sep 17 00:00:00 2001 From: junjie Date: Tue, 1 Jun 2021 15:58:03 +0800 Subject: [PATCH 05/12] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=A7=86=E5=9B=BE=E5=A2=9E=E5=8A=A0loading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/dataset/common/DatasetGroupSelector.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/dataset/common/DatasetGroupSelector.vue b/frontend/src/views/dataset/common/DatasetGroupSelector.vue index 6027df0e8c..2f3e06d6bc 100644 --- a/frontend/src/views/dataset/common/DatasetGroupSelector.vue +++ b/frontend/src/views/dataset/common/DatasetGroupSelector.vue @@ -1,7 +1,7 @@