reference_dquery_tables.md 第 460-499 行 "SHIN 没有钻石资源, res_id=7 是法币 ledger" 的结论 错。已通过后端代码 (G123GemCurrencyService.kt + ResourceType.GEM(7,"钻石") + HomePayHandler 钻石购买流程) 和数据交叉验证推翻。
文件: C:/code/shinchan/server/shared/src/main/kotlin/com/youzu/crayon/shared/PlayerParamType.kt
enum class ResourceType(... GEM(7, "钻石", false, true), // ← res_id=7 = 钻石, 不是法币 ...
文件: C:/code/shinchan/server/home/.../services/G123GemCurrencyService.kt
/** * 钻石货币ID使用了资源的ID[ResourceType.GEM],但是其产出和消耗有特定渠道。 * 不走通用的产出消耗接口(通用产出消耗接口已屏蔽钻石)!! * * 钻石产出: * 1. G123运营发放 (G123发放日元的钻石货币, 需要转成玩家当前货币) * 2. 通过商店直购钻石 (玩家当前货币单位与价格1:1发放) * * 钻石消耗: * 1. 购买各个付费礼包消耗 (礼包价格与钻石消耗数量1:1) */
| res_id | res_name | 性质 |
|---|---|---|
| 7 | JPY/USD/HKD/SGD/KRW/TWD/IDR/THB/PHP/VND/MYR/AUD/NZD/EUR/GBP/CAD/BRL/MXN | 钻石 (按玩家当前货币分桶) — 不是法币 |
因为 G123 平台玩家用各国法币按 1:1 充钻石, 所以 res_name 是货币代码而非"钻石"两字。 之前的 reference 误以为这是法币 ledger, 其实是钻石的多币种账户。
ensure(g123GemService.hasEnoughG123GemCurrency(g123GemSubDC, g123Currency, needGemAmount), NOT_ENOUGH_GEM)
val logParam = listOf(req.payGiftType.name, giftId.toString(), giftIndex.toString(),
g123PopupId, giftCanBuyInfo.priceCfg.priceId.toString())
g123GemService.consumeG123GemCurrency(g123GemSubDC, needGemAmount, Reason.钻石购买, logParam = logParam)
| 字段 | 取值 | 说明 |
|---|---|---|
| event_id | roleres | 资源/钻石产销流水 |
| res_id | 7 | ResourceType.GEM |
| res_name | JPY/USD/KRW/TWD/HKD/SGD... | 玩家当前货币 (g123Currency) |
| change_type | 2 | 消耗 (=买礼包) |
| change_reason | 钻石购买 | 消耗 reason 唯一值 |
| change_amount | 整数 | = 真实金额 × 100 (单位是货币) |
| extra_2 | payGiftType.name | 礼包类型: PAY_TRIGGER_PACKAGE 等 |
| extra_3 | giftId | 礼包 ID |
| extra_4 | giftIndex | 第几格 (连续礼包/翻转礼包用) |
| extra_5 | g123PopupId | 触发弹窗 ID |
| extra_6 | priceId | 对应 pay_price.xlsx 价格 ID |
| payGiftType | JPY 等价 | 占钻石总 | 说明 |
|---|---|---|---|
| PAY_TRIGGER_PACKAGE | 22,898,720 | 29.08% | 触发礼包 (弹脸礼包等) |
| PAY_SHOP_PACKAGE | 16,114,183 | 20.47% | 商店礼包 |
| PAY_CONTINUOUS_PACKAGE | 15,373,992 | 19.53% | 连续礼包 (3 格 + 6 格) |
| PAY_FLIP_PACKAGE | 10,102,734 | 12.83% | 翻转礼包 |
| PAY_ACTIVITY_PACKAGE | 5,488,057 | 6.97% | 活动礼包 (大冒险/合作/弹珠/Merge等) |
| PAY_PASS_PACKAGE | 3,952,253 | 5.02% | 通行证 (单/双周) |
| PAY_PLAY_FUNCTION_PACKAGE | 3,079,229 | 3.91% | 玩法功能礼包 (金不理复活/重翻/大冒险复活/行动嘉奖) |
| PAY_MONTH_CARD | 641,769 | 0.82% | 月卡 |
| PAY_CHOOSE_PACKAGE | 550,412 | 0.70% | 自选礼包 |
| PAY_TEAM_PACKAGE | 449,676 | 0.57% | 团队礼包 |
| PAY_GOLD_PACKAGE | 88,468 | 0.11% | 金币礼包 (1 级货币购买) |
| 合计 | 78,739,493 | 100.00% |
之前 reference memory 第 478-479 行说"PAY_FLIP_PACKAGE / PAY_PLAY_FUNCTION_PACKAGE / PAY_ACTIVITY_PACKAGE 不走 ledger" — 错。实际数据显示:
| 层级 | 玩家数 | IAP (JPY) | 钻石 (JPY) | 合计 | 钻石占该层 |
|---|---|---|---|---|---|
| top 1% (鲸鱼) | 775 | 304,980,184 | 50,496,055 | 355,476,239 | 14.21% |
| top 1-5% (中鲸) | 3,103 | 255,806,329 | 13,412,967 | 269,219,296 | 4.98% |
| top 5-10% (大R) | 3,878 | 95,814,503 | 6,168,976 | 101,983,479 | 6.05% |
| top 10-30% (中R) | 15,513 | 80,748,489 | 6,909,995 | 87,658,484 | 7.88% |
| top 30%+ (小+微) | 54,297 | 8,661,124 | 1,751,500 | 10,412,624 | 16.82% |
这个量级不是边角料: 7 个月内, 顶部 775 个鲸鱼合计用钻石买礼包/道具值 5050 万 JPY, 平均每个鲸鱼多氪了 65,156 JPY 的钻石消费, 这部分在所有 deep_analysis 报告中都被漏算。
| 口径 | top 1% 占总 | top 5% 占总 | top 10% 占总 |
|---|---|---|---|
| 不含钻石 (仅 IAP) | 42.60% | 76.42% | 88.96% |
| 含钻石 (IAP+钻石) | 43.10% | 75.74% | 88.11% |
| 差异 | +0.50pp | -0.68pp | -0.85pp |
解读: 加上钻石后, 鲸鱼绝对消费提升, 但中段玩家 (top1-5% 中鲸 + top5-10% 大R) 钻石支付密度也较高 (4.98%~6.05%), 中段被低估的程度跟鲸鱼差不多。原本看起来"集中在头部" 的现象, 加钻石后反而更分散。
| 报告 | 对应 payGiftType | 钻石漏拉量(JPY) | 失真% | 需要重跑? |
|---|---|---|---|---|
| deep_analysis_continuous_pack_6grid.html deep_analysis_continuous_pack_3grid.html |
PAY_CONTINUOUS_PACKAGE | 15,373,992 | 中等 (≈15-25% 失真) | 需要重跑 |
| deep_analysis_pop_face_pack.html (真弹脸) | PAY_TRIGGER_PACKAGE (含 type≥4 弹脸子档) | 22,898,720 | 高 (≈30%+ 失真) | 必须重跑 |
| deep_analysis_lucky_card_pack.html (金不理) | PAY_PLAY_FUNCTION_PACKAGE (function=1,2) | 3,079,229 全口径 金不理估 ≈90% | 高 (≈30-40% 失真) | 必须重跑 |
| deep_analysis_merge_pack.html (Merge) | PAY_ACTIVITY_PACKAGE (Merge 子集) | 5,488,057 中含 Merge 一部分 | 中等 (待精拆) | 需要重跑 |
| 单/双周通行证 | PAY_PASS_PACKAGE | 3,952,253 | 中低 (5%~10%) | 建议重跑 |
| 翻转礼包 (gameplay_pack_matrix 中标的"钻石维度N/A") | PAY_FLIP_PACKAGE | 10,102,734 | 高 (≈25%+) | 必须重跑 (推翻"钻石维度N/A"结论) |
SELECT element_at(event_info,'extra_2') AS pay_gift_type,
element_at(event_info,'res_name') AS currency,
COUNT(DISTINCT role_id) AS users,
SUM(CAST(element_at(event_info,'change_amount') AS BIGINT)) / 100.0 AS amt_in_currency
FROM gameeco_raw.v_presto_ods_game_event_eco_log_d
WHERE ds BETWEEN '20251104' AND '20260505'
AND game_id = 2020303
AND event_id = 'roleres'
AND element_at(event_info,'res_id') = '7'
AND element_at(event_info,'change_type') = '2'
AND element_at(event_info,'change_reason') = '钻石购买'
GROUP BY 1, 2;
-- 注意: change_amount 单位是 货币×100, 真实金额需 ÷100
-- 注意: res_name 是 g123Currency (JPY/USD/KRW...), 不是"钻石" 两字
-- 例: 翻转礼包某 giftId WHERE element_at(event_info,'extra_2') = 'PAY_FLIP_PACKAGE' AND element_at(event_info,'extra_3') = '5000XX' -- giftId AND element_at(event_info,'extra_4') = 'X' -- giftIndex (第几格) -- 例: 连续礼包某档 WHERE element_at(event_info,'extra_2') = 'PAY_CONTINUOUS_PACKAGE' AND element_at(event_info,'extra_3') = 'XXXX'