🤖 每日自动备份 - 2026-05-18 08:00:01

This commit is contained in:
小溪 2026-05-18 08:00:01 +08:00
parent ac4e2eb3ce
commit 8d77e036c5
3 changed files with 189 additions and 6 deletions

View File

@ -1,6 +1,6 @@
{
"version": 1,
"updatedAt": "2026-05-15T09:14:59.142Z",
"updatedAt": "2026-05-17T05:10:46.252Z",
"entries": {
"memory:memory/2026-05-06.md:1:20": {
"key": "memory:memory/2026-05-06.md:1:20",
@ -42,20 +42,22 @@
"endLine": 30,
"source": "memory",
"snippet": "- **订单号格式问题:** Excel 科学计数法 → 设置单元格为文本格式解决 - **psycopg2 转义:** LIKE 中 `%` 需写成 `%%`psycopg2 的 `%s` 占位符冲突) ## 任务2销售线索用户分析报表 - [李承龙需求] 输入包含462个用户ID的Excel输出每个用户+角色的完整画像报表 - 脚本路径:`/root/.openclaw/workspace/scripts/lead_user_analysis.py` - **重要口径修正(李承龙确认):** - **体验课定义:** 固定为 L1 U00(L01-L05) + L2 U00(L01-L05) 共10节课**不通过 expire_time 区分** - L1 chapter_id: 343, 344, 345, 346, 348 - L2 chapter_id: 55, 56, 57, 58, 59 - **完成时间:** 取 `bi_user_chapter_play_record` 中 `play_status=1` 记录的**最早 `updated_at`**(非 `created_at` - **报表列:** 用户ID、角色ID、用户注册时间、角色创建时间、L1序章5节完成时间、L2序章5节完成时间、购买时间、购买课包名称、支付金额、购买渠道key_from、是否退款、退款金额 - **分表规则:** `bi_user_chapter_play_record_{0..7}`,分表号 = user_id % 8 - **重要关联:** `b",
"recallCount": 2,
"recallCount": 3,
"dailyCount": 0,
"groundedCount": 0,
"totalScore": 1.983596316357381,
"totalScore": 2.983596316357381,
"maxScore": 1,
"firstRecalledAt": "2026-05-07T04:41:47.636Z",
"lastRecalledAt": "2026-05-13T08:20:55.037Z",
"lastRecalledAt": "2026-05-17T05:10:46.252Z",
"queryHashes": [
"dd105d141c56",
"4cacd0d43440"
"4cacd0d43440",
"1dc41fdf5e74"
],
"recallDays": [
"2026-05-07",
"2026-05-13"
"2026-05-13",
"2026-05-17"
],
"conceptTags": [
"l01-l05",

View File

@ -0,0 +1,110 @@
-- L1+L2用户(821人)上周学习情况仅学L1 / 仅学L2 / 都学了
WITH last_week_active_chars AS (
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_0 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_1 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_2 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_3 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_4 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_5 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_6 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_7 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
),
last_week_active_accounts AS (
SELECT DISTINCT c.account_id
FROM last_week_active_chars lw
JOIN bi_vala_app_character c ON lw.user_id = c.id
),
paying_active AS (
SELECT DISTINCT lw.account_id
FROM last_week_active_accounts lw
WHERE EXISTS (
SELECT 1 FROM bi_vala_order o
JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1
WHERE o.account_id = lw.account_id
AND o.order_status IN (3, 4)
AND o.pay_success_date IS NOT NULL
)
),
user_goods AS (
SELECT o.account_id, o.goods_id
FROM bi_vala_order o
JOIN paying_active pa ON o.account_id = pa.account_id
WHERE o.order_status IN (3, 4) AND o.pay_success_date IS NOT NULL
),
l1l2_accounts AS (
SELECT account_id
FROM user_goods
GROUP BY account_id
HAVING bool_or(goods_id = 61) OR (bool_or(goods_id IN (57, 60, 63)) AND bool_or(goods_id IN (31, 32, 33, 54)))
),
l1l2_chars AS (
SELECT c.id AS user_id, c.account_id
FROM bi_vala_app_character c
JOIN l1l2_accounts a ON c.account_id = a.account_id
),
last_week_chapters AS (
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_0 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_1 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_2 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_3 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_4 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_5 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_6 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_7 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
),
chapter_with_level AS (
SELECT DISTINCT c.account_id, bl.course_level
FROM last_week_chapters lw
JOIN l1l2_chars c ON lw.user_id = c.user_id
JOIN bi_level_unit_lesson bl ON lw.chapter_id = bl.id
WHERE bl.course_level IN ('L1', 'L2')
),
user_level_study AS (
SELECT
account_id,
bool_or(course_level = 'L1') AS studied_l1,
bool_or(course_level = 'L2') AS studied_l2
FROM chapter_with_level
GROUP BY account_id
)
SELECT
CASE
WHEN studied_l1 AND studied_l2 THEN 'L1和L2都学了'
WHEN studied_l1 THEN '仅学了L1'
WHEN studied_l2 THEN '仅学了L2'
END AS study_type,
COUNT(*) AS user_count
FROM user_level_study
GROUP BY 1
ORDER BY 1;

View File

@ -0,0 +1,71 @@
-- 上周(2026-05-11~2026-05-17)有课消的付费用户,按 L1/L2 分类
WITH last_week_active_chars AS (
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_0 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_1 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_2 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_3 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_4 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_5 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_6 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_7 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
),
last_week_active_accounts AS (
SELECT DISTINCT c.account_id
FROM last_week_active_chars lw
JOIN bi_vala_app_character c ON lw.user_id = c.id
),
paying_active AS (
SELECT DISTINCT lw.account_id
FROM last_week_active_accounts lw
WHERE EXISTS (
SELECT 1 FROM bi_vala_order o
JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1
WHERE o.account_id = lw.account_id
AND o.order_status IN (3, 4)
AND o.pay_success_date IS NOT NULL
)
),
user_goods_agg AS (
SELECT
pa.account_id,
array_agg(DISTINCT o.goods_id) AS goods_ids
FROM paying_active pa
JOIN bi_vala_order o ON pa.account_id = o.account_id
WHERE o.order_status IN (3, 4)
AND o.pay_success_date IS NOT NULL
GROUP BY pa.account_id
),
classified AS (
SELECT
account_id,
CASE
WHEN 61 = ANY(goods_ids) THEN 'L1+L2'
WHEN (57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids))
AND (31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids))
THEN 'L1+L2'
WHEN 57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids) THEN '仅L1'
WHEN 31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids) THEN '仅L2'
ELSE '其他'
END AS level_type
FROM user_goods_agg
)
SELECT
level_type,
COUNT(*) AS user_count
FROM classified
GROUP BY level_type
ORDER BY
CASE level_type
WHEN '仅L1' THEN 1
WHEN '仅L2' THEN 2
WHEN 'L1+L2' THEN 3
WHEN '其他' THEN 4
END;