diff --git a/db/database_readme.md b/db/database_readme.md new file mode 100644 index 0000000..11881ae --- /dev/null +++ b/db/database_readme.md @@ -0,0 +1,89 @@ +# 旅游内容创作系统数据库 + +本文档介绍了旅游内容创作系统的数据库结构和使用方法。 + +## 数据库概述 + +旅游内容创作系统数据库包含以下主要表: + +- **用户表(user)**: 存储系统用户信息 +- **素材文件夹表(material_folder)**: 管理素材文件夹结构 +- **素材表(material)**: 存储各类素材信息 +- **景区表(scenicSpot)**: 存储景区相关信息 +- **产品表(product)**: 存储旅游产品信息 +- **内容风格表(contentStyle)**: 定义内容创作风格 +- **目标人群表(targetAudience)**: 定义目标受众群体 +- **选题信息表(topics)**: 存储选题信息 +- **关联表**: 包括选题-景区、选题-产品、选题-风格、选题-目标受众等关联表 + +## 初始化数据库 + +使用以下命令初始化数据库并插入模拟数据: + +```bash +# 添加执行权限 +chmod +x db/init_db.sh + +# 执行初始化脚本 +./db/init_db.sh +``` + +脚本将创建名为`travel_content`的数据库,创建所有必要的表,并插入模拟数据。 + +## 查询数据库 + +### 查看数据库信息 + +使用以下命令查看数据库的详细信息: + +```bash +# 添加执行权限 +chmod +x db/show_db_info.sh + +# 执行查询脚本 +./db/show_db_info.sh +``` + +此脚本将显示数据库中的所有表和主要数据。 + +## 数据库模拟数据 + +初始化脚本已插入以下模拟数据: + +- **用户**: 3个用户(管理员、张三、李四) +- **景区**: 4个景区(黄山风景区、张家界国家森林公园、九寨沟风景区、丽江古城) +- **产品**: 4个产品(黄山亲子三日游、张家界避暑五日游、九寨沟摄影六日游、云南民族文化七日游) +- **内容风格**: 6种风格(攻略风、清新文艺风、幽默诙谐风、专业严谨风、情感共鸣风、极力推荐风) +- **目标受众**: 6种受众(年轻情侣、家庭亲子、中老年群体、商务人士、学生群体、高净值人群) +- **选题**: 4个选题(五一黄山亲子游攻略、张家界夏季避暑游、九寨沟秋色摄影指南、云南民族文化探秘之旅) +- **素材文件夹**: 5个文件夹 +- **素材**: 5个素材(图片、视频、文档) + +## 数据库结构 + +数据库表之间的关系如下: + +1. 用户(user) 1:N 素材文件夹(material_folder) +2. 用户(user) 1:N 素材(material) +3. 素材文件夹(material_folder) 1:N 素材(material) +4. 用户(user) 1:N 景区(scenicSpot) +5. 用户(user) 1:N 产品(product) +6. 用户(user) 1:N 选题(topics) +7. 选题(topics) N:M 景区(scenicSpot) 通过 topicScenic 关联 +8. 选题(topics) N:M 产品(product) 通过 topicProduct 关联 +9. 选题(topics) N:M 内容风格(contentStyle) 通过 topicStyle 关联 +10. 选题(topics) N:M 目标受众(targetAudience) 通过 topicAudience 关联 + +## 模拟数据特点 + +根据resource/prompt目录中的信息,模拟数据具有以下特点: + +1. **内容风格**:包含攻略风、清新文艺风等多种风格,参考了resource/prompt/Style目录中的风格提示词 +2. **目标受众**:根据resource/prompt/Demand目录中的用户画像,细化了各类受众群体的特征 +3. **选题标题**:添加了emoji表情,使标题更有网感和吸引力 +4. **产品描述**:更加详细,突出产品特色和目标受众需求 +5. **时间节点**:参考了resource/prompt/Refer/2025各月节日宣传节点时间表.md,使用2025年的时间节点 + +## 密码信息 + +所有模拟用户的密码均为: `123456`(MD5加密后存储) \ No newline at end of file diff --git a/db/init_database.sql b/db/init_database.sql new file mode 100644 index 0000000..781975d --- /dev/null +++ b/db/init_database.sql @@ -0,0 +1,473 @@ +-- 创建数据库 +DROP DATABASE IF EXISTS travel_content; +CREATE DATABASE IF NOT EXISTS travel_content; +USE travel_content; + +-- 创建用户表 +CREATE TABLE IF NOT EXISTS user ( + id BIGINT AUTO_INCREMENT COMMENT 'id' PRIMARY KEY, + userAccount VARCHAR(256) NOT NULL COMMENT '账号', + userPassword VARCHAR(512) NOT NULL COMMENT '密码', + userName VARCHAR(256) NULL COMMENT '用户昵称', + userAvatar VARCHAR(1024) NULL COMMENT '用户头像', + userEmail VARCHAR(255) NULL COMMENT '用户邮箱', + userProfile VARCHAR(512) NULL COMMENT '用户简介', + userRole VARCHAR(256) DEFAULT 'user' NOT NULL COMMENT '用户角色:user/admin', + editTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '编辑时间', + createTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间', + updateTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + lastLogin DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '最后登录时间', + isDelete TINYINT DEFAULT 0 NOT NULL COMMENT '是否删除', + CONSTRAINT uk_userAccount UNIQUE (userAccount), + CONSTRAINT userEmail UNIQUE (userEmail) +) COMMENT '用户' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_user_name ON user (userName); + +-- 创建素材文件夹表 +CREATE TABLE IF NOT EXISTS material_folder ( + id BIGINT AUTO_INCREMENT COMMENT 'id' PRIMARY KEY, + userId BIGINT NOT NULL COMMENT '创建用户id', + folderName VARCHAR(256) NOT NULL COMMENT '文件夹名称', + parentId BIGINT DEFAULT 0 NOT NULL COMMENT '父文件夹id,0表示根目录', + description VARCHAR(512) NULL COMMENT '文件夹描述', + isPublic TINYINT DEFAULT 0 NOT NULL COMMENT '是否公开:0私有,1公开', + createTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间', + updateTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + isDelete TINYINT DEFAULT 0 NOT NULL COMMENT '是否删除', + CONSTRAINT uk_folder_name_user UNIQUE (folderName, userId, parentId, isDelete) +) COMMENT '素材文件夹表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_material_folder_parent ON material_folder (parentId); +CREATE INDEX idx_material_folder_user ON material_folder (userId); + +-- 创建素材表 +CREATE TABLE IF NOT EXISTS material ( + id BIGINT AUTO_INCREMENT COMMENT 'id' PRIMARY KEY, + userId BIGINT NOT NULL COMMENT '上传用户id', + folderId BIGINT DEFAULT 0 NOT NULL COMMENT '所属文件夹id,0表示根目录', + materialName VARCHAR(256) NOT NULL COMMENT '素材名称', + materialType VARCHAR(32) NOT NULL COMMENT '素材类型:image/video/document', + filePath VARCHAR(1024) NOT NULL COMMENT '文件存储路径', + fileSize BIGINT NOT NULL COMMENT '文件大小(字节)', + fileFormat VARCHAR(32) NOT NULL COMMENT '文件格式(jpg/png/mp4/pdf/doc等)', + fileUrl VARCHAR(1024) NULL COMMENT '文件访问URL', + description VARCHAR(512) NULL COMMENT '素材描述', + tags VARCHAR(512) NULL COMMENT '素材标签(逗号分隔)', + isPublic TINYINT DEFAULT 0 NOT NULL COMMENT '是否公开:0私有,1公开', + status VARCHAR(32) DEFAULT 'active' NOT NULL COMMENT '状态:active/inactive/deleted', + viewCount INT DEFAULT 0 NOT NULL COMMENT '查看次数', + downloadCount INT DEFAULT 0 NOT NULL COMMENT '下载次数', + createTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间', + updateTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + isDelete TINYINT DEFAULT 0 NOT NULL COMMENT '是否删除', + CONSTRAINT uk_material_name_user_folder UNIQUE (materialName, userId, folderId) +) COMMENT '素材表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_material_create_time ON material (createTime); +CREATE INDEX idx_material_folder ON material (folderId); +CREATE INDEX idx_material_public ON material (isPublic); +CREATE INDEX idx_material_status ON material (status); +CREATE INDEX idx_material_type ON material (materialType); +CREATE INDEX idx_material_user ON material (userId); + +-- 创建景区表 +CREATE TABLE IF NOT EXISTS scenicSpot ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + userId BIGINT NOT NULL COMMENT '用户ID', + name VARCHAR(100) NOT NULL COMMENT '景区名称', + address VARCHAR(255) NULL COMMENT '地址', + trafficInfo VARCHAR(255) NULL COMMENT '交通指南', + description TEXT NULL COMMENT '描述', + advantage TEXT NULL COMMENT '景区优势', + highlight TEXT NULL COMMENT '景区亮点', + isPublic TINYINT NOT NULL DEFAULT 0 COMMENT '是否公开(0私有1公开)', + isDelete TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除', + createTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) COMMENT '景区表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_scenicSpot_user ON scenicSpot (userId); +CREATE INDEX idx_scenicSpot_name ON scenicSpot (name); +CREATE INDEX idx_scenicSpot_public ON scenicSpot (isPublic); + +-- 创建产品表 +CREATE TABLE IF NOT EXISTS product ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + userId BIGINT NOT NULL COMMENT '用户ID', + name VARCHAR(100) NOT NULL COMMENT '产品名称', + originPrice DECIMAL(10,2) NULL COMMENT '原价', + realPrice DECIMAL(10,2) NULL COMMENT '实际价格', + packageInfo VARCHAR(255) NULL COMMENT '套票详情', + salesPeriod VARCHAR(100) NULL COMMENT '售卖期', + stock INT NULL COMMENT '库存', + advantage TEXT NULL COMMENT '产品优势', + highlight TEXT NULL COMMENT '产品亮点', + description TEXT NULL COMMENT '产品描述', + isPublic TINYINT NOT NULL DEFAULT 0 COMMENT '是否公开(0私有1公开)', + isDelete TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除', + createTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) COMMENT '产品表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_product_user ON product (userId); +CREATE INDEX idx_product_name ON product (name); +CREATE INDEX idx_product_public ON product (isPublic); + +-- 创建内容风格表 +CREATE TABLE IF NOT EXISTS contentStyle ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + styleName VARCHAR(100) NOT NULL COMMENT '风格名称', + description TEXT NULL COMMENT '描述', + isDelete TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除', + createTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + CONSTRAINT uk_styleName UNIQUE (styleName, isDelete) +) COMMENT '内容风格表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_contentStyle_name ON contentStyle (styleName); + +-- 创建目标人群表 +CREATE TABLE IF NOT EXISTS targetAudience ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 'id', + audienceName VARCHAR(100) NOT NULL COMMENT '受众名称', + description TEXT NULL COMMENT '描述', + isDelete TINYINT DEFAULT 0 NOT NULL COMMENT '是否删除', + createTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间', + updateTime DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + CONSTRAINT uk_audienceName UNIQUE (audienceName, isDelete) +) COMMENT '目标人群表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_targetAudience_name ON targetAudience (audienceName); + +-- 创建文档解析表 +CREATE TABLE IF NOT EXISTS documentParse ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + scenicName VARCHAR(100) NULL COMMENT '景区名称', + address VARCHAR(255) NULL COMMENT '地址', + trafficInfo VARCHAR(255) NULL COMMENT '交通指南', + description TEXT NULL COMMENT '描述', + advantage TEXT NULL COMMENT '景区优势', + highlight TEXT NULL COMMENT '景区亮点', + productName VARCHAR(100) NULL COMMENT '产品名称', + originPrice DECIMAL(10,2) NULL COMMENT '原价', + realPrice DECIMAL(10,2) NULL COMMENT '实际价格', + packageInfo VARCHAR(255) NULL COMMENT '套票详情', + salesPeriod VARCHAR(100) NULL COMMENT '售卖期', + stock INT NULL COMMENT '库存', + productAdvantage TEXT NULL COMMENT '产品优势', + productHighlight TEXT NULL COMMENT '产品亮点', + productDescription TEXT NULL COMMENT '产品描述', + isDelete TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除', + createTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) COMMENT '文档解析表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_documentParse_scenicName ON documentParse (scenicName); +CREATE INDEX idx_documentParse_productName ON documentParse (productName); + +-- 创建选题信息表 +CREATE TABLE IF NOT EXISTS topics ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + userId BIGINT NOT NULL COMMENT '用户ID', + title VARCHAR(100) NOT NULL COMMENT '选题标题', + description VARCHAR(255) NULL COMMENT '选题描述', + logic TEXT NULL COMMENT '选题逻辑', + productLogic TEXT NULL COMMENT '产品选择逻辑', + styleLogic TEXT NULL COMMENT '风格选择逻辑', + targetAudienceLogic TEXT NULL COMMENT '目标受众选择逻辑', + publicationDates TEXT NULL COMMENT '计划发布日期(如"2025-05-01,2025-05-03"或JSON)', + status VARCHAR(20) NOT NULL DEFAULT 'draft' COMMENT '状态', + isLocked TINYINT NOT NULL DEFAULT 0 COMMENT '是否锁定', + isDelete TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除', + createTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) COMMENT '选题信息表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idxTopicsUser ON topics (userId); +CREATE INDEX idxTopicsTitle ON topics (title); +CREATE INDEX idxTopicsStatus ON topics (status); + +-- 创建选题-景区关联表 +CREATE TABLE IF NOT EXISTS topicScenic ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + topicId BIGINT NOT NULL COMMENT '选题ID', + scenicId BIGINT NOT NULL COMMENT '景区ID' +) COMMENT '选题-景区关联表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_topic_scenic_topicId ON topicScenic (topicId); +CREATE INDEX idx_topic_scenic_scenicId ON topicScenic (scenicId); + +-- 创建选题-产品关联表 +CREATE TABLE IF NOT EXISTS topicProduct ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + topicId BIGINT NOT NULL COMMENT '选题ID', + productId BIGINT NOT NULL COMMENT '产品ID' +) COMMENT '选题-产品关联表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_topic_product_topicId ON topicProduct (topicId); +CREATE INDEX idx_topic_product_productId ON topicProduct (productId); + +-- 创建选题-风格关联表 +CREATE TABLE IF NOT EXISTS topicStyle ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + topicId BIGINT NOT NULL COMMENT '选题ID', + styleId BIGINT NOT NULL COMMENT '风格ID' +) COMMENT '选题-风格关联表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_topic_style_topicId ON topicStyle (topicId); +CREATE INDEX idx_topic_style_styleId ON topicStyle (styleId); + +-- 创建选题-目标受众关联表 +CREATE TABLE IF NOT EXISTS topicAudience ( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键id', + topicId BIGINT NOT NULL COMMENT '选题ID', + audienceId BIGINT NOT NULL COMMENT '受众ID' +) COMMENT '选题-目标受众关联表' COLLATE = utf8mb4_unicode_ci; + +CREATE INDEX idx_topic_audience_topicId ON topicAudience (topicId); +CREATE INDEX idx_topic_audience_audienceId ON topicAudience (audienceId); + +-- 添加外键约束 +ALTER TABLE material_folder +ADD CONSTRAINT fk_material_folder_user +FOREIGN KEY (userId) REFERENCES user (id) +ON DELETE CASCADE; + +ALTER TABLE material +ADD CONSTRAINT fk_material_user +FOREIGN KEY (userId) REFERENCES user (id) +ON DELETE CASCADE; + +ALTER TABLE material +ADD CONSTRAINT fk_material_folder +FOREIGN KEY (folderId) REFERENCES material_folder (id) +ON DELETE CASCADE; + +-- 插入模拟数据 + +-- 插入用户数据 +INSERT INTO user (userAccount, userPassword, userName, userAvatar, userEmail, userProfile, userRole) +VALUES +('admin', 'e10adc3949ba59abbe56e057f20f883e', '管理员', 'https://example.com/avatar1.jpg', 'admin@example.com', '系统管理员', 'admin'), +('user1', 'e10adc3949ba59abbe56e057f20f883e', '张三', 'https://example.com/avatar2.jpg', 'zhangsan@example.com', '旅游内容创作者', 'user'), +('user2', 'e10adc3949ba59abbe56e057f20f883e', '李四', 'https://example.com/avatar3.jpg', 'lisi@example.com', '资深旅游策划', 'user'); + +-- 插入素材文件夹数据 +INSERT INTO material_folder (userId, folderName, parentId, description, isPublic) +VALUES +(1, '景区图片', 0, '各景区精选图片', 1), +(1, '产品介绍', 0, '各产品介绍素材', 1), +(2, '我的素材', 0, '个人素材库', 0), +(2, '风景照片', 3, '各地风景照片', 0), +(3, '宣传材料', 0, '宣传用素材', 0); + +-- 插入素材数据 +INSERT INTO material (userId, folderId, materialName, materialType, filePath, fileSize, fileFormat, fileUrl, description, tags, isPublic) +VALUES +(1, 1, '黄山日出', 'image', '/uploads/huangshan_sunrise.jpg', 2048000, 'jpg', 'https://example.com/huangshan_sunrise.jpg', '黄山日出美景', '黄山,日出,风景', 1), +(1, 1, '张家界全景', 'image', '/uploads/zhangjiajie_panorama.jpg', 3072000, 'jpg', 'https://example.com/zhangjiajie_panorama.jpg', '张家界全景图', '张家界,全景,自然', 1), +(1, 2, '三亚双飞5日游', 'document', '/uploads/sanya_5days.pdf', 1024000, 'pdf', 'https://example.com/sanya_5days.pdf', '三亚双飞5日游产品介绍', '三亚,旅游产品,海滩', 1), +(2, 4, '九寨沟瀑布', 'image', '/uploads/jiuzhaigou_waterfall.jpg', 2560000, 'jpg', 'https://example.com/jiuzhaigou_waterfall.jpg', '九寨沟瀑布特写', '九寨沟,瀑布,自然风光', 0), +(3, 5, '丽江古城宣传片', 'video', '/uploads/lijiang_promo.mp4', 102400000, 'mp4', 'https://example.com/lijiang_promo.mp4', '丽江古城宣传视频', '丽江,古城,文化,宣传', 0); + +-- 插入景区数据 +INSERT INTO scenicSpot (userId, name, address, trafficInfo, description, advantage, highlight, isPublic) +VALUES +(1, '黄山风景区', '安徽省黄山市黄山区汤口镇', '可乘坐高铁到黄山北站,再转乘景区大巴', '黄山是中国著名的山岳景区,以奇松、怪石、云海、温泉"四绝"闻名于世。', '国家5A级景区,世界文化与自然双遗产,云海日出景观壮观', '云海日出、迎客松、温泉、奇松怪石', 1), +(1, '张家界国家森林公园', '湖南省张家界市武陵源区', '可乘坐飞机到张家界荷花机场,再转乘景区大巴', '张家界国家森林公园是中国第一个国家森林公园,以峰林地貌为主要特色。', '阿凡达取景地,独特的石柱地貌,夏季凉爽避暑胜地', '天子山、袁家界、金鞭溪、玻璃栈道', 1), +(2, '九寨沟风景区', '四川省阿坝藏族羌族自治州九寨沟县', '可乘坐飞机到九黄机场,再转乘景区大巴', '九寨沟以彩池、瀑布、雪山、森林"四绝"闻名于世。', '水景资源丰富,色彩斑斓的湖泊,秋季层林尽染', '五花海、诺日朗瀑布、长海、树正群海', 0), +(3, '丽江古城', '云南省丽江市古城区', '可乘坐飞机到丽江三义机场,再乘坐出租车前往古城', '丽江古城是一座历史文化名城,是中国为数不多的保存相当完好的少数民族古城。', '纳西族文化,古城风貌保存完好,民族风情浓郁', '四方街、木府、黑龙潭、万古楼', 1); + +-- 插入产品数据 +INSERT INTO product (userId, name, originPrice, realPrice, packageInfo, salesPeriod, stock, advantage, highlight, description, isPublic) +VALUES +(1, '黄山亲子三日游', 2199.00, 1899.00, '含往返交通、住宿、门票、导游', '2025-01-01至2025-12-31', 1000, '一价全包,无隐形消费,亲子互动环节丰富', '登顶观日出,泡温泉,亲子科普活动', '黄山三日亲子游,含住宿、餐饮、交通、门票等,专业导游全程陪同,设计多个亲子互动环节,让孩子在游玩中学习自然知识。', 1), +(1, '张家界避暑五日游', 3999.00, 3599.00, '含往返机票、住宿、门票、导游', '2025-06-01至2025-08-31', 800, '全程五星酒店,专车接送,夏季避暑胜地', '玻璃栈道,天门山索道,森林氧吧', '张家界五日避暑游,畅游武陵源核心景区,体验玻璃栈道惊险刺激,享受平均气温仅22℃的夏日清凉。', 1), +(2, '九寨沟摄影六日游', 5299.00, 4899.00, '含往返机票、住宿、门票、导游', '2025-09-15至2025-10-31', 500, '一次游两大世界遗产地,摄影师专业指导', '九寨沟彩池,黄龙钙化池,摄影技巧培训', '九寨沟+黄龙六日摄影专线,资深摄影师全程指导,选择最佳拍摄时间和机位,捕捉秋季九寨最绚丽的色彩。', 0), +(3, '云南民族文化七日游', 6299.00, 5899.00, '含往返机票、住宿、门票、导游', '2025-01-01至2025-12-31', 600, '深度体验云南民族文化,高端精品小团', '丽江古城,洱海环湖,民族村寨体验', '云南丽江+大理七日文化之旅,体验纳西族和白族文化,参与非遗手工艺制作,聆听东巴文化讲解,入住丽江古城内精品客栈。', 1); + +-- 插入内容风格数据 +INSERT INTO contentStyle (styleName, description) +VALUES +('攻略风', '你是景区小红书爆款文案策划,你将根据要求创作爆款文案,根据以下规则一步步执行: +一、标题创作 +步骤:先速览景区资料内容,找到与用户需求适配的景点亮点,然后通读用户给的爆款标题素材,挑选一个在用户画像+节点节日+标题吸睛三个方面最契合的进行改写,创作出全新的爆款标题。在此期间以下几点需要你遵循: +1.必加1个emoji,标题字数18字以内 +2.有网感,结合所在地 +3.标题必须结合我给出的<标题参考格式>进行高相似度仿写 + +二、正文创作 +注意:正文以<你>这种有人味的人称代词视角创作输出,不要出现<宝子们><姐妹们>这些很假的称呼 +1. 通过了解产品和当前节点需求,如情人节要约会、儿童节要带孩子玩、临近周末会考虑周边游、传统节日偏好民俗活动等以此类推,直击用户痛点。 +2. 正文围绕所选定的风格提示词进行创作,有场景感,让人感觉是亲身体验后的推荐,有一种和用户沟通的感觉,语言平实靠谱娓娓道来 +3. 正文部分可以参考我给你的<正文范文参考>文档,结合所给景区/民宿资料进行改写创作 +4. 分段+分点论述,巧用emoji,积极换行,让整体排版更好看 +5. 如果用户给出范文案例,请参考正文范文参考案例仿写 + +三、正文案例 +‼️新疆旅行黑红榜速报‼️ +亲测6大封神景点🆚6个本地人翻白眼雷区 +避坑指南已备好✅ +这个五一,用7天解锁新疆的N种神仙打开方式 +打工人必看👉「不请假不暴走」小众路线 +每天随便躺玩就能出片! +- +🌤【天气预警】 +5月新疆:5°C~20°C(早晚穿羽绒,中午穿吊带) +⚠紫外线堪比军训!防晒霜+墨镜+帽子三件套焊死! +- +🧳【行李清单】 +✅证件:身份证+驾照(自驾党必带) +✅保命穿搭:冲锋衣+白裙子+工装靴(温差15℃的叠穿美学) +✅急救包:肠胃yao+晕车yao+保湿面膜(一天五顿碳水+干燥警告) +- +✈【机场选择指南】 +▪首飞选乌鲁木齐!北疆环线起点,租车/拼团超方便 +▪伊宁机场:适合只玩伊犁的姐妹,落地直冲赛里木湖 +- +🚗【7天6晚游玩路线】 +Day1⃣:出发地-乌鲁木齐 +Day2⃣:乌鲁木齐-天山天池-奎屯 +Day3⃣:奎屯-赛里木湖-伊宁 +Day4⃣:伊宁-库尔德宁-那拉提 +Day5⃣:那拉提-空中草原-精河/博乐 +Day6⃣:博乐-独山子大峡谷-乌鲁木齐 +Day7⃣:乌鲁木齐-温馨的家 +- +🍖【新疆美食清单】 +🔥必吃Top3: +▪沙湾大盘鸡(加份皮带面!) +▪和田街烤包子(酥到掉渣爆汁) +▪精河过油肉拌面(本地人私藏小店) +💣避雷:景区门口的“天价”羊肉串 +- +⚠【血泪经验Tips】 +🔥 ‌温差刺客‌:薄羽绒+草帽+墨镜,5月草原早晚温差15℃,中午晒到穿吊带! +🔥 ‌信号消失术‌:赛湖、库尔德宁山区常无信号,建议常备现金。 +🔥 ‌防晒保命‌:紫外线比三亚狠!面罩焊脸上,防晒霜2小时补一次。 +🔥 ‌出片玄学‌:赛湖穿白裙子,那拉提配牛仔帽,独山子穿工装裤,谁拍谁封神! +- +📸【出片玄学指南】 +✔赛湖穿白裙+奔跑,拍出“海蒂和爷爷”电影感 +✔那拉提网红桥早起抢机位,下午人从众 +✔独山子穿卡其工装,秒变西部牛仔 +❗PS:带1TB胃和256G手机内存,美景美食根本停不下来! +- + +四、TAG标签创作 +每一篇笔记需要携带9个TAG标签,以下举例的加号(+)这个符号不要体现,仅代表内容连接的意思 +1.前三个TAG标签的内容围绕<#产品所在地区+旅游><#产品所在省份+旅游><#产品所在地区+周边游><#产品周边一线城市+周边游> +2.接着三个TAG标签的内容围绕<#景区/酒店名称><#景区/酒店名称+攻略><#景区/酒店名称+推荐> +3.最后三个TAG标签的内容围绕<#周末去哪儿玩><#小众旅游地><##产品所在地区+周末好去处> +注意:以上TAG直接按要求直出内容,不需要在直出的时候进行分类 +'), +('极力推荐风', '你是景区小红书爆款文案策划,你将根据要求创作爆款文案,根据以下规则一步步执行: +一、标题创作 +步骤:先速览景区资料内容,找到与用户需求适配的景点亮点,然后通读用户给的爆款标题素材,挑选一个在用户画像+节点节日+标题吸睛三个方面最契合的进行改写,创作出全新的爆款标题。在此期间以下几点需要你遵循: +1.必加emoji +2.标题爆破式句,有网感 +3.标题字数不超过10个字 + +二、正文创作法 +1. 通过分析产品和当前节点需求,如情人节要约会、儿童节要带孩子玩、临近周末会考虑周边游、传统节日偏好民俗活动等以此类推,直击用户痛点。 +2. 正文不要出现过多比喻句,表达风格更朴实一点,不要过度联想 +3. 情绪饱满,推荐时要始终面向人群需求结合 +4. 内容需要条理清晰,分段论述,总分总结构结构,开头吸引+中间详细攻略+细节补充+总结推荐 +5. 如果用户给出范文案例,请参考范文案例的写作风格和内容 +6. 针对用户的痛点和需求对正文内容和产品内容的推荐进行优化,可参考我给出的用户文旅需求的材料 +'), + +-- 插入目标人群数据 +INSERT INTO targetAudience (audienceName, description) +VALUES +('亲子向', '亲子向用户画像: +1. 基本属性 +- 年龄:25-45岁(家长群体),孩子年龄集中在3-12岁. +- 性别:女性主导型,约70%为妈妈群体. + +2. 平台行为 +- 互动习惯:偏好收藏实用攻略. +- 发布内容:分享带娃旅行的温馨瞬间 + +3.中国旅游出游做攻略高峰点: +1. 春节假期:1-2月 +2. 暑假:6-8月 +3. 国庆黄金周:9-10月初 +4. 五一假期:4-5月初 +5. 元旦:12月中下旬 +6.清明:4月初 +7.端午:5-6月 +8.中秋:8月底-9月 +9.寒假:12-2月 +'), +('周边游', '周边游用户画像: +1. 基本属性 +- 年龄:全龄覆盖(主要围绕三天内的短期假期出游需求和周末出游需求). + +2. 平台行为 +- 互动习惯:高频搜索「周末去哪」「短途游攻略」,收藏本地美食地图,周末前3天搜索量激增,关注"(城市名称)1小时可达"标签. +- 发布内容:分享城市周边秘境、农家乐体验、短途自驾游记,高频使用"说走就走""逃离城市"等关键词. + +3. 消费特征 +- 决策偏好:注重便利性与性价比,自驾游便利、公共交通便利、高铁几小时以内等出行便利是优势. +- 消费倾向:倾向购买景区联票(含停车+餐饮+体验项目打包). +- 消费品类:民宿套餐、采摘体验、古镇一日游,近郊农场/房车营地/文创市集/夜游项目. + +4. 兴趣偏好 +- 偏好:轻旅行(露营、骑行)、季节限定活动(赏樱、滑雪) + +5.中国旅游出游做攻略高峰点: +1. 春节假期:1-2月 +2. 暑假:6-8月 +3. 国庆黄金周:9-10月初 +4. 五一假期:4-5月初 +5. 元旦:12月中下旬 +6.清明:4月初 +7.端午:5-6月 +8.中秋:8月底-9月 +9.寒假:12-2月 +'), + +-- 插入选题信息数据 +INSERT INTO topics (userId, title, description, logic, productLogic, styleLogic, targetAudienceLogic, publicationDates, status) +VALUES +(1, '五一黄山亲子游攻略🏞️', '五一假期黄山亲子游全攻略', '针对五一假期黄山旅游人流量大的情况,提供亲子游实用攻略', '推荐黄山亲子三日游产品,错峰出行,亲子互动环节丰富', '采用攻略风风格,直接明了,提供详细实用信息', '主要面向家庭亲子群体,提供亲子互动和安全提示', '2025-04-15,2025-04-20,2025-04-25', 'published'), +(1, '张家界夏季避暑游🌲', '夏季张家界避暑旅游指南', '针对夏季炎热天气,推荐张家界作为避暑胜地,平均气温仅22℃', '推荐张家界避暑五日游产品,强调凉爽体验和夏季特色活动', '采用清新文艺风格,突出自然之美和凉爽体验', '主要面向家庭亲子和学生群体,暑期出游首选', '2025-06-01,2025-06-15,2025-07-01', 'draft'), +(2, '九寨沟秋色摄影指南📸', '九寨沟秋季摄影攻略', '针对九寨沟秋季绝美景色,提供专业摄影指导和最佳拍摄点', '推荐九寨沟摄影六日游产品,强调最佳拍摄时机和专业指导', '采用专业严谨风格,提供专业摄影知识和技巧', '主要面向摄影爱好者和年轻情侣,追求高质量照片', '2025-09-01,2025-09-15', 'draft'), +(3, '云南民族文化探秘之旅🏮', '探索云南多元民族文化', '深入探索云南多民族文化特色,体验不同民族风情和非遗文化', '推荐云南民族文化七日游产品,强调文化体验和民族特色', '采用情感共鸣风格,讲述动人故事和文化传承', '主要面向文化爱好者、高净值人群和学生群体', '2025-07-01,2025-07-15', 'published'); + +-- 插入选题-景区关联数据 +INSERT INTO topicScenic (topicId, scenicId) +VALUES +(1, 1), +(2, 2), +(3, 3), +(4, 4); + +-- 插入选题-产品关联数据 +INSERT INTO topicProduct (topicId, productId) +VALUES +(1, 1), +(2, 2), +(3, 3), +(4, 4); + +-- 插入选题-风格关联数据 +INSERT INTO topicStyle (topicId, styleId) +VALUES +(1, 1), +(2, 2), +(3, 4), +(4, 5); + +-- 插入选题-目标受众关联数据 +INSERT INTO topicAudience (topicId, audienceId) +VALUES +(1, 2), +(2, 2), +(2, 5), +(3, 1), +(3, 6), +(4, 5), +(4, 6); \ No newline at end of file diff --git a/db/init_db.sh b/db/init_db.sh new file mode 100755 index 0000000..5b6a965 --- /dev/null +++ b/db/init_db.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +echo "开始初始化旅游内容创作系统数据库..." + +# 检查MySQL是否安装 +if ! command -v mysql &> /dev/null; then + echo "错误: MySQL未安装,请先安装MySQL" + exit 1 +fi + +# 询问MySQL root密码 +read -sp "请输入MySQL root密码(如果没有设置请直接回车): " MYSQL_ROOT_PASSWORD +echo "" + +# 创建环境变量配置文件 +cat > .env.db < config/database.json <