diff --git a/pom.xml b/pom.xml index 71dc27a..464aaff 100644 --- a/pom.xml +++ b/pom.xml @@ -120,11 +120,17 @@ spring-boot-starter-web + + org.postgresql + postgresql + runtime + com.mysql mysql-connector-j runtime + org.projectlombok lombok diff --git a/src/main/java/com/mini/capi/biz/controller/DbConfigController.java b/src/main/java/com/mini/capi/biz/controller/DbConfigController.java new file mode 100644 index 0000000..175a396 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/controller/DbConfigController.java @@ -0,0 +1,18 @@ +package com.mini.capi.biz.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +@RestController +@RequestMapping("/biz/dbConfig") +public class DbConfigController { + +} diff --git a/src/main/java/com/mini/capi/biz/controller/SyncTaskController.java b/src/main/java/com/mini/capi/biz/controller/SyncTaskController.java new file mode 100644 index 0000000..6693a6a --- /dev/null +++ b/src/main/java/com/mini/capi/biz/controller/SyncTaskController.java @@ -0,0 +1,18 @@ +package com.mini.capi.biz.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +@RestController +@RequestMapping("/biz/syncTask") +public class SyncTaskController { + +} diff --git a/src/main/java/com/mini/capi/biz/domain/DbConfig.java b/src/main/java/com/mini/capi/biz/domain/DbConfig.java new file mode 100644 index 0000000..082c8a2 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/domain/DbConfig.java @@ -0,0 +1,94 @@ +package com.mini.capi.biz.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +@Getter +@Setter +@TableName("biz_db_config") +public class DbConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableField("create_time") + private LocalDateTime createTime; + + @TableId(value = "db_id", type = IdType.AUTO) + private String dbId; + + @TableField("db_type") + private String dbType; + + @TableField("db_name") + private String dbName; + + @TableField("host") + private String host; + + @TableField("port") + private Integer port; + + @TableField("username") + private String username; + + @TableField("password") + private String password; + + @TableField("driver_class") + private String driverClass; + + @TableField("url_template") + private String urlTemplate; + + @TableField("is_active") + private Boolean isActive; + + @TableField("update_time") + private LocalDateTime updateTime; + + /** + * 租户id + */ + @TableField("f_tenant_id") + private String fTenantId; + + /** + * 流程id + */ + @TableField("f_flow_id") + private String fFlowId; + + /** + * 流程任务主键 + */ + @TableField("f_flow_task_id") + private String fFlowTaskId; + + /** + * 流程任务状态 + */ + @TableField("f_flow_state") + private Integer fFlowState; + + + // 生成数据库连接URL + public String getJdbcUrl() { + return urlTemplate.replace("{host}", host) + .replace("{port}", port.toString()) + .replace("{dbName}", dbName); + } +} diff --git a/src/main/java/com/mini/capi/biz/domain/SyncTask.java b/src/main/java/com/mini/capi/biz/domain/SyncTask.java new file mode 100644 index 0000000..eb6e3f3 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/domain/SyncTask.java @@ -0,0 +1,89 @@ +package com.mini.capi.biz.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +@Getter +@Setter +@TableName("biz_sync_task") +public class SyncTask implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableField("create_time") + private LocalDateTime createTime; + + @TableId(value = "task_id", type = IdType.AUTO) + private String taskId; + + @TableField("task_name") + private String taskName; + + @TableField("source_db_id") + private String sourceDbId; + + @TableField("target_db_id") + private String targetDbId; + + @TableField("source_table") + private String sourceTable; + + @TableField("target_table") + private String targetTable; + + @TableField("sync_type") + private String syncType; + + @TableField("increment_column") + private String incrementColumn; + + @TableField("cron_expression") + private String cronExpression; + + @TableField("is_active") + private Boolean isActive; + + @TableField("last_sync_time") + private LocalDateTime lastSyncTime; + + @TableField("update_time") + private LocalDateTime updateTime; + + /** + * 租户id + */ + @TableField("f_tenant_id") + private String fTenantId; + + /** + * 流程id + */ + @TableField("f_flow_id") + private String fFlowId; + + /** + * 流程任务主键 + */ + @TableField("f_flow_task_id") + private String fFlowTaskId; + + /** + * 流程任务状态 + */ + @TableField("f_flow_state") + private Integer fFlowState; +} diff --git a/src/main/java/com/mini/capi/biz/mapper/DbConfigMapper.java b/src/main/java/com/mini/capi/biz/mapper/DbConfigMapper.java new file mode 100644 index 0000000..deacc92 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/mapper/DbConfigMapper.java @@ -0,0 +1,16 @@ +package com.mini.capi.biz.mapper; + +import com.mini.capi.biz.domain.DbConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +public interface DbConfigMapper extends BaseMapper { + +} diff --git a/src/main/java/com/mini/capi/biz/mapper/SyncTaskMapper.java b/src/main/java/com/mini/capi/biz/mapper/SyncTaskMapper.java new file mode 100644 index 0000000..758cbe1 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/mapper/SyncTaskMapper.java @@ -0,0 +1,16 @@ +package com.mini.capi.biz.mapper; + +import com.mini.capi.biz.domain.SyncTask; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +public interface SyncTaskMapper extends BaseMapper { + +} diff --git a/src/main/java/com/mini/capi/biz/service/DbConfigService.java b/src/main/java/com/mini/capi/biz/service/DbConfigService.java new file mode 100644 index 0000000..e524686 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/service/DbConfigService.java @@ -0,0 +1,16 @@ +package com.mini.capi.biz.service; + +import com.mini.capi.biz.domain.DbConfig; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +public interface DbConfigService extends IService { + +} diff --git a/src/main/java/com/mini/capi/biz/service/SyncTaskService.java b/src/main/java/com/mini/capi/biz/service/SyncTaskService.java new file mode 100644 index 0000000..7b5bd79 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/service/SyncTaskService.java @@ -0,0 +1,16 @@ +package com.mini.capi.biz.service; + +import com.mini.capi.biz.domain.SyncTask; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +public interface SyncTaskService extends IService { + +} diff --git a/src/main/java/com/mini/capi/biz/service/impl/DbConfigServiceImpl.java b/src/main/java/com/mini/capi/biz/service/impl/DbConfigServiceImpl.java new file mode 100644 index 0000000..59e3413 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/service/impl/DbConfigServiceImpl.java @@ -0,0 +1,20 @@ +package com.mini.capi.biz.service.impl; + +import com.mini.capi.biz.domain.DbConfig; +import com.mini.capi.biz.mapper.DbConfigMapper; +import com.mini.capi.biz.service.DbConfigService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +@Service +public class DbConfigServiceImpl extends ServiceImpl implements DbConfigService { + +} diff --git a/src/main/java/com/mini/capi/biz/service/impl/SyncTaskServiceImpl.java b/src/main/java/com/mini/capi/biz/service/impl/SyncTaskServiceImpl.java new file mode 100644 index 0000000..c0180c3 --- /dev/null +++ b/src/main/java/com/mini/capi/biz/service/impl/SyncTaskServiceImpl.java @@ -0,0 +1,20 @@ +package com.mini.capi.biz.service.impl; + +import com.mini.capi.biz.domain.SyncTask; +import com.mini.capi.biz.mapper.SyncTaskMapper; +import com.mini.capi.biz.service.SyncTaskService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gaoxq + * @since 2025-08-26 + */ +@Service +public class SyncTaskServiceImpl extends ServiceImpl implements SyncTaskService { + +} diff --git a/src/main/java/com/mini/capi/config/DataSourceConfig.java b/src/main/java/com/mini/capi/config/DataSourceConfig.java new file mode 100644 index 0000000..600b874 --- /dev/null +++ b/src/main/java/com/mini/capi/config/DataSourceConfig.java @@ -0,0 +1,23 @@ +package com.mini.capi.config; + +import com.mini.capi.biz.domain.DbConfig; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +public class DataSourceConfig { + + public static DataSource createDataSource(DbConfig dbConfig) { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(dbConfig.getDriverClass()); + dataSource.setUrl(dbConfig.getJdbcUrl()); + dataSource.setUsername(dbConfig.getUsername()); + dataSource.setPassword(dbConfig.getPassword()); + return dataSource; + } + + public static JdbcTemplate createJdbcTemplate(DbConfig dbConfig) { + return new JdbcTemplate(createDataSource(dbConfig)); + } +} diff --git a/src/main/java/com/mini/capi/job/taskDbSync.java b/src/main/java/com/mini/capi/job/taskDbSync.java new file mode 100644 index 0000000..e3e77e1 --- /dev/null +++ b/src/main/java/com/mini/capi/job/taskDbSync.java @@ -0,0 +1,64 @@ +package com.mini.capi.job; + +import com.mini.capi.biz.domain.DbConfig; +import com.mini.capi.biz.domain.SyncTask; +import com.mini.capi.biz.service.DbConfigService; +import com.mini.capi.biz.service.SyncTaskService; +import com.mini.capi.config.DataSourceConfig; +import com.mini.capi.model.ApiResult; +import com.mini.capi.utils.vToken; +import jakarta.annotation.Resource; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + + + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; + + +@RestController +@RequestMapping("/Sys/dbs") +public class taskDbSync { + + + @Resource + private SyncTaskService syncTaskService; + + @Resource + private DbConfigService dbConfigService; + + + private static final int BATCH_SIZE = 1000; + + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); + + + @GetMapping("/getTaskSyncDbInfo") + public ApiResult jobSyncTask(String token) { + if (vToken.isValidToken(token)) { + String dsValue = LocalDate.now().format(DATE_FORMATTER); + List syncTasks = syncTaskService.list(); + for (SyncTask task : syncTasks) { + DbConfig sourceDbConfig = dbConfigService.getById(task.getSourceDbId()); + DbConfig targetDbConfig = dbConfigService.getById(task.getTargetDbId()); + JdbcTemplate sourceJdbc = DataSourceConfig.createJdbcTemplate(sourceDbConfig); + JdbcTemplate targetJdbc = DataSourceConfig.createJdbcTemplate(targetDbConfig); + + + + + + + } + return ApiResult.success(); + } + return ApiResult.error(); + } + +} diff --git a/src/main/java/com/mini/capi/mybatis/demo.java b/src/main/java/com/mini/capi/mybatis/demo.java index 9132fb0..597fc2f 100644 --- a/src/main/java/com/mini/capi/mybatis/demo.java +++ b/src/main/java/com/mini/capi/mybatis/demo.java @@ -29,7 +29,7 @@ public class demo { .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper")); }) .strategyConfig(builder -> { - builder.addInclude("biz_municipalities,biz_api_doc,biz_api_param") + builder.addInclude("biz_sync_task,biz_db_config") .addTablePrefix("biz_") .entityBuilder() .enableLombok() diff --git a/src/main/resources/mapper/DbConfigMapper.xml b/src/main/resources/mapper/DbConfigMapper.xml new file mode 100644 index 0000000..6188274 --- /dev/null +++ b/src/main/resources/mapper/DbConfigMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + create_time, db_id, db_type, db_name, host, port, username, password, driver_class, url_template, is_active, update_time, f_tenant_id, f_flow_id, f_flow_task_id, f_flow_state + + + diff --git a/src/main/resources/mapper/SyncTaskMapper.xml b/src/main/resources/mapper/SyncTaskMapper.xml new file mode 100644 index 0000000..0a4bc9c --- /dev/null +++ b/src/main/resources/mapper/SyncTaskMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + create_time, task_id, task_name, source_db_id, target_db_id, source_table, target_table, sync_type, increment_column, cron_expression, is_active, last_sync_time, update_time, f_tenant_id, f_flow_id, f_flow_task_id, f_flow_state + + +