فهرست منبع

MOD:修改书本总榜信息

cxyu 3 سال پیش
والد
کامیت
34e5633b55
2فایلهای تغییر یافته به همراه192 افزوده شده و 97 حذف شده
  1. 148 56
      data_manage/public_analysis.py
  2. 44 41
      handlers/PublicAnalysisHandler.py

+ 148 - 56
data_manage/public_analysis.py

@@ -2,22 +2,24 @@ from model.DateUtils import DateUtils
 from model.DataBaseUtils import *
 from model.log import logger
 from model.CommonUtils import *
-from data_manage.operate import get_pitcher,get_user_name_by_id
+from data_manage.operate import get_pitcher, get_user_name_by_id
 from model.UserAuthUtils import super_auth
 from model import UserAuthUtils
+
 du = DateUtils()
 log = logger()
 
-def book_rank(start,end,book,stage,type,page,page_size,order_by,order):
-    db=MysqlUtils()
-    op1=f" and book='{book}'" if book else ''
+
+def book_rank(start, end, book, stage, type, page, page_size, order_by, order):
+    db = MysqlUtils()
+    op1 = f" and book='{book}'" if book else ''
     op2 = f" and dt>='{start}' " if start else ''
     op3 = f" and dt<='{end}' " if end else ''
     op4 = f" order by {order_by} {order}" if order_by and order else ''
-    op5=f" and stage='{stage}'" if stage else ''
-    op6=f" and type='{type}'" if type else ''
+    op5 = f" and stage='{stage}'" if stage else ''
+    op6 = f" and type='{type}'" if type else ''
 
-    sql=f"""select 
+    sql = f"""select 
 concat(DATE_FORMAT(min(dt),'%Y/%m/%d') ,'~',DATE_FORMAT(max(dt),'%Y/%m/%d')) date,
 pitcher,book,stage,type,channel,
 sum(cost) cost,
@@ -34,21 +36,20 @@ round(sum(reg_order_amount)/sum(cost),4) roi
 from dw_channel where 1=1 {op1} {op2} {op3} {op5} {op6} GROUP BY channel,book,pitcher,stage,type
  {op4}"""
     print(sql)
-    return getLimitData(db.dm,sql,page,page_size)
-
+    return getLimitData(db.dm, sql, page, page_size)
 
 
-def book_trend(start,end,book,type,platform,page,page_size,order_by,order):
+def book_trend(start, end, book, book_type, platform, page, page_size, order_by, order):
     op1 = f" and book='{book}'" if book else ''
-    op2 = f" and type='{type}' " if type else ''
+    op2 = f" and type='{book_type}' " if book_type else ''
     # op3 = f" and platform='{platform}' " if platform else ''
     op4 = f" and dt>='{start}' " if start else ''
     op5 = f" and dt<='{end}' " if end else ''
     op6 = f" order by {order_by} {order}" if order_by and order else ''
 
-    db=MysqlUtils()
+    db = MysqlUtils()
 
-    sql=f"""
+    sql = f"""
         select dt,book,type,cost,first_order_amount,reg_order_amount,
             round(first_order_amount/cost,4) first_roi,
             a7,a30,
@@ -130,11 +131,23 @@ concat(a59-a58,',',(a59-a58)/cost,',',a59/cost,',',a59/a1) d59,
 concat(a60-a59,',',(a60-a59)/cost,',',a60/cost,',',a60/a1) d60,
 concat(m3-a60,',',(m3-a60)/cost,',',m3/cost,',',m3/a1) m3,
 concat(m4-m3,',',(m4-m3)/cost,',',m4/cost,',',m4/a1) m4,
-concat(m5-m4,',',(m5-m4)/cost,',',m5/cost,',',m5/a1) m5
+concat(m5-m4,',',(m5-m4)/cost,',',m5/cost,',',m5/a1) m5,
+a1 as da1,a2 as da2,a3 as da3,a4 as da4,a5 as da5,a6 as da6,a7 as da7,
+a8 as da8,a9 as da9,a10 as da10,a11 as da11,a12 as da12,a13 as da13,
+a14 as da14,a15 as da15,a16 as da16,a17 as da17,a18 as da18,a19 as da19,
+a20 as da20,a21 as da21,a22 as da22,a23 as da23,a24 as da24,a25 as da25,
+a26 as da26,a27 as da27,a28 as da28,a29 as da29,a30 as da30,a31 as da31,
+a32 as da32,a33 as da33,a34 as da34,a35 as da35,a36 as da36,a37 as da37,
+a38 as da38,a39 as da39,a40 as da40,a41 as da41,a42 as da42,a43 as da43,
+a44 as da44,a45 as da45,a46 as da46,a47 as da47,a48 as da48,a49 as da49,
+a50 as da50,a51 as da51,a52 as da52,a53 as da53,a54 as da54,a55 as da55,
+a56 as da56,a57 as da57,a58 as da58,a59 as da59,a60 as da60,
+m3 as dm3,m4 as dm4,m5 as dm5
+
 from book_trend where 1=1  {op1} {op2} {op4} {op5}  {op6} 
 """
 
-    sum_sql=f"""select concat(date_format(min(dt),'%Y/%m/%d'),'~',date_format(max(dt),'%Y/%m/%d')) dt,
+    sum_sql = f"""select concat(date_format(min(dt),'%Y/%m/%d'),'~',date_format(max(dt),'%Y/%m/%d')) dt,
 sum(cost) cost,
 sum(first_order_amount) first_order_amount,
 sum(reg_order_amount) reg_order_amount,
