schema.sql 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. -- ============================================================
  2. -- 得卡 DECA 表结构(从数据库真实结构导出,2026/08/04 重构后)
  3. -- 在售流程 deca_onsale_* / 已售流程 deca_*(结构同onsale)/ deca_report_record
  4. -- ============================================================
  5. -- ---------- 在售(onsale)流程 ----------
  6. CREATE TABLE `deca_onsale_shop_record` (
  7. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  8. `merchant_user_id` varchar(32) NOT NULL COMMENT '商家用户ID(接口 userId,接口2的 merchantUserId)',
  9. `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称',
  10. `merchant_avatar_url` varchar(512) DEFAULT NULL COMMENT '商家头像URL',
  11. `fans_count` int DEFAULT NULL COMMENT '粉丝数(动态)',
  12. `active_groupbuy_count` int DEFAULT NULL COMMENT '在售团购数(动态)',
  13. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  14. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  15. PRIMARY KEY (`id`),
  16. UNIQUE KEY `uk_merchant_user_id` (`merchant_user_id`)
  17. ) ENGINE=InnoDB AUTO_INCREMENT=176 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商家列表(最新状态)';
  18. CREATE TABLE `deca_onsale_product_record` (
  19. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  20. `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code,如 GB26080178297)',
  21. `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(merchant.merchantUserID)',
  22. `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称',
  23. `title` varchar(1000) DEFAULT NULL COMMENT '商品标题',
  24. `card_product_title` varchar(1000) DEFAULT NULL COMMENT '卡牌商品副标题(cardProductTitle)',
  25. `cover_image_url` varchar(512) DEFAULT NULL COMMENT '封面图URL',
  26. `unit_price` decimal(12,2) DEFAULT NULL COMMENT '单价(unitPrice)',
  27. `min_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最低单价',
  28. `max_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最高单价',
  29. `card_count` int DEFAULT NULL COMMENT '总份数(cardCount)',
  30. `sold_count` int DEFAULT NULL COMMENT '已售份数(soldCount,动态)',
  31. `available_stock` int DEFAULT NULL COMMENT '剩余库存(availableStock,动态)',
  32. `groupbuy_status` int DEFAULT NULL COMMENT '拼团状态码(groupbuyStatus)',
  33. `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '拼团状态名(groupbuyStatusName,如 拼团中)',
  34. `is_on_sale` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否当前在售(1是/0否;每轮采集不在全量在售集合内则置0)',
  35. `play_type` int DEFAULT NULL COMMENT '玩法类型(playType)',
  36. `live_id` bigint DEFAULT NULL COMMENT '关联直播ID(liveId)',
  37. `publish_at` varchar(32) DEFAULT NULL COMMENT '上架时间(详情 publishAt)',
  38. `sale_start_at` varchar(32) DEFAULT NULL COMMENT '售卖开始时间(详情 saleStartAt)',
  39. `sale_end_at` varchar(32) DEFAULT NULL COMMENT '售卖结束时间(详情 saleEndAt)',
  40. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  41. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  42. `spec_name` varchar(64) DEFAULT NULL COMMENT '规格(specTypeName)',
  43. `series_name` varchar(255) DEFAULT NULL COMMENT '系列名称(giftInfo.seriesName)',
  44. `series_config` varchar(255) DEFAULT NULL COMMENT '系列配置(giftInfo.seriesConfig)',
  45. `expected_card_count` int DEFAULT NULL COMMENT '预计开卡张数(totalExpectedCardCount)',
  46. `checklist_card_count` int DEFAULT NULL COMMENT '卡密份数(totalCardCount)',
  47. `replay_url` varchar(512) DEFAULT NULL COMMENT '视频回放链接(replay_url)',
  48. `report_state` tinyint DEFAULT '0' COMMENT '拆卡报告采集状态 0未采/1已采/2无/3失败',
  49. `replay_state` tinyint DEFAULT '0' COMMENT '视频回放采集状态 0未采/1已采/2无/3失败',
  50. PRIMARY KEY (`id`),
  51. UNIQUE KEY `uk_product_code` (`product_code`),
  52. KEY `idx_merchant_user_id` (`merchant_user_id`)
  53. ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品(最新状态)';
  54. CREATE TABLE `deca_onsale_product_daily_record` (
  55. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  56. `product_code` varchar(32) NOT NULL COMMENT '商品编码(code)',
  57. `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID',
  58. `snapshot_date` date NOT NULL COMMENT '快照日期(YYYY-MM-DD)',
  59. `card_count` int DEFAULT NULL COMMENT '当日总份数',
  60. `sold_count` int DEFAULT NULL COMMENT '当日累计已售',
  61. `available_stock` int DEFAULT NULL COMMENT '当日剩余库存',
  62. `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '当日拼团状态名',
  63. `unit_price` decimal(12,2) DEFAULT NULL COMMENT '当日单价',
  64. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  65. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  66. PRIMARY KEY (`id`),
  67. UNIQUE KEY `uk_code_date` (`product_code`,`snapshot_date`),
  68. KEY `idx_snapshot_date` (`snapshot_date`)
  69. ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品每日售卖进度快照';
  70. CREATE TABLE `deca_onsale_kami_record` (
  71. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  72. `uuid` varchar(64) NOT NULL COMMENT '卡牌唯一标识(uuid)',
  73. `product_code` varchar(32) DEFAULT NULL COMMENT '所属商品编码(请求 code)',
  74. `sort_order` int DEFAULT NULL COMMENT '序号(sortOrder)',
  75. `alias_name` varchar(64) DEFAULT NULL COMMENT '别名(aliasName,如 TCU1)',
  76. `team_name_en` varchar(128) DEFAULT NULL COMMENT '球队英文名(teamNameEn)',
  77. `team_name_zh` varchar(128) DEFAULT NULL COMMENT '球队中文名(teamNameZh)',
  78. `player_name_en` varchar(128) DEFAULT NULL COMMENT '球员英文名(playerNameEn)',
  79. `player_name_zh` varchar(128) DEFAULT NULL COMMENT '球员中文名(playerNameZh)',
  80. `card_type` varchar(255) DEFAULT NULL COMMENT '卡种(cardType)',
  81. `limit_number` varchar(64) DEFAULT NULL COMMENT '限编(limitNumber)',
  82. `card_number` varchar(64) DEFAULT NULL COMMENT '卡编(cardNumber,如 No.1)',
  83. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  84. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  85. PRIMARY KEY (`id`),
  86. UNIQUE KEY `uk_uuid` (`uuid`),
  87. KEY `idx_product_code` (`product_code`)
  88. ) ENGINE=InnoDB AUTO_INCREMENT=15933 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品卡牌清单(checklist)';
  89. -- ---------- 已售流程(结构复制onsale) ----------
  90. CREATE TABLE `deca_shop_record` (
  91. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  92. `merchant_user_id` varchar(32) NOT NULL COMMENT '商家用户ID(接口 userId,接口2的 merchantUserId)',
  93. `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称',
  94. `merchant_avatar_url` varchar(512) DEFAULT NULL COMMENT '商家头像URL',
  95. `fans_count` int DEFAULT NULL COMMENT '粉丝数(动态)',
  96. `active_groupbuy_count` int DEFAULT NULL COMMENT '在售团购数(动态)',
  97. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  98. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  99. PRIMARY KEY (`id`),
  100. UNIQUE KEY `uk_merchant_user_id` (`merchant_user_id`)
  101. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商家列表(最新状态)';
  102. CREATE TABLE `deca_product_record` (
  103. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  104. `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code,如 GB26080178297)',
  105. `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(merchant.merchantUserID)',
  106. `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称',
  107. `title` varchar(1000) DEFAULT NULL COMMENT '商品标题',
  108. `card_product_title` varchar(1000) DEFAULT NULL COMMENT '卡牌商品副标题(cardProductTitle)',
  109. `cover_image_url` varchar(512) DEFAULT NULL COMMENT '封面图URL',
  110. `unit_price` decimal(12,2) DEFAULT NULL COMMENT '单价(unitPrice)',
  111. `min_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最低单价',
  112. `max_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最高单价',
  113. `card_count` int DEFAULT NULL COMMENT '总份数(cardCount)',
  114. `sold_count` int DEFAULT NULL COMMENT '已售份数(soldCount,动态)',
  115. `available_stock` int DEFAULT NULL COMMENT '剩余库存(availableStock,动态)',
  116. `groupbuy_status` int DEFAULT NULL COMMENT '拼团状态码(groupbuyStatus)',
  117. `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '拼团状态名(groupbuyStatusName,如 拼团中)',
  118. `play_type` int DEFAULT NULL COMMENT '玩法类型(playType)',
  119. `live_id` bigint DEFAULT NULL COMMENT '关联直播ID(liveId)',
  120. `publish_at` varchar(32) DEFAULT NULL COMMENT '上架时间(详情 publishAt)',
  121. `sale_start_at` varchar(32) DEFAULT NULL COMMENT '售卖开始时间(详情 saleStartAt)',
  122. `sale_end_at` varchar(32) DEFAULT NULL COMMENT '售卖结束时间(详情 saleEndAt)',
  123. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  124. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  125. `spec_name` varchar(64) DEFAULT NULL COMMENT '规格(specTypeName)',
  126. `series_name` varchar(255) DEFAULT NULL COMMENT '系列名称(giftInfo.seriesName)',
  127. `series_config` varchar(255) DEFAULT NULL COMMENT '系列配置(giftInfo.seriesConfig)',
  128. `expected_card_count` int DEFAULT NULL COMMENT '预计开卡张数(totalExpectedCardCount)',
  129. `checklist_card_count` int DEFAULT NULL COMMENT '卡密份数(totalCardCount)',
  130. `replay_url` varchar(512) DEFAULT NULL COMMENT '视频回放链接(replay_url)',
  131. `report_state` tinyint DEFAULT '0' COMMENT '拆卡报告采集状态 0未采/1已采/2无/3失败',
  132. `replay_state` tinyint DEFAULT '0' COMMENT '视频回放采集状态 0未采/1已采/2无/3失败',
  133. PRIMARY KEY (`id`),
  134. UNIQUE KEY `uk_product_code` (`product_code`),
  135. KEY `idx_merchant_user_id` (`merchant_user_id`)
  136. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品(最新状态)';
  137. CREATE TABLE `deca_kami_record` (
  138. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  139. `uuid` varchar(64) NOT NULL COMMENT '卡牌唯一标识(uuid)',
  140. `product_code` varchar(32) DEFAULT NULL COMMENT '所属商品编码(请求 code)',
  141. `sort_order` int DEFAULT NULL COMMENT '序号(sortOrder)',
  142. `alias_name` varchar(64) DEFAULT NULL COMMENT '别名(aliasName,如 TCU1)',
  143. `team_name_en` varchar(128) DEFAULT NULL COMMENT '球队英文名(teamNameEn)',
  144. `team_name_zh` varchar(128) DEFAULT NULL COMMENT '球队中文名(teamNameZh)',
  145. `player_name_en` varchar(128) DEFAULT NULL COMMENT '球员英文名(playerNameEn)',
  146. `player_name_zh` varchar(128) DEFAULT NULL COMMENT '球员中文名(playerNameZh)',
  147. `card_type` varchar(255) DEFAULT NULL COMMENT '卡种(cardType)',
  148. `limit_number` varchar(64) DEFAULT NULL COMMENT '限编(limitNumber)',
  149. `card_number` varchar(64) DEFAULT NULL COMMENT '卡编(cardNumber,如 No.1)',
  150. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  151. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  152. PRIMARY KEY (`id`),
  153. UNIQUE KEY `uk_uuid` (`uuid`),
  154. KEY `idx_product_code` (`product_code`)
  155. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品卡牌清单(checklist)';
  156. -- ---------- 拆卡报告 ----------
  157. CREATE TABLE `deca_report_record` (
  158. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  159. `product_code` varchar(32) DEFAULT NULL COMMENT '商品编码',
  160. `confirmed_card_uuid` varchar(64) NOT NULL COMMENT '拆开的卡唯一标识(confirmedCardUuid)',
  161. `player_name_en` varchar(128) DEFAULT NULL COMMENT '球员英文名',
  162. `player_name_zh` varchar(128) DEFAULT NULL COMMENT '球员中文名',
  163. `opened_at` varchar(32) DEFAULT NULL COMMENT '开卡时间(openedAt)',
  164. `hit_user_nickname` varchar(64) DEFAULT NULL COMMENT '中卡用户昵称(hitUserNickname)',
  165. `image_url` varchar(1024) DEFAULT NULL COMMENT '卡图URL(images内所有imageUrl逗号拼接)',
  166. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  167. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  168. PRIMARY KEY (`id`),
  169. UNIQUE KEY `uk_confirmed_card_uuid` (`confirmed_card_uuid`),
  170. KEY `idx_product_code` (`product_code`)
  171. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-拆卡报告(开出的卡+中卡用户+卡图)';
  172. -- ---------- 在售商品提醒监控(onsale_alert_spider.py 用) ----------
  173. -- 监控指定商家在售商品:新商品上架提醒 + 进度过半提醒;两个 notified 标记位用于去重防重复提醒
  174. CREATE TABLE `deca_onsale_alert_record` (
  175. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  176. `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code)',
  177. `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID',
  178. `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称',
  179. `title` varchar(1000) DEFAULT NULL COMMENT '商品标题',
  180. `unit_price` decimal(12,2) DEFAULT NULL COMMENT '单价(unitPrice)',
  181. `card_count` int DEFAULT NULL COMMENT '总份数(cardCount)',
  182. `sold_count` int DEFAULT NULL COMMENT '已售份数(soldCount,动态)',
  183. `progress` decimal(5,2) DEFAULT NULL COMMENT '售卖进度百分比(sold/card*100)',
  184. `available_stock` int DEFAULT NULL COMMENT '剩余库存(availableStock)',
  185. `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '拼团状态名(groupbuyStatusName)',
  186. `share_code` varchar(512) DEFAULT NULL COMMENT '分享码(shareResp.shareCode,已urlencode,拼分享URL用)',
  187. `new_notified` tinyint DEFAULT '0' COMMENT '新品上架提醒已发 0未发/1已发',
  188. `half_notified` tinyint DEFAULT '0' COMMENT '进度过半提醒已发 0未发/1已发',
  189. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  190. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  191. PRIMARY KEY (`id`),
  192. UNIQUE KEY `uk_product_code` (`product_code`),
  193. KEY `idx_merchant_user_id` (`merchant_user_id`)
  194. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品提醒监控(新品上架/进度过半)';
  195. -- ---------- 商品购买记录累积(buy_record_analysis/test_buy_record.py 用) ----------
  196. -- 详情页 purchaseRecords 只返回最近 10 条,靠周期轮询累积买家名单
  197. -- 「订单粒度」去重:同 user 对同商品可下多笔相同份数的单(如王**要 x10 两笔间隔2分钟),需区分。
  198. -- 唯一键含 purchased_at_ts 精确到秒作 DB 兜底;主判重在应用层:反推时间戳±70s内视为同一笔(相对时间漂移)、否则新订单。
  199. CREATE TABLE `deca_buy_record` (
  200. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  201. `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code,如 GB26080417234)',
  202. `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(冗余,便于查看)',
  203. `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称(冗余,便于查看)',
  204. `title` varchar(1000) DEFAULT NULL COMMENT '商品标题(冗余,便于查看)',
  205. `user_id` varchar(32) NOT NULL COMMENT '买家用户ID(purchaseRecords.userId)',
  206. `nickname` varchar(64) DEFAULT NULL COMMENT '买家昵称(脱敏,如 D**l)',
  207. `card_count` int DEFAULT NULL COMMENT '本次购买份数(cardCount)',
  208. `purchased_at_text` varchar(32) DEFAULT NULL COMMENT '首次抓到时的相对时间原文(如 1分钟前)',
  209. `purchased_at_ts` bigint DEFAULT NULL COMMENT '反推的绝对购买时间戳(秒),去重键之一',
  210. `purchased_at` datetime DEFAULT NULL COMMENT '反推的绝对购买时间',
  211. `first_seen_at` datetime DEFAULT NULL COMMENT '我们首次抓到该条记录的时间',
  212. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  213. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  214. PRIMARY KEY (`id`),
  215. UNIQUE KEY `uk_buy` (`product_code`,`user_id`,`card_count`,`purchased_at_ts`),
  216. KEY `idx_product_code` (`product_code`),
  217. KEY `idx_user_id` (`user_id`)
  218. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品购买记录(详情页purchaseRecords周期累积)';
  219. -- ============================================================
  220. -- 2026/08/11 新增:随机团(选队随机/剩余随机) teams 明细
  221. -- 背景:选队随机每队价格不同,team-options 一旦转成剩余随机就永久 29000,
  222. -- 原始 cardCount 拿不到;必须在选队阶段持续抓 team-options 存下来,
  223. -- 转剩余随机后才能算出「原始总价 - 当前剩余货值」。
  224. -- 存储策略:
  225. -- - 在售团(data_source=team_options):每轮覆盖成最新一份(同 product_code+team_id
  226. -- 直接更新,captured_at 记录采集时刻);
  227. -- - 已售团 或 剩余随机快照(data_source=snapshot):存完成时/首次采到时的最终一份。
  228. -- ============================================================
  229. CREATE TABLE IF NOT EXISTS `deca_groupbuy_team_record` (
  230. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  231. `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code)',
  232. `play_type_name` varchar(64) DEFAULT NULL COMMENT '采集时状态:选队随机-.../剩余随机',
  233. `data_source` varchar(16) NOT NULL COMMENT '数据来源:team_options(选队阶段) / snapshot(剩余随机冻结快照)',
  234. `team_id` int NOT NULL COMMENT '队ID(teamId)',
  235. `team_name_en` varchar(64) DEFAULT NULL COMMENT '队英文名(teamNameEn)',
  236. `team_name_zh` varchar(64) DEFAULT NULL COMMENT '队中文名(teamNameZh)',
  237. `team_logo_image_url` varchar(512) DEFAULT NULL COMMENT '队 logo URL',
  238. `unit_price` decimal(12,2) DEFAULT NULL COMMENT '该队单价(unitPrice)',
  239. `card_count` int DEFAULT NULL COMMENT '该队原始总份(cardCount,仅选队阶段有;剩余快照无→NULL)',
  240. `available_stock` int DEFAULT NULL COMMENT '剩余份数(选队=当前剩余;剩余快照=冻结在转换点的剩余)',
  241. `sold_count` int DEFAULT NULL COMMENT '已售份数(选队=card_count-available_stock;剩余快照逐队算不出→NULL)',
  242. `snapshot_total_quantity` int DEFAULT NULL COMMENT '剩余随机快照 totalQuantity(仅 snapshot 时有)',
  243. `captured_at` datetime NOT NULL COMMENT '采集时刻(选队随机实时变,用它区分不同轮)',
  244. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  245. `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  246. PRIMARY KEY (`id`),
  247. UNIQUE KEY `uk_product_team` (`product_code`,`team_id`,`data_source`),
  248. KEY `idx_product_code` (`product_code`),
  249. KEY `idx_captured_at` (`captured_at`)
  250. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-拼团 teams 明细(随机团逐队价格/份数,含选队实时与剩余随机冻结快照)';
  251. -- 两张商品表加「团总价」列,报告读它优先(NULL 则回落到 unit_price*sold_count)
  252. -- 语义:随机团(选队随机/剩余随机) 用 teams 表按状态算出的总价;固定价团保持 NULL(报告端回落原公式)
  253. -- 首次执行请手动跑(MySQL 不支持 ADD COLUMN IF NOT EXISTS,已加过会报 1060 忽略即可):
  254. ALTER TABLE `deca_onsale_product_record` ADD COLUMN `team_total_amount` decimal(14,2) DEFAULT NULL COMMENT '按 teams 算的总价(随机团用;NULL=固定价团或数据缺失)' AFTER `checklist_card_count`;
  255. ALTER TABLE `deca_product_record` ADD COLUMN `team_total_amount` decimal(14,2) DEFAULT NULL COMMENT '按 teams 算的总价(随机团用;NULL=固定价团或数据缺失)' AFTER `checklist_card_count`;
  256. -- ============================================================
  257. -- 2026/08/11 新增:全站在售商品进度时间序列(append-only)
  258. -- 用途:后续统计"什么时候卖了多少百分比"——售卖速度、进度曲线、时段热度。
  259. -- 触发:buy_record_spider 每 60 秒 ingest_onsale 之后,对比该商品上一次的
  260. -- sold_count/available_stock,**变化才 INSERT**(避免没卖动的商品重复占位)。
  261. -- 与 deca_onsale_product_daily_record 的区别:daily 是每日单点、日粒度;本表是
  262. -- 变化时点、分钟级细粒度,适合画曲线。
  263. -- ============================================================
  264. CREATE TABLE IF NOT EXISTS `deca_onsale_product_progress_record` (
  265. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  266. `product_code` varchar(32) NOT NULL COMMENT '商品编码',
  267. `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(冗余便于查询)',
  268. `sold_count` int DEFAULT NULL COMMENT '当时已售份数',
  269. `available_stock` int DEFAULT NULL COMMENT '当时剩余库存',
  270. `card_count` int DEFAULT NULL COMMENT '当时总份数',
  271. `progress_pct` decimal(6,2) DEFAULT NULL COMMENT '进度百分比(sold_count/card_count*100,冗余便于查询)',
  272. `unit_price` decimal(12,2) DEFAULT NULL COMMENT '当时单价(用于快速估算金额;随机团另见 team_total_amount)',
  273. `captured_at` datetime NOT NULL COMMENT '采集时刻',
  274. `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  275. PRIMARY KEY (`id`),
  276. KEY `idx_code_time` (`product_code`,`captured_at`),
  277. KEY `idx_captured_at` (`captured_at`)
  278. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品进度时间序列(变化才写,用于售卖速度/进度曲线统计)';