diff --git a/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.java b/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.java index b56d20878315d72c366824b641edfb2b43e9da25..ff53cf08968cfdeedc868361bd082fe5fd0f665f 100644 --- a/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.java +++ b/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.java @@ -20,6 +20,7 @@ import neatlogic.framework.datawarehouse.dto.DataSourceParamVo; import neatlogic.framework.datawarehouse.dto.DataSourceVo; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; public interface DataWarehouseDataSourceMapper { @@ -79,6 +80,10 @@ public interface DataWarehouseDataSourceMapper { void resetReportDataSourceStatus(); + void updateDataSourceJobTimeById(DataSourceVo dataSourceVo); + + void updateDataSourceNextFireTimeById(@Param("id") Long id, @Param("nextFireTime") Date nextFireTime); + void deleteReportDataSourceById(Long id); //void deleteReportDataSourceConditionByDataSourceId(Long dataSourceId); diff --git a/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.xml b/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.xml index 0af246f7297af283dfb2df136ca46af9a5a50545..7e6b5875f5a0598990dc76734677c858a11bdaf0 100644 --- a/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.xml +++ b/src/main/java/neatlogic/framework/datawarehouse/dao/mapper/DataWarehouseDataSourceMapper.xml @@ -174,7 +174,10 @@ along with this program. If not, see .--> expire_count as expireCount, expire_unit as expireUnit, cron_expression as cronExpression, - is_active as isActive + is_active as isActive, + last_fire_time as lastFireTime, + last_finish_time as lastFinishTime, + next_fire_time as nextFireTime from datawarehouse_datasource order by id desc @@ -350,6 +353,22 @@ along with this program. If not, see .--> where id = #{id} + + UPDATE `datawarehouse_datasource` + SET + `last_fire_time` = #{lastFireTime}, + `last_finish_time` = #{lastFinishTime}, + `next_fire_time` = #{nextFireTime} + WHERE `id` = #{id} + + + + UPDATE `datawarehouse_datasource` + SET + `next_fire_time` = #{nextFireTime} + WHERE `id` = #{id} + + insert into datawarehouse_datasource_param (id, datasource_id, name, label, default_value) diff --git a/src/main/java/neatlogic/framework/datawarehouse/dto/DataSourceVo.java b/src/main/java/neatlogic/framework/datawarehouse/dto/DataSourceVo.java index 7ff3dd7a6cf93466d7f28b0e8efbbbed047bfac5..085b83b26a3299260deb2ff4cc304e19216e20a1 100644 --- a/src/main/java/neatlogic/framework/datawarehouse/dto/DataSourceVo.java +++ b/src/main/java/neatlogic/framework/datawarehouse/dto/DataSourceVo.java @@ -30,6 +30,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; @@ -81,7 +82,12 @@ public class DataSourceVo extends BasePageVo { private List paramList = new ArrayList<>();//需要默认值为空数组,避免空指针异常 @EntityField(name = "nfdd.datasourcevo.entityfield.name.dbtype", type = ApiParamType.STRING) private String dbType; - + @EntityField(name = "common.lastfiretime", type = ApiParamType.LONG) + private Date lastFireTime; + @EntityField(name = "common.lastfinishtime", type = ApiParamType.LONG) + private Date lastFinishTime; + @EntityField(name = "common.nextfiretime", type = ApiParamType.LONG) + private Date nextFireTime; public DataSourceVo() { @@ -338,4 +344,28 @@ public class DataSourceVo extends BasePageVo { public void setDbType(String dbType) { this.dbType = dbType; } + + public Date getLastFireTime() { + return lastFireTime; + } + + public void setLastFireTime(Date lastFireTime) { + this.lastFireTime = lastFireTime; + } + + public Date getLastFinishTime() { + return lastFinishTime; + } + + public void setLastFinishTime(Date lastFinishTime) { + this.lastFinishTime = lastFinishTime; + } + + public Date getNextFireTime() { + return nextFireTime; + } + + public void setNextFireTime(Date nextFireTime) { + this.nextFireTime = nextFireTime; + } } diff --git a/src/main/java/neatlogic/framework/datawarehouse/enums/Status.java b/src/main/java/neatlogic/framework/datawarehouse/enums/Status.java index e52cbc9f4425532857a987e8be358e1d8ed977f2..2581351acac41ab7a12e58b773151f8478506f3d 100644 --- a/src/main/java/neatlogic/framework/datawarehouse/enums/Status.java +++ b/src/main/java/neatlogic/framework/datawarehouse/enums/Status.java @@ -21,6 +21,7 @@ import neatlogic.framework.util.I18n; public enum Status { DOING("doing", new I18n("同步数据中")), DONE("done", new I18n("同步完成")), + ABORTED("aborted", new I18n("同步已中止")), FAILED("failed", new I18n("同步失败")); private final String value; diff --git a/src/main/java/neatlogic/framework/datawarehouse/service/DataSourceServiceImpl.java b/src/main/java/neatlogic/framework/datawarehouse/service/DataSourceServiceImpl.java index cbdb28695af65d1784b9f4608fd6b13e56683d7f..800f656d52b0fb4a0bdb8197b67f560ea58c9ebe 100644 --- a/src/main/java/neatlogic/framework/datawarehouse/service/DataSourceServiceImpl.java +++ b/src/main/java/neatlogic/framework/datawarehouse/service/DataSourceServiceImpl.java @@ -40,6 +40,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -216,10 +217,12 @@ public class DataSourceServiceImpl implements DataSourceService { .withCron(dataSourceVo.getCronExpression()) .addData("datasourceId", dataSourceVo.getId()) .build(); - if (StringUtils.isNotBlank(dataSourceVo.getCronExpression())) { - schedulerManager.loadJob(jobObject); + if (Objects.equals(dataSourceVo.getIsActive(), 1) && StringUtils.isNotBlank(dataSourceVo.getCronExpression())) { + Date nextFireTime = schedulerManager.loadJob(jobObject); + dataSourceMapper.updateDataSourceNextFireTimeById(dataSourceVo.getId(), nextFireTime); } else { schedulerManager.unloadJob(jobObject); + dataSourceMapper.updateDataSourceNextFireTimeById(dataSourceVo.getId(), null); } } diff --git a/src/main/java/neatlogic/module/framework/scheduler/datawarehouse/ReportDataSourceJob.java b/src/main/java/neatlogic/module/framework/scheduler/datawarehouse/ReportDataSourceJob.java index 3adf062ca5aaae5bb3d6eb46e0743431354eb95e..8a4f70219821c48a6bf733b1b5ec2810f1497055 100644 --- a/src/main/java/neatlogic/module/framework/scheduler/datawarehouse/ReportDataSourceJob.java +++ b/src/main/java/neatlogic/module/framework/scheduler/datawarehouse/ReportDataSourceJob.java @@ -28,6 +28,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.sql.SQLException; +import java.util.Date; import java.util.List; import java.util.Objects; @@ -90,6 +91,10 @@ public class ReportDataSourceJob extends JobBase { Long datasourceId = (Long) jobObject.getData("datasourceId"); DataSourceVo reportDataSourceVo = reportDataSourceMapper.getDataSourceById(datasourceId); reportDataSourceService.executeReportDataSource(reportDataSourceVo); + reportDataSourceVo.setLastFireTime(context.getFireTime()); + reportDataSourceVo.setLastFinishTime(new Date()); + reportDataSourceVo.setNextFireTime(context.getNextFireTime()); + reportDataSourceMapper.updateDataSourceJobTimeById(reportDataSourceVo); } diff --git a/src/main/resources/neatlogic/resources/framework/changelog/2024-07-31/neatlogic_tenant.sql b/src/main/resources/neatlogic/resources/framework/changelog/2024-07-31/neatlogic_tenant.sql new file mode 100644 index 0000000000000000000000000000000000000000..84166c54636e79fa700af085fd82d403268f321f --- /dev/null +++ b/src/main/resources/neatlogic/resources/framework/changelog/2024-07-31/neatlogic_tenant.sql @@ -0,0 +1,5 @@ +ALTER TABLE `datawarehouse_datasource` + CHANGE `status` `status` ENUM('doing','done','failed','aborted') CHARSET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '同步状态', + ADD COLUMN `last_fire_time` TIMESTAMP(3) NULL COMMENT '最后一次激活时间' AFTER `db_type`, + ADD COLUMN `last_finish_time` TIMESTAMP(3) NULL COMMENT '最后一次完成时间' AFTER `last_fire_time`, + ADD COLUMN `next_fire_time` TIMESTAMP(3) NULL COMMENT '下一次激活时间' AFTER `last_finish_time`; \ No newline at end of file diff --git a/src/main/resources/neatlogic/resources/framework/changelog/2024-07-31/version.json b/src/main/resources/neatlogic/resources/framework/changelog/2024-07-31/version.json new file mode 100644 index 0000000000000000000000000000000000000000..402a9b591593225be74cda66fb6c2a56ea94e05b --- /dev/null +++ b/src/main/resources/neatlogic/resources/framework/changelog/2024-07-31/version.json @@ -0,0 +1,10 @@ +{ + "content":[ + { + "type":"新增功能", + "detail":[ + {"msg":"1.数据仓库同步支持人工干预终止"} + ] + } + ] +} diff --git a/src/main/resources/neatlogic/resources/framework/sqlscript/ddl.sql b/src/main/resources/neatlogic/resources/framework/sqlscript/ddl.sql index 65db70dcb725c5db08cc43f4f7a40c94635e233f..c3d6131df27f8dc98672a8018dc2f9a7de7c8a78 100644 --- a/src/main/resources/neatlogic/resources/framework/sqlscript/ddl.sql +++ b/src/main/resources/neatlogic/resources/framework/sqlscript/ddl.sql @@ -105,10 +105,13 @@ CREATE TABLE IF NOT EXISTS `datawarehouse_datasource` ( `mode` enum('replace','append') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新模式,追加或替换', `expire_count` int NULL DEFAULT NULL COMMENT '过期数值', `module_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属模块', - `status` enum('doing','done','failed') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '同步状态', + `status` enum('doing','done','failed','aborted') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '同步状态', `data_count` int NULL DEFAULT NULL COMMENT '数据量', `expire_unit` enum('minute','hour','day','month','year') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '过期单位', `db_type` enum('mysql','mongodb') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'mysql' COMMENT '数据库类型', + `last_fire_time` timestamp(3) NULL DEFAULT NULL COMMENT '最后一次激活时间', + `last_finish_time` timestamp(3) NULL DEFAULT NULL COMMENT '最后一次完成时间', + `next_fire_time` timestamp(3) NULL DEFAULT NULL COMMENT '下一次激活时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_name`(`name`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据仓库-数据源';