|
|
@@ -8611,5 +8611,132 @@ private void runMigration100() {
|
|
|
} catch (Exception e) {
|
|
|
log.warn("迁移213: 微行动维度映射更新失败: " + e.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ // 迁移214: 创建 nutrition_category 表(营养产品分类)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute(
|
|
|
+ "CREATE TABLE IF NOT EXISTS nutrition_category (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "name VARCHAR(50) NOT NULL COMMENT '分类名', " +
|
|
|
+ "parent_id BIGINT DEFAULT NULL COMMENT '父分类ID', " +
|
|
|
+ "sort_order INT DEFAULT 0 COMMENT '排序', " +
|
|
|
+ "create_time DATETIME DEFAULT CURRENT_TIMESTAMP" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养产品分类'"
|
|
|
+ );
|
|
|
+ log.info("已创建nutrition_category表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建nutrition_category表失败(可能已存在): " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移215: 创建 nutrition_brand 表(品牌)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute(
|
|
|
+ "CREATE TABLE IF NOT EXISTS nutrition_brand (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "name VARCHAR(100) NOT NULL COMMENT '品牌名', " +
|
|
|
+ "logo_url VARCHAR(500) DEFAULT NULL COMMENT '品牌Logo', " +
|
|
|
+ "description TEXT COMMENT '品牌简介', " +
|
|
|
+ "country VARCHAR(50) DEFAULT NULL COMMENT '产地国', " +
|
|
|
+ "create_time DATETIME DEFAULT CURRENT_TIMESTAMP" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养产品品牌'"
|
|
|
+ );
|
|
|
+ log.info("已创建nutrition_brand表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建nutrition_brand表失败(可能已存在): " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移216: 创建 nutrition_product 表(营养产品主表)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute(
|
|
|
+ "CREATE TABLE IF NOT EXISTS nutrition_product (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "name VARCHAR(200) NOT NULL COMMENT '产品名称', " +
|
|
|
+ "brand_id BIGINT DEFAULT NULL COMMENT '品牌ID', " +
|
|
|
+ "category_id BIGINT DEFAULT NULL COMMENT '分类ID', " +
|
|
|
+ "sub_category VARCHAR(50) DEFAULT NULL COMMENT '子分类', " +
|
|
|
+ "form VARCHAR(30) DEFAULT NULL COMMENT '剂型', " +
|
|
|
+ "net_content VARCHAR(50) DEFAULT NULL COMMENT '净含量', " +
|
|
|
+ "shelf_life VARCHAR(50) DEFAULT NULL COMMENT '保质期', " +
|
|
|
+ "suitable_for VARCHAR(200) DEFAULT NULL COMMENT '适用人群', " +
|
|
|
+ "image_url VARCHAR(500) DEFAULT NULL COMMENT '产品图', " +
|
|
|
+ "description TEXT COMMENT '产品描述', " +
|
|
|
+ "status TINYINT DEFAULT 1 COMMENT '状态 0下架/1上架', " +
|
|
|
+ "create_time DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+ "update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
+ "INDEX idx_brand (brand_id), " +
|
|
|
+ "INDEX idx_category (category_id)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养产品'"
|
|
|
+ );
|
|
|
+ log.info("已创建nutrition_product表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建nutrition_product表失败(可能已存在): " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移217: 创建 nutrition_ingredient 表(成分明细)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute(
|
|
|
+ "CREATE TABLE IF NOT EXISTS nutrition_ingredient (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "product_id BIGINT NOT NULL COMMENT '产品ID', " +
|
|
|
+ "ingredient_type VARCHAR(20) COMMENT '成分类型', " +
|
|
|
+ "name VARCHAR(100) NOT NULL COMMENT '成分名', " +
|
|
|
+ "strain VARCHAR(100) DEFAULT NULL COMMENT '菌株号', " +
|
|
|
+ "amount_per_serving DECIMAL(10,2) DEFAULT NULL COMMENT '每份含量', " +
|
|
|
+ "unit VARCHAR(20) DEFAULT NULL COMMENT '单位', " +
|
|
|
+ "daily_value VARCHAR(50) DEFAULT NULL COMMENT '每日参考值%', " +
|
|
|
+ "purpose VARCHAR(200) DEFAULT NULL COMMENT '功效说明', " +
|
|
|
+ "create_time DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+ "INDEX idx_product (product_id)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养产品成分明细'"
|
|
|
+ );
|
|
|
+ log.info("已创建nutrition_ingredient表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建nutrition_ingredient表失败(可能已存在): " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移218: 创建 nutrition_platform_listing 表(平台在售信息)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute(
|
|
|
+ "CREATE TABLE IF NOT EXISTS nutrition_platform_listing (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "product_id BIGINT NOT NULL COMMENT '产品ID', " +
|
|
|
+ "platform VARCHAR(30) COMMENT '平台', " +
|
|
|
+ "platform_url VARCHAR(500) DEFAULT NULL COMMENT '商品链接', " +
|
|
|
+ "current_price DECIMAL(10,2) DEFAULT NULL COMMENT '当前价格', " +
|
|
|
+ "original_price DECIMAL(10,2) DEFAULT NULL COMMENT '原价/划线价', " +
|
|
|
+ "price_unit VARCHAR(30) DEFAULT NULL COMMENT '价格单位', " +
|
|
|
+ "price_per_unit DECIMAL(10,2) DEFAULT NULL COMMENT '每单位价格', " +
|
|
|
+ "sales_count INT DEFAULT NULL COMMENT '销量', " +
|
|
|
+ "stock_status VARCHAR(20) DEFAULT NULL COMMENT '库存状态', " +
|
|
|
+ "last_checked DATETIME DEFAULT NULL COMMENT '最后爬取时间', " +
|
|
|
+ "create_time DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+ "update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
+ "INDEX idx_product (product_id), " +
|
|
|
+ "INDEX idx_platform (platform)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养产品平台在售信息'"
|
|
|
+ );
|
|
|
+ log.info("已创建nutrition_platform_listing表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建nutrition_platform_listing表失败(可能已存在): " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移219: 创建 nutrition_product_review 表(评价)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute(
|
|
|
+ "CREATE TABLE IF NOT EXISTS nutrition_product_review (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "platform_listing_id BIGINT NOT NULL COMMENT '平台在售ID', " +
|
|
|
+ "source VARCHAR(30) DEFAULT NULL COMMENT '来源平台', " +
|
|
|
+ "rating DECIMAL(2,1) DEFAULT NULL COMMENT '评分', " +
|
|
|
+ "review_count INT DEFAULT NULL COMMENT '评价数', " +
|
|
|
+ "good_rate VARCHAR(10) DEFAULT NULL COMMENT '好评率', " +
|
|
|
+ "last_updated DATETIME DEFAULT NULL COMMENT '最后更新时间', " +
|
|
|
+ "INDEX idx_listing (platform_listing_id)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养产品评价'"
|
|
|
+ );
|
|
|
+ log.info("已创建nutrition_product_review表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建nutrition_product_review表失败(可能已存在): " + e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
}
|