schema.sql 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. -- auto_put_ad_mini 数据库表结构
  2. -- 数据库类型:MySQL 5.7+
  3. -- 字符集:utf8mb4
  4. -- =====================================================
  5. -- 1. 账户白名单表
  6. -- =====================================================
  7. CREATE TABLE IF NOT EXISTS account_whitelist (
  8. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  9. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  10. account_name VARCHAR(200) DEFAULT NULL COMMENT '账户名称(备注用)',
  11. business_line VARCHAR(100) DEFAULT NULL COMMENT '业务线(用于分组管理)',
  12. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用(1=启用,0=禁用)',
  13. remark TEXT DEFAULT NULL COMMENT '备注说明',
  14. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  15. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  16. created_by VARCHAR(100) DEFAULT NULL COMMENT '创建人',
  17. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  18. UNIQUE KEY uk_account_id (account_id),
  19. KEY idx_enabled (enabled),
  20. KEY idx_business_line (business_line),
  21. KEY idx_updated_at (updated_at)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='广告账户白名单';
  23. -- =====================================================
  24. -- 2. 广告创建投放版本模板
  25. -- =====================================================
  26. CREATE TABLE IF NOT EXISTS ad_delivery_template (
  27. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  28. delivery_version VARCHAR(100) NOT NULL COMMENT '投放版本',
  29. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用',
  30. description VARCHAR(500) DEFAULT NULL COMMENT '模板说明',
  31. site_set_json TEXT NOT NULL COMMENT '版位 JSON',
  32. location_types_json TEXT NOT NULL COMMENT '地域类型 JSON',
  33. region_ids_json MEDIUMTEXT NOT NULL COMMENT '地域 region_id JSON',
  34. daily_budget_fen INT NOT NULL COMMENT '单广告日预算(分)',
  35. time_series_json MEDIUMTEXT NOT NULL COMMENT '投放时段字符串 JSON',
  36. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  37. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  38. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  39. UNIQUE KEY uk_delivery_version (delivery_version),
  40. KEY idx_enabled (enabled)
  41. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='广告创建投放版本模板';
  42. -- =====================================================
  43. -- 3. 待投放账户广告创建配置
  44. -- =====================================================
  45. CREATE TABLE IF NOT EXISTS ad_creation_account_config (
  46. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  47. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  48. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用创建',
  49. delivery_version VARCHAR(100) NOT NULL COMMENT '投放版本',
  50. brand_key VARCHAR(100) DEFAULT NULL COMMENT '品牌资产模板key',
  51. feedback_key VARCHAR(100) DEFAULT NULL COMMENT '监测链接模板key',
  52. material_source VARCHAR(50) NOT NULL DEFAULT 'history' COMMENT '创意素材来源:history/ai_generated/external_recall',
  53. ai_fallback_to_history BOOLEAN NOT NULL DEFAULT FALSE COMMENT 'AI生成失败时是否回退历史素材',
  54. audience_name VARCHAR(200) NOT NULL COMMENT '人工配置的人群包名称',
  55. audience_pack_id BIGINT DEFAULT NULL COMMENT '系统解析/验证后的人群包ID;NULL表示泛人群',
  56. audience_tier_label VARCHAR(100) DEFAULT NULL COMMENT '审批/命名展示用人群标签',
  57. bid_min_fen INT NOT NULL COMMENT '最低出价(分)',
  58. bid_max_fen INT NOT NULL COMMENT '最高出价(分)',
  59. bid_amount_fen INT DEFAULT NULL COMMENT '固定出价(分);NULL则按范围取值',
  60. bid_scene VARCHAR(50) DEFAULT NULL COMMENT '出价方式:average_cost/max_conversion',
  61. custom_cost_cap_fen INT DEFAULT NULL COMMENT '最大转化量控制成本(分),用于 custom_cost_cap',
  62. daily_budget_fen INT DEFAULT NULL COMMENT '账户级单广告日预算(分);NULL则使用投放模板默认预算',
  63. automatic_site_enabled BOOLEAN DEFAULT NULL COMMENT '账户级是否开启智能版位;NULL使用模板默认手动版位',
  64. site_set_json TEXT DEFAULT NULL COMMENT '账户级投放版位覆盖JSON;NULL使用投放模板',
  65. location_types_json TEXT DEFAULT NULL COMMENT '账户级地域类型覆盖JSON;NULL使用投放模板',
  66. region_ids_json MEDIUMTEXT DEFAULT NULL COMMENT '账户级地域ID覆盖JSON;NULL使用投放模板,空数组表示不限地域',
  67. age_min INT NOT NULL COMMENT '最小年龄',
  68. age_max INT NOT NULL COMMENT '最大年龄',
  69. config_date DATE DEFAULT NULL COMMENT '飞书配置生效日期;仅当天配置参与自动创建/补创意',
  70. audience_source_account_id BIGINT DEFAULT NULL COMMENT '人群包来源账户;默认可由 TENCENT_AUDIENCE_SOURCE_ACCOUNT_ID 提供',
  71. audience_grant_status VARCHAR(50) DEFAULT NULL COMMENT '授权/验证状态:not_required_no_audience_pack/resolved/grant_submitted/verified',
  72. audience_verified_at TIMESTAMP NULL DEFAULT NULL COMMENT '目标账户可见验证时间',
  73. remark TEXT DEFAULT NULL COMMENT '备注',
  74. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  75. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  76. created_by VARCHAR(100) DEFAULT NULL COMMENT '创建人',
  77. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  78. UNIQUE KEY uk_account_id (account_id),
  79. KEY idx_enabled (enabled),
  80. KEY idx_delivery_version (delivery_version),
  81. KEY idx_brand_key (brand_key),
  82. KEY idx_feedback_key (feedback_key),
  83. KEY idx_material_source (material_source),
  84. KEY idx_audience_name (audience_name)
  85. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='待投放账户广告创建配置';
  86. -- =====================================================
  87. -- 4. 统一品牌资产模板
  88. -- =====================================================
  89. CREATE TABLE IF NOT EXISTS brand_asset_template (
  90. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  91. brand_key VARCHAR(100) NOT NULL COMMENT '品牌模板key',
  92. brand_name VARCHAR(100) NOT NULL COMMENT '品牌名称',
  93. brand_image_url VARCHAR(1000) NOT NULL COMMENT '品牌图片公网URL',
  94. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用',
  95. remark TEXT DEFAULT NULL COMMENT '备注',
  96. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  97. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  98. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  99. UNIQUE KEY uk_brand_key (brand_key),
  100. KEY idx_enabled (enabled)
  101. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='统一品牌资产模板';
  102. -- =====================================================
  103. -- 5. 统一监测链接模板
  104. -- =====================================================
  105. CREATE TABLE IF NOT EXISTS feedback_asset_template (
  106. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  107. feedback_key VARCHAR(100) NOT NULL COMMENT '监测模板key',
  108. feedback_name VARCHAR(200) NOT NULL COMMENT '监测链接组名称',
  109. second_category_type VARCHAR(100) NOT NULL COMMENT '二级类目类型,如 WECHAT_MINI_PROGRAM',
  110. feedback_type VARCHAR(50) NOT NULL COMMENT '监测类型,如 click',
  111. feedback_url TEXT NOT NULL COMMENT '回传链接模板',
  112. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用',
  113. remark TEXT DEFAULT NULL COMMENT '备注',
  114. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  115. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  116. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  117. UNIQUE KEY uk_feedback_key (feedback_key),
  118. KEY idx_enabled (enabled)
  119. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='统一监测链接模板';
  120. -- =====================================================
  121. -- 6. 系统配置表(Key-Value 存储)
  122. -- =====================================================
  123. CREATE TABLE IF NOT EXISTS system_config (
  124. id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  125. config_key VARCHAR(100) NOT NULL COMMENT '配置键(如 execution_enabled, cron_schedule)',
  126. config_value TEXT NOT NULL COMMENT '配置值(JSON 或字符串)',
  127. value_type ENUM('string', 'boolean', 'int', 'json') DEFAULT 'string' COMMENT '值类型',
  128. description VARCHAR(500) DEFAULT NULL COMMENT '配置说明',
  129. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用',
  130. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  131. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  132. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  133. UNIQUE KEY uk_config_key (config_key),
  134. KEY idx_enabled (enabled)
  135. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
  136. -- =====================================================
  137. -- 7. 决策历史记录表(可选,用于审计和分析)
  138. -- =====================================================
  139. CREATE TABLE IF NOT EXISTS decision_history (
  140. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  141. decision_date DATE NOT NULL COMMENT '决策日期',
  142. account_id BIGINT NOT NULL COMMENT '账户ID',
  143. ad_id BIGINT NOT NULL COMMENT '广告ID',
  144. ad_name VARCHAR(500) DEFAULT NULL COMMENT '广告名称',
  145. action VARCHAR(50) NOT NULL COMMENT '决策动作(pause, bid_down, bid_up, scale_up, observe, hold)',
  146. dimension VARCHAR(100) DEFAULT NULL COMMENT '决策维度(roi, fission, decay等)',
  147. reason TEXT DEFAULT NULL COMMENT '决策理由',
  148. current_bid DECIMAL(10, 2) DEFAULT NULL COMMENT '当前出价(元)',
  149. recommended_bid DECIMAL(10, 2) DEFAULT NULL COMMENT '推荐出价(元)',
  150. recommended_change_pct DECIMAL(6, 2) DEFAULT NULL COMMENT '调整幅度(%)',
  151. roi_7d DECIMAL(10, 4) DEFAULT NULL COMMENT '7日ROI',
  152. dynamic_roi DECIMAL(10, 4) DEFAULT NULL COMMENT '动态ROI',
  153. cost_7d_avg DECIMAL(10, 2) DEFAULT NULL COMMENT '7日均消耗(元)',
  154. executed BOOLEAN DEFAULT FALSE COMMENT '是否已执行',
  155. execution_status VARCHAR(50) DEFAULT NULL COMMENT '执行状态(success, failed, pending, skipped)',
  156. execution_error TEXT DEFAULT NULL COMMENT '执行错误信息',
  157. executed_at TIMESTAMP NULL DEFAULT NULL COMMENT '执行时间',
  158. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  159. KEY idx_decision_date (decision_date),
  160. KEY idx_account_id (account_id),
  161. KEY idx_ad_id (ad_id),
  162. KEY idx_action (action),
  163. KEY idx_executed (executed),
  164. KEY idx_created_at (created_at)
  165. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='决策历史记录';
  166. -- =====================================================
  167. -- 8. 创意创建与审核扫描任务表
  168. -- =====================================================
  169. CREATE TABLE IF NOT EXISTS creative_creation_task (
  170. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  171. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  172. adgroup_id BIGINT DEFAULT NULL COMMENT '广告ID',
  173. dynamic_creative_id BIGINT NOT NULL COMMENT '动态创意ID',
  174. dynamic_creative_name VARCHAR(200) DEFAULT NULL COMMENT '动态创意名称',
  175. landing_video_id BIGINT DEFAULT NULL COMMENT '承接视频ID',
  176. material_id VARCHAR(100) DEFAULT NULL COMMENT '内部素材ID',
  177. material_image_id VARCHAR(100) DEFAULT NULL COMMENT '腾讯图片ID',
  178. review_status VARCHAR(50) NOT NULL DEFAULT 'submitted' COMMENT '审核状态',
  179. submit_status VARCHAR(50) NOT NULL DEFAULT 'submitted' COMMENT '提交状态',
  180. submitted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间',
  181. last_review_checked_at TIMESTAMP NULL DEFAULT NULL COMMENT '最近审核扫描时间',
  182. review_finished_at TIMESTAMP NULL DEFAULT NULL COMMENT '审核完成时间',
  183. error TEXT DEFAULT NULL COMMENT '提交或扫描错误',
  184. raw_record MEDIUMTEXT DEFAULT NULL COMMENT '创建记录JSON',
  185. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  186. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  187. UNIQUE KEY uk_account_creative (account_id, dynamic_creative_id),
  188. KEY idx_review_status (review_status),
  189. KEY idx_submitted_at (submitted_at),
  190. KEY idx_landing_submitted (landing_video_id, submitted_at),
  191. KEY idx_last_review_checked_at (last_review_checked_at),
  192. KEY idx_account_status (account_id, review_status)
  193. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='创意创建与审核扫描任务';
  194. -- =====================================================
  195. -- 9. 腾讯动态创意审核结果表
  196. -- =====================================================
  197. CREATE TABLE IF NOT EXISTS creative_review_result (
  198. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  199. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  200. dynamic_creative_id BIGINT NOT NULL COMMENT '动态创意ID',
  201. review_status VARCHAR(50) NOT NULL COMMENT '解析后的审核状态',
  202. reject_messages MEDIUMTEXT DEFAULT NULL COMMENT '拒绝原因JSON数组',
  203. delay_messages MEDIUMTEXT DEFAULT NULL COMMENT '延迟审核原因JSON数组',
  204. raw_result MEDIUMTEXT NOT NULL COMMENT '腾讯审核结果原文JSON',
  205. checked_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '扫描时间',
  206. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  207. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  208. UNIQUE KEY uk_account_creative (account_id, dynamic_creative_id),
  209. KEY idx_review_status (review_status),
  210. KEY idx_checked_at (checked_at)
  211. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='腾讯动态创意审核结果';
  212. -- =====================================================
  213. -- 10. 创意审核拒绝事实表
  214. -- =====================================================
  215. CREATE TABLE IF NOT EXISTS creative_rejection_fact (
  216. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  217. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  218. dynamic_creative_id BIGINT NOT NULL COMMENT '动态创意ID',
  219. fact_type VARCHAR(50) NOT NULL COMMENT '拒绝事实类型:site/element/compose',
  220. fact_key VARCHAR(255) DEFAULT NULL COMMENT '元素/版位/组件标识',
  221. reason TEXT NOT NULL COMMENT '拒绝原因',
  222. site_set VARCHAR(100) DEFAULT NULL COMMENT '影响版位',
  223. element_type VARCHAR(100) DEFAULT NULL COMMENT '元素类型',
  224. component_type VARCHAR(100) DEFAULT NULL COMMENT '组件类型',
  225. raw_detail MEDIUMTEXT DEFAULT NULL COMMENT '原始明细JSON',
  226. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  227. KEY idx_account_creative (account_id, dynamic_creative_id),
  228. KEY idx_fact_type (fact_type),
  229. KEY idx_fact_key (fact_key(100))
  230. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='创意审核拒绝事实';
  231. -- =====================================================
  232. -- 11. 视频元素特征缓存表(ODPS 最新分区缓存)
  233. -- =====================================================
  234. CREATE TABLE IF NOT EXISTS video_element_feature_cache (
  235. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  236. video_id BIGINT NOT NULL COMMENT '业务视频ID,对应 ODPS vid',
  237. dt VARCHAR(8) NOT NULL COMMENT 'ODPS 分区日期 YYYYMMDD',
  238. point_type VARCHAR(50) NOT NULL COMMENT '点类型',
  239. standard_element VARCHAR(255) NOT NULL COMMENT '标准化元素',
  240. element_dimension VARCHAR(50) NOT NULL DEFAULT '实质' COMMENT '元素维度',
  241. contribution_score DOUBLE NOT NULL DEFAULT 0 COMMENT '贡献分',
  242. is_miss BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否为无特征负缓存',
  243. raw_element VARCHAR(255) DEFAULT NULL COMMENT '原始元素名称',
  244. element_id VARCHAR(100) DEFAULT NULL COMMENT '标准化元素ID',
  245. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  246. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  247. UNIQUE KEY uk_dt_video_point_element (dt, video_id, point_type, standard_element),
  248. KEY idx_video_dt (video_id, dt),
  249. KEY idx_dt (dt),
  250. KEY idx_updated_at (updated_at)
  251. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='视频元素特征缓存';
  252. -- =====================================================
  253. -- 12. 创意素材使用历史/占位表
  254. -- =====================================================
  255. CREATE TABLE IF NOT EXISTS creative_material_usage (
  256. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  257. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  258. adgroup_id BIGINT DEFAULT NULL COMMENT '广告ID',
  259. crowd_package VARCHAR(200) NOT NULL COMMENT '投放人群包名称',
  260. landing_video_id BIGINT DEFAULT NULL COMMENT '承接视频ID,用于同人群包近期排重',
  261. material_id VARCHAR(100) NOT NULL COMMENT '内部素材ID',
  262. material_image_id VARCHAR(100) DEFAULT NULL COMMENT '腾讯图片ID',
  263. dynamic_creative_id BIGINT DEFAULT NULL COMMENT '腾讯动态创意ID',
  264. status VARCHAR(50) NOT NULL DEFAULT 'prepared' COMMENT 'prepared/submitted/failed',
  265. source VARCHAR(50) DEFAULT NULL COMMENT 'primary/hot',
  266. raw_record MEDIUMTEXT DEFAULT NULL COMMENT '准备记录JSON',
  267. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  268. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  269. KEY idx_crowd_material_created (crowd_package, material_id, created_at),
  270. KEY idx_crowd_landing_created (crowd_package, landing_video_id, created_at),
  271. KEY idx_crowd_account_ad_material (crowd_package, account_id, adgroup_id, material_id),
  272. KEY idx_account_created (account_id, created_at),
  273. KEY idx_status_created (status, created_at)
  274. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='创意素材使用历史/占位';
  275. -- =====================================================
  276. -- 13. AI生成创意图片素材
  277. -- =====================================================
  278. CREATE TABLE IF NOT EXISTS ai_generated_material (
  279. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  280. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  281. adgroup_id BIGINT DEFAULT NULL COMMENT '广告ID',
  282. crowd_package VARCHAR(200) NOT NULL COMMENT '投放人群包名称',
  283. landing_video_id BIGINT NOT NULL COMMENT '承接视频ID',
  284. landing_title VARCHAR(500) DEFAULT NULL COMMENT '承接视频标题',
  285. landing_category VARCHAR(200) DEFAULT NULL COMMENT '承接视频品类',
  286. prompt_type VARCHAR(50) NOT NULL COMMENT '生成角度:topic',
  287. prompt_text MEDIUMTEXT NOT NULL COMMENT '最终生成prompt',
  288. prompt_feature_json MEDIUMTEXT DEFAULT NULL COMMENT 'prompt使用的视频特征JSON',
  289. model VARCHAR(200) NOT NULL COMMENT 'OpenRouter模型',
  290. oss_object_key VARCHAR(500) DEFAULT NULL COMMENT 'OSS对象key',
  291. oss_url VARCHAR(1000) DEFAULT NULL COMMENT 'OSS公网URL',
  292. status VARCHAR(50) NOT NULL DEFAULT 'generated' COMMENT 'generated/prepared/approved/rejected/hold/skip/posted_ok/post_failed/error',
  293. approval_status VARCHAR(50) DEFAULT NULL COMMENT '人工审批状态',
  294. tencent_image_id VARCHAR(100) DEFAULT NULL COMMENT '腾讯图片ID',
  295. dynamic_creative_id BIGINT DEFAULT NULL COMMENT '腾讯动态创意ID',
  296. ai_review_status VARCHAR(50) DEFAULT NULL COMMENT 'AI审核状态:pass/reject/hold/error',
  297. ai_review_score INT DEFAULT NULL COMMENT 'AI审核评分0-100',
  298. ai_review_model VARCHAR(200) DEFAULT NULL COMMENT 'AI审核模型',
  299. ai_review_reason TEXT DEFAULT NULL COMMENT 'AI审核原因摘要',
  300. ai_review_json MEDIUMTEXT DEFAULT NULL COMMENT 'AI审核原始JSON',
  301. ai_reviewed_at TIMESTAMP NULL DEFAULT NULL COMMENT 'AI审核时间',
  302. error TEXT DEFAULT NULL COMMENT '生成/上传/创建错误',
  303. raw_response MEDIUMTEXT DEFAULT NULL COMMENT '模型原始响应摘要',
  304. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  305. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  306. KEY idx_account_ad_landing_status (account_id, adgroup_id, landing_video_id, status),
  307. KEY idx_crowd_created (crowd_package, created_at),
  308. KEY idx_status_created (status, created_at)
  309. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI生成创意图片素材';
  310. -- =====================================================
  311. -- 14. 外部召回素材AI清理派生图
  312. -- =====================================================
  313. CREATE TABLE IF NOT EXISTS external_recalled_material (
  314. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  315. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  316. adgroup_id BIGINT NOT NULL COMMENT '广告ID',
  317. crowd_package VARCHAR(200) NOT NULL COMMENT '投放人群包名称',
  318. landing_video_id BIGINT NOT NULL COMMENT '承接视频ID',
  319. source_material_id VARCHAR(255) NOT NULL COMMENT '外部召回materialId/card_cover_id',
  320. source_image_url VARCHAR(1000) NOT NULL COMMENT '外部素材原图URL',
  321. source_title VARCHAR(1000) DEFAULT NULL COMMENT '外部素材标题',
  322. similarity_score DOUBLE NOT NULL DEFAULT 0 COMMENT '向量召回相似度',
  323. visit_uv_30d BIGINT NOT NULL DEFAULT 0 COMMENT '配置窗口内访问UV之和(列名兼容历史)',
  324. uv_window_start VARCHAR(8) DEFAULT NULL COMMENT 'UV窗口开始分区',
  325. uv_window_end VARCHAR(8) DEFAULT NULL COMMENT 'UV窗口结束分区',
  326. recall_json MEDIUMTEXT DEFAULT NULL COMMENT '召回命中与原始素材JSON',
  327. edit_prompt MEDIUMTEXT NOT NULL COMMENT '去播放按钮图生图prompt',
  328. model VARCHAR(200) NOT NULL COMMENT '图生图模型',
  329. oss_object_key VARCHAR(500) DEFAULT NULL COMMENT '派生图OSS key',
  330. oss_url VARCHAR(1000) DEFAULT NULL COMMENT '派生图公网URL',
  331. status VARCHAR(50) NOT NULL DEFAULT 'generated' COMMENT '生成、审批和腾讯提交状态',
  332. approval_status VARCHAR(50) DEFAULT NULL COMMENT '人工审批状态',
  333. tencent_image_id VARCHAR(100) DEFAULT NULL COMMENT '腾讯图片ID',
  334. dynamic_creative_id BIGINT DEFAULT NULL COMMENT '腾讯动态创意ID',
  335. ai_review_status VARCHAR(50) DEFAULT NULL COMMENT 'AI审核状态',
  336. ai_review_score INT DEFAULT NULL COMMENT 'AI审核评分',
  337. ai_review_reason TEXT DEFAULT NULL COMMENT 'AI审核原因',
  338. ai_review_json MEDIUMTEXT DEFAULT NULL COMMENT 'AI审核JSON',
  339. error TEXT DEFAULT NULL COMMENT '处理错误',
  340. raw_response MEDIUMTEXT DEFAULT NULL COMMENT '图生图模型响应摘要',
  341. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  342. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  343. UNIQUE KEY uk_account_ad_landing_source
  344. (account_id, adgroup_id, landing_video_id, source_material_id),
  345. KEY idx_account_ad_status (account_id, adgroup_id, status),
  346. KEY idx_source_created (source_material_id, created_at),
  347. KEY idx_status_created (status, created_at)
  348. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='外部召回素材AI清理派生图';
  349. -- =====================================================
  350. -- 15. 高消耗素材表现快照任务
  351. -- =====================================================
  352. CREATE TABLE IF NOT EXISTS material_performance_snapshot_run (
  353. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  354. run_id VARCHAR(64) NOT NULL COMMENT '快照任务ID',
  355. window_start DATE NOT NULL COMMENT '统计窗口开始日期',
  356. window_end DATE NOT NULL COMMENT '统计窗口结束日期',
  357. top_n INT NOT NULL DEFAULT 5000 COMMENT '拉取TopN',
  358. source VARCHAR(64) NOT NULL DEFAULT 'odps' COMMENT '数据来源',
  359. sql_file VARCHAR(255) DEFAULT NULL COMMENT 'SQL文件路径',
  360. row_count INT NOT NULL DEFAULT 0 COMMENT '明细行数',
  361. total_cost_fen BIGINT NOT NULL DEFAULT 0 COMMENT '窗口内总消耗(分)',
  362. status VARCHAR(32) NOT NULL DEFAULT 'SUCCESS' COMMENT '任务状态',
  363. error_message MEDIUMTEXT DEFAULT NULL COMMENT '错误信息',
  364. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  365. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  366. UNIQUE KEY uk_run_id (run_id),
  367. KEY idx_window (window_start, window_end)
  368. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='高消耗素材表现快照任务';
  369. -- =====================================================
  370. -- 15. 高消耗素材表现快照明细
  371. -- =====================================================
  372. CREATE TABLE IF NOT EXISTS material_performance_snapshot_item (
  373. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  374. run_id VARCHAR(64) NOT NULL COMMENT '快照任务ID',
  375. rank_no INT NOT NULL COMMENT '消耗排名',
  376. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  377. ad_id BIGINT NOT NULL COMMENT '广告ID',
  378. creative_id BIGINT NOT NULL COMMENT '创意ID',
  379. creative_name VARCHAR(255) DEFAULT NULL COMMENT '创意名称',
  380. ad_name VARCHAR(255) DEFAULT NULL COMMENT '广告名称',
  381. video_id BIGINT DEFAULT NULL COMMENT '承接视频ID',
  382. title VARCHAR(512) DEFAULT NULL COMMENT '素材标题',
  383. image_url VARCHAR(1024) DEFAULT NULL COMMENT '素材图片URL',
  384. image_hash VARCHAR(64) DEFAULT NULL COMMENT '图片内容hash',
  385. crowd_package VARCHAR(255) DEFAULT NULL COMMENT '人群包名称',
  386. optimization_goal VARCHAR(128) DEFAULT NULL COMMENT '优化目标',
  387. bid_amount_fen BIGINT DEFAULT NULL COMMENT '出价(分)',
  388. day_amount_fen BIGINT DEFAULT NULL COMMENT '日预算(分)',
  389. cost_fen BIGINT NOT NULL DEFAULT 0 COMMENT '消耗(分)',
  390. impressions BIGINT NOT NULL DEFAULT 0 COMMENT '曝光',
  391. clicks BIGINT NOT NULL DEFAULT 0 COMMENT '点击',
  392. ctr DECIMAL(10, 6) DEFAULT NULL COMMENT '点击率',
  393. key_page_view_count BIGINT NOT NULL DEFAULT 0 COMMENT '关键页访问次数',
  394. key_page_rate DECIMAL(10, 6) DEFAULT NULL COMMENT '关键页访问/点击',
  395. conversions_count BIGINT NOT NULL DEFAULT 0 COMMENT '转化数',
  396. conversion_rate DECIMAL(10, 6) DEFAULT NULL COMMENT '转化率',
  397. active_days INT NOT NULL DEFAULT 0 COMMENT '有消耗天数',
  398. first_dt VARCHAR(16) DEFAULT NULL COMMENT '首次投放日期',
  399. last_dt VARCHAR(16) DEFAULT NULL COMMENT '最后投放日期',
  400. raw_json MEDIUMTEXT DEFAULT NULL COMMENT '原始行JSON',
  401. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  402. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  403. UNIQUE KEY uk_run_creative (run_id, creative_id),
  404. KEY idx_creative (creative_id),
  405. KEY idx_image_hash (image_hash),
  406. KEY idx_video (video_id),
  407. KEY idx_package_cost (crowd_package, cost_fen)
  408. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='高消耗素材表现快照明细';
  409. -- =====================================================
  410. -- 16. 素材图片结构化标注
  411. -- =====================================================
  412. CREATE TABLE IF NOT EXISTS material_visual_annotation (
  413. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  414. image_hash VARCHAR(64) NOT NULL COMMENT '图片内容hash',
  415. image_url VARCHAR(1024) NOT NULL COMMENT '素材图片URL',
  416. annotation_version VARCHAR(64) NOT NULL COMMENT '标注版本',
  417. annotator VARCHAR(64) NOT NULL COMMENT '标注来源',
  418. creative_id BIGINT DEFAULT NULL COMMENT '样本创意ID',
  419. visual_template VARCHAR(128) DEFAULT NULL COMMENT '视觉模板',
  420. hook_category VARCHAR(255) DEFAULT NULL COMMENT '标题钩子分类',
  421. title_text VARCHAR(512) DEFAULT NULL COMMENT '图片/素材标题',
  422. title_length INT DEFAULT NULL COMMENT '标题长度',
  423. scene_type VARCHAR(128) DEFAULT NULL COMMENT '场景类型',
  424. person_type VARCHAR(128) DEFAULT NULL COMMENT '人物/主体估计',
  425. has_human TINYINT DEFAULT NULL COMMENT '是否有人物',
  426. text_area_level VARCHAR(32) DEFAULT NULL COMMENT '文字面积估计等级',
  427. color_style VARCHAR(128) DEFAULT NULL COMMENT '颜色/调性',
  428. button_like_element TINYINT NOT NULL DEFAULT 0 COMMENT '是否疑似按钮诱导',
  429. fake_ui_risk TINYINT NOT NULL DEFAULT 0 COMMENT '假界面风险',
  430. official_policy_risk TINYINT NOT NULL DEFAULT 0 COMMENT '官方/政策承诺风险',
  431. medical_health_risk TINYINT NOT NULL DEFAULT 0 COMMENT '医疗健康风险',
  432. politics_sensitive_risk TINYINT NOT NULL DEFAULT 0 COMMENT '涉政/国家情绪风险',
  433. celebrity_or_history_risk TINYINT NOT NULL DEFAULT 0 COMMENT '名人/历史人物风险',
  434. strong_inducement_risk TINYINT NOT NULL DEFAULT 0 COMMENT '强诱导风险',
  435. greeting_blessing_risk TINYINT NOT NULL DEFAULT 0 COMMENT '早晚安/祝福风险',
  436. compliance_level VARCHAR(32) NOT NULL DEFAULT 'caution' COMMENT '生成可学习等级',
  437. learnable_points MEDIUMTEXT DEFAULT NULL COMMENT '可学习点',
  438. avoid_points MEDIUMTEXT DEFAULT NULL COMMENT '避让点',
  439. raw_annotation MEDIUMTEXT DEFAULT NULL COMMENT '原始标注JSON',
  440. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  441. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  442. UNIQUE KEY uk_image_version (image_hash, annotation_version),
  443. KEY idx_creative (creative_id),
  444. KEY idx_template (visual_template),
  445. KEY idx_compliance (compliance_level)
  446. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='素材图片结构化标注';
  447. -- =====================================================
  448. -- 17. AI生成素材可学习创意模式
  449. -- =====================================================
  450. CREATE TABLE IF NOT EXISTS material_creative_pattern (
  451. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  452. pattern_version VARCHAR(64) NOT NULL COMMENT '策略版本',
  453. pattern_key VARCHAR(128) NOT NULL COMMENT '策略唯一键',
  454. pattern_name VARCHAR(128) NOT NULL COMMENT '策略名称',
  455. hook_category VARCHAR(128) NOT NULL COMMENT '标题钩子类型',
  456. visual_template VARCHAR(128) NOT NULL COMMENT '视觉模板',
  457. applicable_crowd_packages VARCHAR(1024) DEFAULT NULL COMMENT '适用人群包',
  458. applicable_placements VARCHAR(1024) DEFAULT NULL COMMENT '适用版位',
  459. target_age_min INT DEFAULT NULL COMMENT '适用年龄下限',
  460. target_age_max INT DEFAULT NULL COMMENT '适用年龄上限',
  461. title_hook_rule MEDIUMTEXT NOT NULL COMMENT '标题钩子规则',
  462. visual_rule MEDIUMTEXT NOT NULL COMMENT '视觉规则',
  463. relevance_rule MEDIUMTEXT NOT NULL COMMENT '视频相关性规则',
  464. compliance_rule MEDIUMTEXT NOT NULL COMMENT '合规规则',
  465. selector_config MEDIUMTEXT DEFAULT NULL COMMENT '选择器配置JSON:match/exclude/score',
  466. positive_examples MEDIUMTEXT DEFAULT NULL COMMENT '正例JSON',
  467. negative_examples MEDIUMTEXT DEFAULT NULL COMMENT '反例JSON',
  468. source_run_id VARCHAR(64) DEFAULT NULL COMMENT '来源快照ID',
  469. source_material_count INT NOT NULL DEFAULT 0 COMMENT '来源素材数',
  470. source_total_cost_fen BIGINT NOT NULL DEFAULT 0 COMMENT '来源素材消耗(分)',
  471. status VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT 'DRAFT/APPROVED/REJECTED',
  472. reviewed_by VARCHAR(64) DEFAULT NULL COMMENT '审核人',
  473. reviewed_at TIMESTAMP NULL DEFAULT NULL COMMENT '审核时间',
  474. enabled TINYINT NOT NULL DEFAULT 0 COMMENT '是否启用',
  475. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  476. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  477. UNIQUE KEY uk_version_key (pattern_version, pattern_key),
  478. KEY idx_status_enabled (status, enabled),
  479. KEY idx_hook_template (hook_category, visual_template)
  480. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI生成素材可学习创意模式';
  481. -- =====================================================
  482. -- 18. 素材策略学习周报
  483. -- =====================================================
  484. CREATE TABLE IF NOT EXISTS material_strategy_learning_report (
  485. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  486. report_id VARCHAR(64) NOT NULL COMMENT '报告ID',
  487. run_id VARCHAR(64) NOT NULL COMMENT '快照任务ID',
  488. report_version VARCHAR(64) NOT NULL COMMENT '报告版本',
  489. summary MEDIUMTEXT NOT NULL COMMENT '报告摘要',
  490. top_patterns MEDIUMTEXT DEFAULT NULL COMMENT '核心模式JSON',
  491. risk_summary MEDIUMTEXT DEFAULT NULL COMMENT '风险摘要JSON',
  492. recommended_actions MEDIUMTEXT DEFAULT NULL COMMENT '建议动作JSON',
  493. report_path VARCHAR(512) DEFAULT NULL COMMENT '本地报告路径',
  494. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  495. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  496. UNIQUE KEY uk_report_id (report_id),
  497. KEY idx_run_id (run_id)
  498. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='素材策略学习周报';
  499. -- =====================================================
  500. -- 初始化数据
  501. -- =====================================================
  502. -- 插入默认系统配置
  503. INSERT INTO system_config (config_key, config_value, value_type, description) VALUES
  504. ('execution_enabled', 'false', 'boolean', '是否启用实际执行(生产环境谨慎开启)'),
  505. ('whitelist_enabled', 'true', 'boolean', '是否启用白名单机制'),
  506. ('cron_schedule', '0 2 * * *', 'string', 'APScheduler定时调度表达式(每天凌晨2点UTC)'),
  507. ('run_on_startup', 'false', 'boolean', '服务启动时是否立即执行一次'),
  508. ('max_concurrent_tasks', '1', 'int', '最大并发任务数'),
  509. ('approval_timeout_minutes', '30', 'int', '飞书审批超时时间(分钟)'),
  510. ('creative_review_scan_interval_hours', '2', 'int', '创意正式审核结果扫描间隔(小时)'),
  511. ('roi_low_factor', '0.75', 'string', '关停线系数(ROI < 渠道P50 * 0.75 触发关停)'),
  512. ('bid_down_roi_factor', '0.90', 'string', '降价线系数(ROI < 渠道P50 * 0.90 触发降价)'),
  513. ('bid_up_roi_factor', '1.05', 'string', '提价线系数(ROI > 渠道P50 * 1.05 触发提价)')
  514. ON DUPLICATE KEY UPDATE updated_at = CURRENT_TIMESTAMP;
  515. -- 插入示例白名单账户(请根据实际情况修改)
  516. INSERT INTO account_whitelist (account_id, account_name, business_line, enabled, remark, created_by) VALUES
  517. (80769799, '测试账户1', '小程序投流', TRUE, '初始白名单账户', 'system'),
  518. (71305011, '测试账户2', '小程序投流', TRUE, '初始白名单账户', 'system')
  519. ON DUPLICATE KEY UPDATE updated_at = CURRENT_TIMESTAMP;
  520. -- =====================================================
  521. -- 索引优化说明
  522. -- =====================================================
  523. -- 1. account_whitelist.uk_account_id: 保证账户唯一性
  524. -- 2. system_config.uk_config_key: 保证配置键唯一性
  525. -- 3. decision_history.idx_decision_date: 按日期查询决策记录
  526. -- 4. decision_history.idx_ad_id: 查询某个广告的历史决策
  527. -- 5. decision_history.idx_action: 按决策类型统计分析
  528. -- =====================================================
  529. -- 表分区建议(如数据量大)
  530. -- =====================================================
  531. -- ALTER TABLE decision_history PARTITION BY RANGE (YEAR(decision_date) * 100 + MONTH(decision_date)) (
  532. -- PARTITION p202604 VALUES LESS THAN (202605),
  533. -- PARTITION p202605 VALUES LESS THAN (202606),
  534. -- PARTITION p202606 VALUES LESS THAN (202607),
  535. -- PARTITION pmax VALUES LESS THAN MAXVALUE
  536. -- );