public_analysis.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. from model.DateUtils import DateUtils
  2. from model.DataBaseUtils import *
  3. from model.log import logger
  4. from model.CommonUtils import *
  5. du = DateUtils()
  6. log = logger()
  7. def book_rank(start,end,book,stage,page,page_size,order_by,order):
  8. db=MysqlUtils()
  9. op1=f" and book='{book}'" if book else ''
  10. op2 = f" and dt>='{start}' " if start else ''
  11. op3 = f" and dt<='{end}' " if end else ''
  12. op4 = f" order by {order_by} {order}" if order_by and order else ''
  13. op5=f" and stage='{stage}'" if stage else ''
  14. sql=f"""select
  15. concat(DATE_FORMAT(min(dt),'%Y/%m/%d') ,'~',DATE_FORMAT(max(dt),'%Y/%m/%d')) date,
  16. pitcher,book,stage,
  17. sum(cost) cost,
  18. sum(view_count) view_count,
  19. sum(click_count) click_count,
  20. round(sum(click_count)/sum(view_count),4) click_rate,
  21. round(sum(cost)*1000/sum(view_count),2) thousand_view_cost,
  22. sum(reg_order_user) reg_user,
  23. sum(reg_order_count) reg_count,
  24. sum(first_order_amount) first_amount,
  25. sum(reg_order_amount) reg_amount,
  26. round(sum(first_order_amount)/sum(cost),4) first_roi,
  27. round(sum(reg_order_amount)/sum(cost),4) roi
  28. from dw_channel where 1=1 {op1} {op2} {op3} {op5} GROUP BY channel,book,pitcher,stage
  29. {op4}"""
  30. print(sql)
  31. return getLimitData(db.dm,sql,page,page_size)
  32. def book_trend(start,end,book,type,platform,page,page_size,order_by,order):
  33. op1 = f" and book='{book}'" if book else ''
  34. op2 = f" and type='{type}' " if type else ''
  35. op3 = f" and platform='{platform}' " if platform else ''
  36. op4 = f" and dt>='{start}' " if start else ''
  37. op5 = f" and dt<='{end}' " if end else ''
  38. op6 = f" order by {order_by} {order}" if order_by and order else ''
  39. db=MysqlUtils()
  40. sql=f"""
  41. select dt,book,type,platform,cost,first_order_amount,reg_order_amount,
  42. round(first_order_amount/cost,4) first_roi,
  43. a7,a30,
  44. round(a7/cost,4) roi7,
  45. round(a30/cost,4) roi30,
  46. round(reg_order_amount/cost,4) roi,
  47. order_amount,
  48. reg_order_amount-cost profit,
  49. round(click_count/view_count,4) click_rate,
  50. round(follow_user/click_count,4) follow_rate,
  51. round(first_order_user/click_count,4) first_order_rate,
  52. view_count,
  53. click_count,
  54. follow_user,
  55. reg_order_user,
  56. first_order_user,
  57. round(cost/follow_user,2) follow_cost,
  58. round(cost/reg_order_user) order_cost,
  59. round(cost/first_order_user) first_order_cost,
  60. concat(a1,',',0,',',a1/cost) d1,
  61. concat(a2-a1,',',(a2-a1)/cost,',',a2/cost) d2,
  62. concat(a3-a2,',',(a3-a2)/cost,',',a3/cost) d3,
  63. concat(a4-a3,',',(a4-a3)/cost,',',a4/cost) d4,
  64. concat(a5-a4,',',(a5-a4)/cost,',',a5/cost) d5,
  65. concat(a6-a5,',',(a6-a5)/cost,',',a6/cost) d6,
  66. concat(a7-a6,',',(a7-a6)/cost,',',a7/cost) d7,
  67. concat(a8-a7,',',(a8-a7)/cost,',',a8/cost) d8,
  68. concat(a9-a8,',',(a9-a8)/cost,',',a9/cost) d9,
  69. concat(a10-a9,',',(a10-a9)/cost,',',a10/cost) d10,
  70. concat(a11-a10,',',(a11-a10)/cost,',',a11/cost) d11,
  71. concat(a12-a11,',',(a12-a11)/cost,',',a12/cost) d12,
  72. concat(a13-a12,',',(a13-a12)/cost,',',a13/cost) d13,
  73. concat(a14-a13,',',(a14-a13)/cost,',',a14/cost) d14,
  74. concat(a15-a14,',',(a15-a14)/cost,',',a15/cost) d15,
  75. concat(a16-a15,',',(a16-a15)/cost,',',a16/cost) d16,
  76. concat(a17-a16,',',(a17-a16)/cost,',',a17/cost) d17,
  77. concat(a18-a17,',',(a18-a17)/cost,',',a18/cost) d18,
  78. concat(a19-a18,',',(a19-a18)/cost,',',a19/cost) d19,
  79. concat(a20-a19,',',(a20-a19)/cost,',',a20/cost) d20,
  80. concat(a21-a20,',',(a21-a20)/cost,',',a21/cost) d21,
  81. concat(a22-a21,',',(a22-a21)/cost,',',a22/cost) d22,
  82. concat(a23-a22,',',(a23-a22)/cost,',',a23/cost) d23,
  83. concat(a24-a23,',',(a24-a23)/cost,',',a24/cost) d24,
  84. concat(a25-a24,',',(a25-a24)/cost,',',a25/cost) d25,
  85. concat(a26-a25,',',(a26-a25)/cost,',',a26/cost) d26,
  86. concat(a27-a26,',',(a27-a26)/cost,',',a27/cost) d27,
  87. concat(a28-a27,',',(a28-a27)/cost,',',a28/cost) d28,
  88. concat(a29-a28,',',(a29-a28)/cost,',',a29/cost) d29,
  89. concat(a30-a29,',',(a30-a29)/cost,',',a30/cost) d30,
  90. concat(a31-a30,',',(a31-a30)/cost,',',a31/cost) d31,
  91. concat(a32-a31,',',(a32-a31)/cost,',',a32/cost) d32,
  92. concat(a33-a32,',',(a33-a32)/cost,',',a33/cost) d33,
  93. concat(a34-a33,',',(a34-a33)/cost,',',a34/cost) d34,
  94. concat(a35-a34,',',(a35-a34)/cost,',',a35/cost) d35,
  95. concat(a36-a35,',',(a36-a35)/cost,',',a36/cost) d36,
  96. concat(a37-a36,',',(a37-a36)/cost,',',a37/cost) d37,
  97. concat(a38-a37,',',(a38-a37)/cost,',',a38/cost) d38,
  98. concat(a39-a38,',',(a39-a38)/cost,',',a39/cost) d39,
  99. concat(a40-a39,',',(a40-a39)/cost,',',a40/cost) d40,
  100. concat(a41-a40,',',(a41-a40)/cost,',',a41/cost) d41,
  101. concat(a42-a41,',',(a42-a41)/cost,',',a42/cost) d42,
  102. concat(a43-a42,',',(a43-a42)/cost,',',a43/cost) d43,
  103. concat(a44-a43,',',(a44-a43)/cost,',',a44/cost) d44,
  104. concat(a45-a44,',',(a45-a44)/cost,',',a45/cost) d45,
  105. concat(a46-a45,',',(a46-a45)/cost,',',a46/cost) d46,
  106. concat(a47-a46,',',(a47-a46)/cost,',',a47/cost) d47,
  107. concat(a48-a47,',',(a48-a47)/cost,',',a48/cost) d48,
  108. concat(a49-a48,',',(a49-a48)/cost,',',a49/cost) d49,
  109. concat(a50-a49,',',(a50-a49)/cost,',',a50/cost) d50,
  110. concat(a51-a50,',',(a51-a50)/cost,',',a51/cost) d51,
  111. concat(a52-a51,',',(a52-a51)/cost,',',a52/cost) d52,
  112. concat(a53-a52,',',(a53-a52)/cost,',',a53/cost) d53,
  113. concat(a54-a53,',',(a54-a53)/cost,',',a54/cost) d54,
  114. concat(a55-a54,',',(a55-a54)/cost,',',a55/cost) d55,
  115. concat(a56-a55,',',(a56-a55)/cost,',',a56/cost) d56,
  116. concat(a57-a56,',',(a57-a56)/cost,',',a57/cost) d57,
  117. concat(a58-a57,',',(a58-a57)/cost,',',a58/cost) d58,
  118. concat(a59-a58,',',(a59-a58)/cost,',',a59/cost) d59,
  119. concat(a60-a59,',',(a60-a59)/cost,',',a60/cost) d60,
  120. concat(m3-a60,',',(m3-a60)/cost,',',m3/cost) m3,
  121. concat(m4-m3,',',(m4-m3)/cost,',',m4/cost) m4,
  122. concat(m5-m4,',',(m5-m4)/cost,',',m5/cost) m5
  123. from book_trend where 1=1 {op1} {op2} {op3} {op4} {op5} {op6}
  124. """
  125. sum_sql=f"""select concat(date_format(min(dt),'%Y/%m/%d'),'~',date_format(max(dt),'%Y/%m/%d')) dt,
  126. sum(cost) cost,
  127. sum(first_order_amount) first_order_amount,
  128. sum(reg_order_amount) reg_order_amount,
  129. round(sum(first_order_amount)/sum(cost),4) first_roi,
  130. round(sum(a7)/sum(cost),4) roi7,
  131. round(sum(a30)/sum(cost),4) roi30,
  132. round(sum(reg_order_amount)/sum(cost),4) roi,
  133. sum(order_amount) order_amount,
  134. sum(reg_order_amount-cost) profit,
  135. round(sum(click_count)/sum(view_count),4) click_rate,
  136. round(sum(follow_user)/sum(click_count),4) follow_rate,
  137. round(sum(first_order_user)/sum(click_count),4) first_order_rate,
  138. sum(view_count) view_count,
  139. sum(click_count) click_count,
  140. sum(follow_user) follow_user,
  141. sum(reg_order_user) reg_order_user,
  142. sum(first_order_user) first_order_user,
  143. round(sum(cost)/sum(follow_user),2) follow_cost,
  144. round(sum(cost)/sum(reg_order_user)) order_cost,
  145. round(sum(cost)/sum(first_order_user)) first_order_cost
  146. from ({sql}) a
  147. """
  148. data,total,total_data=getLimitSumData(db.dm,sql,sum_sql,page,page_size)
  149. def parse(str):
  150. li=str.split(',')
  151. li[0]=round(float(li[0]),2)
  152. li[1]=round(float(li[1]),4)
  153. li[2]=round(float(li[2]),4)
  154. return dict(zip(['amount','add','roi'],li))
  155. # print(data)
  156. for i in data:
  157. for k,v in i.items():
  158. if k in ['d1','d2','d3','d4','d5','d6','d7','d8','d9','d10','d11','d12','d13','d14','d15','d16','d17','d18',
  159. 'd19','d20','d21','d22','d23','d24','d25','d26','d27','d28','d29','d30','d31','d32','d33','d34','d35','d36','d37','d38',
  160. 'd39','d40','d41','d42','d43','d44','d45','d46','d47','d48','d49','d50','d51','d52','d53','d54','d55','d56','d57','d58','d59',
  161. 'd60','m3','m4','m5']:
  162. i[k]= parse(v) if v else {}
  163. return data,total,total_data