ck 4 years ago
parent
commit
2d5c4716d2
4 changed files with 239 additions and 98 deletions
  1. 208 96
      data_manage/pitcher_panel.py
  2. 5 1
      handlers/PitcherPanelHandler.py
  3. 20 1
      model/CommonUtils.py
  4. 6 0
      model/DataBaseUtils.py

+ 208 - 96
data_manage/pitcher_panel.py

@@ -94,9 +94,6 @@ def get_pitcher_panel_overview(pitcher):
     return get_dict_list(key,data)
     return get_dict_list(key,data)
 
 
 
 
-
-
-
 def get_channel_overview(channel,start,end,page,page_size,order_by,order):
 def get_channel_overview(channel,start,end,page,page_size,order_by,order):
     sql="""select channel,toString(dt) date,
     sql="""select channel,toString(dt) date,
        view_count,click_count,
        view_count,click_count,
@@ -135,99 +132,212 @@ def get_channel_overview(channel,start,end,page,page_size,order_by,order):
     return ck.execute(sql)
     return ck.execute(sql)
 
 
 
 
-
 def get_channel_again_order_trend(channel,date):
 def get_channel_again_order_trend(channel,date):
-    a=[{'date':'2020-12-01',
-       'channel':'宝珠书屋',
-       'book':'熊出没',
-       'cost':23.23,
-       'reg_amount':23421.11,
-       'roi':0.23,
-       'new_follow':23,
-       'new_follow_per_cost':234.11,
-       'reg_user':111,
-       'reg_count':123,
-       'cost_per_user':123,
-       'avg_again_order_rate':0.24,
-       'avg_order_amount':1231.11,
-       'order_count':11,
-       'data':[{'user_order_count' :1,
-                               'd1':{'origin':12,
-                                     'new':1231,
-                                     'move':12,
-                                     'now':2134,
-                                     'follow_order_rate':0.12},
-                               'd2': {'origin': 12,
-                                      'new': 1231,
-                                      'move': 12,
-                                      'now': 2134,
-                                      'follow_order_rate': 0.12},
-                               'd3': {'origin': 12,
-                                      'new': 1231,
-                                      'move': 12,
-                                      'now': 2134,
-                                      'follow_order_rate': 0.12},
-                               'd4': {'origin': 12,
-                                      'new': 1231,
-                                      'move': 12,
-                                      'now': 2134,
-                                      'follow_order_rate': 0.12},
-                               'd5': {'origin': 12,
-                                      'new': 1231,
-                                      'move': 12,
-                                      'now': 2134,
-                                      'follow_order_rate': 0.12},
-                               'd6': {'origin': 12,
-                                      'new': 1231,
-                                      'move': 12,
-                                      'now': 2134,
-                                      'follow_order_rate': 0.12},
-                               'd7': {'origin': 12,
-                                      'new': 1231,
-                                      'move': 12,
-                                      'now': 2134,
-                                      'follow_order_rate': 0.12}
-                }
-               ]
-
-
-        }]
-    return a
-
-def get_channel_active(channel,start,end):
-
-    a=[{
-        'date':'2020-12-01',
-        'channel':'宝珠书屋',
-        'book':'魏汝稳',
-        'cost':234.11,
-        'reg_amount':123.11,
-        'roi':0.45,
-        'new_follow_user':11,
-        'new_follow_per_cost':234.11,
-        'order_user':222,
-        'order_count':12312,
-        'order_user_per_cost':123.11,
-        'day7_avg_act_rate':0.14,
-        'day7_avg_act_per_cost':5.23,
-        'day30_avg_act_rate':0.9334,
-        'day30_avg_act_rate':5.23,
-        'act_per_cost':43.11,
-        'd1':{
-            'act_user':12,
-            'act_cost_per_cost':23.11,
-            'act_rate':0.4512},
-        'd2': {
-            'act_user': 12,
-            'act_cost_per_cost': 23.11,
-            'act_rate': 0.4512},
-        'd3': {
-            'act_user': 12,
-            'act_cost_per_cost': 23.11,
-            'act_rate': 0.4512}
-    }]
-    return a
-
+   sql=f"""select toString(dt) date,
+       channel,book,
+       round(cost,2) cost,
+       round(reg_order_amount,2) reg_amount,
+       round(reg_order_amount/cost,4) roi,
+       follow_user new_follow,
+       round(cost/follow_user,2) new_follow_per_cost,
+       reg_order_count reg_count,reg_order_user reg_user,
+       round(cost/reg_order_user,2) cost_per_user,
+       round(reg_order_amount/reg_order_user,2) avg_order_amount,
+       round(reg_order_user2/reg_order_user,4) avg_again_order_rate,
+       order_count
+
+        from dw_daily_channel where channel='{channel}' and dt='{date}'
+       """
+   data=ck.execute(sql)
+   key1=['date','channel','book','cost','reg_amount','roi','new_follow','new_follow_per_cost',
+         'reg_count','reg_user','cost_per_user','avg_order_amount','avg_again_order_rate','order_count']
+   json1=get_dict_list(key1,data)[0]
+   # print(json1)
+   sql2="""select
+               date ,
+               count(1) c1,
+               sum(if(count>1,1,0)) c2,
+               sum(if(count>2,1,0)) c3,
+               sum(if(count>3,1,0)) c4,
+               sum(if(count>4,1,0)) c5
+        
+        from (
+        
+        select count(1) count,date
+            from order where channel='玉龙书社' and date>='2020-09-19' and date<=addDays(toDate('2020-09-19'),6)
+                         and formatDateTime(reg_time,'%Y-%m-%d')='2020-09-19'  group by user_id,date
+            ) a group by date"""
+
+   df=ck.getData_pd(sql2,[['date','c1','c2','c3','c4','c5']])
+   # print(df)
+   reg_user=json1["reg_user"]
+   li=[]
+   for i in range(1,5):
+       d1={}
+       d1["origin"]=df.iat[0,i]
+       d1["new"]=0
+       d1["move"]=df.iat[0,i+1]
+       d1["now"]=d1["origin"]+d1['new']-d1["move"]
+       d1["follow_order_rate"]=round(d1["now"]/reg_user,2)
+       d2={}
+       d2["origin"] = d1["now"]
+       d2["new"] = df.iat[1,i]
+       d2["move"] = df.iat[1, i+1]
+       d2["now"] = d2["origin"] +d2['new']- d2["move"]
+       d2["follow_order_rate"] = round(d2["now"] / reg_user, 2)
+       d3={}
+       d3["origin"] = d2["now"]
+       d3["new"] = df.iat[2, i]
+       d3["move"] = df.iat[2, i+1]
+       d3["now"] = d3["origin"] +d3['new']- d3["move"]
+       d3["follow_order_rate"] = round(d3["now"] / reg_user, 2)
+       d4={}
+       d4["origin"] = d3["now"]
+       d4["new"] = df.iat[3, i]
+       d4["move"] = df.iat[3, i+1]
+       d4["now"] = d4["origin"] +d4['new']- d4["move"]
+       d4["follow_order_rate"] = round(d4["now"] / reg_user, 2)
+       d5={}
+       d5["origin"] = d4["now"]
+       d5["new"] = df.iat[4, i]
+       d5["move"] = df.iat[4, i+1]
+       d5["now"] = d5["origin"] +d5['new']- d5["move"]
+       d5["follow_order_rate"] = round(d4["now"] / reg_user, 2)
+       d6 = {}
+       d6["origin"] = d5["now"]
+       d6["new"] = df.iat[5, i]
+       d6["move"] = df.iat[5, i+1]
+       d6["now"] = d6["origin"] +d6['new']- d6["move"]
+       d6["follow_order_rate"] = round(d6["now"] / reg_user, 2)
+       d7 = {}
+       d7["origin"] = d6["now"]
+       d7["new"] = df.iat[6, i]
+       d7["move"] = df.iat[6, i+1]
+       d7["now"] = d7["origin"] +d7['new']- d7["move"]
+       d7["follow_order_rate"] = round(d7["now"] / reg_user, 2)
+       d={}
+       d["user_order_count"]=i
+       d['d1']=d1
+       d['d2']=d2
+       d['d3']=d3
+       d['d4']=d4
+       d['d5']=d5
+       d['d6']=d6
+       d['d7']=d7
+       li.append(d)
+   json1['data']=li
+   return [json1]
+
+
+def get_channel_active(channel,start,end,page,page_size,order_by,order):
+    sql=f"""select formatDateTime(a.dt,'%Y-%m-%d') date, '{channel}' channel,book,cost,reg_amount,roi,new_follow_user,new_follow_per_cost,order_user,order_count,
+       order_user_per_cost,day7_avg_act_rate,day7_avg_act_per_cost,day30_avg_act_rate,ay30_avg_act_cost,
+       act_per_cost,
+       concat(toString(reg_order_user1),',',toString(cost/reg_order_user1),',',toString(reg_order_user1/order_user)),
+       concat(toString(reg_order_user2),',',toString(cost/reg_order_user2),',',toString(reg_order_user2/order_user)),
+       concat(toString(reg_order_user3),',',toString(cost/reg_order_user3),',',toString(reg_order_user3/order_user)),
+       concat(toString(reg_order_user4),',',toString(cost/reg_order_user4),',',toString(reg_order_user4/order_user)),
+       concat(toString(reg_order_user5),',',toString(cost/reg_order_user5),',',toString(reg_order_user5/order_user)),
+       concat(toString(reg_order_user6),',',toString(cost/reg_order_user6),',',toString(reg_order_user6/order_user)),
+       concat(toString(reg_order_user7),',',toString(cost/reg_order_user7),',',toString(reg_order_user7/order_user)),
+       concat(toString(reg_order_user8),',',toString(cost/reg_order_user8),',',toString(reg_order_user8/order_user)),
+       concat(toString(reg_order_user9),',',toString(cost/reg_order_user9),',',toString(reg_order_user9/order_user)),
+       concat(toString(reg_order_user10),',',toString(cost/reg_order_user10),',',toString(reg_order_user10/order_user)),
+       concat(toString(reg_order_user11),',',toString(cost/reg_order_user11),',',toString(reg_order_user11/order_user)),
+       concat(toString(reg_order_user12),',',toString(cost/reg_order_user12),',',toString(reg_order_user12/order_user)),
+       concat(toString(reg_order_user13),',',toString(cost/reg_order_user13),',',toString(reg_order_user13/order_user)),
+       concat(toString(reg_order_user14),',',toString(cost/reg_order_user14),',',toString(reg_order_user14/order_user)),
+       concat(toString(reg_order_user15),',',toString(cost/reg_order_user15),',',toString(reg_order_user15/order_user)),
+       concat(toString(reg_order_user16),',',toString(cost/reg_order_user16),',',toString(reg_order_user16/order_user)),
+       concat(toString(reg_order_user17),',',toString(cost/reg_order_user17),',',toString(reg_order_user17/order_user)),
+       concat(toString(reg_order_user18),',',toString(cost/reg_order_user18),',',toString(reg_order_user18/order_user)),
+       concat(toString(reg_order_user19),',',toString(cost/reg_order_user19),',',toString(reg_order_user19/order_user)),
+       concat(toString(reg_order_user20),',',toString(cost/reg_order_user20),',',toString(reg_order_user20/order_user)),
+       concat(toString(reg_order_user21),',',toString(cost/reg_order_user21),',',toString(reg_order_user21/order_user)),
+       concat(toString(reg_order_user22),',',toString(cost/reg_order_user22),',',toString(reg_order_user22/order_user)),
+       concat(toString(reg_order_user23),',',toString(cost/reg_order_user23),',',toString(reg_order_user23/order_user)),
+       concat(toString(reg_order_user24),',',toString(cost/reg_order_user24),',',toString(reg_order_user24/order_user)),
+       concat(toString(reg_order_user25),',',toString(cost/reg_order_user25),',',toString(reg_order_user25/order_user)),
+       concat(toString(reg_order_user26),',',toString(cost/reg_order_user26),',',toString(reg_order_user26/order_user)),
+       concat(toString(reg_order_user27),',',toString(cost/reg_order_user27),',',toString(reg_order_user27/order_user)),
+       concat(toString(reg_order_user28),',',toString(cost/reg_order_user28),',',toString(reg_order_user28/order_user)),
+       concat(toString(reg_order_user29),',',toString(cost/reg_order_user29),',',toString(reg_order_user29/order_user)),
+       concat(toString(reg_order_user30),',',toString(cost/reg_order_user30),',',toString(reg_order_user30/order_user))
+
+       from (
+
+select dt,book,cost,
+       reg_order_amount reg_amount,
+       if(cost=0,0,reg_order_amount/cost) roi,
+       follow_user new_follow_user,
+       if(follow_user=0,0,cost/follow_user) new_follow_per_cost,
+       reg_order_user order_user,
+       reg_order_count order_count,
+       if(reg_order_user=0,0,cost/reg_order_user) order_user_per_cost,
+       if(follow_user=0,0,reg_order_user7/follow_user) day7_avg_act_rate ,
+       if(reg_order_user7=0,0,cost/reg_order_user7) day7_avg_act_per_cost,
+       if(follow_user=0,0,reg_order_user30/follow_user) day30_avg_act_rate,
+       if(reg_order_user30=0,0,cost/reg_order_user30) ay30_avg_act_cost,
+       if(reg_order_user=0,0,cost/reg_order_user) act_per_cost
+       from dw_daily_channel where channel='{channel}' and dt>='{start}' and dt<='{end}') a
+left outer join (
+
+select toDate(formatDateTime(reg_time,'%Y-%m-%d')) dt,
+       count(distinct if(subtractDays(date, 1)>reg_time,'',user_id))-1 reg_order_user1,
+       count(distinct if(subtractDays(date, 2)>reg_time,'',user_id))-1 reg_order_user2,
+       count(distinct if(subtractDays(date, 3)>reg_time,'',user_id))-1 reg_order_user3,
+       count(distinct if(subtractDays(date, 4)>reg_time,'',user_id))-1 reg_order_user4,
+       count(distinct if(subtractDays(date, 5)>reg_time,'',user_id))-1 reg_order_user5,
+       count(distinct if(subtractDays(date, 6)>reg_time,'',user_id))-1 reg_order_user6,
+       count(distinct if(subtractDays(date, 7)>reg_time,'',user_id))-1 reg_order_user7,
+       count(distinct if(subtractDays(date, 8)>reg_time,'',user_id))-1 reg_order_user8,
+       count(distinct if(subtractDays(date, 9)>reg_time,'',user_id))-1 reg_order_user9,
+       count(distinct if(subtractDays(date, 10)>reg_time,'',user_id))-1 reg_order_user10,
+       count(distinct if(subtractDays(date, 11)>reg_time,'',user_id))-1 reg_order_user11,
+       count(distinct if(subtractDays(date, 12)>reg_time,'',user_id))-1 reg_order_user12,
+       count(distinct if(subtractDays(date, 13)>reg_time,'',user_id))-1 reg_order_user13,
+       count(distinct if(subtractDays(date, 14)>reg_time,'',user_id))-1 reg_order_user14,
+       count(distinct if(subtractDays(date, 15)>reg_time,'',user_id))-1 reg_order_user15,
+       count(distinct if(subtractDays(date, 16)>reg_time,'',user_id))-1 reg_order_user16,
+       count(distinct if(subtractDays(date, 17)>reg_time,'',user_id))-1 reg_order_user17,
+       count(distinct if(subtractDays(date, 18)>reg_time,'',user_id))-1 reg_order_user18,
+       count(distinct if(subtractDays(date, 19)>reg_time,'',user_id))-1 reg_order_user19,
+       count(distinct if(subtractDays(date, 20)>reg_time,'',user_id))-1 reg_order_user20,
+       count(distinct if(subtractDays(date, 21)>reg_time,'',user_id))-1 reg_order_user21,
+       count(distinct if(subtractDays(date, 22)>reg_time,'',user_id))-1 reg_order_user22,
+       count(distinct if(subtractDays(date, 23)>reg_time,'',user_id))-1 reg_order_user23,
+       count(distinct if(subtractDays(date, 24)>reg_time,'',user_id))-1 reg_order_user24,
+       count(distinct if(subtractDays(date, 25)>reg_time,'',user_id))-1 reg_order_user25,
+       count(distinct if(subtractDays(date, 26)>reg_time,'',user_id))-1 reg_order_user26,
+       count(distinct if(subtractDays(date, 27)>reg_time,'',user_id))-1 reg_order_user27,
+       count(distinct if(subtractDays(date, 28)>reg_time,'',user_id))-1 reg_order_user28,
+       count(distinct if(subtractDays(date, 29)>reg_time,'',user_id))-1 reg_order_user29,
+       count(distinct if(subtractDays(date, 30)>reg_time,'',user_id))-1 reg_order_user30
+       from order where  channel='{channel}' and dt>='{start}' group by formatDateTime(reg_time,'%Y-%m-%d')) b on a.dt=b.dt 
+       order by {order_by} {order} limit {page},{page_size} 
+"""
+    data=ck.execute(sql)
+    key=['date','channel','book','cost','reg_amount','roi','new_follow_user','new_follow_per_cost','order_user','order_count','order_user_per_cost',
+         'day7_avg_act_rate','day7_avg_act_per_cost','day30_avg_act_rate','day30_avg_act_cost','act_per_cost','d1','d2','d3','d4','d5','d6','d7','d8','d9','d10',
+         'd11','d12','d13','d14','d15','d16','d17','d18','d19','d20','d21','d22','d23','d24','d25','d26','d27','d28','d29','d30']
+
+    x=get_dict_list(key,get_round(data))
+    li=[]
+
+    for i in x:
+        di = {}
+        for j in i:
+            if j in ['d1','d2','d3','d4','d5','d6','d7','d8','d9','d10',
+         'd11','d12','d13','d14','d15','d16','d17','d18','d19','d20','d21','d22','d23','d24','d25','d26','d27','d28','d29','d30']:
+                k=i[j].split(",")
+                k[0]=round(float(k[0]),0)
+                k[1]=round(float(k[1]),2)
+                k[2]=round(float(k[2]),4)
+                di[j]= dict(zip(['act_user','act_cost_per_cost','act_rate'],k))
+            else:
+                di[j]=i[j]
+        li.append(di)
+    return li
 
 
 def get_channel_order_trend(channel,start,end):
 def get_channel_order_trend(channel,start,end):
     a=[{
     a=[{
@@ -300,5 +410,7 @@ def get_channel_summary(channel,pitcher):
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     # a=get_channel_overview('','','',1,10,'date','desc')
     # a=get_channel_overview('','','',1,10,'date','desc')
-    a=get_channel_summary('','')
+    # a=get_channel_summary('','')
+    # a=get_channel_again_order_trend('玉龙书社','2020-09-19')
+    a=get_channel_active('玉龙书社','2020-09-15','2020-09-20',1,10,'date','desc')
     print(a)
     print(a)

+ 5 - 1
handlers/PitcherPanelHandler.py

@@ -91,10 +91,14 @@ class ChannelActive(BaseHandler):
         start = args.get("start", '')
         start = args.get("start", '')
         end = args.get("start", '')
         end = args.get("start", '')
         date_range = args.get("date_range", '')
         date_range = args.get("date_range", '')
+        page = args.get("page", '1')
+        page_size = args.get("page_size", '10')
+        order_by = args.get("order_by", 'date')
+        order = args.get("order", 'desc')
         if isinstance(date_range, int):
         if isinstance(date_range, int):
             end = du.get_n_days(-1)
             end = du.get_n_days(-1)
             start = du.get_n_days(-date_range)
             start = du.get_n_days(-date_range)
-        data=get_channel_active(channel,start,end)
+        data=get_channel_active(channel,start,end,page,page_size,order_by,order)
         self.write_json(data)
         self.write_json(data)
 
 
 
 

+ 20 - 1
model/CommonUtils.py

@@ -9,4 +9,23 @@ def get_dict_list(key,value_list):
     data_list=[]
     data_list=[]
     for i in value_list:
     for i in value_list:
         data_list.append(dict(zip(key, i)))
         data_list.append(dict(zip(key, i)))
-    return data_list
+    return data_list
+
+def get_round(li):
+    """
+
+    :param li: [[]] or [()]
+    :return: [[]]
+    """
+    y=[]
+    for i in li:
+        x = []
+        for j in i:
+            if isinstance(j,float):
+                x.append(round(j,2))
+            else:
+                x.append(j)
+            y.append(x)
+    return y
+
+

+ 6 - 0
model/DataBaseUtils.py

@@ -62,6 +62,12 @@ class CkUtils:
         return self.client.execute(sql)
         return self.client.execute(sql)
 
 
     def getData_pd(self, sql, col):
     def getData_pd(self, sql, col):
+        """
+
+        :param sql:
+        :param col: [[]]
+        :return:
+        """
         data = self.execute(sql)
         data = self.execute(sql)
         df = pd.DataFrame(data, columns=col)
         df = pd.DataFrame(data, columns=col)
         return df
         return df