Forráskód Böngészése

chore: enable async and add dimension tables migration

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Sisyphus 3 hónapja
szülő
commit
18bff44c91

+ 2 - 0
cfc-backend/src/main/java/com/etotem/cfc/CfcApplication.java

@@ -4,11 +4,13 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 
 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
 @MapperScan("com.etotem.cfc.mapper")
 @MapperScan("com.etotem.cfc.mapper")
 @EnableScheduling
 @EnableScheduling
+@EnableAsync
 public class CfcApplication {
 public class CfcApplication {
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {

+ 88 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -2633,6 +2633,94 @@ try {
         } catch (Exception e) {
         } catch (Exception e) {
             // 列已存在,忽略错误
             // 列已存在,忽略错误
         }
         }
+
+        // 创建维度配置表
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS product_dimension_config (" +
+                "id BIGINT PRIMARY KEY AUTO_INCREMENT, " +
+                "dimension_code VARCHAR(50) NOT NULL UNIQUE COMMENT '维度代码: body/mind/wisdom/action/wealth', " +
+                "dimension_name VARCHAR(100) NOT NULL COMMENT '维度名称', " +
+                "dimension_type VARCHAR(50) NOT NULL DEFAULT 'five' COMMENT '类型: five(五维)/action(行动)/other', " +
+                "parent_id BIGINT COMMENT '父级ID,无父级为NULL', " +
+                "sort INT DEFAULT 0 COMMENT '排序', " +
+                "enabled TINYINT(1) DEFAULT 1 COMMENT '启用: 0禁用 1启用', " +
+                "dify_dataset_id VARCHAR(100) COMMENT 'Dify Dataset ID,不填则不同步', " +
+                "remark VARCHAR(500) COMMENT '备注', " +
+                "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP " +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维度配置表'");
+            log.info("已创建product_dimension_config表");
+        } catch (Exception e) {
+            log.warn("创建product_dimension_config表可能已存在: {}", e.getMessage());
+        }
+
+        // 创建知识库表
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS dan_knowledge_base (" +
+                "id BIGINT PRIMARY KEY AUTO_INCREMENT, " +
+                "title VARCHAR(200) NOT NULL COMMENT '知识标题', " +
+                "content TEXT NOT NULL COMMENT '知识内容', " +
+                "sort INT DEFAULT 0 COMMENT '排序', " +
+                "status TINYINT(1) DEFAULT 1 COMMENT '状态: 0禁用 1启用', " +
+                "remark VARCHAR(500) COMMENT '备注', " +
+                "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP " +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库表'");
+            log.info("已创建dan_knowledge_base表");
+        } catch (Exception e) {
+            log.warn("创建dan_knowledge_base表可能已存在: {}", e.getMessage());
+        }
+
+        // 创建标签表
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS dan_knowledge_tag (" +
+                "id BIGINT PRIMARY KEY AUTO_INCREMENT, " +
+                "tag_name VARCHAR(100) NOT NULL UNIQUE COMMENT '标签名', " +
+                "tag_type VARCHAR(50) DEFAULT 'custom' COMMENT '标签类型: custom/auto', " +
+                "created_at DATETIME DEFAULT CURRENT_TIMESTAMP " +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='标签表'");
+            log.info("已创建dan_knowledge_tag表");
+        } catch (Exception e) {
+            log.warn("创建dan_knowledge_tag表可能已存在: {}", e.getMessage());
+        }
+
+        // 创建知识-维度关联表
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS dan_knowledge_base_dimension (" +
+                "id BIGINT PRIMARY KEY AUTO_INCREMENT, " +
+                "knowledge_id BIGINT NOT NULL COMMENT '知识库ID', " +
+                "dimension_id BIGINT NOT NULL COMMENT '维度配置ID', " +
+                "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                "UNIQUE KEY uk_knowledge_dimension (knowledge_id, dimension_id) " +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识-维度关联表'");
+            log.info("已创建dan_knowledge_base_dimension表");
+
+            // 添加外键约束(单独执行避免CREATE TABLE时依赖表不存在)
+            jdbcTemplate.execute("ALTER TABLE dan_knowledge_base_dimension ADD CONSTRAINT fk_kd_knowledge FOREIGN KEY (knowledge_id) REFERENCES dan_knowledge_base(id) ON DELETE CASCADE");
+            jdbcTemplate.execute("ALTER TABLE dan_knowledge_base_dimension ADD CONSTRAINT fk_kd_dimension FOREIGN KEY (dimension_id) REFERENCES product_dimension_config(id) ON DELETE CASCADE");
+            log.info("已添加dan_knowledge_base_dimension外键约束");
+        } catch (Exception e) {
+            log.warn("创建dan_knowledge_base_dimension表可能已存在: {}", e.getMessage());
+        }
+
+        // 创建知识-标签关联表
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS dan_knowledge_base_tag (" +
+                "id BIGINT PRIMARY KEY AUTO_INCREMENT, " +
+                "knowledge_id BIGINT NOT NULL, " +
+                "tag_id BIGINT NOT NULL, " +
+                "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                "UNIQUE KEY uk_knowledge_tag (knowledge_id, tag_id) " +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识-标签关联表'");
+            log.info("已创建dan_knowledge_base_tag表");
+
+            // 添加外键约束
+            jdbcTemplate.execute("ALTER TABLE dan_knowledge_base_tag ADD CONSTRAINT fk_kt_knowledge FOREIGN KEY (knowledge_id) REFERENCES dan_knowledge_base(id) ON DELETE CASCADE");
+            jdbcTemplate.execute("ALTER TABLE dan_knowledge_base_tag ADD CONSTRAINT fk_kt_tag FOREIGN KEY (tag_id) REFERENCES dan_knowledge_tag(id) ON DELETE CASCADE");
+            log.info("已添加dan_knowledge_base_tag外键约束");
+        } catch (Exception e) {
+            log.warn("创建dan_knowledge_base_tag表可能已存在: {}", e.getMessage());
+        }
     }
     }
 
 
     private void insertSysConfigSeed(String key, String value, String desc) {
     private void insertSysConfigSeed(String key, String value, String desc) {