开发机迁移
This commit is contained in:
@@ -36,6 +36,7 @@ class MemberActivityData:
|
||||
days_since_last_recharge: Optional[int] = None
|
||||
|
||||
visits_14d: int = 0
|
||||
visits_30d: int = 0
|
||||
visits_60d: int = 0
|
||||
visits_total: int = 0
|
||||
|
||||
@@ -451,8 +452,9 @@ class MemberIndexBaseTask(BaseIndexTask):
|
||||
last_visit_time = max(r.get('last_visit_time') for r in day_rows_sorted)
|
||||
data.last_visit_time = last_visit_time
|
||||
|
||||
# 近14/60天到店次数
|
||||
# 近14/30/60天到店次数
|
||||
days_14_ago = base_date - timedelta(days=14)
|
||||
days_30_ago_visit = base_date - timedelta(days=30)
|
||||
days_60_ago = base_date - timedelta(days=60)
|
||||
for r in day_rows_sorted:
|
||||
visit_date = r.get('visit_date')
|
||||
@@ -460,6 +462,8 @@ class MemberIndexBaseTask(BaseIndexTask):
|
||||
continue
|
||||
if visit_date >= days_14_ago:
|
||||
data.visits_14d += 1
|
||||
if visit_date >= days_30_ago_visit:
|
||||
data.visits_30d += 1
|
||||
if visit_date >= days_60_ago:
|
||||
data.visits_60d += 1
|
||||
|
||||
|
||||
@@ -317,7 +317,7 @@ class NewconvIndexTask(MemberIndexBaseTask):
|
||||
status, segment,
|
||||
member_create_time, first_visit_time, last_visit_time, last_recharge_time,
|
||||
t_v, t_r, t_a,
|
||||
visits_14d, visits_60d, visits_total,
|
||||
visits_14d, visits_30d, visits_60d, visits_total,
|
||||
spend_30d, spend_180d, sv_balance, recharge_60d_amt,
|
||||
interval_count,
|
||||
need_new, salvage_new, recharge_new, value_new,
|
||||
@@ -331,7 +331,7 @@ class NewconvIndexTask(MemberIndexBaseTask):
|
||||
%s, %s,
|
||||
%s, %s, %s, %s,
|
||||
%s, %s, %s,
|
||||
%s, %s, %s,
|
||||
%s, %s, %s, %s,
|
||||
%s, %s, %s, %s,
|
||||
%s,
|
||||
%s, %s, %s, %s,
|
||||
@@ -352,7 +352,7 @@ class NewconvIndexTask(MemberIndexBaseTask):
|
||||
data.status, data.segment,
|
||||
activity.member_create_time, activity.first_visit_time, activity.last_visit_time, activity.last_recharge_time,
|
||||
activity.t_v, activity.t_r, activity.t_a,
|
||||
activity.visits_14d, activity.visits_60d, activity.visits_total,
|
||||
activity.visits_14d, activity.visits_30d, activity.visits_60d, activity.visits_total,
|
||||
activity.spend_30d, activity.spend_180d, activity.sv_balance, activity.recharge_60d_amt,
|
||||
activity.interval_count,
|
||||
data.need_new, data.salvage_new, data.recharge_new, data.value_new,
|
||||
|
||||
@@ -353,7 +353,12 @@ class SpendingPowerIndexTask(BaseIndexTask):
|
||||
COALESCE(NULLIF(s.member_id, 0), mca.tenant_member_id)
|
||||
AS canonical_member_id,
|
||||
s.pay_time,
|
||||
COALESCE(s.pay_amount, 0) AS pay_amount
|
||||
-- DWD 规则 #1:禁止 consume_money/pay_amount,使用 items_sum
|
||||
(COALESCE(s.table_charge_money, 0)
|
||||
+ COALESCE(s.goods_money, 0)
|
||||
+ COALESCE(s.assistant_pd_money, 0)
|
||||
+ COALESCE(s.assistant_cx_money, 0)
|
||||
+ COALESCE(s.electricity_money, 0)) AS items_sum
|
||||
FROM dwd.dwd_settlement_head s
|
||||
LEFT JOIN dwd.dim_member_card_account mca
|
||||
ON s.member_card_account_id = mca.member_card_id
|
||||
@@ -368,14 +373,14 @@ class SpendingPowerIndexTask(BaseIndexTask):
|
||||
SELECT
|
||||
canonical_member_id AS member_id,
|
||||
-- 90 天窗口
|
||||
SUM(pay_amount) AS spend_90,
|
||||
SUM(items_sum) AS spend_90,
|
||||
COUNT(*) AS orders_90,
|
||||
COUNT(DISTINCT {biz_expr}) AS visit_days_90,
|
||||
COUNT(DISTINCT EXTRACT(ISOYEAR FROM pay_time)::int * 100
|
||||
+ EXTRACT(WEEK FROM pay_time)::int) AS active_weeks_90,
|
||||
-- 30 天窗口(子集过滤)
|
||||
SUM(CASE WHEN pay_time >= %s - INTERVAL '{short_days} days'
|
||||
THEN pay_amount ELSE 0 END) AS spend_30,
|
||||
THEN items_sum ELSE 0 END) AS spend_30,
|
||||
SUM(CASE WHEN pay_time >= %s - INTERVAL '{short_days} days'
|
||||
THEN 1 ELSE 0 END) AS orders_30,
|
||||
COUNT(DISTINCT CASE WHEN pay_time >= %s - INTERVAL '{short_days} days'
|
||||
@@ -491,7 +496,12 @@ class SpendingPowerIndexTask(BaseIndexTask):
|
||||
COALESCE(NULLIF(s.member_id, 0), mca.tenant_member_id)
|
||||
AS canonical_member_id,
|
||||
{biz_expr_s} AS pay_date,
|
||||
COALESCE(s.pay_amount, 0) AS pay_amount
|
||||
-- DWD 规则 #1:使用 items_sum
|
||||
(COALESCE(s.table_charge_money, 0)
|
||||
+ COALESCE(s.goods_money, 0)
|
||||
+ COALESCE(s.assistant_pd_money, 0)
|
||||
+ COALESCE(s.assistant_cx_money, 0)
|
||||
+ COALESCE(s.electricity_money, 0)) AS items_sum
|
||||
FROM dwd.dwd_settlement_head s
|
||||
LEFT JOIN dwd.dim_member_card_account mca
|
||||
ON s.member_card_account_id = mca.member_card_id
|
||||
@@ -502,7 +512,7 @@ class SpendingPowerIndexTask(BaseIndexTask):
|
||||
AND s.settle_type IN (1, 3)
|
||||
AND s.pay_time >= NOW() - INTERVAL '{long_days} days'
|
||||
)
|
||||
SELECT pay_date, SUM(pay_amount) AS daily_spend
|
||||
SELECT pay_date, SUM(items_sum) AS daily_spend
|
||||
FROM consume_source
|
||||
WHERE canonical_member_id = %s
|
||||
GROUP BY pay_date
|
||||
@@ -544,7 +554,12 @@ class SpendingPowerIndexTask(BaseIndexTask):
|
||||
COALESCE(NULLIF(s.member_id, 0), mca.tenant_member_id)
|
||||
AS canonical_member_id,
|
||||
{biz_expr_s} AS pay_date,
|
||||
COALESCE(s.pay_amount, 0) AS pay_amount
|
||||
-- DWD 规则 #1:使用 items_sum
|
||||
(COALESCE(s.table_charge_money, 0)
|
||||
+ COALESCE(s.goods_money, 0)
|
||||
+ COALESCE(s.assistant_pd_money, 0)
|
||||
+ COALESCE(s.assistant_cx_money, 0)
|
||||
+ COALESCE(s.electricity_money, 0)) AS items_sum
|
||||
FROM dwd.dwd_settlement_head s
|
||||
LEFT JOIN dwd.dim_member_card_account mca
|
||||
ON s.member_card_account_id = mca.member_card_id
|
||||
@@ -558,7 +573,7 @@ class SpendingPowerIndexTask(BaseIndexTask):
|
||||
)
|
||||
SELECT canonical_member_id AS member_id,
|
||||
pay_date,
|
||||
SUM(pay_amount) AS daily_spend
|
||||
SUM(items_sum) AS daily_spend
|
||||
FROM consume_source
|
||||
WHERE canonical_member_id > 0
|
||||
GROUP BY canonical_member_id, pay_date
|
||||
|
||||
@@ -369,7 +369,7 @@ class WinbackIndexTask(MemberIndexBaseTask):
|
||||
status, segment,
|
||||
member_create_time, first_visit_time, last_visit_time, last_recharge_time,
|
||||
t_v, t_r, t_a,
|
||||
visits_14d, visits_60d, visits_total,
|
||||
visits_14d, visits_30d, visits_60d, visits_total,
|
||||
spend_30d, spend_180d, sv_balance, recharge_60d_amt,
|
||||
interval_count,
|
||||
overdue_old, overdue_cdf_p, drop_old, recharge_old, value_old,
|
||||
@@ -382,7 +382,7 @@ class WinbackIndexTask(MemberIndexBaseTask):
|
||||
%s, %s,
|
||||
%s, %s, %s, %s,
|
||||
%s, %s, %s,
|
||||
%s, %s, %s,
|
||||
%s, %s, %s, %s,
|
||||
%s, %s, %s, %s,
|
||||
%s,
|
||||
%s, %s, %s, %s, %s,
|
||||
@@ -402,7 +402,7 @@ class WinbackIndexTask(MemberIndexBaseTask):
|
||||
data.status, data.segment,
|
||||
activity.member_create_time, activity.first_visit_time, activity.last_visit_time, activity.last_recharge_time,
|
||||
activity.t_v, activity.t_r, activity.t_a,
|
||||
activity.visits_14d, activity.visits_60d, activity.visits_total,
|
||||
activity.visits_14d, activity.visits_30d, activity.visits_60d, activity.visits_total,
|
||||
activity.spend_30d, activity.spend_180d, activity.sv_balance, activity.recharge_60d_amt,
|
||||
activity.interval_count,
|
||||
data.overdue_old, data.overdue_cdf_p, data.drop_old, data.recharge_old, data.value_old,
|
||||
|
||||
Reference in New Issue
Block a user