From f217b8133af36f2a763f1f7757fade6ce033a0c4 Mon Sep 17 00:00:00 2001
From: Hanserwei <2628273921@qq.com>
Date: Mon, 20 Oct 2025 21:43:15 +0800
Subject: [PATCH] =?UTF-8?q?feat(data-align):=20=E6=96=B0=E5=A2=9E=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E5=AF=B9=E9=BD=90=E6=97=A5=E5=A2=9E=E9=87=8F=E8=A1=A8?=
=?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 CreateTableMapper 接口定义多个创建临时表方法
- 新增 CreateTableMapper.xml 实现具体建表 SQL逻辑
- 修改 CreateTableXxlJob 定时任务,集成表创建逻辑
- 新增 TableConstants 工具类用于构建表名后缀
- 更新 MyBatis 配置文件路径映射及词典配置
- 支持按日期和分片自动创建七种数据对齐相关表结构
---
.idea/MyBatisCodeHelperDatasource.xml | 3 +-
.idea/dictionaries/project.xml | 1 +
.../data/align/constant/TableConstants.java | 21 +++++
.../domain/mapper/CreateTableMapper.java | 60 +++++++++++++
.../data/align/job/CreateTableXxlJob.java | 42 ++++++++-
.../resources/mapperxml/CreateTableMapper.xml | 86 +++++++++++++++++++
6 files changed, 210 insertions(+), 3 deletions(-)
create mode 100644 han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/constant/TableConstants.java
create mode 100644 han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/domain/mapper/CreateTableMapper.java
create mode 100644 han-note-data-align/src/main/resources/mapperxml/CreateTableMapper.xml
diff --git a/.idea/MyBatisCodeHelperDatasource.xml b/.idea/MyBatisCodeHelperDatasource.xml
index c889800..8d1e3bb 100644
--- a/.idea/MyBatisCodeHelperDatasource.xml
+++ b/.idea/MyBatisCodeHelperDatasource.xml
@@ -20,10 +20,11 @@
-
+
diff --git a/.idea/dictionaries/project.xml b/.idea/dictionaries/project.xml
index a32c9e6..2f75dd8 100644
--- a/.idea/dictionaries/project.xml
+++ b/.idea/dictionaries/project.xml
@@ -4,6 +4,7 @@
asyn
hannote
hanserwei
+ jobhandler
nacos
operationlog
rustfs
diff --git a/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/constant/TableConstants.java b/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/constant/TableConstants.java
new file mode 100644
index 0000000..41fb298
--- /dev/null
+++ b/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/constant/TableConstants.java
@@ -0,0 +1,21 @@
+package com.hanserwei.hannote.data.align.constant;
+
+public class TableConstants {
+
+ /**
+ * 表名中的分隔符
+ */
+ private static final String TABLE_NAME_SEPARATE = "_";
+
+ /**
+ * 拼接表名后缀
+ *
+ * @param hashKey 哈希Keu
+ * @return 表名后缀
+ */
+ public static String buildTableNameSuffix(String date, int hashKey) {
+ // 拼接完整的表名
+ return date + TABLE_NAME_SEPARATE + hashKey;
+ }
+
+}
\ No newline at end of file
diff --git a/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/domain/mapper/CreateTableMapper.java b/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/domain/mapper/CreateTableMapper.java
new file mode 100644
index 0000000..d8dd26d
--- /dev/null
+++ b/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/domain/mapper/CreateTableMapper.java
@@ -0,0 +1,60 @@
+package com.hanserwei.hannote.data.align.domain.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 自动创建表
+ */
+@Mapper
+public interface CreateTableMapper {
+
+ /**
+ * 创建日增量表:关注数计数变更
+ *
+ * @param tableNameSuffix 表名后缀
+ */
+ void createDataAlignFollowingCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
+
+ /**
+ * 创建日增量表:粉丝数计数变更
+ *
+ * @param tableNameSuffix 表名后缀
+ */
+ void createDataAlignFansCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
+
+ /**
+ * 创建日增量表:笔记收藏数计数变更
+ *
+ * @param tableNameSuffix 表名后缀
+ */
+ void createDataAlignNoteCollectCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
+
+ /**
+ * 创建日增量表:用户被收藏数计数变更
+ *
+ * @param tableNameSuffix 表名后缀
+ */
+ void createDataAlignUserCollectCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
+
+ /**
+ * 创建日增量表:用户被点赞数计数变更
+ *
+ * @param tableNameSuffix 表名后缀
+ */
+ void createDataAlignUserLikeCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
+
+ /**
+ * 创建日增量表:笔记点赞数计数变更
+ *
+ * @param tableNameSuffix 表名后缀
+ */
+ void createDataAlignNoteLikeCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
+
+ /**
+ * 创建日增量表:笔记发布数计数变更
+ *
+ * @param tableNameSuffix 表名后缀
+ */
+ void createDataAlignNotePublishCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
+}
\ No newline at end of file
diff --git a/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/job/CreateTableXxlJob.java b/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/job/CreateTableXxlJob.java
index f8f1f56..9c11feb 100644
--- a/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/job/CreateTableXxlJob.java
+++ b/han-note-data-align/src/main/java/com/hanserwei/hannote/data/align/job/CreateTableXxlJob.java
@@ -1,20 +1,58 @@
package com.hanserwei.hannote.data.align.job;
+import com.hanserwei.hannote.data.align.constant.TableConstants;
+import com.hanserwei.hannote.data.align.domain.mapper.CreateTableMapper;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
+import jakarta.annotation.Resource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
@Component
+@RefreshScope
+@SuppressWarnings("unused")
public class CreateTableXxlJob {
+ @Resource
+ private CreateTableMapper createTableMapper;
+
+ /**
+ * 表总分片数
+ */
+ @Value("${table.shards}")
+ private int tableShards;
+
/**
* 1、简单任务示例(Bean模式)
*/
+ @SuppressWarnings("unused")
@XxlJob("createTableJobHandler")
- public void createTableJobHandler() throws Exception {
+ public void createTableJobHandler() {
XxlJobHelper.log("## 开始初始化明日增量数据表...");
+ String date = LocalDate.now().plusDays(1) // 明日的日期
+ .format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+ XxlJobHelper.log("## 开始创建日增量数据表,日期: {}...", date);
+ if (tableShards > 0) {
+ for (int hashKey = 0; hashKey < tableShards; hashKey++) {
+ // 表名后缀
+ String tableNameSuffix = TableConstants.buildTableNameSuffix(date, hashKey);
- // TODO
+ // 创建表
+ // 创建表
+ createTableMapper.createDataAlignFollowingCountTempTable(tableNameSuffix);
+ createTableMapper.createDataAlignFansCountTempTable(tableNameSuffix);
+ createTableMapper.createDataAlignNoteCollectCountTempTable(tableNameSuffix);
+ createTableMapper.createDataAlignUserCollectCountTempTable(tableNameSuffix);
+ createTableMapper.createDataAlignUserLikeCountTempTable(tableNameSuffix);
+ createTableMapper.createDataAlignNoteLikeCountTempTable(tableNameSuffix);
+ createTableMapper.createDataAlignNotePublishCountTempTable(tableNameSuffix);
+ }
+ }
+ XxlJobHelper.log("## 创建日增量数据表成功,表名后缀: {}...", date);
}
}
\ No newline at end of file
diff --git a/han-note-data-align/src/main/resources/mapperxml/CreateTableMapper.xml b/han-note-data-align/src/main/resources/mapperxml/CreateTableMapper.xml
new file mode 100644
index 0000000..0cb69e7
--- /dev/null
+++ b/han-note-data-align/src/main/resources/mapperxml/CreateTableMapper.xml
@@ -0,0 +1,86 @@
+
+
+
+
+ CREATE TABLE IF NOT EXISTS `t_data_align_following_count_temp_${tableNameSuffix}`
+ (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_user_id` (`user_id`)
+ ) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_unicode_ci COMMENT ='数据对齐日增量表:关注数';
+
+
+ CREATE TABLE IF NOT EXISTS `t_data_align_fans_count_temp_${tableNameSuffix}`
+ (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_user_id` (`user_id`)
+ ) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_unicode_ci COMMENT ='数据对齐日增量表:粉丝数';
+
+
+
+ CREATE TABLE IF NOT EXISTS `t_data_align_note_collect_count_temp_${tableNameSuffix}`
+ (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `note_id` bigint unsigned NOT NULL COMMENT '笔记ID',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_note_id` (`note_id`)
+ ) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_unicode_ci COMMENT ='数据对齐日增量表:笔记获得收藏数';
+
+
+
+ CREATE TABLE IF NOT EXISTS `t_data_align_user_collect_count_temp_${tableNameSuffix}`
+ (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_user_id` (`user_id`)
+ ) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_unicode_ci COMMENT ='数据对齐日增量表:用户获得收藏数';
+
+
+
+ CREATE TABLE IF NOT EXISTS `t_data_align_user_like_count_temp_${tableNameSuffix}`
+ (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_user_id` (`user_id`)
+ ) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_unicode_ci COMMENT ='数据对齐日增量表:用户获得点赞数';
+
+
+
+ CREATE TABLE IF NOT EXISTS `t_data_align_note_like_count_temp_${tableNameSuffix}`
+ (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `note_id` bigint unsigned NOT NULL COMMENT '笔记ID',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_note_id` (`note_id`)
+ ) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_unicode_ci COMMENT ='数据对齐日增量表:笔记获得点赞数';
+
+
+
+ CREATE TABLE IF NOT EXISTS `t_data_align_note_publish_count_temp_${tableNameSuffix}`
+ (
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `note_id` bigint unsigned NOT NULL COMMENT '笔记ID',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_note_id` (`note_id`)
+ ) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_unicode_ci COMMENT ='数据对齐日增量表:用户发布笔记数';
+
+
\ No newline at end of file