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 = '数据仓库-数据源';