-- ============================================================ -- 得卡 DECA 表结构(从数据库真实结构导出,2026/08/04 重构后) -- 在售流程 deca_onsale_* / 已售流程 deca_*(结构同onsale)/ deca_report_record -- ============================================================ -- ---------- 在售(onsale)流程 ---------- CREATE TABLE `deca_onsale_shop_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `merchant_user_id` varchar(32) NOT NULL COMMENT '商家用户ID(接口 userId,接口2的 merchantUserId)', `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称', `merchant_avatar_url` varchar(512) DEFAULT NULL COMMENT '商家头像URL', `fans_count` int DEFAULT NULL COMMENT '粉丝数(动态)', `active_groupbuy_count` int DEFAULT NULL COMMENT '在售团购数(动态)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_merchant_user_id` (`merchant_user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=176 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商家列表(最新状态)'; CREATE TABLE `deca_onsale_product_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code,如 GB26080178297)', `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(merchant.merchantUserID)', `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称', `title` varchar(1000) DEFAULT NULL COMMENT '商品标题', `card_product_title` varchar(1000) DEFAULT NULL COMMENT '卡牌商品副标题(cardProductTitle)', `cover_image_url` varchar(512) DEFAULT NULL COMMENT '封面图URL', `unit_price` decimal(12,2) DEFAULT NULL COMMENT '单价(unitPrice)', `min_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最低单价', `max_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最高单价', `card_count` int DEFAULT NULL COMMENT '总份数(cardCount)', `sold_count` int DEFAULT NULL COMMENT '已售份数(soldCount,动态)', `available_stock` int DEFAULT NULL COMMENT '剩余库存(availableStock,动态)', `groupbuy_status` int DEFAULT NULL COMMENT '拼团状态码(groupbuyStatus)', `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '拼团状态名(groupbuyStatusName,如 拼团中)', `is_on_sale` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否当前在售(1是/0否;每轮采集不在全量在售集合内则置0)', `play_type` int DEFAULT NULL COMMENT '玩法类型(playType)', `live_id` bigint DEFAULT NULL COMMENT '关联直播ID(liveId)', `publish_at` varchar(32) DEFAULT NULL COMMENT '上架时间(详情 publishAt)', `sale_start_at` varchar(32) DEFAULT NULL COMMENT '售卖开始时间(详情 saleStartAt)', `sale_end_at` varchar(32) DEFAULT NULL COMMENT '售卖结束时间(详情 saleEndAt)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `spec_name` varchar(64) DEFAULT NULL COMMENT '规格(specTypeName)', `series_name` varchar(255) DEFAULT NULL COMMENT '系列名称(giftInfo.seriesName)', `series_config` varchar(255) DEFAULT NULL COMMENT '系列配置(giftInfo.seriesConfig)', `expected_card_count` int DEFAULT NULL COMMENT '预计开卡张数(totalExpectedCardCount)', `checklist_card_count` int DEFAULT NULL COMMENT '卡密份数(totalCardCount)', `replay_url` varchar(512) DEFAULT NULL COMMENT '视频回放链接(replay_url)', `report_state` tinyint DEFAULT '0' COMMENT '拆卡报告采集状态 0未采/1已采/2无/3失败', `replay_state` tinyint DEFAULT '0' COMMENT '视频回放采集状态 0未采/1已采/2无/3失败', PRIMARY KEY (`id`), UNIQUE KEY `uk_product_code` (`product_code`), KEY `idx_merchant_user_id` (`merchant_user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品(最新状态)'; CREATE TABLE `deca_onsale_product_daily_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) NOT NULL COMMENT '商品编码(code)', `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID', `snapshot_date` date NOT NULL COMMENT '快照日期(YYYY-MM-DD)', `card_count` int DEFAULT NULL COMMENT '当日总份数', `sold_count` int DEFAULT NULL COMMENT '当日累计已售', `available_stock` int DEFAULT NULL COMMENT '当日剩余库存', `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '当日拼团状态名', `unit_price` decimal(12,2) DEFAULT NULL COMMENT '当日单价', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_code_date` (`product_code`,`snapshot_date`), KEY `idx_snapshot_date` (`snapshot_date`) ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品每日售卖进度快照'; CREATE TABLE `deca_onsale_kami_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `uuid` varchar(64) NOT NULL COMMENT '卡牌唯一标识(uuid)', `product_code` varchar(32) DEFAULT NULL COMMENT '所属商品编码(请求 code)', `sort_order` int DEFAULT NULL COMMENT '序号(sortOrder)', `alias_name` varchar(64) DEFAULT NULL COMMENT '别名(aliasName,如 TCU1)', `team_name_en` varchar(128) DEFAULT NULL COMMENT '球队英文名(teamNameEn)', `team_name_zh` varchar(128) DEFAULT NULL COMMENT '球队中文名(teamNameZh)', `player_name_en` varchar(128) DEFAULT NULL COMMENT '球员英文名(playerNameEn)', `player_name_zh` varchar(128) DEFAULT NULL COMMENT '球员中文名(playerNameZh)', `card_type` varchar(255) DEFAULT NULL COMMENT '卡种(cardType)', `limit_number` varchar(64) DEFAULT NULL COMMENT '限编(limitNumber)', `card_number` varchar(64) DEFAULT NULL COMMENT '卡编(cardNumber,如 No.1)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_uuid` (`uuid`), KEY `idx_product_code` (`product_code`) ) ENGINE=InnoDB AUTO_INCREMENT=15933 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品卡牌清单(checklist)'; -- ---------- 已售流程(结构复制onsale) ---------- CREATE TABLE `deca_shop_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `merchant_user_id` varchar(32) NOT NULL COMMENT '商家用户ID(接口 userId,接口2的 merchantUserId)', `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称', `merchant_avatar_url` varchar(512) DEFAULT NULL COMMENT '商家头像URL', `fans_count` int DEFAULT NULL COMMENT '粉丝数(动态)', `active_groupbuy_count` int DEFAULT NULL COMMENT '在售团购数(动态)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_merchant_user_id` (`merchant_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商家列表(最新状态)'; CREATE TABLE `deca_product_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code,如 GB26080178297)', `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(merchant.merchantUserID)', `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称', `title` varchar(1000) DEFAULT NULL COMMENT '商品标题', `card_product_title` varchar(1000) DEFAULT NULL COMMENT '卡牌商品副标题(cardProductTitle)', `cover_image_url` varchar(512) DEFAULT NULL COMMENT '封面图URL', `unit_price` decimal(12,2) DEFAULT NULL COMMENT '单价(unitPrice)', `min_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最低单价', `max_unit_price` decimal(12,2) DEFAULT NULL COMMENT '最高单价', `card_count` int DEFAULT NULL COMMENT '总份数(cardCount)', `sold_count` int DEFAULT NULL COMMENT '已售份数(soldCount,动态)', `available_stock` int DEFAULT NULL COMMENT '剩余库存(availableStock,动态)', `groupbuy_status` int DEFAULT NULL COMMENT '拼团状态码(groupbuyStatus)', `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '拼团状态名(groupbuyStatusName,如 拼团中)', `play_type` int DEFAULT NULL COMMENT '玩法类型(playType)', `live_id` bigint DEFAULT NULL COMMENT '关联直播ID(liveId)', `publish_at` varchar(32) DEFAULT NULL COMMENT '上架时间(详情 publishAt)', `sale_start_at` varchar(32) DEFAULT NULL COMMENT '售卖开始时间(详情 saleStartAt)', `sale_end_at` varchar(32) DEFAULT NULL COMMENT '售卖结束时间(详情 saleEndAt)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `spec_name` varchar(64) DEFAULT NULL COMMENT '规格(specTypeName)', `series_name` varchar(255) DEFAULT NULL COMMENT '系列名称(giftInfo.seriesName)', `series_config` varchar(255) DEFAULT NULL COMMENT '系列配置(giftInfo.seriesConfig)', `expected_card_count` int DEFAULT NULL COMMENT '预计开卡张数(totalExpectedCardCount)', `checklist_card_count` int DEFAULT NULL COMMENT '卡密份数(totalCardCount)', `replay_url` varchar(512) DEFAULT NULL COMMENT '视频回放链接(replay_url)', `report_state` tinyint DEFAULT '0' COMMENT '拆卡报告采集状态 0未采/1已采/2无/3失败', `replay_state` tinyint DEFAULT '0' COMMENT '视频回放采集状态 0未采/1已采/2无/3失败', PRIMARY KEY (`id`), UNIQUE KEY `uk_product_code` (`product_code`), KEY `idx_merchant_user_id` (`merchant_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品(最新状态)'; CREATE TABLE `deca_kami_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `uuid` varchar(64) NOT NULL COMMENT '卡牌唯一标识(uuid)', `product_code` varchar(32) DEFAULT NULL COMMENT '所属商品编码(请求 code)', `sort_order` int DEFAULT NULL COMMENT '序号(sortOrder)', `alias_name` varchar(64) DEFAULT NULL COMMENT '别名(aliasName,如 TCU1)', `team_name_en` varchar(128) DEFAULT NULL COMMENT '球队英文名(teamNameEn)', `team_name_zh` varchar(128) DEFAULT NULL COMMENT '球队中文名(teamNameZh)', `player_name_en` varchar(128) DEFAULT NULL COMMENT '球员英文名(playerNameEn)', `player_name_zh` varchar(128) DEFAULT NULL COMMENT '球员中文名(playerNameZh)', `card_type` varchar(255) DEFAULT NULL COMMENT '卡种(cardType)', `limit_number` varchar(64) DEFAULT NULL COMMENT '限编(limitNumber)', `card_number` varchar(64) DEFAULT NULL COMMENT '卡编(cardNumber,如 No.1)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_uuid` (`uuid`), KEY `idx_product_code` (`product_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品卡牌清单(checklist)'; -- ---------- 拆卡报告 ---------- CREATE TABLE `deca_report_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) DEFAULT NULL COMMENT '商品编码', `confirmed_card_uuid` varchar(64) NOT NULL COMMENT '拆开的卡唯一标识(confirmedCardUuid)', `player_name_en` varchar(128) DEFAULT NULL COMMENT '球员英文名', `player_name_zh` varchar(128) DEFAULT NULL COMMENT '球员中文名', `opened_at` varchar(32) DEFAULT NULL COMMENT '开卡时间(openedAt)', `hit_user_nickname` varchar(64) DEFAULT NULL COMMENT '中卡用户昵称(hitUserNickname)', `image_url` varchar(1024) DEFAULT NULL COMMENT '卡图URL(images内所有imageUrl逗号拼接)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_confirmed_card_uuid` (`confirmed_card_uuid`), KEY `idx_product_code` (`product_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-拆卡报告(开出的卡+中卡用户+卡图)'; -- ---------- 在售商品提醒监控(onsale_alert_spider.py 用) ---------- -- 监控指定商家在售商品:新商品上架提醒 + 进度过半提醒;两个 notified 标记位用于去重防重复提醒 CREATE TABLE `deca_onsale_alert_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code)', `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID', `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称', `title` varchar(1000) DEFAULT NULL COMMENT '商品标题', `unit_price` decimal(12,2) DEFAULT NULL COMMENT '单价(unitPrice)', `card_count` int DEFAULT NULL COMMENT '总份数(cardCount)', `sold_count` int DEFAULT NULL COMMENT '已售份数(soldCount,动态)', `progress` decimal(5,2) DEFAULT NULL COMMENT '售卖进度百分比(sold/card*100)', `available_stock` int DEFAULT NULL COMMENT '剩余库存(availableStock)', `groupbuy_status_name` varchar(32) DEFAULT NULL COMMENT '拼团状态名(groupbuyStatusName)', `share_code` varchar(512) DEFAULT NULL COMMENT '分享码(shareResp.shareCode,已urlencode,拼分享URL用)', `new_notified` tinyint DEFAULT '0' COMMENT '新品上架提醒已发 0未发/1已发', `half_notified` tinyint DEFAULT '0' COMMENT '进度过半提醒已发 0未发/1已发', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_product_code` (`product_code`), KEY `idx_merchant_user_id` (`merchant_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品提醒监控(新品上架/进度过半)'; -- ---------- 商品购买记录累积(buy_record_analysis/test_buy_record.py 用) ---------- -- 详情页 purchaseRecords 只返回最近 10 条,靠周期轮询累积买家名单 -- 「订单粒度」去重:同 user 对同商品可下多笔相同份数的单(如王**要 x10 两笔间隔2分钟),需区分。 -- 唯一键含 purchased_at_ts 精确到秒作 DB 兜底;主判重在应用层:反推时间戳±70s内视为同一笔(相对时间漂移)、否则新订单。 CREATE TABLE `deca_buy_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code,如 GB26080417234)', `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(冗余,便于查看)', `merchant_name` varchar(128) DEFAULT NULL COMMENT '商家名称(冗余,便于查看)', `title` varchar(1000) DEFAULT NULL COMMENT '商品标题(冗余,便于查看)', `user_id` varchar(32) NOT NULL COMMENT '买家用户ID(purchaseRecords.userId)', `nickname` varchar(64) DEFAULT NULL COMMENT '买家昵称(脱敏,如 D**l)', `card_count` int DEFAULT NULL COMMENT '本次购买份数(cardCount)', `purchased_at_text` varchar(32) DEFAULT NULL COMMENT '首次抓到时的相对时间原文(如 1分钟前)', `purchased_at_ts` bigint DEFAULT NULL COMMENT '反推的绝对购买时间戳(秒),去重键之一', `purchased_at` datetime DEFAULT NULL COMMENT '反推的绝对购买时间', `first_seen_at` datetime DEFAULT NULL COMMENT '我们首次抓到该条记录的时间', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_buy` (`product_code`,`user_id`,`card_count`,`purchased_at_ts`), KEY `idx_product_code` (`product_code`), KEY `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-商品购买记录(详情页purchaseRecords周期累积)'; -- ============================================================ -- 2026/08/11 新增:随机团(选队随机/剩余随机) teams 明细 -- 背景:选队随机每队价格不同,team-options 一旦转成剩余随机就永久 29000, -- 原始 cardCount 拿不到;必须在选队阶段持续抓 team-options 存下来, -- 转剩余随机后才能算出「原始总价 - 当前剩余货值」。 -- 存储策略: -- - 在售团(data_source=team_options):每轮覆盖成最新一份(同 product_code+team_id -- 直接更新,captured_at 记录采集时刻); -- - 已售团 或 剩余随机快照(data_source=snapshot):存完成时/首次采到时的最终一份。 -- ============================================================ CREATE TABLE IF NOT EXISTS `deca_groupbuy_team_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) NOT NULL COMMENT '商品编码(接口 code)', `play_type_name` varchar(64) DEFAULT NULL COMMENT '采集时状态:选队随机-.../剩余随机', `data_source` varchar(16) NOT NULL COMMENT '数据来源:team_options(选队阶段) / snapshot(剩余随机冻结快照)', `team_id` int NOT NULL COMMENT '队ID(teamId)', `team_name_en` varchar(64) DEFAULT NULL COMMENT '队英文名(teamNameEn)', `team_name_zh` varchar(64) DEFAULT NULL COMMENT '队中文名(teamNameZh)', `team_logo_image_url` varchar(512) DEFAULT NULL COMMENT '队 logo URL', `unit_price` decimal(12,2) DEFAULT NULL COMMENT '该队单价(unitPrice)', `card_count` int DEFAULT NULL COMMENT '该队原始总份(cardCount,仅选队阶段有;剩余快照无→NULL)', `available_stock` int DEFAULT NULL COMMENT '剩余份数(选队=当前剩余;剩余快照=冻结在转换点的剩余)', `sold_count` int DEFAULT NULL COMMENT '已售份数(选队=card_count-available_stock;剩余快照逐队算不出→NULL)', `snapshot_total_quantity` int DEFAULT NULL COMMENT '剩余随机快照 totalQuantity(仅 snapshot 时有)', `captured_at` datetime NOT NULL COMMENT '采集时刻(选队随机实时变,用它区分不同轮)', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_product_team` (`product_code`,`team_id`,`data_source`), KEY `idx_product_code` (`product_code`), KEY `idx_captured_at` (`captured_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-拼团 teams 明细(随机团逐队价格/份数,含选队实时与剩余随机冻结快照)'; -- 两张商品表加「团总价」列,报告读它优先(NULL 则回落到 unit_price*sold_count) -- 语义:随机团(选队随机/剩余随机) 用 teams 表按状态算出的总价;固定价团保持 NULL(报告端回落原公式) -- 首次执行请手动跑(MySQL 不支持 ADD COLUMN IF NOT EXISTS,已加过会报 1060 忽略即可): ALTER TABLE `deca_onsale_product_record` ADD COLUMN `team_total_amount` decimal(14,2) DEFAULT NULL COMMENT '按 teams 算的总价(随机团用;NULL=固定价团或数据缺失)' AFTER `checklist_card_count`; ALTER TABLE `deca_product_record` ADD COLUMN `team_total_amount` decimal(14,2) DEFAULT NULL COMMENT '按 teams 算的总价(随机团用;NULL=固定价团或数据缺失)' AFTER `checklist_card_count`; -- ============================================================ -- 2026/08/11 新增:全站在售商品进度时间序列(append-only) -- 用途:后续统计"什么时候卖了多少百分比"——售卖速度、进度曲线、时段热度。 -- 触发:buy_record_spider 每 60 秒 ingest_onsale 之后,对比该商品上一次的 -- sold_count/available_stock,**变化才 INSERT**(避免没卖动的商品重复占位)。 -- 与 deca_onsale_product_daily_record 的区别:daily 是每日单点、日粒度;本表是 -- 变化时点、分钟级细粒度,适合画曲线。 -- ============================================================ CREATE TABLE IF NOT EXISTS `deca_onsale_product_progress_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', `product_code` varchar(32) NOT NULL COMMENT '商品编码', `merchant_user_id` varchar(32) DEFAULT NULL COMMENT '所属商家用户ID(冗余便于查询)', `sold_count` int DEFAULT NULL COMMENT '当时已售份数', `available_stock` int DEFAULT NULL COMMENT '当时剩余库存', `card_count` int DEFAULT NULL COMMENT '当时总份数', `progress_pct` decimal(6,2) DEFAULT NULL COMMENT '进度百分比(sold_count/card_count*100,冗余便于查询)', `unit_price` decimal(12,2) DEFAULT NULL COMMENT '当时单价(用于快速估算金额;随机团另见 team_total_amount)', `captured_at` datetime NOT NULL COMMENT '采集时刻', `gmt_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_code_time` (`product_code`,`captured_at`), KEY `idx_captured_at` (`captured_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='得卡-在售商品进度时间序列(变化才写,用于售卖速度/进度曲线统计)';