This commit is contained in:
sjk
2026-01-16 22:06:46 +08:00
parent 816bf29a2a
commit 3d402639da
114 changed files with 10763 additions and 419 deletions

51
db/ai_mip_click.sql Normal file
View File

@@ -0,0 +1,51 @@
/*
Navicat Premium Dump SQL
Source Server : mixue
Source Server Type : MySQL
Source Server Version : 90001 (9.0.1)
Source Host : localhost:3306
Source Schema : ai_article
Target Server Type : MySQL
Target Server Version : 90001 (9.0.1)
File Encoding : 65001
Date: 12/01/2026 20:31:43
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for ai_mip_click
-- ----------------------------
DROP TABLE IF EXISTS `ai_mip_click`;
CREATE TABLE `ai_mip_click` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`site_id` bigint NOT NULL COMMENT '关联站点ID外键指向 ai_mip_site.id',
`site_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '网站URL冗余字段便于查询优化',
`click_time` datetime NOT NULL COMMENT '点击发生时间',
`user_ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户IP地址',
`user_agent` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '浏览器/设备信息',
`referer_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '来源页面URL',
`device_type` enum('mobile','pc','tablet') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '设备类型',
`click_count` int NULL DEFAULT 1 COMMENT '本次点击事件的计数一般为1可用于批量插入',
`is_valid` tinyint(1) NULL DEFAULT 1 COMMENT '是否有效点击(防刷)',
`task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'RPA任务ID可选',
`operator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作者(如自动系统)',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_site_id`(`site_id` ASC) USING BTREE,
INDEX `idx_click_time`(`click_time` ASC) USING BTREE,
INDEX `idx_site_url`(`site_url` ASC) USING BTREE,
INDEX `idx_click_time_site`(`click_time` ASC, `site_id` ASC) USING BTREE,
INDEX `idx_task_id`(`task_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'MIP页广告点击日志表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ai_mip_click
-- ----------------------------
INSERT INTO `ai_mip_click` VALUES (1, 1, 'https://example.com', '2026-01-12 20:25:09', NULL, NULL, NULL, NULL, 1, 1, 'TASK20260112001', 'RPA_SYSTEM', '2026-01-12 20:25:09');
SET FOREIGN_KEY_CHECKS = 1;

75
db/ai_mip_interaction.sql Normal file
View File

@@ -0,0 +1,75 @@
/*
Navicat Premium Dump SQL
Source Server : mixue
Source Server Type : MySQL
Source Server Version : 90001 (9.0.1)
Source Host : localhost:3306
Source Schema : ai_article
Target Server Type : MySQL
Target Server Version : 90001 (9.0.1)
File Encoding : 65001
Date: 12/01/2026 20:31:30
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for ai_mip_interaction
-- ----------------------------
DROP TABLE IF EXISTS `ai_mip_interaction`;
CREATE TABLE `ai_mip_interaction` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`site_id` bigint NOT NULL COMMENT '关联站点ID',
`click_id` bigint NULL DEFAULT NULL COMMENT '关联点击记录ID',
`task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'RPA任务ID',
`interaction_type` enum('reply','comment','message','form_submit','follow','like','share') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '互动类型',
`interaction_time` datetime NOT NULL COMMENT '互动发生时间',
`interaction_status` enum('pending','success','failed','skipped') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending' COMMENT '互动状态',
`reply_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '回复/评论的内容',
`reply_template_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '使用的回复模板ID',
`ad_element_xpath` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告元素的XPath定位',
`ad_element_selector` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告元素的CSS选择器',
`ad_text_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '广告的文本内容',
`execution_mode` enum('auto','manual','semi_auto') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'auto' COMMENT '执行方式',
`rpa_script` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '使用的RPA脚本名称',
`browser_type` enum('headless','headed','playwright','selenium') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '浏览器类型',
`anti_detection_method` json NULL COMMENT '万金油技术方案',
`proxy_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '使用的代理IP',
`user_agent` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '使用的User-Agent',
`custom_headers` json NULL COMMENT '自定义HTTP头',
`fingerprint_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '浏览器指纹ID',
`response_received` tinyint(1) NULL DEFAULT 0 COMMENT '是否收到回复',
`response_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '对方回复的内容',
`response_time` datetime NULL DEFAULT NULL COMMENT '收到回复的时间',
`response_delay_seconds` int NULL DEFAULT NULL COMMENT '回复延迟(秒)',
`is_successful` tinyint(1) NULL DEFAULT 0 COMMENT '是否成功互动',
`error_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '失败原因/错误信息',
`retry_count` int NULL DEFAULT 0 COMMENT '重试次数',
`conversion_flag` tinyint(1) NULL DEFAULT 0 COMMENT '是否产生转化',
`site_dimension` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网址维度标签',
`campaign_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告活动ID',
`operator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作者',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
`remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注信息',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_site_id`(`site_id` ASC) USING BTREE,
INDEX `idx_click_id`(`click_id` ASC) USING BTREE,
INDEX `idx_task_id`(`task_id` ASC) USING BTREE,
INDEX `idx_interaction_time`(`interaction_time` ASC) USING BTREE,
INDEX `idx_interaction_status`(`interaction_status` ASC) USING BTREE,
INDEX `idx_composite`(`site_id` ASC, `interaction_time` ASC, `interaction_status` ASC) USING BTREE,
INDEX `idx_response_received`(`response_received` ASC) USING BTREE,
INDEX `idx_conversion`(`conversion_flag` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'MIP页广告互动回复日志表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of ai_mip_interaction
-- ----------------------------
INSERT INTO `ai_mip_interaction` VALUES (1, 1, 1, 'TASK20260112001', 'reply', '2026-01-12 20:25:09', 'success', '您好,请问有什么可以帮助您的吗?', NULL, NULL, NULL, NULL, 'auto', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, 1, NULL, 0, 0, NULL, NULL, NULL, '2026-01-12 20:25:09', '2026-01-12 20:25:09', NULL);
SET FOREIGN_KEY_CHECKS = 1;

55
db/ai_mip_site.sql Normal file
View File

@@ -0,0 +1,55 @@
/*
Navicat Premium Dump SQL
Source Server : mixue
Source Server Type : MySQL
Source Server Version : 90001 (9.0.1)
Source Host : localhost:3306
Source Schema : ai_article
Target Server Type : MySQL
Target Server Version : 90001 (9.0.1)
File Encoding : 65001
Date: 12/01/2026 20:31:23
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for ai_mip_site
-- ----------------------------
DROP TABLE IF EXISTS `ai_mip_site`;
CREATE TABLE `ai_mip_site` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`site_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '网站URL唯一',
`site_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网站名称(可选)',
`status` enum('active','inactive','pending') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'active' COMMENT '状态:激活/停用/待审核',
`frequency` int NULL DEFAULT 1 COMMENT '频次(如每小时发几次)',
`time_start` time NULL DEFAULT '00:00:00' COMMENT '开始时间HH:MM:SS',
`time_end` time NULL DEFAULT '23:59:59' COMMENT '结束时间HH:MM:SS',
`interval_minutes` int NULL DEFAULT 60 COMMENT '执行间隔(分钟)',
`ad_feature` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告特征描述JSON格式{\"color\":\"red\", \"position\":\"top\"}',
`click_count` bigint NULL DEFAULT 0 COMMENT '累计点击次数',
`reply_count` bigint NULL DEFAULT 0 COMMENT '累计回复次数',
`site_dimension` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网址维度标签(如:教育、医疗等)',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`created_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人',
`updated_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更新人',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注信息',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `site_url`(`site_url` ASC) USING BTREE,
UNIQUE INDEX `idx_site_url`(`site_url`(191) ASC) USING BTREE,
INDEX `idx_status`(`status` ASC) USING BTREE,
INDEX `idx_created_at`(`created_at` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'MIP页广告网址管理表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ai_mip_site
-- ----------------------------
INSERT INTO `ai_mip_site` VALUES (1, 'https://example.com', '示例网站1', 'active', 1, '00:00:00', '23:59:59', 60, NULL, 0, 0, '教育', '2026-01-12 20:24:18', '2026-01-12 20:24:18', 'admin', NULL, NULL);
INSERT INTO `ai_mip_site` VALUES (2, 'https://test.com', '测试网站2', 'active', 1, '00:00:00', '23:59:59', 60, NULL, 0, 0, '医疗', '2026-01-12 20:24:18', '2026-01-12 20:24:18', 'admin', NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;

100
db/init_databases.py Normal file
View File

@@ -0,0 +1,100 @@
#!/usr/bin/env python3
"""
SQLite数据库初始化脚本
自动创建开发环境(ai_mip_dev.db)和生产环境(ai_mip_prod.db)数据库
"""
import sqlite3
import os
from pathlib import Path
# 数据库文件路径
DB_DIR = Path(__file__).parent
DEV_DB = DB_DIR / "ai_mip_dev.db"
PROD_DB = DB_DIR / "ai_mip_prod.db"
# SQL脚本路径
INIT_SQL = DB_DIR / "init_sqlite.sql"
SEED_DEV_SQL = DB_DIR / "seed_dev.sql"
def execute_sql_file(conn, sql_file):
"""执行SQL文件"""
with open(sql_file, 'r', encoding='utf-8') as f:
sql_script = f.read()
# SQLite需要逐条执行语句
conn.executescript(sql_script)
conn.commit()
print(f"✓ 已执行: {sql_file.name}")
def init_database(db_path, with_seed=False):
"""初始化数据库"""
# 如果数据库已存在,询问是否覆盖
if db_path.exists():
response = input(f"\n数据库 {db_path.name} 已存在,是否覆盖? (y/n): ").strip().lower()
if response != 'y':
print(f"跳过 {db_path.name}")
return
os.remove(db_path)
print(f"已删除旧数据库: {db_path.name}")
print(f"\n创建数据库: {db_path.name}")
# 连接数据库(自动创建)
conn = sqlite3.connect(db_path)
try:
# 执行初始化SQL
execute_sql_file(conn, INIT_SQL)
# 如果需要,执行种子数据
if with_seed:
execute_sql_file(conn, SEED_DEV_SQL)
print(f"✓ 数据库 {db_path.name} 创建成功")
# 验证表是否创建成功
cursor = conn.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
tables = cursor.fetchall()
print(f" 创建的表: {', '.join([t[0] for t in tables])}")
except Exception as e:
print(f"✗ 创建数据库失败: {str(e)}")
raise
finally:
conn.close()
def main():
print("=" * 60)
print("SQLite数据库初始化工具")
print("=" * 60)
# 检查SQL文件是否存在
if not INIT_SQL.exists():
print(f"错误: 找不到初始化脚本 {INIT_SQL}")
return
# 初始化开发数据库(带测试数据)
print("\n[1] 初始化开发环境数据库")
init_database(DEV_DB, with_seed=True)
# 初始化生产数据库(不带测试数据)
print("\n[2] 初始化生产环境数据库")
init_database(PROD_DB, with_seed=False)
print("\n" + "=" * 60)
print("数据库初始化完成")
print("=" * 60)
print(f"开发数据库: {DEV_DB}")
print(f"生产数据库: {PROD_DB}")
print("\n使用方法:")
print(" 开发环境: 在 .env.development 中设置 DATABASE_PATH=db/ai_mip_dev.db")
print(" 生产环境: 在 .env.production 中设置 DATABASE_PATH=db/ai_mip_prod.db")
if __name__ == "__main__":
main()

125
db/init_sqlite.sql Normal file
View File

@@ -0,0 +1,125 @@
-- SQLite数据库初始化脚本
-- 适用于开发环境(ai_mip_dev.db)和生产环境(ai_mip_prod.db)
-- ----------------------------
-- Table structure for ai_mip_site
-- ----------------------------
DROP TABLE IF EXISTS ai_mip_site;
CREATE TABLE ai_mip_site (
id INTEGER PRIMARY KEY AUTOINCREMENT,
site_url TEXT NOT NULL UNIQUE,
site_name TEXT,
status TEXT CHECK(status IN ('active', 'inactive', 'pending')) DEFAULT 'active',
frequency INTEGER DEFAULT 1,
time_start TEXT DEFAULT '00:00:00',
time_end TEXT DEFAULT '23:59:59',
interval_minutes INTEGER DEFAULT 60,
ad_feature TEXT,
click_count INTEGER DEFAULT 0,
reply_count INTEGER DEFAULT 0,
site_dimension TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
created_by TEXT,
updated_by TEXT,
remark TEXT
);
-- 创建索引
CREATE UNIQUE INDEX idx_site_url ON ai_mip_site(site_url);
CREATE INDEX idx_status ON ai_mip_site(status);
CREATE INDEX idx_created_at ON ai_mip_site(created_at);
-- ----------------------------
-- Table structure for ai_mip_click
-- ----------------------------
DROP TABLE IF EXISTS ai_mip_click;
CREATE TABLE ai_mip_click (
id INTEGER PRIMARY KEY AUTOINCREMENT,
site_id INTEGER NOT NULL,
site_url TEXT NOT NULL,
click_time DATETIME NOT NULL,
user_ip TEXT,
user_agent TEXT,
referer_url TEXT,
device_type TEXT CHECK(device_type IN ('mobile', 'pc', 'tablet')),
click_count INTEGER DEFAULT 1,
is_valid INTEGER DEFAULT 1,
task_id TEXT,
operator TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (site_id) REFERENCES ai_mip_site(id)
);
-- 创建索引
CREATE INDEX idx_site_id ON ai_mip_click(site_id);
CREATE INDEX idx_click_time ON ai_mip_click(click_time);
CREATE INDEX idx_site_url_click ON ai_mip_click(site_url);
CREATE INDEX idx_click_time_site ON ai_mip_click(click_time, site_id);
CREATE INDEX idx_task_id ON ai_mip_click(task_id);
-- ----------------------------
-- Table structure for ai_mip_interaction
-- ----------------------------
DROP TABLE IF EXISTS ai_mip_interaction;
CREATE TABLE ai_mip_interaction (
id INTEGER PRIMARY KEY AUTOINCREMENT,
site_id INTEGER NOT NULL,
click_id INTEGER,
task_id TEXT,
interaction_type TEXT CHECK(interaction_type IN ('reply', 'comment', 'message', 'form_submit', 'follow', 'like', 'share')) NOT NULL,
interaction_time DATETIME NOT NULL,
interaction_status TEXT CHECK(interaction_status IN ('pending', 'success', 'failed', 'skipped')) DEFAULT 'pending',
reply_content TEXT,
reply_template_id TEXT,
ad_element_xpath TEXT,
ad_element_selector TEXT,
ad_text_content TEXT,
execution_mode TEXT CHECK(execution_mode IN ('auto', 'manual', 'semi_auto')) DEFAULT 'auto',
rpa_script TEXT,
browser_type TEXT CHECK(browser_type IN ('headless', 'headed', 'playwright', 'selenium')),
anti_detection_method TEXT,
proxy_ip TEXT,
user_agent TEXT,
custom_headers TEXT,
fingerprint_id TEXT,
response_received INTEGER DEFAULT 0,
response_content TEXT,
response_time DATETIME,
response_delay_seconds INTEGER,
is_successful INTEGER DEFAULT 0,
error_message TEXT,
retry_count INTEGER DEFAULT 0,
conversion_flag INTEGER DEFAULT 0,
site_dimension TEXT,
campaign_id TEXT,
operator TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
remark TEXT,
FOREIGN KEY (site_id) REFERENCES ai_mip_site(id),
FOREIGN KEY (click_id) REFERENCES ai_mip_click(id)
);
-- 创建索引
CREATE INDEX idx_site_id_interaction ON ai_mip_interaction(site_id);
CREATE INDEX idx_click_id_interaction ON ai_mip_interaction(click_id);
CREATE INDEX idx_task_id_interaction ON ai_mip_interaction(task_id);
CREATE INDEX idx_interaction_time ON ai_mip_interaction(interaction_time);
CREATE INDEX idx_interaction_status ON ai_mip_interaction(interaction_status);
CREATE INDEX idx_composite ON ai_mip_interaction(site_id, interaction_time, interaction_status);
CREATE INDEX idx_response_received ON ai_mip_interaction(response_received);
CREATE INDEX idx_conversion ON ai_mip_interaction(conversion_flag);
-- 创建触发器:自动更新 updated_at
CREATE TRIGGER update_ai_mip_site_timestamp
AFTER UPDATE ON ai_mip_site
BEGIN
UPDATE ai_mip_site SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
END;
CREATE TRIGGER update_ai_mip_interaction_timestamp
AFTER UPDATE ON ai_mip_interaction
BEGIN
UPDATE ai_mip_interaction SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
END;

145
db/mip_table.txt Normal file
View File

@@ -0,0 +1,145 @@
-- ----------------------------
-- Table structure for ai_mip_click
-- ----------------------------
DROP TABLE IF EXISTS `ai_mip_click`;
CREATE TABLE `ai_mip_click` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`site_id` bigint NOT NULL COMMENT '关联站点ID外键指向 ai_mip_site.id',
`site_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '网站URL冗余字段便于查询优化',
`click_time` datetime NOT NULL COMMENT '点击发生时间',
`user_ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户IP地址',
`user_agent` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '浏览器/设备信息',
`referer_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '来源页面URL',
`device_type` enum('mobile','pc','tablet') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '设备类型',
`click_count` int NULL DEFAULT 1 COMMENT '本次点击事件的计数一般为1可用于批量插入',
`is_valid` tinyint(1) NULL DEFAULT 1 COMMENT '是否有效点击(防刷)',
`task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'RPA任务ID可选',
`operator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作者(如自动系统)',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_site_id`(`site_id` ASC) USING BTREE,
INDEX `idx_click_time`(`click_time` ASC) USING BTREE,
INDEX `idx_site_url`(`site_url` ASC) USING BTREE,
INDEX `idx_click_time_site`(`click_time` ASC, `site_id` ASC) USING BTREE,
INDEX `idx_task_id`(`task_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'MIP页广告点击日志表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for ai_mip_interaction
-- ----------------------------
DROP TABLE IF EXISTS `ai_mip_interaction`;
CREATE TABLE `ai_mip_interaction` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`site_id` bigint NOT NULL COMMENT '关联站点ID',
`click_id` bigint NULL DEFAULT NULL COMMENT '关联点击记录ID',
`task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'RPA任务ID',
`interaction_type` enum('reply','comment','message','form_submit','follow','like','share') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '互动类型',
`interaction_time` datetime NOT NULL COMMENT '互动发生时间',
`interaction_status` enum('pending','success','failed','skipped') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending' COMMENT '互动状态',
`reply_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '回复/评论的内容',
`reply_template_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '使用的回复模板ID',
`ad_element_xpath` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告元素的XPath定位',
`ad_element_selector` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告元素的CSS选择器',
`ad_text_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '广告的文本内容',
`execution_mode` enum('auto','manual','semi_auto') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'auto' COMMENT '执行方式',
`rpa_script` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '使用的RPA脚本名称',
`browser_type` enum('headless','headed','playwright','selenium') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '浏览器类型',
`anti_detection_method` json NULL COMMENT '万金油技术方案',
`proxy_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '使用的代理IP',
`user_agent` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '使用的User-Agent',
`custom_headers` json NULL COMMENT '自定义HTTP头',
`fingerprint_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '浏览器指纹ID',
`response_received` tinyint(1) NULL DEFAULT 0 COMMENT '是否收到回复',
`response_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '对方回复的内容',
`response_time` datetime NULL DEFAULT NULL COMMENT '收到回复的时间',
`response_delay_seconds` int NULL DEFAULT NULL COMMENT '回复延迟(秒)',
`is_successful` tinyint(1) NULL DEFAULT 0 COMMENT '是否成功互动',
`error_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '失败原因/错误信息',
`retry_count` int NULL DEFAULT 0 COMMENT '重试次数',
`conversion_flag` tinyint(1) NULL DEFAULT 0 COMMENT '是否产生转化',
`site_dimension` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网址维度标签',
`campaign_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告活动ID',
`operator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作者',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
`remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注信息',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_site_id`(`site_id` ASC) USING BTREE,
INDEX `idx_click_id`(`click_id` ASC) USING BTREE,
INDEX `idx_task_id`(`task_id` ASC) USING BTREE,
INDEX `idx_interaction_time`(`interaction_time` ASC) USING BTREE,
INDEX `idx_interaction_status`(`interaction_status` ASC) USING BTREE,
INDEX `idx_composite`(`site_id` ASC, `interaction_time` ASC, `interaction_status` ASC) USING BTREE,
INDEX `idx_response_received`(`response_received` ASC) USING BTREE,
INDEX `idx_conversion`(`conversion_flag` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'MIP页广告互动回复日志表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for ai_mip_site
-- ----------------------------
DROP TABLE IF EXISTS `ai_mip_site`;
CREATE TABLE `ai_mip_site` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`site_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '网站URL唯一',
`site_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网站名称(可选)',
`status` enum('active','inactive','pending') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'active' COMMENT '状态:激活/停用/待审核',
`frequency` int NULL DEFAULT 1 COMMENT '频次(如每小时发几次)',
`time_start` time NULL DEFAULT '00:00:00' COMMENT '开始时间HH:MM:SS',
`time_end` time NULL DEFAULT '23:59:59' COMMENT '结束时间HH:MM:SS',
`interval_minutes` int NULL DEFAULT 60 COMMENT '执行间隔(分钟)',
`ad_feature` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '广告特征描述JSON格式{\"color\":\"red\", \"position\":\"top\"}',
`click_count` bigint NULL DEFAULT 0 COMMENT '累计点击次数',
`reply_count` bigint NULL DEFAULT 0 COMMENT '累计回复次数',
`site_dimension` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网址维度标签(如:教育、医疗等)',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`created_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人',
`updated_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更新人',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注信息',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `site_url`(`site_url` ASC) USING BTREE,
UNIQUE INDEX `idx_site_url`(`site_url`(191) ASC) USING BTREE,
INDEX `idx_status`(`status` ASC) USING BTREE,
INDEX `idx_created_at`(`created_at` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'MIP页广告网址管理表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for ai_mip_task_log
-- ----------------------------
DROP TABLE IF EXISTS `ai_mip_task_log`;
CREATE TABLE `ai_mip_task_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'RPA任务唯一ID',
`site_id` bigint NOT NULL COMMENT '关联站点ID',
`step_1_visit_time` datetime NULL DEFAULT NULL COMMENT '步骤1访问网址时间',
`step_1_status` enum('success','failed','skipped') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '步骤1状态',
`step_2_antibot_time` datetime NULL DEFAULT NULL COMMENT '步骤2万金油技术方案执行时间',
`step_2_status` enum('success','failed','skipped') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '步骤2状态',
`step_3_ad_detection_time` datetime NULL DEFAULT NULL COMMENT '步骤3广告检测时间',
`step_3_has_ad` tinyint(1) NULL DEFAULT NULL COMMENT '是否检测到广告',
`step_3_ad_count` int NULL DEFAULT 0 COMMENT '检测到的广告数量',
`step_4_click_time` datetime NULL DEFAULT NULL COMMENT '步骤4点击广告时间',
`step_4_status` enum('success','failed','skipped') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '步骤4状态',
`step_5_reply_time` datetime NULL DEFAULT NULL COMMENT '步骤5获取回复时间',
`step_5_status` enum('success','failed','skipped') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '步骤5状态',
`task_start_time` datetime NOT NULL COMMENT '任务开始时间',
`task_end_time` datetime NULL DEFAULT NULL COMMENT '任务结束时间',
`task_duration_seconds` int NULL DEFAULT NULL COMMENT '任务执行时长(秒)',
`task_status` enum('running','completed','failed','timeout') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'running' COMMENT '任务整体状态',
`total_clicks` int NULL DEFAULT 0 COMMENT '本次任务总点击次数',
`total_interactions` int NULL DEFAULT 0 COMMENT '本次任务总互动次数',
`successful_interactions` int NULL DEFAULT 0 COMMENT '成功互动次数',
`failed_interactions` int NULL DEFAULT 0 COMMENT '失败互动次数',
`execution_mode` enum('auto','manual','scheduled') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'auto' COMMENT '执行模式',
`triggered_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '触发者(定时任务/手动触发/队列)',
`error_log` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '错误日志',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `task_id`(`task_id` ASC) USING BTREE,
UNIQUE INDEX `uk_task_id`(`task_id` ASC) USING BTREE,
INDEX `idx_site_id`(`site_id` ASC) USING BTREE,
INDEX `idx_task_status`(`task_status` ASC) USING BTREE,
INDEX `idx_start_time`(`task_start_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'RPA任务执行日志表' ROW_FORMAT = DYNAMIC;

20
db/seed_dev.sql Normal file
View File

@@ -0,0 +1,20 @@
-- 开发环境测试数据
-- 用于 ai_mip_dev.db
-- 插入测试站点
INSERT INTO ai_mip_site (site_url, site_name, status, frequency, time_start, time_end, interval_minutes, click_count, reply_count, site_dimension, created_by) VALUES
('https://health.baidu.com/m/detail/ar_2366617956693492811', '百度健康测试页面', 'active', 3, '09:00:00', '21:00:00', 45, 0, 0, '医疗健康', 'admin'),
('https://example.com/test', '测试网站1', 'active', 2, '10:00:00', '20:00:00', 60, 0, 0, '教育', 'admin'),
('https://demo.com/page', '演示网站', 'inactive', 1, '00:00:00', '23:59:59', 120, 0, 0, '商业', 'admin');
-- 插入测试点击记录
INSERT INTO ai_mip_click (site_id, site_url, click_time, user_ip, device_type, task_id, operator) VALUES
(1, 'https://health.baidu.com/m/detail/ar_2366617956693492811', datetime('now'), '192.168.1.100', 'pc', 'TASK_DEV_001', 'RPA_SYSTEM'),
(1, 'https://health.baidu.com/m/detail/ar_2366617956693492811', datetime('now', '-1 hour'), '192.168.1.101', 'mobile', 'TASK_DEV_002', 'RPA_SYSTEM'),
(2, 'https://example.com/test', datetime('now', '-2 hours'), '192.168.1.102', 'pc', 'TASK_DEV_003', 'RPA_SYSTEM');
-- 插入测试互动记录
INSERT INTO ai_mip_interaction (site_id, click_id, task_id, interaction_type, interaction_time, interaction_status, reply_content, execution_mode, browser_type, is_successful, operator) VALUES
(1, 1, 'TASK_DEV_001', 'reply', datetime('now'), 'success', '测试回复内容', 'auto', 'playwright', 1, 'RPA_SYSTEM'),
(1, 2, 'TASK_DEV_002', 'comment', datetime('now', '-1 hour'), 'success', '测试评论内容', 'auto', 'playwright', 1, 'RPA_SYSTEM'),
(2, 3, 'TASK_DEV_003', 'reply', datetime('now', '-2 hours'), 'pending', NULL, 'auto', 'playwright', 0, 'RPA_SYSTEM');