|
@@ -1,3 +1,5 @@
|
|
|
+from mysql_db import MysqlDB
|
|
|
+import datetime
|
|
|
|
|
|
|
|
|
class ReportPush(object):
|
|
@@ -6,107 +8,363 @@ class ReportPush(object):
|
|
|
"""
|
|
|
pass
|
|
|
|
|
|
- # 数据一,周数据概览
|
|
|
- sql_1 = """
|
|
|
- 待定
|
|
|
+ # 1:总浏览量
|
|
|
+ #
|
|
|
+ # 集团部分+项目部分!!!
|
|
|
+
|
|
|
+ # ----项目PV--权限项目范围内,求和
|
|
|
+ # 参数:时间区间 和 项目列表
|
|
|
+ sql_1_1 = """
|
|
|
+ SELECT SUM(pv) AS pv1 FROM a_idfa_behavior_sum
|
|
|
+ WHERE `report_d` >= %s and report_d < %s AND house_id IN %s
|
|
|
"""
|
|
|
|
|
|
- # 1.默认值/001_大麦/项目排行榜/小程序排行榜TOP_N
|
|
|
- sql_2_1 = """
|
|
|
+ # ----集团PV--权限项目范围内,求和
|
|
|
+ # 参数:数据区间和项目列表
|
|
|
+ sql_1_2 = """
|
|
|
+ SELECT SUM(pv) AS pav2 FROM a_behavior_brand_mini_day
|
|
|
+ WHERE report_d >= %s and report_d < %s AND house_id IN %s
|
|
|
+ """
|
|
|
+ # 2:总浏览人数
|
|
|
+ #
|
|
|
+ # 参数,数据区间, 项目列表
|
|
|
+ sql_1_3 = """
|
|
|
+ SELECT
|
|
|
+ count(
|
|
|
+ DISTINCT IFNULL(mobile, user_id)
|
|
|
+ ) as people
|
|
|
+ FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ A.user_id,
|
|
|
+ B.mobile
|
|
|
+ FROM
|
|
|
+ a_idfa_behavior_sum A
|
|
|
+ LEFT JOIN d_user B ON A.user_id = B.user_id
|
|
|
+ WHERE
|
|
|
+ A.report_d >= %s and A.report_d < %s
|
|
|
+ AND A.house_id IN %s
|
|
|
+ UNION
|
|
|
+ SELECT
|
|
|
+ A.brand_user_id AS user_id,
|
|
|
+ B.mobile
|
|
|
+ FROM
|
|
|
+ a_behavior_brand_mini_day A
|
|
|
+ LEFT JOIN `a_brand_app_customer` B ON A.brand_user_id = B.brand_customer_id
|
|
|
+ WHERE
|
|
|
+ A.report_d >= %s and A.report_d < %s
|
|
|
+ AND A.house_id IN %s
|
|
|
+ ) t1
|
|
|
+ """
|
|
|
+
|
|
|
+ # 3:新增获客
|
|
|
+ sql_1_4 = """
|
|
|
+ SELECT
|
|
|
+ count(
|
|
|
+ DISTINCT IFNULL(mobile, user_id)
|
|
|
+ )
|
|
|
+ FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ user_id,
|
|
|
+ mobile,
|
|
|
+ created
|
|
|
+ FROM
|
|
|
+ `d_user`
|
|
|
+ WHERE
|
|
|
+ created >= %s
|
|
|
+ AND created < %s
|
|
|
+ AND house_id IN %s
|
|
|
+ UNION
|
|
|
+ SELECT
|
|
|
+ brand_customer_id AS user_id,
|
|
|
+ mobile,
|
|
|
+ rlat_created
|
|
|
+ FROM
|
|
|
+ `a_brand_app_customer_house_rlat`
|
|
|
+ WHERE
|
|
|
+ rlat_created >= %s
|
|
|
+ AND rlat_created < %s
|
|
|
+ AND rlat_house_id IN %s
|
|
|
+ ) t1
|
|
|
+ """
|
|
|
+
|
|
|
+ # 4:新增获电
|
|
|
+ sql_1_5 = """
|
|
|
SELECT
|
|
|
- a.*,
|
|
|
- b.house_name,
|
|
|
- c.interested_num,
|
|
|
- d.wx_num,
|
|
|
- e.new_cust_num
|
|
|
+ COUNT(DISTINCT mobile)
|
|
|
FROM
|
|
|
(
|
|
|
+ SELECT
|
|
|
+ user_id,
|
|
|
+ mobile,
|
|
|
+ wx_phone_time AS created
|
|
|
+ FROM
|
|
|
+ `d_user`
|
|
|
+ WHERE
|
|
|
+ wx_phone_time >= %s
|
|
|
+ AND wx_phone_time < %s
|
|
|
+ AND house_id IN %s
|
|
|
+ UNION
|
|
|
+ SELECT
|
|
|
+ brand_customer_id,
|
|
|
+ mobile,
|
|
|
+ houdian_time AS created
|
|
|
+ FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ *,
|
|
|
+ CASE
|
|
|
+ WHEN rlat_created > shouquan_time THEN
|
|
|
+ rlat_created
|
|
|
+ ELSE
|
|
|
+ shouquan_time
|
|
|
+ END AS houdian_time
|
|
|
+ FROM
|
|
|
+ a_brand_app_customer_house_rlat
|
|
|
+ WHERE
|
|
|
+ mobile IS NOT NULL
|
|
|
+ AND rlat_house_id IN %s
|
|
|
+ AND cust_house_flag = '1'
|
|
|
+ ) t1
|
|
|
+ WHERE
|
|
|
+ houdian_time >= %s
|
|
|
+ AND houdian_time < %s
|
|
|
+ ) t1
|
|
|
+ """
|
|
|
+
|
|
|
+ # 5:集团小程序总浏览量(针对香港置地要命名为【CNC小程序总浏览量】)
|
|
|
+ # 集团部分
|
|
|
+
|
|
|
+ # 6:集团小程序总浏览人数(针对香港置地要命名为【CNC小程序总浏览人数】)
|
|
|
+ #
|
|
|
+ # 集团小程序整体UV(见SQL3)
|
|
|
+ sql_1_6 = """
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT brand_user_id) AS UV4
|
|
|
+ FROM
|
|
|
+ a_behavior_brand_mini_day
|
|
|
+ WHERE
|
|
|
+ report_d > %s
|
|
|
+ AND report_d < %s
|
|
|
+ AND house_id IN %s
|
|
|
+ """
|
|
|
+
|
|
|
+ # 7: 集团小程序新增获客(针对香港置地要命名为【CNC小程序新增获客】)
|
|
|
+ #
|
|
|
+ # 权限项目范围内,集团维度的获客
|
|
|
+
|
|
|
+ # 8: 集团小程序新增获电(针对香港置地要命名为【CNC小程序新增获电】)
|
|
|
+ #
|
|
|
+ # 权限项目范围内,集团维度的获电
|
|
|
+
|
|
|
+ # 9.单项目小程序总浏览量
|
|
|
+ #
|
|
|
+ # 项目部分
|
|
|
+ #
|
|
|
+ # 10.单项目小程序总浏览人数
|
|
|
+ #
|
|
|
+ # 权限项目未授权部分求和+去重的授权部分(见SQL2)
|
|
|
+ #
|
|
|
+
|
|
|
+ # 11.单项目小程序新增获客
|
|
|
+ #
|
|
|
+ # 权限项目未授权部分求和+去重的授权部分(见SQL7)
|
|
|
+ #
|
|
|
+
|
|
|
+ # 12.单项目小程序新增获电
|
|
|
+ #
|
|
|
+ # 权限项目所有授权手机号去重(见SQL8)
|
|
|
+
|
|
|
+ # 1.默认值/001_大麦/项目排行榜/小程序排行榜TOP_N
|
|
|
+ sql_2_1 = """
|
|
|
+ SELECT
|
|
|
+ a.house_id,
|
|
|
+ a.house_name,
|
|
|
+ SUM(a.pv),
|
|
|
+ SUM(a.uv),
|
|
|
+ SUM(a.new_cust_num),
|
|
|
+ SUM(a.wx_num)
|
|
|
+ from
|
|
|
+ (SELECT
|
|
|
+ a.*,
|
|
|
+ b.house_name,
|
|
|
+ c.interested_num,
|
|
|
+ d.wx_num,
|
|
|
+ e.new_cust_num
|
|
|
+ FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ house_id,
|
|
|
+ count(
|
|
|
+ DISTINCT ifnull(user_id, idfa)
|
|
|
+ ) uv,
|
|
|
+ sum(session_times) session_times,
|
|
|
+ sum(sum_session_time) sum_session_time,
|
|
|
+ sum(pv) pv,
|
|
|
+ sum(page_num) page_num
|
|
|
+ FROM
|
|
|
+ a_idfa_behavior_sum
|
|
|
+ WHERE
|
|
|
+ report_d >= %s
|
|
|
+ AND report_d < %s
|
|
|
+ GROUP BY
|
|
|
+ house_id
|
|
|
+ ) a
|
|
|
+ JOIN d_house b ON a.house_id = b.house_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ house_id,
|
|
|
+ count(*) interested_num
|
|
|
+ FROM
|
|
|
+ f_interested_custlist
|
|
|
+ WHERE
|
|
|
+ report_d >= %s
|
|
|
+ AND report_d < %s
|
|
|
+ GROUP BY
|
|
|
+ house_id
|
|
|
+ ) c ON a.house_id = c.house_id
|
|
|
+ LEFT JOIN (
|
|
|
SELECT
|
|
|
house_id,
|
|
|
- count(
|
|
|
- DISTINCT ifnull(user_id, idfa)
|
|
|
- ) uv,
|
|
|
- sum(session_times) session_times,
|
|
|
- sum(sum_session_time) sum_session_time,
|
|
|
- sum(pv) pv,
|
|
|
- sum(page_num) page_num
|
|
|
+ count(*) wx_num
|
|
|
FROM
|
|
|
- a_idfa_behavior_sum
|
|
|
+ f_customer_dynamic
|
|
|
WHERE
|
|
|
- report_d >= '2020-03-01'
|
|
|
- AND report_d < '2020-03-05'
|
|
|
+ dynamic = 1
|
|
|
+ AND report_d >= %s
|
|
|
+ AND report_d <= %s
|
|
|
GROUP BY
|
|
|
house_id
|
|
|
+ ) d ON a.house_id = d.house_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ house_id,
|
|
|
+ count(*) new_cust_num
|
|
|
+ FROM
|
|
|
+ d_user
|
|
|
+ WHERE
|
|
|
+ created >= %s
|
|
|
+ AND created < %s # 时间需要加一天!!!!
|
|
|
+ GROUP BY
|
|
|
+ house_id
|
|
|
+ ) e ON a.house_id = e.house_id
|
|
|
) a
|
|
|
- JOIN d_house b ON a.house_id = b.house_id
|
|
|
- LEFT JOIN (
|
|
|
- SELECT
|
|
|
- house_id,
|
|
|
- count(*) interested_num
|
|
|
- FROM
|
|
|
- f_interested_custlist
|
|
|
- WHERE
|
|
|
- report_d >= '2020-03-01'
|
|
|
- AND report_d <'2020-03-05'
|
|
|
- GROUP BY
|
|
|
- house_id
|
|
|
- ) c ON a.house_id = c.house_id
|
|
|
- LEFT JOIN (
|
|
|
- SELECT
|
|
|
- house_id,
|
|
|
- count(*) wx_num
|
|
|
- FROM
|
|
|
- f_customer_dynamic
|
|
|
- WHERE
|
|
|
- dynamic = 1
|
|
|
- AND report_d >= '2020-03-01'
|
|
|
- AND report_d <= '2020-03-05'
|
|
|
- GROUP BY
|
|
|
- house_id
|
|
|
- ) d ON a.house_id = d.house_id
|
|
|
- LEFT JOIN (
|
|
|
- SELECT
|
|
|
- house_id,
|
|
|
- count(*) new_cust_num
|
|
|
- FROM
|
|
|
- d_user
|
|
|
- WHERE
|
|
|
- created >= '2020-03-01'
|
|
|
- AND created < '2020-03-05' # 时间需要加一天!!!!
|
|
|
- GROUP BY
|
|
|
- house_id
|
|
|
- ) e ON a.house_id = e.house_id
|
|
|
+ GROUP BY
|
|
|
+ a.house_id,
|
|
|
+ a.house_name
|
|
|
+ order by a.pv desc
|
|
|
"""
|
|
|
|
|
|
# 2.默认值/006_大麦(集团)/集团项目排行榜v1.3/集团排行榜
|
|
|
sql_2_2 = """
|
|
|
- 待定
|
|
|
+ select
|
|
|
+ a.brand_id,
|
|
|
+ a.house_id,
|
|
|
+ a.house_name,
|
|
|
+ SUM(a.pv),
|
|
|
+ SUM(a.uv),
|
|
|
+ SUM(a.new_cust),
|
|
|
+ SUM(a.shouquan_cust)
|
|
|
+ from
|
|
|
+ (SELECT
|
|
|
+ c.pv,c.uv,a.brand_id,a.house_id, a.house_name,a.brand_name,
|
|
|
+ ifnull(b.house_layout_num,0) house_layout_num,
|
|
|
+ ifnull(d.launch_time,'--') launch_time,
|
|
|
+ c.new_cust,
|
|
|
+ c.shouquan_cust,
|
|
|
+ c.revisit_cust
|
|
|
+ FROM
|
|
|
+ (
|
|
|
+ SELECT
|
|
|
+ brand_id,
|
|
|
+ ifnull(house_id, '0') house_id,
|
|
|
+ sum(pv) pv,
|
|
|
+ count(DISTINCT brand_user_id) uv,
|
|
|
+ count(DISTINCT case when is_new_user = 1 then
|
|
|
+ brand_user_id end) new_cust,
|
|
|
+ count(DISTINCT case when is_shouquan_user = 1 then
|
|
|
+ brand_user_id end) shouquan_cust,
|
|
|
+ count(DISTINCT case when is_new_user = 0 then
|
|
|
+ brand_user_id end) revisit_cust
|
|
|
+ from a_behavior_brand_mini_day
|
|
|
+ where report_d>= %s
|
|
|
+ and report_d < %s
|
|
|
+ GROUP BY
|
|
|
+ brand_id,
|
|
|
+ ifnull(house_id, '0')
|
|
|
+ ) c
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ house_id,
|
|
|
+ count(1) house_layout_num
|
|
|
+ FROM
|
|
|
+ d_content_layout
|
|
|
+ WHERE
|
|
|
+ `status` = '1'
|
|
|
+ and house_id <> 1
|
|
|
+ group by house_id
|
|
|
+ union all
|
|
|
+ SELECT
|
|
|
+ bb.brand_id house_id,
|
|
|
+ count(1) house_layout_num
|
|
|
+ FROM
|
|
|
+ d_content_layout aa join d_house bb
|
|
|
+ on aa.house_id = bb.house_id
|
|
|
+ WHERE
|
|
|
+ aa.`status` = '1'
|
|
|
+ and bb.status = '1'
|
|
|
+ and aa.house_id <> 1
|
|
|
+ group by bb.brand_id
|
|
|
+ ) b ON c.house_id = b.house_id
|
|
|
+ JOIN d_house a ON a.house_id = c.house_id
|
|
|
+ and a.brand_id = c.brand_id
|
|
|
+ left join d_house_attr d
|
|
|
+ on c.house_id = d.house_id
|
|
|
+ and c.brand_id = d.brand_id ) a
|
|
|
+ group by a.brand_id, a.house_id, a.house_name
|
|
|
+ order by a.pv desc
|
|
|
"""
|
|
|
|
|
|
# 默认值/001_大麦/场景_用户来源渠道/用户来源渠道—明细
|
|
|
sql_3_1 = """
|
|
|
SELECT
|
|
|
- *
|
|
|
+ house_id,
|
|
|
+ house_name,
|
|
|
+ label_wx,
|
|
|
+ COUNT(a.id) as counts
|
|
|
FROM
|
|
|
d_user_attr a
|
|
|
LEFT JOIN d_scene b ON a.scene = b. CODE
|
|
|
WHERE
|
|
|
a.source IN (1, 2, 3, 4, 10)
|
|
|
- AND a.report_d >= '2020-03-01'
|
|
|
- AND a.report_d <= '2020-03-04'
|
|
|
+ AND a.report_d >= %s
|
|
|
+ AND a.report_d < '%s
|
|
|
+ GROUP BY
|
|
|
+ house_id,
|
|
|
+ house_name,
|
|
|
+ label_wx
|
|
|
"""
|
|
|
|
|
|
# 默认值/006_大麦(集团)/场景(集团)_用户来源渠道_v1.1/用户来源渠道—明细
|
|
|
sql_3_2 = """
|
|
|
- SELECT
|
|
|
- a.scene,
|
|
|
- a.brand_id,
|
|
|
- b.*, a.share_brand_customer_id,
|
|
|
- '2' adviser_agent,
|
|
|
- a.house_id house_id,
|
|
|
- c.house_name house_name,
|
|
|
- c.brand_name
|
|
|
- FROM
|
|
|
+ select
|
|
|
+ brand_id,
|
|
|
+ x.brand_name,
|
|
|
+ house_id,
|
|
|
+ house_name,
|
|
|
+ label_wx,
|
|
|
+ COUNT(1)
|
|
|
+ from
|
|
|
+ (SELECT
|
|
|
+ a.scene,
|
|
|
+ a.brand_id,
|
|
|
+ b.*, a.share_brand_customer_id,
|
|
|
+ '2' adviser_agent,
|
|
|
+ a.house_id house_id,
|
|
|
+ c.house_name house_name,
|
|
|
+ c.brand_name
|
|
|
+ FROM
|
|
|
(
|
|
|
SELECT
|
|
|
scene,
|
|
@@ -116,9 +374,9 @@ class ReportPush(object):
|
|
|
FROM
|
|
|
d_brand_app_customer
|
|
|
WHERE
|
|
|
- created >='2020-03-01'
|
|
|
+ created >= %s
|
|
|
AND created < DATE_ADD(
|
|
|
- '2020-03-04', INTERVAL 1 DAY
|
|
|
+ %s, INTERVAL 1 DAY
|
|
|
)
|
|
|
UNION ALL
|
|
|
SELECT
|
|
@@ -129,13 +387,401 @@ class ReportPush(object):
|
|
|
FROM
|
|
|
d_brand_app_customer
|
|
|
WHERE
|
|
|
- created >= '2020-03-01'
|
|
|
+ created >= %s
|
|
|
AND created < DATE_ADD(
|
|
|
- '2020-03-04', INTERVAL 1 DAY
|
|
|
+ %s, INTERVAL 1 DAY
|
|
|
)
|
|
|
) a
|
|
|
LEFT JOIN d_scene b ON a.scene = b. CODE
|
|
|
JOIN d_house c ON a.house_id = c.house_id
|
|
|
- AND a.brand_id = c.brand_id
|
|
|
+ AND a.brand_id = c.brand_id) x
|
|
|
+ group by x.brand_id, x.brand_name, x.house_id, x.house_name, x.label_wx
|
|
|
"""
|
|
|
|
|
|
+ # 根据任务id获取推送客户信息
|
|
|
+ sql_4 = """
|
|
|
+ select a.task_key, a.customer_id, b.customer_type, b.`name`, b.mail, GROUP_CONCAT(c.house_or_brand_id) as ids
|
|
|
+ from report_task_info a left join report_push_customer_info b on b.id = a.customer_id
|
|
|
+ left join report_customer_authority_info c on b.id = c.customer_id
|
|
|
+ where a.task_key = %s and a.status = b.status = c.status = 1
|
|
|
+ group by a.task_key, a.customer_id, b.customer_type, b.`name`, b.mail
|
|
|
+ """
|
|
|
+
|
|
|
+ # 根据集团id获取项目id
|
|
|
+ sql_5 = """
|
|
|
+ select house_id, house_name from d_house where brand_id = %s
|
|
|
+ """
|
|
|
+
|
|
|
+ sql_6 = """insert into report_push_log(name, mail, report_name, push_time, send_status, status) values(%s, %s,
|
|
|
+ %s, now(), %s, 1) """
|
|
|
+
|
|
|
+ # 根据项目id获取集团id和名称
|
|
|
+ sql_7 = """
|
|
|
+ select a.brand_id, a.brand_name from d_house a where a.house_id = %s;
|
|
|
+ """
|
|
|
+
|
|
|
+ def __init__(self, db_name):
|
|
|
+ self.db = MysqlDB(db_name)
|
|
|
+
|
|
|
+ def report_data_query(self, task_key):
|
|
|
+ """
|
|
|
+ 定时任务推送数据准备
|
|
|
+ :param task_key:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ # 根据任务key获取需要推送的客户以及可以的权限
|
|
|
+ result = {}
|
|
|
+ customers = self.db.select(self.sql_4, [task_key])
|
|
|
+ # a.task_key, a.customer_id, b.customer_type, b.`name`, b.mail, GROUP_CONCAT(c.house_or_brand_id)
|
|
|
+ time_range = self.get_time_range(task_key)
|
|
|
+ all_time_rang = self.get_time_range(4)
|
|
|
+ # 有限时间范围内的数据
|
|
|
+ xcx_top_data = self.xcx_top(time_range)
|
|
|
+ brand_top_data = self.brand_top(time_range)
|
|
|
+ customer_channel_details_data = self.customer_channel_details(time_range)
|
|
|
+ brand_customer_channel_details = self.brand_customer_channel_details(time_range)
|
|
|
+ # 所有历史数据
|
|
|
+ xcx_top_data_all = self.xcx_top(all_time_rang)
|
|
|
+ brand_top_data_all = self.brand_top(all_time_rang)
|
|
|
+ for customer in customers:
|
|
|
+ customer_type = customer[2]
|
|
|
+ house_ids = []
|
|
|
+ brand_id_list = []
|
|
|
+ if customer_type == 1:
|
|
|
+ # 项目
|
|
|
+ ids = customer[5]
|
|
|
+ if str(house_ids).find(',') != -1:
|
|
|
+ house_ids = [x for x in str(ids).split(',')]
|
|
|
+ else:
|
|
|
+ house_ids = [ids]
|
|
|
+ pass
|
|
|
+ elif customer_type == 2:
|
|
|
+ # 集团
|
|
|
+ brands = []
|
|
|
+ brand_ids = customer[5]
|
|
|
+ if str(brand_ids).find(',') != -1:
|
|
|
+ brands = [x for x in str(brand_ids).split(',')]
|
|
|
+ else:
|
|
|
+ brands = [brand_ids]
|
|
|
+ for id in brands:
|
|
|
+ house_ids.extend(self.get_house_ids_by_brand_id(id))
|
|
|
+ brand_id_list = brands
|
|
|
+
|
|
|
+ result_data_1 = []
|
|
|
+ result_data_2 = []
|
|
|
+ result_data_3 = []
|
|
|
+ result_data_4 = []
|
|
|
+ result_data_5 = []
|
|
|
+ result_data_6 = []
|
|
|
+ result_data_7 = []
|
|
|
+ result_data_8 = []
|
|
|
+
|
|
|
+ # 1 数据总览 12个统计指标
|
|
|
+ data_overview = self.data_overview(time_range, house_ids, xcx_top_data, brand_top_data)
|
|
|
+ result_data_1.extend(data_overview)
|
|
|
+ # 4:单个项目小程序数据排行榜
|
|
|
+ for index, x in enumerate(xcx_top_data):
|
|
|
+ if x[0] in house_ids:
|
|
|
+ result_data_4.append([index, x[1], x[2], x[3], x[4], x[5]])
|
|
|
+ # 5: 集团项目数据排行榜
|
|
|
+ if customer_type == 2:
|
|
|
+ for index, x2 in enumerate(brand_top_data):
|
|
|
+ if x2[1] in house_ids or x2[0] in brand_id_list:
|
|
|
+ result_data_5.append([index, x2[2], x2[3], x2[4], x2[5], x2[5], x2[6]])
|
|
|
+ pass
|
|
|
+ pass
|
|
|
+ else:
|
|
|
+ for index, x1 in enumerate(brand_top_data):
|
|
|
+ if x1[1] in house_ids:
|
|
|
+ result_data_5.append([index, x1[2], x1[3], x1[4], x1[5], x1[5], x1[6]])
|
|
|
+ # 2: 项目数据排行榜
|
|
|
+ house_with_brand_data = self.house_with_brand(xcx_top_data, brand_top_data)
|
|
|
+ for index, x in enumerate(house_with_brand_data):
|
|
|
+ if x[1] in house_ids or x[0] in brand_id_list:
|
|
|
+ obj = [index]
|
|
|
+ obj.extend(x)
|
|
|
+ result_data_2.append(obj)
|
|
|
+
|
|
|
+ # 3: 项目历史累计总数
|
|
|
+ if customer_type == 2:
|
|
|
+ all_data_history = self.house_with_brand(xcx_top_data_all, brand_top_data_all, brand_id_list)
|
|
|
+ for index, x in enumerate(all_data_history):
|
|
|
+ if x[1] in house_ids or x[0] in brand_id_list:
|
|
|
+ obj = [index]
|
|
|
+ obj.extend(x)
|
|
|
+ result_data_3.append(obj)
|
|
|
+ else:
|
|
|
+ all_data_history = self.house_with_brand(xcx_top_data_all, brand_top_data_all)
|
|
|
+ for index, x in enumerate(all_data_history):
|
|
|
+ if x[0] in house_ids:
|
|
|
+ obj = [index]
|
|
|
+ obj.extend(x)
|
|
|
+ result_data_3.append(obj)
|
|
|
+ result[1] = result_data_1
|
|
|
+ result[2] = result_data_2
|
|
|
+ result[3] = result_data_3
|
|
|
+ result[4] = result_data_4
|
|
|
+ result[5] = result_data_5
|
|
|
+ result[6] = result_data_6
|
|
|
+ break
|
|
|
+ # 7: 单个项目小程序获客来源场景分析
|
|
|
+
|
|
|
+ # 8: 集团项目获客来源场景分析
|
|
|
+
|
|
|
+ # 6: 项目获客来源场景分析
|
|
|
+ return result
|
|
|
+
|
|
|
+ def data_overview(self, time_range, house_ids, xcx_top_data, brand_top_data):
|
|
|
+ """
|
|
|
+ 统计数据总览
|
|
|
+ :param time_range:
|
|
|
+ :param house_ids:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ result = []
|
|
|
+ # 1:总浏览量
|
|
|
+ data_1_1 = self.db.select(self.sql_1_1, [time_range[0], time_range[1], house_ids])
|
|
|
+ number_1_1 = data_1_1[0][0]
|
|
|
+ data_1_2 = self.db.select(self.sql_1_2, [time_range[0], time_range[1], house_ids])
|
|
|
+ number_1_2 = data_1_2[0][0]
|
|
|
+ number_1 = number_1_1 + number_1_2
|
|
|
+ result.append(number_1)
|
|
|
+ # 2: 总浏览人数
|
|
|
+ data_2 = self.db.select(self.sql_1_3, [time_range[0], time_range[1], house_ids, time_range[0], time_range[1]])
|
|
|
+ number_2 = data_2[0][0]
|
|
|
+ result.append(number_2)
|
|
|
+ # 3:新增获客
|
|
|
+ data_3 = self.db.select(self.sql_1_4, [time_range[0], time_range[1], house_ids, time_range[0], time_range[1]])
|
|
|
+ number_3 = data_3[0][0]
|
|
|
+ result.append(number_3)
|
|
|
+ # 4:新增获电
|
|
|
+ data_4 = self.db.select(self.sql_1_5, [time_range[0], time_range[1], house_ids, house_ids, time_range[0], time_range[1]])
|
|
|
+ number_4 = data_4[0][0]
|
|
|
+ result.append(number_4)
|
|
|
+ xcx_top_data_part = [x for x in xcx_top_data if x[0] in house_ids]
|
|
|
+ brand_top_data_part = [x for x in brand_top_data if x[0] in house_ids]
|
|
|
+ # 5 6 7 8
|
|
|
+ number_5 = 0
|
|
|
+ number_6 = 0
|
|
|
+ number_7 = 0
|
|
|
+ number_8 = 0
|
|
|
+ for x in brand_top_data_part:
|
|
|
+ number_5 += x[3]
|
|
|
+ number_6 += x[4]
|
|
|
+ number_7 += x[5]
|
|
|
+ number_8 += x[6]
|
|
|
+ result.append(number_5)
|
|
|
+ result.append(number_6)
|
|
|
+ result.append(number_7)
|
|
|
+ result.append(number_8)
|
|
|
+ # 9 10 11 12
|
|
|
+ number_9 = 0
|
|
|
+ number_10 = 0
|
|
|
+ number_11 = 0
|
|
|
+ number_12 = 0
|
|
|
+ for x in xcx_top_data_part:
|
|
|
+ number_9 += x[2]
|
|
|
+ number_10 += x[3]
|
|
|
+ number_11 += x[4]
|
|
|
+ number_12 += x[5]
|
|
|
+ result.append(number_9)
|
|
|
+ result.append(number_10)
|
|
|
+ result.append(number_11)
|
|
|
+ result.append(number_12)
|
|
|
+ return result
|
|
|
+
|
|
|
+ def house_with_brand(self, xcx_top_data, brand_top_data, brands=None):
|
|
|
+ """
|
|
|
+ 项目数据和集团数据的求和
|
|
|
+ :param brands:
|
|
|
+ :param xcx_top_data:
|
|
|
+ :param brand_top_data:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ result = []
|
|
|
+ house_ids = []
|
|
|
+ if brands:
|
|
|
+ house_ids.extend(house_ids)
|
|
|
+ for x in xcx_top_data:
|
|
|
+ house_ids.append(x[0])
|
|
|
+ for x in brand_top_data:
|
|
|
+ if x[1] not in house_ids:
|
|
|
+ house_ids.append(x[1])
|
|
|
+ for house_id in house_ids:
|
|
|
+ a = []
|
|
|
+ for index, x in enumerate(xcx_top_data):
|
|
|
+ if house_id == x[0]:
|
|
|
+ a.extend(x)
|
|
|
+ b = []
|
|
|
+ for index, y in enumerate(brand_top_data):
|
|
|
+ if house_id == y[1] or house_id == y[0]:
|
|
|
+ b.extend(y)
|
|
|
+ if len(a) == 1 and len(b) == 1:
|
|
|
+ result.append([b[0], a[0], a[1], a[2] + b[3], a[3] + b[4], a[4] + b[5], a[5] + b[6]])
|
|
|
+ elif len(a) == 1 and len(b) == 0:
|
|
|
+ _a = [1]
|
|
|
+ for x in a:
|
|
|
+ _a.append(x)
|
|
|
+ result.append(_a)
|
|
|
+ elif len(a) == 0 and len(b) == 1:
|
|
|
+ result.append(b)
|
|
|
+ else:
|
|
|
+ pass
|
|
|
+ result.sort(key=lambda obj: obj[1])
|
|
|
+ result.reverse()
|
|
|
+ return result
|
|
|
+
|
|
|
+ def xcx_top(self, time_range):
|
|
|
+ """
|
|
|
+ 获取 1.默认值/001_大麦/项目排行榜/小程序排行榜TOP_N
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ params = []
|
|
|
+ params.extend(time_range)
|
|
|
+ params.extend(time_range)
|
|
|
+ params.extend(time_range)
|
|
|
+ params.extend(time_range)
|
|
|
+ xcx_top_data = self.db.select(self.sql_2_1, params)
|
|
|
+ result = []
|
|
|
+ for x in xcx_top_data:
|
|
|
+ result.append([n for n in x])
|
|
|
+ # xcx_top_data的结果结构
|
|
|
+ # 0 a.house_id, 项目id
|
|
|
+ # 1 a.house_name, 项目名称
|
|
|
+ # 2 SUM(a.pv), 浏览总量
|
|
|
+ # 3 SUM(a.uv), 浏览人数
|
|
|
+ # 4 SUM(a.new_cust_num), 新增获客
|
|
|
+ # 5 SUM(a.wx_num) 授权手机号
|
|
|
+ result.sort(key=lambda obj: obj[2])
|
|
|
+ result.reverse()
|
|
|
+ return result
|
|
|
+
|
|
|
+ def brand_top(self, time_range):
|
|
|
+ """
|
|
|
+ 2.默认值/006_大麦(集团)/集团项目排行榜v1.3/集团排行榜
|
|
|
+ :param task_key:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ params = [time_range]
|
|
|
+ brand_top_data = self.db.select(self.sql_2_2, params)
|
|
|
+ result = []
|
|
|
+ for x in brand_top_data:
|
|
|
+ result.append([n for n in x])
|
|
|
+ # brand_top_data结果的结构
|
|
|
+ # 0 a.brand_id, 集团id
|
|
|
+ # 1 a.house1_id, 项目id
|
|
|
+ # 2 a.house_name, 项目名称
|
|
|
+ # 3 SUM(a.pv), 浏览总量
|
|
|
+ # 4 SUM(a.uv), 浏览人数
|
|
|
+ # 5 SUM(a.new_cust), 新增获客
|
|
|
+ # 6 SUM(a.shouquan_cust) 授权手机号
|
|
|
+ result.sort(key=lambda obj: obj[3])
|
|
|
+ result.reverse()
|
|
|
+ return result
|
|
|
+
|
|
|
+ """
|
|
|
+ 数据分享类别
|
|
|
+ 1:长按识别二维码 2:会话 3:公众号菜单 4:公众号文章 5:小程序历史列表 6:扫一扫二维码
|
|
|
+ 7:搜索 8:相册选取二维码 9:其他小程序 10:其他
|
|
|
+
|
|
|
+ """
|
|
|
+ share_way = {
|
|
|
+ "长按识别二维码": 1,
|
|
|
+ "会话": 2,
|
|
|
+ "公众号菜单": 3,
|
|
|
+ '公众号文章': 4,
|
|
|
+ '小程序历史列表': 5,
|
|
|
+ '扫一扫二维码': 6,
|
|
|
+ '搜索': 7,
|
|
|
+ '相册选取二维码': 8,
|
|
|
+ '其他小程序': 9,
|
|
|
+ '': 10
|
|
|
+ }
|
|
|
+
|
|
|
+ def customer_channel_details(self, time_range):
|
|
|
+ """
|
|
|
+ 1.默认值/001_大麦/场景_用户来源渠道/用户来源渠道—明细
|
|
|
+ :param task_key:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ params = []
|
|
|
+ params.extend(time_range)
|
|
|
+ params.extend(time_range)
|
|
|
+ customer_channel_details_data = self.db.select(self.sql_3_1, params)
|
|
|
+ # customer_channel_details_data数据结构
|
|
|
+ # house_id, 项目id
|
|
|
+ # house_name, 项目名称
|
|
|
+ # label_wx, 分享类别
|
|
|
+ # COUNT(a.id) as counts, 数量
|
|
|
+ return customer_channel_details_data
|
|
|
+
|
|
|
+ def brand_customer_channel_details(self, time_range):
|
|
|
+ """
|
|
|
+ 2.默认值/006_大麦(集团)/场景(集团)_用户来源渠道_v1.1/用户来源渠道—明细
|
|
|
+ :param frequency:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ params = [time_range[0], time_range[1]]
|
|
|
+ brand_customer_channel_details_data = self.db.select(self.sql_3_2, params)
|
|
|
+ # brand_customer_channel_details_data数据结构
|
|
|
+ # brand_id, 集团id
|
|
|
+ # x.brand_name, 集团名称
|
|
|
+ # house_id, 项目id
|
|
|
+ # house_name, 项目名称
|
|
|
+ # label_wx, 分享类别
|
|
|
+ # COUNT(1) 数量
|
|
|
+ return brand_customer_channel_details_data
|
|
|
+
|
|
|
+ def push_log_recording(self, push_message):
|
|
|
+ """
|
|
|
+ 报表推送日志记录
|
|
|
+ :param push_message:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ self.db.add_some(self.sql_6, push_message)
|
|
|
+
|
|
|
+ def get_house_ids_by_brand_id(self, brand_id):
|
|
|
+ return self.db.select(self.sql_5, [brand_id])
|
|
|
+
|
|
|
+ def get_brand_info_by_house_id(self, house_id):
|
|
|
+ """
|
|
|
+ 根据项目id或者相应的集团信息
|
|
|
+ :param house_id:
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ brand_info = self.db.select(self.sql_7, [house_id])
|
|
|
+ if len(brand_info) == 1:
|
|
|
+ return brand_info[0][0]
|
|
|
+ return
|
|
|
+
|
|
|
+ def get_time_range(self, task_key):
|
|
|
+ """
|
|
|
+ 根据定时任务id获取时间区间
|
|
|
+ 时间格式 yyyy-mm-dd
|
|
|
+ :param task_key:1: 日报,2:周报, 3:all
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ now_time = datetime.datetime.now()
|
|
|
+ pre_time = None
|
|
|
+ if task_key in (2, 3):
|
|
|
+ # 上周,上周一到上周天
|
|
|
+ pre_time = now_time + datetime.timedelta(days=-7)
|
|
|
+ pass
|
|
|
+ elif task_key in (1):
|
|
|
+ # 昨天
|
|
|
+ pre_time = now_time + datetime.timedelta(days=-1)
|
|
|
+ pass
|
|
|
+ elif task_key in (4):
|
|
|
+ # 不限时间
|
|
|
+ pre_time = now_time + datetime.timedelta(days=-2999)
|
|
|
+ return [pre_time.strftime('%Y-%m-%d'), now_time.strftime('%Y-%m-%d')]
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ rp = ReportPush('linshi')
|
|
|
+ print(rp.get_time_range(3))
|
|
|
+ sql = "select COUNT(1) from t_house_image where id in %s and status = %s"
|
|
|
+ print(rp.db.select(sql, [[46, 47, 48], -1]))
|
|
|
+ list_data = [2, 1, 4]
|
|
|
+ for x in list_data:
|
|
|
+ print(x)
|