@@ -154,28 +167,107 @@ sum(reg_order_user) reg_order_user,
 sum(first_order_user) first_order_user,
 round(sum(cost)/sum(follow_user),2) follow_cost,
 round(sum(cost)/sum(reg_order_user)) order_cost,
-round(sum(cost)/sum(first_order_user)) first_order_cost
+round(sum(cost)/sum(first_order_user)) first_order_cost,
+ concat(sum(da1),',',sum(da1)/sum(cost),',', 0,',',1) d1,
+                concat(sum(da2)-sum(if (da2,da1,0)),',',sum(da2)/sum(if (da2,cost,0)),',', (sum(da2)-sum(if (da2,da1,0)))/sum(if (da2,cost,0)),',',if(sum(if (da2,da1,0))=0,1,sum(da2)/sum(if (da2,da1,0))) ) d2,
+                concat(sum(da3)-sum(if (da3,da2,0)),',',sum(da3)/sum(if (da3,cost,0)),',', (sum(da3)-sum(if (da3,da2,0)))/sum(if (da3,cost,0)),',',if(sum(if (da3,da1,0))=0,1,sum(da3)/sum(if (da3,da1,0))) ) d3,
+                concat(sum(da4)-sum(if (da4,da3,0)),',',sum(da4)/sum(if (da4,cost,0)),',', (sum(da4)-sum(if (da4,da3,0)))/sum(if (da4,cost,0)),',',if(sum(if (da4,da1,0))=0,1,sum(da4)/sum(if (da4,da1,0))) ) d4,
+                concat(sum(da5)-sum(if (da5,da4,0)),',',sum(da5)/sum(if (da5,cost,0)),',', (sum(da5)-sum(if (da5,da4,0)))/sum(if (da5,cost,0)),',',if(sum(if (da5,da1,0))=0,1,sum(da5)/sum(if (da5,da1,0))) ) d5,
+                concat(sum(da6)-sum(if (da6,da5,0)),',',sum(da6)/sum(if (da6,cost,0)),',', (sum(da6)-sum(if (da6,da5,0)))/sum(if (da6,cost,0)),',',if(sum(if (da6,da1,0))=0,1,sum(da6)/sum(if (da6,da1,0))) ) d6,
+                concat(sum(da7)-sum(if (da7,da6,0)),',',sum(da7)/sum(if (da7,cost,0)),',', (sum(da7)-sum(if (da7,da6,0)))/sum(if (da7,cost,0)),',',if(sum(if (da7,da1,0))=0,1,sum(da7)/sum(if (da7,da1,0))) ) d7,
+                concat(sum(da8)-sum(if (da8,da7,0)),',',sum(da8)/sum(if (da8,cost,0)),',', (sum(da8)-sum(if (da8,da7,0)))/sum(if (da8,cost,0)),',',if(sum(if (da8,da1,0))=0,1,sum(da8)/sum(if (da8,da1,0))) ) d8,
+                concat(sum(da9)-sum(if (da9,da8,0)),',',sum(da9)/sum(if (da9,cost,0)),',', (sum(da9)-sum(if (da9,da8,0)))/sum(if (da9,cost,0)),',',if(sum(if (da9,da1,0))=0,1,sum(da9)/sum(if (da9,da1,0))) ) d9,
+                concat(sum(da10)-sum(if (da10,da9,0)),',',sum(da10)/sum(if (da10,cost,0)),',', (sum(da10)-sum(if (da10,da9,0)))/sum(if (da10,cost,0)),',',if(sum(if (da10,da1,0))=0,1,sum(da10)/sum(if (da10,da1,0))) ) d10,
+                concat(sum(da11)-sum(if (da11,da10,0)),',',sum(da11)/sum(if (da11,cost,0)),',', (sum(da11)-sum(if (da11,da10,0)))/sum(if (da11,cost,0)),',',if(sum(if (da11,da1,0))=0,1,sum(da11)/sum(if (da11,da1,0))) ) d11,
+                concat(sum(da12)-sum(if (da12,da11,0)),',',sum(da12)/sum(if (da12,cost,0)),',', (sum(da12)-sum(if (da12,da11,0)))/sum(if (da12,cost,0)),',',if(sum(if (da12,da1,0))=0,1,sum(da12)/sum(if (da12,da1,0))) ) d12,
+                concat(sum(da13)-sum(if (da13,da12,0)),',',sum(da13)/sum(if (da13,cost,0)),',', (sum(da13)-sum(if (da13,da12,0)))/sum(if (da13,cost,0)),',',if(sum(if (da13,da1,0))=0,1,sum(da13)/sum(if (da13,da1,0))) ) d13,
+                concat(sum(da14)-sum(if (da14,da13,0)),',',sum(da14)/sum(if (da14,cost,0)),',', (sum(da14)-sum(if (da14,da13,0)))/sum(if (da14,cost,0)),',',if(sum(if (da14,da1,0))=0,1,sum(da14)/sum(if (da14,da1,0))) ) d14,
+                concat(sum(da15)-sum(if (da15,da14,0)),',',sum(da15)/sum(if (da15,cost,0)),',', (sum(da15)-sum(if (da15,da14,0)))/sum(if (da15,cost,0)),',',if(sum(if (da15,da1,0))=0,1,sum(da15)/sum(if (da15,da1,0))) ) d15,
+                concat(sum(da16)-sum(if (da16,da15,0)),',',sum(da16)/sum(if (da16,cost,0)),',', (sum(da16)-sum(if (da16,da15,0)))/sum(if (da16,cost,0)),',',if(sum(if (da16,da1,0))=0,1,sum(da16)/sum(if (da16,da1,0))) ) d16,
+                concat(sum(da17)-sum(if (da17,da16,0)),',',sum(da17)/sum(if (da17,cost,0)),',', (sum(da17)-sum(if (da17,da16,0)))/sum(if (da17,cost,0)),',',if(sum(if (da17,da1,0))=0,1,sum(da17)/sum(if (da17,da1,0))) ) d17,
+                concat(sum(da18)-sum(if (da18,da17,0)),',',sum(da18)/sum(if (da18,cost,0)),',', (sum(da18)-sum(if (da18,da17,0)))/sum(if (da18,cost,0)),',',if(sum(if (da18,da1,0))=0,1,sum(da18)/sum(if (da18,da1,0))) ) d18,
+                concat(sum(da19)-sum(if (da19,da18,0)),',',sum(da19)/sum(if (da19,cost,0)),',', (sum(da19)-sum(if (da19,da18,0)))/sum(if (da19,cost,0)),',',if(sum(if (da19,da1,0))=0,1,sum(da19)/sum(if (da19,da1,0))) ) d19,
+                concat(sum(da20)-sum(if (da20,da19,0)),',',sum(da20)/sum(if (da20,cost,0)),',', (sum(da20)-sum(if (da20,da19,0)))/sum(if (da20,cost,0)),',',if(sum(if (da20,da1,0))=0,1,sum(da20)/sum(if (da20,da1,0))) ) d20,
+                concat(sum(da21)-sum(if (da21,da20,0)),',',sum(da21)/sum(if (da21,cost,0)),',', (sum(da21)-sum(if (da21,da20,0)))/sum(if (da21,cost,0)),',',if(sum(if (da21,da1,0))=0,1,sum(da21)/sum(if (da21,da1,0))) ) d21,
+                concat(sum(da22)-sum(if (da22,da21,0)),',',sum(da22)/sum(if (da22,cost,0)),',', (sum(da22)-sum(if (da22,da21,0)))/sum(if (da22,cost,0)),',',if(sum(if (da22,da1,0))=0,1,sum(da22)/sum(if (da22,da1,0))) ) d22,
+                concat(sum(da23)-sum(if (da23,da22,0)),',',sum(da23)/sum(if (da23,cost,0)),',', (sum(da23)-sum(if (da23,da22,0)))/sum(if (da23,cost,0)),',',if(sum(if (da23,da1,0))=0,1,sum(da23)/sum(if (da23,da1,0))) ) d23,
+                concat(sum(da24)-sum(if (da24,da23,0)),',',sum(da24)/sum(if (da24,cost,0)),',', (sum(da24)-sum(if (da24,da23,0)))/sum(if (da24,cost,0)),',',if(sum(if (da24,da1,0))=0,1,sum(da24)/sum(if (da24,da1,0))) ) d24,
+                concat(sum(da25)-sum(if (da25,da24,0)),',',sum(da25)/sum(if (da25,cost,0)),',', (sum(da25)-sum(if (da25,da24,0)))/sum(if (da25,cost,0)),',',if(sum(if (da25,da1,0))=0,1,sum(da25)/sum(if (da25,da1,0))) ) d25,
+                concat(sum(da26)-sum(if (da26,da25,0)),',',sum(da26)/sum(if (da26,cost,0)),',', (sum(da26)-sum(if (da26,da25,0)))/sum(if (da26,cost,0)),',',if(sum(if (da26,da1,0))=0,1,sum(da26)/sum(if (da26,da1,0))) ) d26,
+                concat(sum(da27)-sum(if (da27,da26,0)),',',sum(da27)/sum(if (da27,cost,0)),',', (sum(da27)-sum(if (da27,da26,0)))/sum(if (da27,cost,0)),',',if(sum(if (da27,da1,0))=0,1,sum(da27)/sum(if (da27,da1,0))) ) d27,
+                concat(sum(da28)-sum(if (da28,da27,0)),',',sum(da28)/sum(if (da28,cost,0)),',', (sum(da28)-sum(if (da28,da27,0)))/sum(if (da28,cost,0)),',',if(sum(if (da28,da1,0))=0,1,sum(da28)/sum(if (da28,da1,0))) ) d28,
+                concat(sum(da29)-sum(if (da29,da28,0)),',',sum(da29)/sum(if (da29,cost,0)),',', (sum(da29)-sum(if (da29,da28,0)))/sum(if (da29,cost,0)),',',if(sum(if (da29,da1,0))=0,1,sum(da29)/sum(if (da29,da1,0))) ) d29,
+                concat(sum(da30)-sum(if (da30,da29,0)),',',sum(da30)/sum(if (da30,cost,0)),',', (sum(da30)-sum(if (da30,da29,0)))/sum(if (da30,cost,0)),',',if(sum(if (da30,da1,0))=0,1,sum(da30)/sum(if (da30,da1,0))) ) d30,
+                concat(sum(da31)-sum(if (da31,da30,0)),',',sum(da31)/sum(if (da31,cost,0)),',', (sum(da31)-sum(if (da31,da30,0)))/sum(if (da31,cost,0)),',',if(sum(if (da31,da1,0))=0,1,sum(da31)/sum(if (da31,da1,0))) ) d31,
+                concat(sum(da32)-sum(if (da32,da31,0)),',',sum(da32)/sum(if (da32,cost,0)),',', (sum(da32)-sum(if (da32,da31,0)))/sum(if (da32,cost,0)),',',if(sum(if (da32,da1,0))=0,1,sum(da32)/sum(if (da32,da1,0))) ) d32,
+                concat(sum(da33)-sum(if (da33,da32,0)),',',sum(da33)/sum(if (da33,cost,0)),',', (sum(da33)-sum(if (da33,da32,0)))/sum(if (da33,cost,0)),',',if(sum(if (da33,da1,0))=0,1,sum(da33)/sum(if (da33,da1,0))) ) d33,
+                concat(sum(da34)-sum(if (da34,da33,0)),',',sum(da34)/sum(if (da34,cost,0)),',', (sum(da34)-sum(if (da34,da33,0)))/sum(if (da34,cost,0)),',',if(sum(if (da34,da1,0))=0,1,sum(da34)/sum(if (da34,da1,0))) ) d34,
+                concat(sum(da35)-sum(if (da35,da34,0)),',',sum(da35)/sum(if (da35,cost,0)),',', (sum(da35)-sum(if (da35,da34,0)))/sum(if (da35,cost,0)),',',if(sum(if (da35,da1,0))=0,1,sum(da35)/sum(if (da35,da1,0))) ) d35,
+                concat(sum(da36)-sum(if (da36,da35,0)),',',sum(da36)/sum(if (da36,cost,0)),',', (sum(da36)-sum(if (da36,da35,0)))/sum(if (da36,cost,0)),',',if(sum(if (da36,da1,0))=0,1,sum(da36)/sum(if (da36,da1,0))) ) d36,
+                concat(sum(da37)-sum(if (da37,da36,0)),',',sum(da37)/sum(if (da37,cost,0)),',', (sum(da37)-sum(if (da37,da36,0)))/sum(if (da37,cost,0)),',',if(sum(if (da37,da1,0))=0,1,sum(da37)/sum(if (da37,da1,0))) ) d37,
+                concat(sum(da38)-sum(if (da38,da37,0)),',',sum(da38)/sum(if (da38,cost,0)),',', (sum(da38)-sum(if (da38,da37,0)))/sum(if (da38,cost,0)),',',if(sum(if (da38,da1,0))=0,1,sum(da38)/sum(if (da38,da1,0))) ) d38,
+                concat(sum(da39)-sum(if (da39,da38,0)),',',sum(da39)/sum(if (da39,cost,0)),',', (sum(da39)-sum(if (da39,da38,0)))/sum(if (da39,cost,0)),',',if(sum(if (da39,da1,0))=0,1,sum(da39)/sum(if (da39,da1,0))) ) d39,
+                concat(sum(da40)-sum(if (da40,da39,0)),',',sum(da40)/sum(if (da40,cost,0)),',', (sum(da40)-sum(if (da40,da39,0)))/sum(if (da40,cost,0)),',',if(sum(if (da40,da1,0))=0,1,sum(da40)/sum(if (da40,da1,0))) ) d40,
+                concat(sum(da41)-sum(if (da41,da40,0)),',',sum(da41)/sum(if (da41,cost,0)),',', (sum(da41)-sum(if (da41,da40,0)))/sum(if (da41,cost,0)),',',if(sum(if (da41,da1,0))=0,1,sum(da41)/sum(if (da41,da1,0))) ) d41,
+                concat(sum(da42)-sum(if (da42,da41,0)),',',sum(da42)/sum(if (da42,cost,0)),',', (sum(da42)-sum(if (da42,da41,0)))/sum(if (da42,cost,0)),',',if(sum(if (da42,da1,0))=0,1,sum(da42)/sum(if (da42,da1,0))) ) d42,
+                concat(sum(da43)-sum(if (da43,da42,0)),',',sum(da43)/sum(if (da43,cost,0)),',', (sum(da43)-sum(if (da43,da42,0)))/sum(if (da43,cost,0)),',',if(sum(if (da43,da1,0))=0,1,sum(da43)/sum(if (da43,da1,0))) ) d43,
+                concat(sum(da44)-sum(if (da44,da43,0)),',',sum(da44)/sum(if (da44,cost,0)),',', (sum(da44)-sum(if (da44,da43,0)))/sum(if (da44,cost,0)),',',if(sum(if (da44,da1,0))=0,1,sum(da44)/sum(if (da44,da1,0))) ) d44,
+                concat(sum(da45)-sum(if (da45,da44,0)),',',sum(da45)/sum(if (da45,cost,0)),',', (sum(da45)-sum(if (da45,da44,0)))/sum(if (da45,cost,0)),',',if(sum(if (da45,da1,0))=0,1,sum(da45)/sum(if (da45,da1,0))) ) d45,
+                concat(sum(da46)-sum(if (da46,da45,0)),',',sum(da46)/sum(if (da46,cost,0)),',', (sum(da46)-sum(if (da46,da45,0)))/sum(if (da46,cost,0)),',',if(sum(if (da46,da1,0))=0,1,sum(da46)/sum(if (da46,da1,0))) ) d46,
+                concat(sum(da47)-sum(if (da47,da46,0)),',',sum(da47)/sum(if (da47,cost,0)),',', (sum(da47)-sum(if (da47,da46,0)))/sum(if (da47,cost,0)),',',if(sum(if (da47,da1,0))=0,1,sum(da47)/sum(if (da47,da1,0))) ) d47,
+                concat(sum(da48)-sum(if (da48,da47,0)),',',sum(da48)/sum(if (da48,cost,0)),',', (sum(da48)-sum(if (da48,da47,0)))/sum(if (da48,cost,0)),',',if(sum(if (da48,da1,0))=0,1,sum(da48)/sum(if (da48,da1,0))) ) d48,
+                concat(sum(da49)-sum(if (da49,da48,0)),',',sum(da49)/sum(if (da49,cost,0)),',', (sum(da49)-sum(if (da49,da48,0)))/sum(if (da49,cost,0)),',',if(sum(if (da49,da1,0))=0,1,sum(da49)/sum(if (da49,da1,0))) ) d49,
+                concat(sum(da50)-sum(if (da50,da49,0)),',',sum(da50)/sum(if (da50,cost,0)),',', (sum(da50)-sum(if (da50,da49,0)))/sum(if (da50,cost,0)),',',if(sum(if (da50,da1,0))=0,1,sum(da50)/sum(if (da50,da1,0))) ) d50,
+                concat(sum(da51)-sum(if (da51,da50,0)),',',sum(da51)/sum(if (da51,cost,0)),',', (sum(da51)-sum(if (da51,da50,0)))/sum(if (da51,cost,0)),',',if(sum(if (da51,da1,0))=0,1,sum(da51)/sum(if (da51,da1,0))) ) d51,
+                concat(sum(da52)-sum(if (da52,da51,0)),',',sum(da52)/sum(if (da52,cost,0)),',', (sum(da52)-sum(if (da52,da51,0)))/sum(if (da52,cost,0)),',',if(sum(if (da52,da1,0))=0,1,sum(da52)/sum(if (da52,da1,0))) ) d52,
+                concat(sum(da53)-sum(if (da53,da52,0)),',',sum(da53)/sum(if (da53,cost,0)),',', (sum(da53)-sum(if (da53,da52,0)))/sum(if (da53,cost,0)),',',if(sum(if (da53,da1,0))=0,1,sum(da53)/sum(if (da53,da1,0))) ) d53,
+                concat(sum(da54)-sum(if (da54,da53,0)),',',sum(da54)/sum(if (da54,cost,0)),',', (sum(da54)-sum(if (da54,da53,0)))/sum(if (da54,cost,0)),',',if(sum(if (da54,da1,0))=0,1,sum(da54)/sum(if (da54,da1,0))) ) d54,
+                concat(sum(da55)-sum(if (da55,da54,0)),',',sum(da55)/sum(if (da55,cost,0)),',', (sum(da55)-sum(if (da55,da54,0)))/sum(if (da55,cost,0)),',',if(sum(if (da55,da1,0))=0,1,sum(da55)/sum(if (da55,da1,0))) ) d55,
+                concat(sum(da56)-sum(if (da56,da55,0)),',',sum(da56)/sum(if (da56,cost,0)),',', (sum(da56)-sum(if (da56,da55,0)))/sum(if (da56,cost,0)),',',if(sum(if (da56,da1,0))=0,1,sum(da56)/sum(if (da56,da1,0))) ) d56,
+                concat(sum(da57)-sum(if (da57,da56,0)),',',sum(da57)/sum(if (da57,cost,0)),',', (sum(da57)-sum(if (da57,da56,0)))/sum(if (da57,cost,0)),',',if(sum(if (da57,da1,0))=0,1,sum(da57)/sum(if (da57,da1,0))) ) d57,
+                concat(sum(da58)-sum(if (da58,da57,0)),',',sum(da58)/sum(if (da58,cost,0)),',', (sum(da58)-sum(if (da58,da57,0)))/sum(if (da58,cost,0)),',',if(sum(if (da58,da1,0))=0,1,sum(da58)/sum(if (da58,da1,0))) ) d58,
+                concat(sum(da59)-sum(if (da59,da58,0)),',',sum(da59)/sum(if (da59,cost,0)),',', (sum(da59)-sum(if (da59,da58,0)))/sum(if (da59,cost,0)),',',if(sum(if (da59,da1,0))=0,1,sum(da59)/sum(if (da59,da1,0))) ) d59,
+                concat(sum(da60)-sum(if (da60,da59,0)),',',sum(da60)/sum(if (da60,cost,0)),',', (sum(da60)-sum(if (da60,da59,0)))/sum(if (da60,cost,0)),',',if(sum(if (da60,da1,0))=0,1,sum(da60)/sum(if (da60,da1,0))) ) d60,
+                concat(sum(dm3)-sum(if (dm3,da60,0)) ,',' ,sum(dm3)/sum(if(dm3,cost,0)) ,',', (sum(dm3)-sum(if (dm3,da60,0)))/sum(if(dm3,cost,0)) ,',' ,if(sum(if(dm3,da1,0))=0,1,sum(dm3)/sum(if(dm3,da1,0))) ) m3,
+                concat(sum(dm4)-sum(if (dm4,dm3,0)),',',sum(dm4)/sum(if (dm4,cost,0)),',', (sum(dm4)-sum(if (dm4,dm3,0)))/sum(if (dm4,cost,0)),',',if(sum(if (dm4,da1,0))=0,1,sum(dm4)/sum(if (dm4,da1,0))) ) m4,
+                concat(sum(dm5)-sum(if (dm5,dm4,0)),',',sum(dm5)/sum(if (dm5,cost,0)),',', (sum(dm5)-sum(if (dm5,dm4,0)))/sum(if (dm5,cost,0)),',',if(sum(if (dm5,da1,0))=0,1,sum(dm5)/sum(if (dm5,da1,0))) ) m5
+
 from ({sql}) a
 """
 
     data, total, total_data = getLimitSumData(db.dm, sql, sum_sql, page, page_size)
 
-    def parse(str):
-        li=str.split(',')
-        li[0]=round(float(li[0]),2)
-        li[1]=round(float(li[1]),4)
-        li[2]=round(float(li[2]),4)
-        li[3]=round(float(li[3]),2)
-        return dict(zip(['amount','add','roi','mult'],li))
+    def parse(key_str):
+        if type(key_str) is not str:
+            key_str = key_str.decode('utf-8')
+        li = key_str.split(',')
+        li[0] = round(float(li[0]), 2)
+        li[1] = round(float(li[1]), 4)
+        li[2] = round(float(li[2]), 4)
+        li[3] = round(float(li[3]), 2)
+        return dict(zip(['amount', 'add', 'roi', 'mult'], li))
+
+    for k, v in total_data.items():
+        if k 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', 'd31', 'd32',
+                 'd33', 'd34', 'd35', 'd36', 'd37', 'd38',
+                 'd39', 'd40', 'd41', 'd42', 'd43', 'd44', 'd45', 'd46', 'd47', 'd48', 'd49', 'd50', 'd51', 'd52',
+                 'd53', 'd54', 'd55', 'd56', 'd57', 'd58', 'd59',
+                 'd60', 'm3', 'm4', 'm5']:
+            total_data[k] = parse(v) if v else {}
 
     # print(data)
     for i in data:
-        for k,v in i.items():
-            if k 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','d31','d32','d33','d34','d35','d36','d37','d38',
-         'd39','d40','d41','d42','d43','d44','d45','d46','d47','d48','d49','d50','d51','d52','d53','d54','d55','d56','d57','d58','d59',
-         'd60','m3','m4','m5']:
-                i[k]= parse(v) if v else {}
+        for k, v in i.items():
+            if k 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', 'd31', 'd32',
+                     'd33', 'd34', 'd35', 'd36', 'd37', 'd38',
+                     'd39', 'd40', 'd41', 'd42', 'd43', 'd44', 'd45', 'd46', 'd47', 'd48', 'd49', 'd50', 'd51', 'd52',
+                     'd53', 'd54', 'd55', 'd56', 'd57', 'd58', 'd59',
+                     'd60', 'm3', 'm4', 'm5']:
+                i[k] = parse(v) if v else {}
 
     return data, total, total_data
 
@@ -307,8 +399,7 @@ concat(sum(m5-m4),',',sum(m5-m4)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 148 da
     return data, total
 
 
-
-def pitcher_overview(user_id,start, end, pitcher, page, page_size, order_by, order):
+def pitcher_overview(user_id, start, end, pitcher, page, page_size, order_by, order):
     if user_id in super_auth():
         op = ''
     else:
@@ -324,7 +415,7 @@ def pitcher_overview(user_id,start, end, pitcher, page, page_size, order_by, ord
 
     db = MysqlUtils()
 
-    sql=f""" select pitcher,
+    sql = f""" select pitcher,
                 DATE_FORMAT(min(dt),'%Y%m%d') start_date,
                 DATE_FORMAT(max(dt),'%Y%m%d') end_date,
                 sum(cost) cost,
@@ -354,7 +445,7 @@ def pitcher_overview(user_id,start, end, pitcher, page, page_size, order_by, ord
     from dw_pitcher_trend where cost>0 and pitcher!='' {op} {op1} {op2} {op3} group by pitcher {op4}
     """
 
