From 838f84e4a5e27134452d6fc53b875f909ad87096 Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Tue, 23 Apr 2024 14:10:27 +0800 Subject: [PATCH 01/90] =?UTF-8?q?style(=E5=90=8C=E6=AD=A5=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86):=20=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E9=80=89=E6=8B=A9=E5=99=A8=E6=A0=B7=E5=BC=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index 2ce5674f7b..88c0a43e1a 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit 2ce5674f7b01532b42b5a3b95fb31ea520a765bd +Subproject commit 88c0a43e1ab83f7d19b2d8b5ac5b7a97a0ee0c2f From 741c326424753333919a532bc9c4a2fce6463ca6 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Tue, 23 Apr 2024 14:13:36 +0800 Subject: [PATCH 02/90] =?UTF-8?q?fix(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=BF=E7=94=A8=E6=89=B9=E9=87=8F=E6=8B=96?= =?UTF-8?q?=E6=8B=BD=E5=AD=97=E6=AE=B5=EF=BC=8C=E9=87=8D=E5=A4=8D=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=8C=87=E6=A0=87=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=9B=BE?= =?UTF-8?q?=E8=A1=A8=E6=8C=87=E6=A0=87=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-frontend/src/views/chart/components/editor/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/core-frontend/src/views/chart/components/editor/index.vue b/core/core-frontend/src/views/chart/components/editor/index.vue index 71e7158945..9434c527fb 100644 --- a/core/core-frontend/src/views/chart/components/editor/index.vue +++ b/core/core-frontend/src/views/chart/components/editor/index.vue @@ -1394,7 +1394,7 @@ const drop = (ev: MouseEvent, type = 'xAxis') => { const obj = cloneDeep(arr[i]) state.moveId = obj.id as unknown as number view.value[type].push(obj) - const e = { newDraggableIndex: view.value.xAxis.length - 1 } + const e = { newDraggableIndex: view.value[type].length - 1 } if ('drillFields' === type) { addDrill(e) } else if (type === 'customFilter') { From e677900e8a53f37850967baa2efd5b85253fb932 Mon Sep 17 00:00:00 2001 From: xuwei-fit2cloud Date: Tue, 23 Apr 2024 14:17:10 +0800 Subject: [PATCH 03/90] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=20dectl=20?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E8=84=9A=E6=9C=AC=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E5=89=8D=E5=81=9C=E6=AD=A2=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- installer/dectl | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/installer/dectl b/installer/dectl index 35944b2d7e..845962117a 100644 --- a/installer/dectl +++ b/installer/dectl @@ -320,6 +320,34 @@ function clear_images() { fi } function backup() { + need_stop=0 + if [[ -z $1 ]];then + echo "如需备份 DataEase 数据,建议您先停止 DataEase 服务,以保证备份数据的完整性。" + read -r -p "即将备份 DataEase 数据,是否需要停止 DataEase 服务? [Y/n] " input + + case $input in + [yY][eE][sS]|[yY]) + echo "Yes" + need_stop=1 + ;; + [nN][oO]|[nN]) + echo "No" + ;; + *) + echo "无效输入..." + exit 1 + ;; + esac + elif [[ "$1" == "stop" ]];then + need_stop=1 + fi + + if [[ $need_stop == 1 ]];then + service dataease stop + else + echo "不停服进行备份" + fi + backup_file_name=dataease-backup-$(date +%Y%m%d)_$(date +%H%M%S).tar.gz tar --exclude=logs/dataease -zcf $backup_file_name -C $DE_RUNNING_BASE . if [ $? -ne 0 ]; then @@ -328,6 +356,10 @@ function backup() { else echo "备份成功,备份文件 : $backup_file_name" fi + + if [[ $need_stop == 1 ]];then + service dataease start + fi } function restore() { if [[ -z $target ]];then @@ -367,7 +399,7 @@ function main() { upgrade ;; backup) - backup + backup $target ;; restore) restore $target From 2a939671f94106631b491aed42a93d63a0f20684 Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Tue, 23 Apr 2024 14:42:11 +0800 Subject: [PATCH 04/90] =?UTF-8?q?refactor(=E5=9B=BE=E8=A1=A8):=20=E5=87=8F?= =?UTF-8?q?=E5=B0=8F=E5=9B=BE=E4=BE=8B=E4=B8=8B=E6=96=B9=E7=9A=84=E7=95=99?= =?UTF-8?q?=E7=99=BD=EF=BC=8C=E9=AB=98=E5=BA=A6=E5=92=8C=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/components/js/panel/common/common_antv.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/panel/common/common_antv.ts b/core/core-frontend/src/views/chart/components/js/panel/common/common_antv.ts index 757817baa7..667875a2a3 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/common/common_antv.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/common/common_antv.ts @@ -273,9 +273,7 @@ export function getLegend(chart: Chart) { offsetY = 0 } else if (l.vPosition === 'bottom') { if (chart.drill) { - offsetY = -16 - } else { - offsetY = -4 + offsetY = -12 } } else { offsetY = 0 @@ -292,9 +290,9 @@ export function getLegend(chart: Chart) { offsetY = 0 } else if (l.vPosition === 'bottom') { if (chart.drill) { - offsetY = -22 + offsetY = -18 } else { - offsetY = -10 + offsetY = -6 } } else { offsetY = 0 @@ -309,6 +307,7 @@ export function getLegend(chart: Chart) { marker: { symbol: legendSymbol }, + itemHeight: l.fontSize + 4, radio: false, pageNavigator: { marker: { From 629eeac898773c0667e772a3de5b2199925bf237 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 23 Apr 2024 15:30:03 +0800 Subject: [PATCH 05/90] =?UTF-8?q?feat(X-Pack):=20=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/commons/utils/CronUtils.java | 62 ++----- .../manage/DatasourceSyncManage.java | 6 +- .../datasource/server/DatasourceServer.java | 4 +- .../CheckDsStatusJob.java | 6 +- .../DeScheduleJob.java | 2 +- .../dataease/job/schedule/DeTaskExecutor.java | 45 +++++ .../job/schedule/DeXpackScheduleJob.java | 24 +++ .../ExtractDataJob.java | 5 +- .../{sechedule => schedule}/Schedular.java | 3 +- .../ScheduleManager.java | 23 ++- .../task/dao/auto/entity/CoreSysTask.java | 167 ------------------ .../dao/auto/mapper/CoreSysTaskMapper.java | 16 -- .../main/resources/i18n/core_zh_CN.properties | 1 + core/core-frontend/src/assets/svg/report.svg | 7 + core/core-frontend/src/locales/zh-CN.ts | 37 ++++ de-xpack | 2 +- .../dataease/docker-compose-selenium.yml | 13 ++ pom.xml | 8 + .../io/dataease/api/report/ReportApi.java | 73 ++++++++ .../api/report/dto/ReportCreator.java | 54 ++++++ .../dataease/api/report/dto/ReportEditor.java | 19 ++ .../api/report/dto/ReportGridRequest.java | 25 +++ .../report/dto/ReportInstanceDelRequest.java | 16 ++ .../report/dto/ReportInstanceMsgRequest.java | 16 ++ .../api/report/dto/ReportInstanceRequest.java | 21 +++ .../dataease/api/report/vo/ReportGridVO.java | 31 ++++ .../api/report/vo/ReportInstanceVO.java | 20 +++ .../api/permissions/user/api/UserApi.java | 4 + 28 files changed, 450 insertions(+), 260 deletions(-) rename core/core-backend/src/main/java/io/dataease/job/{sechedule => schedule}/CheckDsStatusJob.java (83%) rename core/core-backend/src/main/java/io/dataease/job/{sechedule => schedule}/DeScheduleJob.java (96%) create mode 100644 core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java create mode 100644 core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java rename core/core-backend/src/main/java/io/dataease/job/{sechedule => schedule}/ExtractDataJob.java (79%) rename core/core-backend/src/main/java/io/dataease/job/{sechedule => schedule}/Schedular.java (92%) rename core/core-backend/src/main/java/io/dataease/job/{sechedule => schedule}/ScheduleManager.java (94%) delete mode 100644 core/core-backend/src/main/java/io/dataease/task/dao/auto/entity/CoreSysTask.java delete mode 100644 core/core-backend/src/main/java/io/dataease/task/dao/auto/mapper/CoreSysTaskMapper.java create mode 100644 core/core-frontend/src/assets/svg/report.svg create mode 100644 installer/dataease/docker-compose-selenium.yml create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/ReportApi.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportCreator.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportEditor.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportGridRequest.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceDelRequest.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceMsgRequest.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceRequest.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportInstanceVO.java diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java index f23cff758b..f396f5df1d 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java @@ -1,6 +1,6 @@ package io.dataease.commons.utils; -import io.dataease.task.dao.auto.entity.CoreSysTask; +import io.dataease.utils.LogUtil; import org.apache.commons.lang3.ObjectUtils; import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; @@ -12,19 +12,9 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -/** - * @author song.tianyang - * @Date 2020/12/17 4:06 下午 - * @Description CRON解析类 - */ public class CronUtils { - /** - * 解析表达式,获取CronTrigger - * - * @param cron - * @return - */ + public static CronTrigger getCronTrigger(String cron) { if (!CronExpression.isValidExpression(cron)) { throw new RuntimeException("cron :" + cron + "表达式解析错误"); @@ -32,28 +22,6 @@ public class CronUtils { return TriggerBuilder.newTrigger().withIdentity("Calculate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build(); } - /** - * 获取以指定时间为开始时间的下一次执行时间 - * - * @param cron - * @param start - * @return - */ - public static Date getNextTriggerTime(String cron, Date start) { - if (start == null) { - return getNextTriggerTime(cron); - } else { - CronTrigger trigger = getCronTrigger(cron); - return trigger.getFireTimeAfter(start); - } - } - - /** - * 获取以当前日期为准的下一次执行时间 - * - * @param cron - * @return - */ public static Date getNextTriggerTime(String cron) { Date date = null; try { @@ -61,38 +29,39 @@ public class CronUtils { Date startDate = trigger.getStartTime(); date = trigger.getFireTimeAfter(startDate); } catch (Exception e) { - + LogUtil.error(e.getMessage(), e); } return date; } - public static String cron(CoreSysTask taskEntity) { - if (taskEntity.getRateType() == -1) { - return taskEntity.getRateVal(); + public static String cron(Integer rateType, String rateVal) { + if (rateType == 0) { + return rateVal; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { - date = sdf.parse(taskEntity.getRateVal()); + date = sdf.parse(rateVal); } catch (ParseException e) { e.printStackTrace(); } Calendar instance = Calendar.getInstance(); + assert date != null; instance.setTime(date); - if (taskEntity.getRateType() == 0) { + if (rateType == 1) { return instance.get(Calendar.SECOND) + " " + instance.get(Calendar.MINUTE) + " " + instance.get(Calendar.HOUR_OF_DAY) + " * * ?"; } - if (taskEntity.getRateType() == 1) { + if (rateType == 2) { return instance.get(Calendar.SECOND) + " " + instance.get(Calendar.MINUTE) + " " + instance.get(Calendar.HOUR_OF_DAY) + " ? * " + getDayOfWeek(instance); } - if (taskEntity.getRateType() == 2) { + if (rateType == 3) { return instance.get(Calendar.SECOND) + " " + instance.get(Calendar.MINUTE) + " " + instance.get(Calendar.HOUR_OF_DAY) + " " + @@ -102,13 +71,6 @@ public class CronUtils { return null; } - public static String cron() { - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.SECOND, 5); - return instance.get(Calendar.SECOND) + " " + - instance.get(Calendar.MINUTE) + " " + - instance.get(Calendar.HOUR_OF_DAY) + " * * ?"; - } private static String getDayOfWeek(Calendar instance) { int index = instance.get(Calendar.DAY_OF_WEEK); @@ -120,7 +82,7 @@ public class CronUtils { public static Boolean taskExpire(Long endTime) { if (ObjectUtils.isEmpty(endTime)) return false; - Long now = System.currentTimeMillis(); + long now = System.currentTimeMillis(); return now > endTime; } 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 13f8192082..d2a98d3cf3 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 @@ -18,11 +18,9 @@ import io.dataease.datasource.request.DatasourceRequest; import io.dataease.datasource.request.EngineRequest; import io.dataease.datasource.server.DatasourceServer; import io.dataease.datasource.server.DatasourceTaskServer; -import io.dataease.datasource.server.EngineServer; import io.dataease.exception.DEException; -import io.dataease.job.sechedule.ExtractDataJob; -import io.dataease.job.sechedule.ScheduleManager; -import io.dataease.utils.JsonUtil; +import io.dataease.job.schedule.ExtractDataJob; +import io.dataease.job.schedule.ScheduleManager; import io.dataease.utils.LogUtil; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index c393560ee9..05923ea7d3 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -35,8 +35,8 @@ import io.dataease.datasource.request.DatasourceRequest; import io.dataease.engine.constant.SQLConstants; import io.dataease.exception.DEException; import io.dataease.i18n.Translator; -import io.dataease.job.sechedule.CheckDsStatusJob; -import io.dataease.job.sechedule.ScheduleManager; +import io.dataease.job.schedule.CheckDsStatusJob; +import io.dataease.job.schedule.ScheduleManager; import io.dataease.license.config.XpackInteract; import io.dataease.log.DeLog; import io.dataease.model.BusiNodeRequest; diff --git a/core/core-backend/src/main/java/io/dataease/job/sechedule/CheckDsStatusJob.java b/core/core-backend/src/main/java/io/dataease/job/schedule/CheckDsStatusJob.java similarity index 83% rename from core/core-backend/src/main/java/io/dataease/job/sechedule/CheckDsStatusJob.java rename to core/core-backend/src/main/java/io/dataease/job/schedule/CheckDsStatusJob.java index 71c63b3b70..54cbd97a2e 100644 --- a/core/core-backend/src/main/java/io/dataease/job/sechedule/CheckDsStatusJob.java +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/CheckDsStatusJob.java @@ -1,11 +1,13 @@ -package io.dataease.job.sechedule; +package io.dataease.job.schedule; import io.dataease.datasource.server.DatasourceServer; import io.dataease.utils.CommonBeanFactory; import io.dataease.utils.LogUtil; import jakarta.annotation.Resource; -import org.quartz.*; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; import org.springframework.stereotype.Component; @Component diff --git a/core/core-backend/src/main/java/io/dataease/job/sechedule/DeScheduleJob.java b/core/core-backend/src/main/java/io/dataease/job/schedule/DeScheduleJob.java similarity index 96% rename from core/core-backend/src/main/java/io/dataease/job/sechedule/DeScheduleJob.java rename to core/core-backend/src/main/java/io/dataease/job/schedule/DeScheduleJob.java index a6336d567a..029036ecc0 100644 --- a/core/core-backend/src/main/java/io/dataease/job/sechedule/DeScheduleJob.java +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/DeScheduleJob.java @@ -1,4 +1,4 @@ -package io.dataease.job.sechedule; +package io.dataease.job.schedule; import io.dataease.utils.LogUtil; import org.quartz.*; diff --git a/core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java b/core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java new file mode 100644 index 0000000000..ffa7d2b056 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java @@ -0,0 +1,45 @@ +package io.dataease.job.schedule; + +import io.dataease.commons.utils.CronUtils; +import io.dataease.license.config.XpackInteract; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.quartz.JobDataMap; +import org.quartz.JobKey; +import org.quartz.TriggerKey; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +public class DeTaskExecutor { + + @Resource + private ScheduleManager scheduleManager; + + @XpackInteract(value = "xpackTaskExecutor", replace = true) + public boolean execute(Long taskId) { + return false; + } + + public void addOrUpdateTask(Long taskId, String cron, Long startTime, Long endTime) { + if (CronUtils.taskExpire(endTime)) { + return; + } + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, key); + TriggerKey triggerKey = new TriggerKey(key, key); + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put("taskId", taskId); + Date end = null; + if (ObjectUtils.isNotEmpty(endTime)) end = new Date(endTime); + scheduleManager.addOrUpdateCronJob(jobKey, triggerKey, DeXpackScheduleJob.class, cron, new Date(startTime), end, jobDataMap); + } + + public void removeTask(Long taskId) { + String key = taskId.toString(); + JobKey jobKey = new JobKey(key); + TriggerKey triggerKey = new TriggerKey(key); + scheduleManager.removeJob(jobKey, triggerKey); + } +} diff --git a/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java b/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java new file mode 100644 index 0000000000..2a0f1903b1 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java @@ -0,0 +1,24 @@ +package io.dataease.job.schedule; + +import io.dataease.utils.CommonBeanFactory; +import jakarta.annotation.Resource; +import org.quartz.*; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +@Component +public class DeXpackScheduleJob implements Job { + @Resource + private DeTaskExecutor deTaskExecutor; + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + Trigger trigger = jobExecutionContext.getTrigger(); + JobKey jobKey = trigger.getJobKey(); + JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap(); + Long taskId = jobDataMap.getLong("taskId"); + if (!deTaskExecutor.execute(taskId)) { + Objects.requireNonNull(CommonBeanFactory.getBean(ScheduleManager.class)).removeJob(jobKey, trigger.getKey()); + } + } +} diff --git a/core/core-backend/src/main/java/io/dataease/job/sechedule/ExtractDataJob.java b/core/core-backend/src/main/java/io/dataease/job/schedule/ExtractDataJob.java similarity index 79% rename from core/core-backend/src/main/java/io/dataease/job/sechedule/ExtractDataJob.java rename to core/core-backend/src/main/java/io/dataease/job/schedule/ExtractDataJob.java index 729ef22f7f..0ffbaae2b7 100644 --- a/core/core-backend/src/main/java/io/dataease/job/sechedule/ExtractDataJob.java +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/ExtractDataJob.java @@ -1,14 +1,13 @@ -package io.dataease.job.sechedule; +package io.dataease.job.schedule; import io.dataease.datasource.manage.DatasourceSyncManage; -import io.dataease.datasource.server.DatasourceServer; import io.dataease.utils.CommonBeanFactory; import org.quartz.JobExecutionContext; import org.springframework.stereotype.Component; @Component -public class ExtractDataJob extends DeScheduleJob{ +public class ExtractDataJob extends DeScheduleJob { private DatasourceSyncManage datasourceSyncManage; public ExtractDataJob() { diff --git a/core/core-backend/src/main/java/io/dataease/job/sechedule/Schedular.java b/core/core-backend/src/main/java/io/dataease/job/schedule/Schedular.java similarity index 92% rename from core/core-backend/src/main/java/io/dataease/job/sechedule/Schedular.java rename to core/core-backend/src/main/java/io/dataease/job/schedule/Schedular.java index cb42755571..88de462f25 100644 --- a/core/core-backend/src/main/java/io/dataease/job/sechedule/Schedular.java +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/Schedular.java @@ -1,4 +1,4 @@ -package io.dataease.job.sechedule; +package io.dataease.job.schedule; import com.fit2cloud.quartz.anno.QuartzScheduled; import io.dataease.datasource.server.DatasourceServer; @@ -6,7 +6,6 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Component; - @Component public class Schedular { diff --git a/core/core-backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java b/core/core-backend/src/main/java/io/dataease/job/schedule/ScheduleManager.java similarity index 94% rename from core/core-backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java rename to core/core-backend/src/main/java/io/dataease/job/schedule/ScheduleManager.java index 8231f94386..6691644506 100644 --- a/core/core-backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/ScheduleManager.java @@ -1,4 +1,4 @@ -package io.dataease.job.sechedule; +package io.dataease.job.schedule; import io.dataease.exception.DEException; @@ -8,7 +8,6 @@ import jakarta.annotation.Resource; import org.quartz.*; import org.springframework.stereotype.Component; - import java.util.Date; import java.util.HashMap; import java.util.List; @@ -31,7 +30,7 @@ public class ScheduleManager { * @throws SchedulerException */ public void addSimpleJob(JobKey jobKey, TriggerKey triggerKey, Class cls, int repeatIntervalTime, - JobDataMap jobDataMap) throws SchedulerException { + JobDataMap jobDataMap) throws SchedulerException { JobBuilder jobBuilder = JobBuilder.newJob(cls).withIdentity(jobKey); @@ -64,7 +63,7 @@ public class ScheduleManager { * @param jobDataMap */ public void addCronJob(JobKey jobKey, TriggerKey triggerKey, Class jobClass, String cron, Date startTime, - Date endTime, JobDataMap jobDataMap) { + Date endTime, JobDataMap jobDataMap) { try { LogUtil.info("addCronJob: " + triggerKey.getName() + "," + triggerKey.getGroup()); @@ -105,7 +104,7 @@ public class ScheduleManager { } public void addCronJob(JobKey jobKey, TriggerKey triggerKey, Class jobClass, String cron, Date startTime, - Date endTime) { + Date endTime) { addCronJob(jobKey, triggerKey, jobClass, cron, startTime, endTime, null); } @@ -315,7 +314,7 @@ public class ScheduleManager { * @throws SchedulerException */ public void addOrUpdateSimpleJob(JobKey jobKey, TriggerKey triggerKey, Class clz, - int intervalTime, JobDataMap jobDataMap) throws SchedulerException { + int intervalTime, JobDataMap jobDataMap) throws SchedulerException { if (scheduler.checkExists(triggerKey)) { modifySimpleJobTime(triggerKey, intervalTime); @@ -326,20 +325,20 @@ public class ScheduleManager { } public void addOrUpdateSingleJob(JobKey jobKey, TriggerKey triggerKey, Class clz, - Date date, JobDataMap jobDataMap) throws DEException { + Date date, JobDataMap jobDataMap) throws DEException { try { if (scheduler.checkExists(triggerKey)) { modifySingleJobTime(triggerKey, date); } else { addSingleJob(jobKey, triggerKey, clz, date, jobDataMap); } - }catch (Exception e){ + } catch (Exception e) { DEException.throwException(e); } } public void addOrUpdateSingleJob(JobKey jobKey, TriggerKey triggerKey, Class clz, - Date date) throws SchedulerException { + Date date) throws SchedulerException { addOrUpdateSingleJob(jobKey, triggerKey, clz, date, null); } @@ -359,7 +358,7 @@ public class ScheduleManager { * @throws SchedulerException */ public void addOrUpdateCronJob(JobKey jobKey, TriggerKey triggerKey, Class jobClass, String cron, Date startTime, - Date endTime, JobDataMap jobDataMap) throws DEException { + Date endTime, JobDataMap jobDataMap) throws DEException { LogUtil.info("AddOrUpdateCronJob: " + jobKey.getName() + "," + triggerKey.getGroup()); try { @@ -368,13 +367,13 @@ public class ScheduleManager { } else { addCronJob(jobKey, triggerKey, jobClass, cron, startTime, endTime, jobDataMap); } - }catch (Exception e){ + } catch (Exception e) { DEException.throwException(e); } } public void addOrUpdateCronJob(JobKey jobKey, TriggerKey triggerKey, Class jobClass, String cron, Date startTime, - Date endTime) throws SchedulerException { + Date endTime) throws SchedulerException { addOrUpdateCronJob(jobKey, triggerKey, jobClass, cron, startTime, endTime, null); } diff --git a/core/core-backend/src/main/java/io/dataease/task/dao/auto/entity/CoreSysTask.java b/core/core-backend/src/main/java/io/dataease/task/dao/auto/entity/CoreSysTask.java deleted file mode 100644 index c906457fd4..0000000000 --- a/core/core-backend/src/main/java/io/dataease/task/dao/auto/entity/CoreSysTask.java +++ /dev/null @@ -1,167 +0,0 @@ -package io.dataease.task.dao.auto.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; - -/** - *

- * - *

- * - * @author fit2cloud - * @since 2023-04-12 - */ -@TableName("core_sys_task") -public class CoreSysTask implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 任务ID - */ - @TableId(value = "task_id", type = IdType.AUTO) - private Long taskId; - - /** - * 任务名称 - */ - private String taskName; - - /** - * 任务类型 - */ - private String taskType; - - /** - * 开始时间 - */ - private Long startTime; - - /** - * 结束时间 - */ - private Long endTime; - - /** - * 频率方式 - */ - private Integer rateType; - - /** - * 频率值 - */ - private String rateVal; - - /** - * 创建者ID - */ - private Long creator; - - /** - * 创建时间 - */ - private Long createTime; - - /** - * 运行状态 - */ - private Boolean status; - - public Long getTaskId() { - return taskId; - } - - public void setTaskId(Long taskId) { - this.taskId = taskId; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getTaskType() { - return taskType; - } - - public void setTaskType(String taskType) { - this.taskType = taskType; - } - - public Long getStartTime() { - return startTime; - } - - public void setStartTime(Long startTime) { - this.startTime = startTime; - } - - public Long getEndTime() { - return endTime; - } - - public void setEndTime(Long endTime) { - this.endTime = endTime; - } - - public Integer getRateType() { - return rateType; - } - - public void setRateType(Integer rateType) { - this.rateType = rateType; - } - - public String getRateVal() { - return rateVal; - } - - public void setRateVal(String rateVal) { - this.rateVal = rateVal; - } - - public Long getCreator() { - return creator; - } - - public void setCreator(Long creator) { - this.creator = creator; - } - - public Long getCreateTime() { - return createTime; - } - - public void setCreateTime(Long createTime) { - this.createTime = createTime; - } - - public Boolean getStatus() { - return status; - } - - public void setStatus(Boolean status) { - this.status = status; - } - - @Override - public String toString() { - return "CoreSysTask{" + - "taskId = " + taskId + - ", taskName = " + taskName + - ", taskType = " + taskType + - ", startTime = " + startTime + - ", endTime = " + endTime + - ", rateType = " + rateType + - ", rateVal = " + rateVal + - ", creator = " + creator + - ", createTime = " + createTime + - ", status = " + status + - "}"; - } -} diff --git a/core/core-backend/src/main/java/io/dataease/task/dao/auto/mapper/CoreSysTaskMapper.java b/core/core-backend/src/main/java/io/dataease/task/dao/auto/mapper/CoreSysTaskMapper.java deleted file mode 100644 index f44d0878dc..0000000000 --- a/core/core-backend/src/main/java/io/dataease/task/dao/auto/mapper/CoreSysTaskMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.dataease.task.dao.auto.mapper; - -import io.dataease.task.dao.auto.entity.CoreSysTask; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author fit2cloud - * @since 2023-04-12 - */ -public interface CoreSysTaskMapper extends BaseMapper { - -} diff --git a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties index f3b366becc..4fc8609f59 100644 --- a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties +++ b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties @@ -18,6 +18,7 @@ i18n_menu.datasource=\u6570\u636E\u6E90 i18n_menu.user=\u7528\u6237\u7BA1\u7406 i18n_menu.org=\u7EC4\u7EC7\u7BA1\u7406 i18n_menu.auth=\u6743\u9650\u914D\u7F6E +i18n_menu.report=\u5B9A\u65F6\u62A5\u544A i18n_menu.sync=\u540C\u6B65\u7BA1\u7406 i18n_menu.summary=\u6982\u89C8 i18n_menu.ds=\u6570\u636E\u8FDE\u63A5\u7BA1\u7406 diff --git a/core/core-frontend/src/assets/svg/report.svg b/core/core-frontend/src/assets/svg/report.svg new file mode 100644 index 0000000000..50204b1d74 --- /dev/null +++ b/core/core-frontend/src/assets/svg/report.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts index 0be8929032..00ff342c48 100644 --- a/core/core-frontend/src/locales/zh-CN.ts +++ b/core/core-frontend/src/locales/zh-CN.ts @@ -2242,5 +2242,42 @@ export default { appearance: { give_up: '放弃更新', save_apply: '保存并应用' + }, + report: { + title: '定时报告', + task_name: '任务名称', + last_exec_time: '上次执行时间', + last_exec_result: '上次执行结果', + task_status: '任务状态', + next_exec_time: '下次执行时间', + creator: '创建人', + create_time: '创建时间', + status_wait: '等待发送', + status_stop: '任务停止', + status_finish: '任务结束', + status_send: '发送中', + search_tips: '通过任务名称搜索', + report_title: '任务列表', + instance_title: '任务日志', + add_task: '添加任务', + lark_groups: '飞书群', + send_setting: '发送设置', + start_time: '开始时间', + end_time: '结束时间', + once_a_day: '每天', + once_a_week: '每周', + once_a_month: '每月', + week_mon: '一', + week_tue: '二', + week_wed: '三', + week_thu: '四', + week_fri: '五', + week_sat: '六', + week_sun: '日', + every_exec: '执行一次', + date: '日', + last_status_running: '运行中', + last_status_fail: '失败', + last_status_success: '成功' } } diff --git a/de-xpack b/de-xpack index fb7d5598b6..22e8ad631b 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit fb7d5598b6c23469dac21c5cefc4d388c27236fc +Subproject commit 22e8ad631b05f078920385f440ae97561fa8c351 diff --git a/installer/dataease/docker-compose-selenium.yml b/installer/dataease/docker-compose-selenium.yml new file mode 100644 index 0000000000..5bea38f1f0 --- /dev/null +++ b/installer/dataease/docker-compose-selenium.yml @@ -0,0 +1,13 @@ +version: '2.1' +services: + de-selenium: + image: selenium/standalone-chrome:latest + container_name: de-selenium + shm_size: 2gb + environment: + - SE_START_XVFB=false + - SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true + ports: + - "4444:4444" + networks: + - dataease-network \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6345bb8fd1..70b8952b8f 100644 --- a/pom.xml +++ b/pom.xml @@ -42,10 +42,17 @@ 1.3.0 3.3.1 3.1.0 + 31.1-jre + + com.google.guava + guava + ${guava.version} + import + com.alibaba.cloud spring-cloud-alibaba-dependencies @@ -106,6 +113,7 @@ easyexcel ${easyexcel.version} + diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/ReportApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/ReportApi.java new file mode 100644 index 0000000000..7f404c01fe --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/ReportApi.java @@ -0,0 +1,73 @@ +package io.dataease.api.report; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.api.report.dto.*; +import io.dataease.api.report.vo.ReportGridVO; +import io.dataease.api.report.vo.ReportInstanceVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +@Tag(name = "定时报告") +@ApiSupport(order = 888, author = "fit2cloud-someone") +public interface ReportApi { + + @Operation(summary = "查询报告列表") + @Parameters({ + @Parameter(name = "goPage", description = "目标页码", required = true, in = ParameterIn.PATH), + @Parameter(name = "pageSize", description = "每页容量", required = true, in = ParameterIn.PATH), + @Parameter(name = "request", description = "过滤条件", required = true) + }) + @PostMapping("/pager/{goPage}/{pageSize}") + IPage pager(@PathVariable("goPage") int goPage, @PathVariable("pageSize") int pageSize, @RequestBody ReportGridRequest request); + + @Operation(summary = "创建任务") + @PostMapping("/create") + void create(@RequestBody ReportCreator creator); + + @Operation(summary = "更新任务") + @PostMapping("/update") + void update(@RequestBody ReportEditor editor); + + @Operation(summary = "立即运行") + @PostMapping("/fireNow/{taskId}") + void fireNow(@PathVariable("taskId") Long taskId); + + @Operation(summary = "停止") + @PostMapping("/stop/{taskId}") + void stopNow(@PathVariable("taskId") Long taskId); + + @Operation(summary = "删除") + @PostMapping("/delete") + void delete(@RequestBody List taskIdList); + + + @Operation(summary = "查询详情") + @GetMapping("/info/{taskId}") + ReportEditor info(@PathVariable("taskId") Long taskId); + + @Operation(summary = "查询日志列表") + @Parameters({ + @Parameter(name = "goPage", description = "目标页码", required = true, in = ParameterIn.PATH), + @Parameter(name = "pageSize", description = "每页容量", required = true, in = ParameterIn.PATH), + @Parameter(name = "request", description = "过滤条件", required = true) + }) + @PostMapping("/logPager/{goPage}/{pageSize}") + IPage pager(@PathVariable("goPage") int goPage, @PathVariable("pageSize") int pageSize, @RequestBody ReportInstanceRequest request); + + @Operation(summary = "删除日志") + @PostMapping("/deleteLog") + void deleteInstance(@RequestBody ReportInstanceDelRequest request); + + @GetMapping("/logMsg") + String logMsg(@RequestBody ReportInstanceMsgRequest request); +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportCreator.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportCreator.java new file mode 100644 index 0000000000..1d969e7281 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportCreator.java @@ -0,0 +1,54 @@ +package io.dataease.api.report.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +public class ReportCreator implements Serializable { + @Serial + private static final long serialVersionUID = 376997744239219719L; + + private String name; + + private String title; + + private String content; + + private Integer rtid; + + @JsonSerialize(using= ToStringSerializer.class) + private Long rid; + + private Integer format; + + private List viewIdList; + + private Integer viewDataRange; + + private String pixel; + + private List reciFlagList; + + private List uidList; + + private List ridList; + + private List emailList; + + private List larkGroupList; + + private Integer extWaitTime; + + private Integer rateType; + + private String rateVal; + + private Long startTime; + + private Long endTime; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportEditor.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportEditor.java new file mode 100644 index 0000000000..830f954855 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportEditor.java @@ -0,0 +1,19 @@ +package io.dataease.api.report.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ReportEditor extends ReportCreator{ + + @Serial + private static final long serialVersionUID = 4580864230335912932L; + @JsonSerialize(using= ToStringSerializer.class) + private Long taskId; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportGridRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportGridRequest.java new file mode 100644 index 0000000000..4b0c2fa3a2 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportGridRequest.java @@ -0,0 +1,25 @@ +package io.dataease.api.report.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +public class ReportGridRequest implements Serializable { + @Serial + private static final long serialVersionUID = 3478936079850972546L; + + private List uidList; + + private List lastStatusList; + + private List statusList; + + private List timeList; + + private String keyword; + + private Boolean timeDesc; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceDelRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceDelRequest.java new file mode 100644 index 0000000000..9ce461b76b --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceDelRequest.java @@ -0,0 +1,16 @@ +package io.dataease.api.report.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ReportInstanceDelRequest implements Serializable { + @Serial + private static final long serialVersionUID = 3972312402268432597L; + + private Long instanceId; + + private Integer timeFlag; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceMsgRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceMsgRequest.java new file mode 100644 index 0000000000..c541552ceb --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceMsgRequest.java @@ -0,0 +1,16 @@ +package io.dataease.api.report.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ReportInstanceMsgRequest implements Serializable { + @Serial + private static final long serialVersionUID = 7192222037770564561L; + + private Long taskId; + + private Long instanceId; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceRequest.java new file mode 100644 index 0000000000..26bc814ad6 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/dto/ReportInstanceRequest.java @@ -0,0 +1,21 @@ +package io.dataease.api.report.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +public class ReportInstanceRequest implements Serializable { + @Serial + private static final long serialVersionUID = 6928403022356816279L; + + private Long taskId; + + private List execStatusList; + + private List timeList; + + private String keyword; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java new file mode 100644 index 0000000000..50c7d59ff9 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java @@ -0,0 +1,31 @@ +package io.dataease.api.report.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ReportGridVO implements Serializable { + + @Serial + private static final long serialVersionUID = -5178055146669970633L; + @JsonSerialize(using= ToStringSerializer.class) + private Long id; + + private String name; + + private Long lastExecTime; + + private Integer lastExecStatus; + + private Integer status; + + private Long nextExecTime; + + private String creator; + + private Long createTime; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportInstanceVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportInstanceVO.java new file mode 100644 index 0000000000..8f7bb8554a --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportInstanceVO.java @@ -0,0 +1,20 @@ +package io.dataease.api.report.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ReportInstanceVO implements Serializable { + @Serial + private static final long serialVersionUID = -7845204306008848053L; + + private Long id; + + private String name; + + private Long startTime; + + private Integer execStatus; +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java index 8312e307f0..27b379bef3 100644 --- a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java @@ -79,6 +79,10 @@ public interface UserApi { @PostMapping("/role/option") List optionForRole(@RequestBody UserRequest request); + @Operation(summary = "组织内用户") + @GetMapping("/org/option") + List optionForOrg(); + @Operation(summary = "角色已绑用户") @Parameters({ @Parameter(name = "goPage", description = "目标页码", required = true, in = ParameterIn.PATH), From 0c2a55bba310116c5007a52b5ba7fea45fe669f2 Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Tue, 23 Apr 2024 15:57:57 +0800 Subject: [PATCH 06/90] =?UTF-8?q?refactor(=E5=9B=BE=E8=A1=A8):=20=E9=9B=B7?= =?UTF-8?q?=E8=BE=BE=E5=9B=BE=E6=A0=B7=E5=BC=8F=E5=A4=A7=E5=B0=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=9D=90=E6=A0=87=E8=BD=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-frontend/src/models/chart/editor.d.ts | 5 +++++ .../components/editor/editor-style/ChartStyle.vue | 12 ++++++++++-- .../src/views/chart/components/editor/index.vue | 1 + .../chart/components/js/panel/charts/others/radar.ts | 5 +++++ .../views/chart/components/js/panel/types/index.ts | 6 ++++++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/core-frontend/src/models/chart/editor.d.ts b/core/core-frontend/src/models/chart/editor.d.ts index 64dd622bce..32ae0e39e5 100644 --- a/core/core-frontend/src/models/chart/editor.d.ts +++ b/core/core-frontend/src/models/chart/editor.d.ts @@ -28,6 +28,11 @@ declare type EditorPropertyInner = { [key in EditorProperty]?: string[] } +declare type EditorSelectorSpec = { + [key in EditorProperty]?: { + title: string + } +} /** * 轴类型 */ diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue index e2a1938f3b..7c68da39ff 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue @@ -68,10 +68,18 @@ const props = defineProps({ default: () => { return {} } + }, + selectorSpec: { + type: Object as PropType, + required: false, + default: () => { + return {} + } } }) -const { chart, themes, properties, propertyInnerAll, commonBackgroundPop } = toRefs(props) +const { chart, themes, properties, propertyInnerAll, commonBackgroundPop, selectorSpec } = + toRefs(props) const emit = defineEmits([ 'onColorChange', 'onMiscChange', @@ -316,7 +324,7 @@ watch( :effect="themes" v-if="showProperties('misc-style-selector')" name="size" - title="大小" + :title="selectorSpec['misc-style-selector']?.title" > { v-if="chartStyleShow" :properties="chartViewInstance.properties" :property-inner-all="chartViewInstance.propertyInner" + :selector-spec="chartViewInstance.selectorSpec" :common-background-pop="curComponent?.commonBackground" :chart="view" :themes="themes" diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts index cc4e3828af..9ac62e92dc 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts @@ -41,6 +41,11 @@ export class Radar extends G2PlotChartView { ], 'legend-selector': ['icon', 'orient', 'color', 'fontSize', 'hPosition', 'vPosition'] } + selectorSpec: EditorSelectorSpec = { + 'misc-style-selector': { + title: `${t('chart.tooltip_axis')}` + } + } axis: AxisType[] = ['xAxis', 'yAxis', 'drill', 'filter', 'extLabel', 'extTooltip'] axisConfig: AxisConfig = { xAxis: { diff --git a/core/core-frontend/src/views/chart/components/js/panel/types/index.ts b/core/core-frontend/src/views/chart/components/js/panel/types/index.ts index f0af8b07ea..b436d593e1 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/types/index.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/types/index.ts @@ -26,6 +26,7 @@ export abstract class AbstractChartView { abstract propertyInner: EditorPropertyInner abstract axis: AxisType[] abstract axisConfig: AxisConfig + abstract selectorSpec: EditorSelectorSpec /** * 在新建和切换图表的时候处理默认值 * @param chart 数据库图表对象 @@ -91,6 +92,11 @@ export abstract class AntVAbstractChartView extends AbstractChartView { limit: 1 } } + selectorDesc: EditorSelectorSpec = { + 'misc-style-selector': { + title: `${t('chart.size')}` + } + } protected constructor(library: ChartLibraryType, name: string, defaultData?: any[]) { super(ChartRenderType.ANT_V, library, name, defaultData) } From 34ae707e2607cb4bf5ad784584fa060d302a68d5 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Tue, 23 Apr 2024 16:26:00 +0800 Subject: [PATCH 07/90] =?UTF-8?q?fix(=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86)?= =?UTF-8?q?:=20=E8=B0=83=E6=95=B4=E5=85=A8=E5=B1=80=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=AD=9B=E9=80=89UI=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/filter-text/src/FilterText.vue | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/core/core-frontend/src/components/filter-text/src/FilterText.vue b/core/core-frontend/src/components/filter-text/src/FilterText.vue index ccbe78a136..d487835bbd 100644 --- a/core/core-frontend/src/components/filter-text/src/FilterText.vue +++ b/core/core-frontend/src/components/filter-text/src/FilterText.vue @@ -1,5 +1,5 @@ diff --git a/core/core-frontend/src/views/chart/components/editor/util/chart.ts b/core/core-frontend/src/views/chart/components/editor/util/chart.ts index e24a02809a..3307f56354 100644 --- a/core/core-frontend/src/views/chart/components/editor/util/chart.ts +++ b/core/core-frontend/src/views/chart/components/editor/util/chart.ts @@ -1383,7 +1383,10 @@ export const DEFAULT_BASIC_STYLE: ChartBasicStyle = { showZoom: true, zoomButtonColor: '#aaa', zoomBackground: '#fff', - tableLayoutMode: 'grid' + tableLayoutMode: 'grid', + calcTopN: false, + topN: 5, + topNLabel: '其他' } export const BASE_VIEW_CONFIG = { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts index 18ef84cdf4..0e67c0bb51 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts @@ -23,7 +23,10 @@ const DEFAULT_DATA = [] export class Pie extends G2PlotChartView { axis: AxisType[] = PIE_AXIS_TYPE properties = PIE_EDITOR_PROPERTY - propertyInner = PIE_EDITOR_PROPERTY_INNER + propertyInner: EditorPropertyInner = { + ...PIE_EDITOR_PROPERTY_INNER, + 'basic-style-selector': ['colors', 'alpha', 'radius', 'topN'] + } axisConfig = PIE_AXIS_CONFIG drawChart(drawOptions: G2PlotDrawOptions): G2Pie { @@ -212,9 +215,37 @@ export class Pie extends G2PlotChartView { protected configBasicStyle(chart: Chart, options: PieOptions): PieOptions { const customAttr = parseJson(chart.customAttr) + const { basicStyle } = customAttr + const { data } = options + if (data?.length && basicStyle.calcTopN && data.length > basicStyle.topN) { + data.sort((a, b) => b.value - a.value) + const otherItems = data.splice(basicStyle.topN) + const initOtherItem = { + ...data[0], + dynamicTooltipValue: [], + field: basicStyle.topNLabel, + name: basicStyle.topNLabel, + value: 0 + } + const dynamicTotalMap: Record = {} + otherItems.reduce((p, n) => { + p.value += n.value ?? 0 + n.dynamicTooltipValue?.forEach(val => { + dynamicTotalMap[val.fieldId] = (dynamicTotalMap[val.fieldId] || 0) + val.value + }) + return p + }, initOtherItem) + for (const key in dynamicTotalMap) { + initOtherItem.dynamicTooltipValue.push({ + fieldId: key, + value: dynamicTotalMap[key] + }) + } + data.push(initOtherItem) + } return { ...options, - radius: customAttr.basicStyle.radius / 100 + radius: basicStyle.radius / 100 } } setupDefaultOptions(chart: ChartObj): ChartObj { @@ -253,14 +284,15 @@ export class Pie extends G2PlotChartView { export class PieDonut extends Pie { propertyInner: EditorPropertyInner = { ...PIE_EDITOR_PROPERTY_INNER, - 'basic-style-selector': ['colors', 'alpha', 'radius', 'innerRadius'] + 'basic-style-selector': ['colors', 'alpha', 'radius', 'innerRadius', 'topN'] } protected configBasicStyle(chart: Chart, options: PieOptions): PieOptions { - const customAttr = parseJson(chart.customAttr) + const tmp = super.configBasicStyle(chart, options) + const { basicStyle } = parseJson(chart.customAttr) return { - ...options, - radius: customAttr.basicStyle.radius / 100, - innerRadius: customAttr.basicStyle.innerRadius / 100 + ...tmp, + radius: basicStyle.radius / 100, + innerRadius: basicStyle.innerRadius / 100 } } From 710ebaa588cc38bf313c81fb539e5f25a94334f6 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 24 Apr 2024 21:20:02 +0800 Subject: [PATCH 25/90] =?UTF-8?q?feat(X-Pack):=20=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=80=9A=E4=BF=A1=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- .../api/communicate/api/CommunicateApi.java | 13 +++++++ .../api/communicate/dto/MessageDTO.java | 27 ++++++++++++++ .../api/communicate/dto/MessageFile.java | 17 +++++++++ .../java/io/dataease/api/email/EmailApi.java | 5 --- .../io/dataease/api/email/dto/EmailDTO.java | 35 ------------------- .../io/dataease/api/email/dto/EmailFile.java | 16 --------- .../io/dataease/constant/MessageEnum.java | 28 +++++++++++++++ 8 files changed, 86 insertions(+), 57 deletions(-) create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/communicate/api/CommunicateApi.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageDTO.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageFile.java delete mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailDTO.java delete mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailFile.java create mode 100644 sdk/common/src/main/java/io/dataease/constant/MessageEnum.java diff --git a/de-xpack b/de-xpack index 50699c9a2b..188b57250c 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit 50699c9a2be31a1896e3d355013bbc0c1c20cd6a +Subproject commit 188b57250c4220e1972ee15da0bf416d6ce3e1fc diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/communicate/api/CommunicateApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/communicate/api/CommunicateApi.java new file mode 100644 index 0000000000..58ad7f2631 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/communicate/api/CommunicateApi.java @@ -0,0 +1,13 @@ +package io.dataease.api.communicate.api; + +import io.dataease.api.communicate.dto.MessageDTO; +import io.swagger.v3.oas.annotations.Hidden; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@Hidden +public interface CommunicateApi { + + @PostMapping("/send") + void send(@RequestBody MessageDTO dto); +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageDTO.java new file mode 100644 index 0000000000..a2d78970b9 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageDTO.java @@ -0,0 +1,27 @@ +package io.dataease.api.communicate.dto; + +import io.dataease.constant.MessageEnum; +import lombok.Data; + +import java.io.File; +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +public class MessageDTO implements Serializable { + @Serial + private static final long serialVersionUID = -1499402825211940277L; + + private List recipientList; + + private String title; + + private byte[] content; + + private List fileList; + + private List messageFileList; + + private MessageEnum messageEnum; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageFile.java b/sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageFile.java new file mode 100644 index 0000000000..1e93515a30 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/communicate/dto/MessageFile.java @@ -0,0 +1,17 @@ +package io.dataease.api.communicate.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class MessageFile implements Serializable { + @Serial + private static final long serialVersionUID = 7140452847688399889L; + + private String fileName; + + private byte[] body; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/email/EmailApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/email/EmailApi.java index 7baaf4677e..13823f59dc 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/email/EmailApi.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/email/EmailApi.java @@ -1,9 +1,7 @@ package io.dataease.api.email; import com.github.xiaoymin.knife4j.annotations.ApiSupport; -import io.dataease.api.email.dto.EmailDTO; import io.dataease.api.system.vo.SettingItemVO; -import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.GetMapping; @@ -28,7 +26,4 @@ public interface EmailApi { @PostMapping("/setting/validate") void validate(@RequestBody List settingItemVOS); - @PostMapping("/send") - @Hidden - void send(@RequestBody EmailDTO dto); } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailDTO.java deleted file mode 100644 index e78eaf6e03..0000000000 --- a/sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.dataease.api.email.dto; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.apache.commons.collections4.CollectionUtils; - -import java.io.File; -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class EmailDTO implements Serializable { - @Serial - private static final long serialVersionUID = 3599154848839436838L; - - private List recipientList; - - private String from; - - private String subject; - - private byte[] content; - - private List fileList; - - private List emailFiles; - - public boolean existFile() { - return CollectionUtils.isNotEmpty(fileList) || CollectionUtils.isNotEmpty(emailFiles); - } -} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailFile.java b/sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailFile.java deleted file mode 100644 index e8e819e0c6..0000000000 --- a/sdk/api/api-base/src/main/java/io/dataease/api/email/dto/EmailFile.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.dataease.api.email.dto; - -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -@Data -public class EmailFile implements Serializable { - @Serial - private static final long serialVersionUID = -3898069299109267651L; - - private String fileName; - - private byte[] fileByte; -} diff --git a/sdk/common/src/main/java/io/dataease/constant/MessageEnum.java b/sdk/common/src/main/java/io/dataease/constant/MessageEnum.java new file mode 100644 index 0000000000..8b11ef3706 --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/constant/MessageEnum.java @@ -0,0 +1,28 @@ +package io.dataease.constant; + +import java.util.Arrays; + +public enum MessageEnum { + + INNER(0), EMAIL(1), WECOM(2), DINGTALK(3), LARK(4), LARKSUITE(5); + private Integer flag; + + public Integer getFlag() { + return flag; + } + + public void setFlag(Integer flag) { + this.flag = flag; + } + + MessageEnum(Integer flag) { + this.flag = flag; + } + + MessageEnum() { + } + + public static MessageEnum fromValue(Integer flag) { + return Arrays.stream(values()).filter(v -> v.flag.equals(flag)).findFirst().get(); + } +} From a3e8d8630226e51c3e58405ab20ecfd3fdd9b69e Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Thu, 25 Apr 2024 11:43:28 +0800 Subject: [PATCH 26/90] =?UTF-8?q?fix(=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86)?= =?UTF-8?q?:=20=E6=96=B0=E5=A2=9E=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E3=80=81=E7=BB=84=E7=BB=87=E7=AE=A1=E7=90=86=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E3=80=81=E5=B7=A5=E5=85=B7=E7=AE=B1-=E4=BE=A7=E8=BE=B9?= =?UTF-8?q?=E6=A0=8F=E5=8F=AF=E5=B1=95=E5=BC=80=E6=94=B6=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-frontend/package.json | 2 +- .../assets/svg/icon_side-expand_outlined.svg | 4 ++ .../assets/svg/icon_side-fold_outlined.svg | 4 ++ .../src/custom-component/v-query/Time.vue | 1 - .../src/layout/components/CollapseBar.vue | 41 +++++++++++++++++++ .../src/layout/components/Menu.vue | 9 ++-- .../src/layout/components/MenuItem.vue | 8 ++-- core/core-frontend/src/layout/index.vue | 37 +++++++++++++++-- 8 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 core/core-frontend/src/assets/svg/icon_side-expand_outlined.svg create mode 100644 core/core-frontend/src/assets/svg/icon_side-fold_outlined.svg create mode 100644 core/core-frontend/src/layout/components/CollapseBar.vue diff --git a/core/core-frontend/package.json b/core/core-frontend/package.json index b77fd311f6..cd6505eb63 100644 --- a/core/core-frontend/package.json +++ b/core/core-frontend/package.json @@ -24,7 +24,7 @@ "axios": "^1.3.3", "crypto-js": "^4.1.1", "dayjs": "^1.11.9", - "element-plus-secondary": "^0.5.6", + "element-plus-secondary": "^0.5.8", "element-resize-detector": "^1.2.4", "file-saver": "^2.0.5", "html-to-image": "^1.11.11", diff --git a/core/core-frontend/src/assets/svg/icon_side-expand_outlined.svg b/core/core-frontend/src/assets/svg/icon_side-expand_outlined.svg new file mode 100644 index 0000000000..8278cbbf99 --- /dev/null +++ b/core/core-frontend/src/assets/svg/icon_side-expand_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/core/core-frontend/src/assets/svg/icon_side-fold_outlined.svg b/core/core-frontend/src/assets/svg/icon_side-fold_outlined.svg new file mode 100644 index 0000000000..5a46a3580e --- /dev/null +++ b/core/core-frontend/src/assets/svg/icon_side-fold_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/core/core-frontend/src/custom-component/v-query/Time.vue b/core/core-frontend/src/custom-component/v-query/Time.vue index e15a1fa556..085df88b69 100644 --- a/core/core-frontend/src/custom-component/v-query/Time.vue +++ b/core/core-frontend/src/custom-component/v-query/Time.vue @@ -14,7 +14,6 @@ import 'vant/es/popup/style' import 'vant/es/date-picker/style' import 'vant/es/picker-group/style' import 'vant/es/time-picker/style' -import { Icon } from '@/components/icon-custom' interface SelectConfig { selectValue: any diff --git a/core/core-frontend/src/layout/components/CollapseBar.vue b/core/core-frontend/src/layout/components/CollapseBar.vue new file mode 100644 index 0000000000..51f51598ff --- /dev/null +++ b/core/core-frontend/src/layout/components/CollapseBar.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/core/core-frontend/src/layout/components/Menu.vue b/core/core-frontend/src/layout/components/Menu.vue index 31f9faa6e0..0847ad7969 100644 --- a/core/core-frontend/src/layout/components/Menu.vue +++ b/core/core-frontend/src/layout/components/Menu.vue @@ -1,5 +1,5 @@