-    sum_sql=f"""select '总计' as pitcher,
+    sum_sql = f"""select '总计' as pitcher,
                 sum(cost) cost,
                 sum(amount) amount,
                 sum(first_amount) first_amount,
@@ -381,13 +472,10 @@ def pitcher_overview(user_id,start, end, pitcher, page, page_size, order_by, ord
                 sum(byd_amount) byd_amount from ({sql}) a
 """
 
-    return getLimitSumDataV2(db.dm, sql,sum_sql, page, page_size)
+    return getLimitSumDataV2(db.dm, sql, sum_sql, page, page_size)
 
 
-
-
-def boss_panel_summary(user_id,start,end,channel,pitcher, type, stage, page, page_size, order_by, order):
-
+def boss_panel_summary(user_id, start, end, channel, pitcher, type, stage, page, page_size, order_by, order):
     if user_id in super_auth():
         op = ''
     else:
@@ -403,13 +491,13 @@ def boss_panel_summary(user_id,start,end,channel,pitcher, type, stage, page, pag
     op2 = f" and dt>='{start}' " if start else ''
     op3 = f" and dt<='{end}' " if end else ''
     op4 = f" and type='{type}' " if type else ''
-    op5= f" and stage='{stage}' " if stage else ''
+    op5 = f" and stage='{stage}' " if stage else ''
     op6 = f" and channel='{channel}' " if channel else ''
     op7 = f" order by {order_by} {order}" if order_by and order else 'order by dt desc'
 
     dm = MysqlUtils().dm
 
-    sql=f"""select sum(order_amount) order_amount,sum(cost) cost,round(sum(reg_order_amount)/sum(cost),4) roi,dt from dw_channel                                                                                                                                                                                                                                                                                                                                             
+    sql = f"""select sum(order_amount) order_amount,sum(cost) cost,round(sum(reg_order_amount)/sum(cost),4) roi,dt from dw_channel                                                                                                                                                                                                                                                                                                                                             
     where 1=1 {op} {op1} {op2} {op3} {op4} {op5} {op6}
     GROUP BY dt HAVING order_amount+cost>0 {op7} """
     # print(sql)
@@ -417,7 +505,7 @@ def boss_panel_summary(user_id,start,end,channel,pitcher, type, stage, page, pag
     return getLimitData(dm, sql, page, page_size)
 
 
-def image_rank(start, end, type,book, page, page_size, order_by, order):
+def image_rank(start, end, type, book, page, page_size, order_by, order):
     op1 = f" and book='{book}' " if book else ''
     op2 = f" and dt>='{start}' " if start else ''
     op3 = f" and dt<='{end}' " if end else ''
@@ -426,7 +514,7 @@ def image_rank(start, end, type,book, page, page_size, order_by, order):
 
     db = MysqlUtils().quchen_text
 
-    sql =f"""select preview_url,
+    sql = f"""select preview_url,
             sum(cost),
             round(sum(click_count)/sum(view_count),4) ctr,
             round(sum(cost)/sum(click_count),2) cpc
@@ -437,28 +525,31 @@ def image_rank(start, end, type,book, page, page_size, order_by, order):
 
 
 """广告排行榜"""
-def advertisement_rank(user_id,start,end,type,page,page_size,order,order_by,book,channel,pitcher,has_order,is_video):
+
+
+def advertisement_rank(user_id, start, end, type, page, page_size, order, order_by, book, channel, pitcher, has_order,
+                       is_video):
     if user_id in super_auth():
         op1 = ''
     else:
         user = tuple([i['nick_name'] for i in get_pitcher({'user_id': user_id})] + [get_user_name_by_id(user_id)])
-        if len(user)==1:
+        if len(user) == 1:
             op1 = f" and pitcher ='{user[0]}'"
         else:
             op1 = f" and pitcher in {str(user)}"
 
-    op2=f" and dt>='{start}' " if start else ''
-    op3=f" and dt<='{end}' " if end else ''
+    op2 = f" and dt>='{start}' " if start else ''
+    op3 = f" and dt<='{end}' " if end else ''
     op4 = f" and channel='{channel}'" if channel else ''
     op5 = f" and pitcher ='{pitcher}' " if pitcher else ''
-    op8=f" and type='{type}'" if type else ''
-    op9=f" order by {order_by} {order}" if order_by and order else ''
-    op10=f" and book='{book}'" if book else ''
-    op11 =f" and order_count>0" if has_order else ''
-    op12 =f" and is_video" if is_video else ''
-    db =MysqlUtils().dm
-
-    sql=f"""select 
+    op8 = f" and type='{type}'" if type else ''
+    op9 = f" order by {order_by} {order}" if order_by and order else ''
+    op10 = f" and book='{book}'" if book else ''
+    op11 = f" and order_count>0" if has_order else ''
+    op12 = f" and is_video" if is_video else ''
+    db = MysqlUtils().dm
+
+    sql = f"""select 
     row_number () over() as id,
     dt,stage,platform,book,`type`, cost,channel,pitcher,
     view_count,
@@ -501,7 +592,8 @@ def advertisement_rank(user_id,start,end,type,page,page_size,order,order_by,book
                       round(sum(order_amount)/sum(cost),4) ROI
                       from ({sql}) a 
       """
-    return getLimitSumData(db,sql,sum_sql, page, page_size)
+    return getLimitSumData(db, sql, sum_sql, page, page_size)
+
 
 if __name__ == '__main__':
-    print(get_pitcher({"user_id":78}))
+    print(get_pitcher({"user_id": 78}))

+ 44 - 41
handlers/PublicAnalysisHandler.py

@@ -4,6 +4,7 @@ from data_manage.public_analysis import *
 import time
 from model.DateUtils import DateUtils
 from data_manage.operate import get_user_name_by_id
+
 log = logger()
 
 
@@ -14,17 +15,17 @@ class BookRank(BaseHandler):
         else:
             arg = self.get_args()
             print(arg)
-            start=arg.get("start",self.thisday)
-            end=arg.get("end",self.thisday)
-            book=arg.get("book")
-            stage=arg.get("stage")
-            type=arg.get("type")
-            page = arg.get("page",1)
-            page_size = arg.get("page_size",30)
+            start = arg.get("start", self.thisday)
+            end = arg.get("end", self.thisday)
+            book = arg.get("book")
+            stage = arg.get("stage")
+            type = arg.get("type")
+            page = arg.get("page", 1)
+            page_size = arg.get("page_size", 30)
             order_by = arg.get("order_by", 'cost')
             order = arg.get("order", 'desc')
-            data,total=book_rank(start,end,book,stage,type,page,page_size,order_by,order)
-            self.write_json(data=data,total=total)
+            data, total = book_rank(start, end, book, stage, type, page, page_size, order_by, order)
+            self.write_json(data=data, total=total)
 
 
 class BookTrend(BaseHandler):
@@ -34,21 +35,21 @@ class BookTrend(BaseHandler):
         else:
             arg = self.get_args()
             print(arg)
-            start=arg.get("start",self.get_n_days(-29))
-            end=arg.get("end",)
-            date_range=arg.get("date_range")
-            book=arg.get("book")
-            type=arg.get("type")
-            platform=arg.get("platform")
-            page = arg.get("page",1)
-            page_size = arg.get("page_size",30)
+            start = arg.get("start", self.get_n_days(-29))
+            end = arg.get("end", )
+            date_range = arg.get("date_range")
+            book = arg.get("book")
+            book_type = arg.get("type")
+            platform = arg.get("platform")
+            page = arg.get("page", 1)
+            page_size = arg.get("page_size", 30)
             order_by = arg.get("order_by", 'dt')
             order = arg.get("order", 'desc')
             if date_range:
-                end=self.get_n_days(0)
-                start=self.get_n_days(-int(date_range)+1)
-            data,total,total_data=book_trend(start,end,book,type,platform,page,page_size,order_by,order)
-            self.write_json(data=data,total=total,total_data=total_data)
+                end = self.get_n_days(0)
+                start = self.get_n_days(-int(date_range) + 1)
+            data, total, total_data = book_trend(start, end, book, book_type, platform, page, page_size, order_by, order)
+            self.write_json(data=data, total=total, total_data=total_data)
 
 
 class BookOverview(BaseHandler):
@@ -59,7 +60,7 @@ class BookOverview(BaseHandler):
             arg = self.get_args()
             print(arg)
             start = arg.get("start")
-            end = arg.get("end",)
+            end = arg.get("end", )
             book = arg.get("book")
             type = arg.get("type")
             page = arg.get("page")
@@ -69,7 +70,7 @@ class BookOverview(BaseHandler):
             order = arg.get("order", 'desc')
             if date_range:
                 end = self.get_n_days(0)
-                start = self.get_n_days(-int(date_range)+1)
+                start = self.get_n_days(-int(date_range) + 1)
             data, total = book_overview(start, end, book, type, page, page_size, order_by, order)
             if arg.get("download"):
                 self.write_download(str(int(time.time())), data)
@@ -93,7 +94,7 @@ class PitcherOverview(BaseHandler):
                 order = arg.get("order", 'desc')
                 pitcher = arg.get("pitcher")
 
-                data, total = pitcher_overview(user_id,start, end, pitcher, page, page_size, order_by, order)
+                data, total = pitcher_overview(user_id, start, end, pitcher, page, page_size, order_by, order)
                 if arg.get("download"):
                     self.write_download(str(int(time.time())), data)
                 self.write_json(data=data, total=total)
@@ -110,24 +111,25 @@ class BossPanelSummary(BaseHandler):
             arg = self.get_args()
             print(arg)
             user_id = arg.get("user_id")
-            start = arg.get("start",self.get_n_days(-30))
+            start = arg.get("start", self.get_n_days(-30))
             end = arg.get("end")
             page = arg.get("page")
             page_size = arg.get("page_size")
-            order_by = arg.get("order_by",'dt')
-            order = arg.get("order",'desc')
+            order_by = arg.get("order_by", 'dt')
+            order = arg.get("order", 'desc')
             pitcher = arg.get("pitcher")
             type = arg.get("type")
             stage = arg.get("stage")
             channel = arg.get("channel")
 
             download = arg.get("download")
-            data, total = boss_panel_summary(user_id,start, end,channel, pitcher, type,
+            data, total = boss_panel_summary(user_id, start, end, channel, pitcher, type,
                                              stage, page, page_size, order_by, order)
             if download:
                 self.write_download(str(int(time.time())), data)
             self.write_json(data=data, total=total)
 
+
 class ImageRank(BaseHandler):
     def post(self):
         if not self._au:
@@ -136,19 +138,19 @@ class ImageRank(BaseHandler):
             arg = self.get_args()
             start = arg.get("start")
             end = arg.get("end")
-            page = arg.get("page",1)
-            page_size = arg.get("page_size",10)
-            order_by = arg.get("order_by",'cost')
-            order = arg.get("order",'desc')
+            page = arg.get("page", 1)
+            page_size = arg.get("page_size", 10)
+            order_by = arg.get("order_by", 'cost')
+            order = arg.get("order", 'desc')
             type = arg.get("type")
             book = arg.get('book')
-            data, total = image_rank(start, end, type,book, page, page_size, order_by, order)
+            data, total = image_rank(start, end, type, book, page, page_size, order_by, order)
             self.write_json(data=data, total=total)
 
 
+"""素材排行榜"""
 
 
-"""素材排行榜"""
 class AdvertisementRank(BaseHandler):
     def post(self):
         if not self._au:
@@ -157,17 +159,18 @@ class AdvertisementRank(BaseHandler):
             du = DateUtils()
             arg = self.get_args()
             user_id = arg.get('user_id')
-            start = arg.get("start",du.getNow())
+            start = arg.get("start", du.getNow())
             end = arg.get("end")
-            page = arg.get("page",1)
+            page = arg.get("page", 1)
             page_size = arg.get("page_size")
             order_by = arg.get("order_by", 'cost')
             order = arg.get("order", 'desc')
-            type =arg.get("type")
-            book =arg.get("book")
-            channel =arg.get('channel')
+            type = arg.get("type")
+            book = arg.get("book")
+            channel = arg.get('channel')
             pitcher = arg.get('pitcher')
             has_order = arg.get("has_order")
             is_video = arg.get('is_video')
-            data, total,total_data = advertisement_rank(user_id,start, end, type,page,page_size,order,order_by,book,channel,pitcher,has_order,is_video)
-            self.write_json(data=data, total=total,total_data=total_data)
+            data, total, total_data = advertisement_rank(user_id, start, end, type, page, page_size, order, order_by,
+                                                         book, channel, pitcher, has_order, is_video)
+            self.write_json(data=data, total=total, total_data=total_data)