public_analysis.py 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942
  1. from model.DateUtils import DateUtils
  2. from model.DataBaseUtils import *
  3. from model.log import logger
  4. from model.CommonUtils import *
  5. from data_manage.operate import get_pitcher, get_user_name_by_id
  6. from model.UserAuthUtils import super_auth
  7. from model import UserAuthUtils
  8. du = DateUtils()
  9. log = logger()
  10. def book_rank(start, end, book, stage, type, page, page_size, order_by, order):
  11. db = MysqlUtils()
  12. op1 = f" and book='{book}'" if book else ''
  13. op2 = f" and dt>='{start}' " if start else ''
  14. op3 = f" and dt<='{end}' " if end else ''
  15. op4 = f" order by {order_by} {order}" if order_by and order else ''
  16. op5 = f" and stage='{stage}'" if stage else ''
  17. op6 = f" and type='{type}'" if type else ''
  18. sql = f"""select
  19. concat(DATE_FORMAT(min(dt),'%Y/%m/%d') ,'~',DATE_FORMAT(max(dt),'%Y/%m/%d')) date,
  20. pitcher,book,stage,type,channel,
  21. sum(cost) cost,
  22. sum(view_count) view_count,
  23. sum(click_count) click_count,
  24. round(sum(click_count)/sum(view_count),4) click_rate,
  25. round(sum(cost)*1000/sum(view_count),2) thousand_view_cost,
  26. sum(reg_order_user) reg_user,
  27. sum(reg_order_count) reg_count,
  28. sum(first_order_amount) first_amount,
  29. sum(reg_order_amount) reg_amount,
  30. round(sum(first_order_amount)/sum(cost),4) first_roi,
  31. round(sum(reg_order_amount)/sum(cost),4) roi
  32. from dw_channel where 1=1 {op1} {op2} {op3} {op5} {op6} GROUP BY channel,book,pitcher,stage,type
  33. {op4}"""
  34. print(sql)
  35. return getLimitData(db.dm, sql, page, page_size)
  36. def book_trend(start, end, book, book_type, platform, page, page_size, order_by, order):
  37. op1 = f" and book='{book}'" if book else ''
  38. op2 = f" and type='{book_type}' " if book_type else ''
  39. # op3 = f" and platform='{platform}' " if platform else ''
  40. op4 = f" and dt>='{start}' " if start else ''
  41. op5 = f" and dt<='{end}' " if end else ''
  42. op6 = f" order by {order_by} {order}" if order_by and order else ''
  43. db = MysqlUtils()
  44. sql = f"""
  45. select dt,book,type,cost,first_order_amount,reg_order_amount,
  46. round(first_order_amount/cost,4) first_roi,
  47. a7,a30,
  48. round(a7/cost,4) roi7,
  49. round(a30/cost,4) roi30,
  50. round(reg_order_amount/cost,4) roi,
  51. order_amount,
  52. reg_order_amount-cost profit,
  53. round(click_count/view_count,4) click_rate,
  54. round(follow_user/click_count,4) follow_rate,
  55. round(first_order_user/click_count,4) first_order_rate,
  56. view_count,
  57. click_count,
  58. follow_user,
  59. reg_order_user,
  60. first_order_user,
  61. round(cost/follow_user,2) follow_cost,
  62. round(cost/reg_order_user,2) order_cost,
  63. round(cost/first_order_user,2) first_order_cost,
  64. concat(a1,',',0,',',a1/cost,',',1) d1,
  65. concat(a2-a1,',',(a2-a1)/cost,',',a2/cost,',',a2/a1) d2,
  66. concat(a3-a2,',',(a3-a2)/cost,',',a3/cost,',',a3/a1) d3,
  67. concat(a4-a3,',',(a4-a3)/cost,',',a4/cost,',',a4/a1) d4,
  68. concat(a5-a4,',',(a5-a4)/cost,',',a5/cost,',',a5/a1) d5,
  69. concat(a6-a5,',',(a6-a5)/cost,',',a6/cost,',',a6/a1) d6,
  70. concat(a7-a6,',',(a7-a6)/cost,',',a7/cost,',',a7/a1) d7,
  71. concat(a8-a7,',',(a8-a7)/cost,',',a8/cost,',',a8/a1) d8,
  72. concat(a9-a8,',',(a9-a8)/cost,',',a9/cost,',',a9/a1) d9,
  73. concat(a10-a9,',',(a10-a9)/cost,',',a10/cost,',',a10/a1) d10,
  74. concat(a11-a10,',',(a11-a10)/cost,',',a11/cost,',',a11/a1) d11,
  75. concat(a12-a11,',',(a12-a11)/cost,',',a12/cost,',',a12/a1) d12,
  76. concat(a13-a12,',',(a13-a12)/cost,',',a13/cost,',',a13/a1) d13,
  77. concat(a14-a13,',',(a14-a13)/cost,',',a14/cost,',',a14/a1) d14,
  78. concat(a15-a14,',',(a15-a14)/cost,',',a15/cost,',',a15/a1) d15,
  79. concat(a16-a15,',',(a16-a15)/cost,',',a16/cost,',',a16/a1) d16,
  80. concat(a17-a16,',',(a17-a16)/cost,',',a17/cost,',',a17/a1) d17,
  81. concat(a18-a17,',',(a18-a17)/cost,',',a18/cost,',',a18/a1) d18,
  82. concat(a19-a18,',',(a19-a18)/cost,',',a19/cost,',',a19/a1) d19,
  83. concat(a20-a19,',',(a20-a19)/cost,',',a20/cost,',',a20/a1) d20,
  84. concat(a21-a20,',',(a21-a20)/cost,',',a21/cost,',',a21/a1) d21,
  85. concat(a22-a21,',',(a22-a21)/cost,',',a22/cost,',',a22/a1) d22,
  86. concat(a23-a22,',',(a23-a22)/cost,',',a23/cost,',',a23/a1) d23,
  87. concat(a24-a23,',',(a24-a23)/cost,',',a24/cost,',',a24/a1) d24,
  88. concat(a25-a24,',',(a25-a24)/cost,',',a25/cost,',',a25/a1) d25,
  89. concat(a26-a25,',',(a26-a25)/cost,',',a26/cost,',',a26/a1) d26,
  90. concat(a27-a26,',',(a27-a26)/cost,',',a27/cost,',',a27/a1) d27,
  91. concat(a28-a27,',',(a28-a27)/cost,',',a28/cost,',',a28/a1) d28,
  92. concat(a29-a28,',',(a29-a28)/cost,',',a29/cost,',',a29/a1) d29,
  93. concat(a30-a29,',',(a30-a29)/cost,',',a30/cost,',',a30/a1) d30,
  94. concat(a31-a30,',',(a31-a30)/cost,',',a31/cost,',',a31/a1) d31,
  95. concat(a32-a31,',',(a32-a31)/cost,',',a32/cost,',',a32/a1) d32,
  96. concat(a33-a32,',',(a33-a32)/cost,',',a33/cost,',',a33/a1) d33,
  97. concat(a34-a33,',',(a34-a33)/cost,',',a34/cost,',',a34/a1) d34,
  98. concat(a35-a34,',',(a35-a34)/cost,',',a35/cost,',',a35/a1) d35,
  99. concat(a36-a35,',',(a36-a35)/cost,',',a36/cost,',',a36/a1) d36,
  100. concat(a37-a36,',',(a37-a36)/cost,',',a37/cost,',',a37/a1) d37,
  101. concat(a38-a37,',',(a38-a37)/cost,',',a38/cost,',',a38/a1) d38,
  102. concat(a39-a38,',',(a39-a38)/cost,',',a39/cost,',',a39/a1) d39,
  103. concat(a40-a39,',',(a40-a39)/cost,',',a40/cost,',',a40/a1) d40,
  104. concat(a41-a40,',',(a41-a40)/cost,',',a41/cost,',',a41/a1) d41,
  105. concat(a42-a41,',',(a42-a41)/cost,',',a42/cost,',',a42/a1) d42,
  106. concat(a43-a42,',',(a43-a42)/cost,',',a43/cost,',',a43/a1) d43,
  107. concat(a44-a43,',',(a44-a43)/cost,',',a44/cost,',',a44/a1) d44,
  108. concat(a45-a44,',',(a45-a44)/cost,',',a45/cost,',',a45/a1) d45,
  109. concat(a46-a45,',',(a46-a45)/cost,',',a46/cost,',',a46/a1) d46,
  110. concat(a47-a46,',',(a47-a46)/cost,',',a47/cost,',',a47/a1) d47,
  111. concat(a48-a47,',',(a48-a47)/cost,',',a48/cost,',',a48/a1) d48,
  112. concat(a49-a48,',',(a49-a48)/cost,',',a49/cost,',',a49/a1) d49,
  113. concat(a50-a49,',',(a50-a49)/cost,',',a50/cost,',',a50/a1) d50,
  114. concat(a51-a50,',',(a51-a50)/cost,',',a51/cost,',',a51/a1) d51,
  115. concat(a52-a51,',',(a52-a51)/cost,',',a52/cost,',',a52/a1) d52,
  116. concat(a53-a52,',',(a53-a52)/cost,',',a53/cost,',',a53/a1) d53,
  117. concat(a54-a53,',',(a54-a53)/cost,',',a54/cost,',',a54/a1) d54,
  118. concat(a55-a54,',',(a55-a54)/cost,',',a55/cost,',',a55/a1) d55,
  119. concat(a56-a55,',',(a56-a55)/cost,',',a56/cost,',',a56/a1) d56,
  120. concat(a57-a56,',',(a57-a56)/cost,',',a57/cost,',',a57/a1) d57,
  121. concat(a58-a57,',',(a58-a57)/cost,',',a58/cost,',',a58/a1) d58,
  122. concat(a59-a58,',',(a59-a58)/cost,',',a59/cost,',',a59/a1) d59,
  123. concat(a60-a59,',',(a60-a59)/cost,',',a60/cost,',',a60/a1) d60,
  124. concat(m3-a60,',',(m3-a60)/cost,',',m3/cost,',',m3/a1) m3,
  125. concat(m4-m3,',',(m4-m3)/cost,',',m4/cost,',',m4/a1) m4,
  126. concat(m5-m4,',',(m5-m4)/cost,',',m5/cost,',',m5/a1) m5,
  127. a1 as da1,a2 as da2,a3 as da3,a4 as da4,a5 as da5,a6 as da6,a7 as da7,
  128. a8 as da8,a9 as da9,a10 as da10,a11 as da11,a12 as da12,a13 as da13,
  129. a14 as da14,a15 as da15,a16 as da16,a17 as da17,a18 as da18,a19 as da19,
  130. a20 as da20,a21 as da21,a22 as da22,a23 as da23,a24 as da24,a25 as da25,
  131. a26 as da26,a27 as da27,a28 as da28,a29 as da29,a30 as da30,a31 as da31,
  132. a32 as da32,a33 as da33,a34 as da34,a35 as da35,a36 as da36,a37 as da37,
  133. a38 as da38,a39 as da39,a40 as da40,a41 as da41,a42 as da42,a43 as da43,
  134. a44 as da44,a45 as da45,a46 as da46,a47 as da47,a48 as da48,a49 as da49,
  135. a50 as da50,a51 as da51,a52 as da52,a53 as da53,a54 as da54,a55 as da55,
  136. a56 as da56,a57 as da57,a58 as da58,a59 as da59,a60 as da60,
  137. m3 as dm3,m4 as dm4,m5 as dm5
  138. from book_trend where 1=1 {op1} {op2} {op4} {op5} {op6}
  139. """
  140. sum_sql = f"""select concat(date_format(min(dt),'%Y/%m/%d'),'~',date_format(max(dt),'%Y/%m/%d')) dt,
  141. sum(cost) cost,
  142. sum(first_order_amount) first_order_amount,
  143. sum(reg_order_amount) reg_order_amount,
  144. round(sum(first_order_amount)/sum(cost),4) first_roi,
  145. round(sum(a7)/sum(cost),4) roi7,
  146. round(sum(a30)/sum(cost),4) roi30,
  147. round(sum(reg_order_amount)/sum(cost),4) roi,
  148. sum(order_amount) order_amount,
  149. sum(reg_order_amount-cost) profit,
  150. round(sum(click_count)/sum(view_count),4) click_rate,
  151. round(sum(follow_user)/sum(click_count),4) follow_rate,
  152. round(sum(first_order_user)/sum(click_count),4) first_order_rate,
  153. sum(view_count) view_count,
  154. sum(click_count) click_count,
  155. sum(follow_user) follow_user,
  156. sum(reg_order_user) reg_order_user,
  157. sum(first_order_user) first_order_user,
  158. round(sum(cost)/sum(follow_user),2) follow_cost,
  159. round(sum(cost)/sum(reg_order_user)) order_cost,
  160. round(sum(cost)/sum(first_order_user)) first_order_cost,
  161. concat(sum(da1),',',sum(da1)/sum(cost),',', 0,',',1) d1,
  162. 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,
  163. 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,
  164. 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,
  165. 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,
  166. 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,
  167. 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,
  168. 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,
  169. 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,
  170. 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,
  171. 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,
  172. 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,
  173. 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,
  174. 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,
  175. 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,
  176. 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,
  177. 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,
  178. 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,
  179. 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,
  180. 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,
  181. 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,
  182. 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,
  183. 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,
  184. 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,
  185. 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,
  186. 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,
  187. 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,
  188. 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,
  189. 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,
  190. 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,
  191. 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,
  192. 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,
  193. 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,
  194. 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,
  195. 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,
  196. 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,
  197. 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,
  198. 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,
  199. 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,
  200. 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,
  201. 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,
  202. 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,
  203. 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,
  204. 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,
  205. 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,
  206. 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,
  207. 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,
  208. 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,
  209. 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,
  210. 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,
  211. 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,
  212. 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,
  213. 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,
  214. 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,
  215. 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,
  216. 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,
  217. 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,
  218. 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,
  219. 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,
  220. 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,
  221. 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,
  222. 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,
  223. 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
  224. from ({sql}) a
  225. """
  226. data, total, total_data = getLimitSumData(db.dm, sql, sum_sql, page, page_size)
  227. def parse(key_str):
  228. if type(key_str) is not str:
  229. key_str = key_str.decode('utf-8')
  230. li = key_str.split(',')
  231. li[0] = round(float(li[0]), 2)
  232. li[1] = round(float(li[1]), 4)
  233. li[2] = round(float(li[2]), 4)
  234. li[3] = round(float(li[3]), 2)
  235. return dict(zip(['amount', 'add', 'roi', 'mult'], li))
  236. for k, v in total_data.items():
  237. if k in ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'd10', 'd11', 'd12', 'd13', 'd14', 'd15',
  238. 'd16', 'd17', 'd18',
  239. 'd19', 'd20', 'd21', 'd22', 'd23', 'd24', 'd25', 'd26', 'd27', 'd28', 'd29', 'd30', 'd31', 'd32',
  240. 'd33', 'd34', 'd35', 'd36', 'd37', 'd38',
  241. 'd39', 'd40', 'd41', 'd42', 'd43', 'd44', 'd45', 'd46', 'd47', 'd48', 'd49', 'd50', 'd51', 'd52',
  242. 'd53', 'd54', 'd55', 'd56', 'd57', 'd58', 'd59',
  243. 'd60', 'm3', 'm4', 'm5']:
  244. total_data[k] = parse(v) if v else {}
  245. # print(data)
  246. for i in data:
  247. for k, v in i.items():
  248. if k in ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'd10', 'd11', 'd12', 'd13', 'd14', 'd15',
  249. 'd16', 'd17', 'd18',
  250. 'd19', 'd20', 'd21', 'd22', 'd23', 'd24', 'd25', 'd26', 'd27', 'd28', 'd29', 'd30', 'd31', 'd32',
  251. 'd33', 'd34', 'd35', 'd36', 'd37', 'd38',
  252. 'd39', 'd40', 'd41', 'd42', 'd43', 'd44', 'd45', 'd46', 'd47', 'd48', 'd49', 'd50', 'd51', 'd52',
  253. 'd53', 'd54', 'd55', 'd56', 'd57', 'd58', 'd59',
  254. 'd60', 'm3', 'm4', 'm5']:
  255. i[k] = parse(v) if v else {}
  256. return data, total, total_data
  257. def book_overview(start, end, book, type, page, page_size, order_by, order):
  258. op1 = f" and book='{book}'" if book else ''
  259. op2 = f" and type='{type}' " if type else ''
  260. op3 = f" and dt>='{start}' " if start else ''
  261. op4 = f" and dt<='{end}' " if end else ''
  262. op5 = f" order by {order_by} {order}" if order_by and order else ''
  263. db = MysqlUtils()
  264. sql = f"""
  265. select book,type,
  266. DATE_FORMAT(min(dt),'%Y%m%d') start_date,
  267. DATE_FORMAT(max(dt),'%Y%m%d') end_date,
  268. sum(cost) cost,
  269. sum(reg_order_amount) amount,
  270. sum(first_order_amount) first_amount,
  271. round(sum(reg_order_amount)/sum(cost),4) roi,
  272. round(sum(first_order_amount)/sum(cost),4) first_roi,
  273. round(sum(a7)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 5 day),0,cost)),4) roi7,
  274. round(sum(a30)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 28 day),0,cost)),4) roi30,
  275. sum(reg_order_amount-cost) profit,
  276. round(sum(click_count)/sum(view_count),4) click_rate,
  277. round(sum(follow_user)/sum(click_count),4) follow_rate,
  278. round(sum(reg_order_user)/sum(click_count),4) order_rate,
  279. round(sum(first_order_user)/sum(click_count),4) first_order_rate,
  280. sum(view_count) view_count,
  281. sum(click_count) click_count,
  282. sum(follow_user) follow_user,
  283. sum(reg_order_user) order_user,
  284. sum(first_order_user) first_order_user,
  285. round(sum(cost)/sum(follow_user),2) follow_cost,
  286. round(sum(cost)/sum(reg_order_user),2) order_cost,
  287. round(sum(cost)/sum(first_order_user),2) first_order_cost,
  288. round(sum(reg_order_amount)/sum(reg_order_user),2) avg_amount,
  289. sum(ba1) td_amount,
  290. sum(ba2) yd_amount,
  291. sum(ba3) byd_amount,
  292. concat(sum(a1),',',0,',',sum(a1)/sum(cost),',',1) d1,
  293. concat(sum(a2-a1),',',sum(a2-a1)/sum(if(dt=CURRENT_DATE,0,cost)),',',sum(a2)/sum(if(dt=CURRENT_DATE,0,cost)),',',sum(a2)/sum(if(dt=CURRENT_DATE,0,a1))) d2,
  294. concat(sum(a3-a2),',',sum(a3-a2)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 1 day),0,cost)),',',sum(a3)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 1 day),0,cost)),',',sum(a3)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 1 day),0,a1))) d3,
  295. concat(sum(a4-a3),',',sum(a4-a3)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 2 day),0,cost)),',',sum(a4)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 2 day),0,cost)),',',sum(a4)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 2 day),0,a1))) d4,
  296. concat(sum(a5-a4),',',sum(a5-a4)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 3 day),0,cost)),',',sum(a5)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 3 day),0,cost)),',',sum(a5)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 3 day),0,a1))) d5,
  297. concat(sum(a6-a5),',',sum(a6-a5)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 4 day),0,cost)),',',sum(a6)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 4 day),0,cost)),',',sum(a6)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 4 day),0,a1))) d6,
  298. concat(sum(a7-a6),',',sum(a7-a6)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 5 day),0,cost)),',',sum(a7)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 5 day),0,cost)),',',sum(a7)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 5 day),0,a1))) d7,
  299. concat(sum(a8-a7),',',sum(a8-a7)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 6 day),0,cost)),',',sum(a8)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 6 day),0,cost)),',',sum(a8)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 6 day),0,a1))) d8,
  300. concat(sum(a9-a8),',',sum(a9-a8)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 7 day),0,cost)),',',sum(a9)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 7 day),0,cost)),',',sum(a9)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 7 day),0,a1))) d9,
  301. concat(sum(a10-a9),',',sum(a10-a9)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 8 day),0,cost)),',',sum(a10)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 8 day),0,cost)),',',sum(a10)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 8 day),0,a1))) d10,
  302. concat(sum(a11-a10),',',sum(a11-a10)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 9 day),0,cost)),',',sum(a11)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 9 day),0,cost)),',',sum(a11)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 9 day),0,a1))) d11,
  303. concat(sum(a12-a11),',',sum(a12-a11)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 10 day),0,cost)),',',sum(a12)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 10 day),0,cost)),',',sum(a12)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 10 day),0,a1))) d12,
  304. concat(sum(a13-a12),',',sum(a13-a12)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 11 day),0,cost)),',',sum(a13)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 11 day),0,cost)),',',sum(a13)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 11 day),0,a1))) d13,
  305. concat(sum(a14-a13),',',sum(a14-a13)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 12 day),0,cost)),',',sum(a14)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 12 day),0,cost)),',',sum(a14)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 12 day),0,a1))) d14,
  306. concat(sum(a15-a14),',',sum(a15-a14)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 13 day),0,cost)),',',sum(a15)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 13 day),0,cost)),',',sum(a15)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 13 day),0,a1))) d15,
  307. concat(sum(a16-a15),',',sum(a16-a15)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 14 day),0,cost)),',',sum(a16)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 14 day),0,cost)),',',sum(a16)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 14 day),0,a1))) d16,
  308. concat(sum(a17-a16),',',sum(a17-a16)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 15 day),0,cost)),',',sum(a17)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 15 day),0,cost)),',',sum(a17)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 15 day),0,a1))) d17,
  309. concat(sum(a18-a17),',',sum(a18-a17)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 16 day),0,cost)),',',sum(a18)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 16 day),0,cost)),',',sum(a18)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 16 day),0,a1))) d18,
  310. concat(sum(a19-a18),',',sum(a19-a18)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 17 day),0,cost)),',',sum(a19)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 17 day),0,cost)),',',sum(a19)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 17 day),0,a1))) d19,
  311. concat(sum(a20-a19),',',sum(a20-a19)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 18 day),0,cost)),',',sum(a20)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 18 day),0,cost)),',',sum(a20)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 18 day),0,a1))) d20,
  312. concat(sum(a21-a20),',',sum(a21-a20)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 19 day),0,cost)),',',sum(a21)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 19 day),0,cost)),',',sum(a21)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 19 day),0,a1))) d21,
  313. concat(sum(a22-a21),',',sum(a22-a21)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 20 day),0,cost)),',',sum(a22)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 20 day),0,cost)),',',sum(a22)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 20 day),0,a1))) d22,
  314. concat(sum(a23-a22),',',sum(a23-a22)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 21 day),0,cost)),',',sum(a23)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 21 day),0,cost)),',',sum(a23)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 21 day),0,a1))) d23,
  315. concat(sum(a24-a23),',',sum(a24-a23)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 22 day),0,cost)),',',sum(a24)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 22 day),0,cost)),',',sum(a24)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 22 day),0,a1))) d24,
  316. concat(sum(a25-a24),',',sum(a25-a24)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 23 day),0,cost)),',',sum(a25)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 23 day),0,cost)),',',sum(a25)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 23 day),0,a1))) d25,
  317. concat(sum(a26-a25),',',sum(a26-a25)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 24 day),0,cost)),',',sum(a26)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 24 day),0,cost)),',',sum(a26)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 24 day),0,a1))) d26,
  318. concat(sum(a27-a26),',',sum(a27-a26)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 25 day),0,cost)),',',sum(a27)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 25 day),0,cost)),',',sum(a27)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 25 day),0,a1))) d27,
  319. concat(sum(a28-a27),',',sum(a28-a27)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 26 day),0,cost)),',',sum(a28)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 26 day),0,cost)),',',sum(a28)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 26 day),0,a1))) d28,
  320. concat(sum(a29-a28),',',sum(a29-a28)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 27 day),0,cost)),',',sum(a29)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 27 day),0,cost)),',',sum(a29)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 27 day),0,a1))) d29,
  321. concat(sum(a30-a29),',',sum(a30-a29)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 28 day),0,cost)),',',sum(a30)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 28 day),0,cost)),',',sum(a30)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 28 day),0,a1))) d30,
  322. concat(sum(a31-a30),',',sum(a31-a30)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 29 day),0,cost)),',',sum(a31)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 29 day),0,cost)),',',sum(a31)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 29 day),0,a1))) d31,
  323. concat(sum(a32-a31),',',sum(a32-a31)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 30 day),0,cost)),',',sum(a32)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 30 day),0,cost)),',',sum(a32)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 30 day),0,a1))) d32,
  324. concat(sum(a33-a32),',',sum(a33-a32)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 31 day),0,cost)),',',sum(a33)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 31 day),0,cost)),',',sum(a33)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 31 day),0,a1))) d33,
  325. concat(sum(a34-a33),',',sum(a34-a33)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 32 day),0,cost)),',',sum(a34)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 32 day),0,cost)),',',sum(a34)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 32 day),0,a1))) d34,
  326. concat(sum(a35-a34),',',sum(a35-a34)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 33 day),0,cost)),',',sum(a35)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 33 day),0,cost)),',',sum(a35)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 33 day),0,a1))) d35,
  327. concat(sum(a36-a35),',',sum(a36-a35)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 34 day),0,cost)),',',sum(a36)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 34 day),0,cost)),',',sum(a36)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 34 day),0,a1))) d36,
  328. concat(sum(a37-a36),',',sum(a37-a36)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 35 day),0,cost)),',',sum(a37)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 35 day),0,cost)),',',sum(a37)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 35 day),0,a1))) d37,
  329. concat(sum(a38-a37),',',sum(a38-a37)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 36 day),0,cost)),',',sum(a38)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 36 day),0,cost)),',',sum(a38)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 36 day),0,a1))) d38,
  330. concat(sum(a39-a38),',',sum(a39-a38)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 37 day),0,cost)),',',sum(a39)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 37 day),0,cost)),',',sum(a39)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 37 day),0,a1))) d39,
  331. concat(sum(a40-a39),',',sum(a40-a39)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 38 day),0,cost)),',',sum(a40)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 38 day),0,cost)),',',sum(a40)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 38 day),0,a1))) d40,
  332. concat(sum(a41-a40),',',sum(a41-a40)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 39 day),0,cost)),',',sum(a41)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 39 day),0,cost)),',',sum(a41)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 39 day),0,a1))) d41,
  333. concat(sum(a42-a41),',',sum(a42-a41)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 40 day),0,cost)),',',sum(a42)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 40 day),0,cost)),',',sum(a42)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 40 day),0,a1))) d42,
  334. concat(sum(a43-a42),',',sum(a43-a42)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 41 day),0,cost)),',',sum(a43)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 41 day),0,cost)),',',sum(a43)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 41 day),0,a1))) d43,
  335. concat(sum(a44-a43),',',sum(a44-a43)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 42 day),0,cost)),',',sum(a44)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 42 day),0,cost)),',',sum(a44)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 42 day),0,a1))) d44,
  336. concat(sum(a45-a44),',',sum(a45-a44)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 43 day),0,cost)),',',sum(a45)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 43 day),0,cost)),',',sum(a45)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 43 day),0,a1))) d45,
  337. concat(sum(a46-a45),',',sum(a46-a45)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 44 day),0,cost)),',',sum(a46)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 44 day),0,cost)),',',sum(a46)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 44 day),0,a1))) d46,
  338. concat(sum(a47-a46),',',sum(a47-a46)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 45 day),0,cost)),',',sum(a47)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 45 day),0,cost)),',',sum(a47)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 45 day),0,a1))) d47,
  339. concat(sum(a48-a47),',',sum(a48-a47)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 46 day),0,cost)),',',sum(a48)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 46 day),0,cost)),',',sum(a48)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 46 day),0,a1))) d48,
  340. concat(sum(a49-a48),',',sum(a49-a48)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 47 day),0,cost)),',',sum(a49)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 47 day),0,cost)),',',sum(a49)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 47 day),0,a1))) d49,
  341. concat(sum(a50-a49),',',sum(a50-a49)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 48 day),0,cost)),',',sum(a50)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 48 day),0,cost)),',',sum(a50)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 48 day),0,a1))) d50,
  342. concat(sum(a51-a50),',',sum(a51-a50)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 49 day),0,cost)),',',sum(a51)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 49 day),0,cost)),',',sum(a51)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 49 day),0,a1))) d51,
  343. concat(sum(a52-a51),',',sum(a52-a51)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 50 day),0,cost)),',',sum(a52)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 50 day),0,cost)),',',sum(a52)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 50 day),0,a1))) d52,
  344. concat(sum(a53-a52),',',sum(a53-a52)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 51 day),0,cost)),',',sum(a53)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 51 day),0,cost)),',',sum(a53)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 51 day),0,a1))) d53,
  345. concat(sum(a54-a53),',',sum(a54-a53)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 52 day),0,cost)),',',sum(a54)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 52 day),0,cost)),',',sum(a54)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 52 day),0,a1))) d54,
  346. concat(sum(a55-a54),',',sum(a55-a54)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 53 day),0,cost)),',',sum(a55)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 53 day),0,cost)),',',sum(a55)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 53 day),0,a1))) d55,
  347. concat(sum(a56-a55),',',sum(a56-a55)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 54 day),0,cost)),',',sum(a56)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 54 day),0,cost)),',',sum(a56)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 54 day),0,a1))) d56,
  348. concat(sum(a57-a56),',',sum(a57-a56)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 55 day),0,cost)),',',sum(a57)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 55 day),0,cost)),',',sum(a57)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 55 day),0,a1))) d57,
  349. concat(sum(a58-a57),',',sum(a58-a57)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 56 day),0,cost)),',',sum(a58)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 56 day),0,cost)),',',sum(a58)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 56 day),0,a1))) d58,
  350. concat(sum(a59-a58),',',sum(a59-a58)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 57 day),0,cost)),',',sum(a59)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 57 day),0,cost)),',',sum(a59)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 57 day),0,a1))) d59,
  351. concat(sum(a60-a59),',',sum(a60-a59)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 58 day),0,cost)),',',sum(a60)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 58 day),0,cost)),',',sum(a60)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 58 day),0,a1))) d60,
  352. concat(sum(m3-a60),',',sum(m3-a60)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 88 day),0,cost)),',',sum(m3)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 88 day),0,cost)),',',sum(m3)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 88 day),0,a1))) m3,
  353. concat(sum(m4-m3),',',sum(m4-m3)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 118 day),0,cost)),',',sum(m4)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 118 day),0,cost)),',',sum(m4)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 118 day),0,a1))) m4,
  354. concat(sum(m5-m4),',',sum(m5-m4)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 148 day),0,cost)),',',sum(m5)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 148 day),0,cost)),',',sum(m5)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 148 day),0,a1))) m5
  355. from book_trend where cost>0 {op1} {op2} {op3} {op4} group by book,type {op5}
  356. """
  357. data, total = getLimitData(db.dm, sql, page, page_size)
  358. def parse(str):
  359. li = str.decode('utf-8').split(',')
  360. li[0] = round(float(li[0]), 2)
  361. li[1] = round(float(li[1]), 4)
  362. li[2] = round(float(li[2]), 4)
  363. li[3] = round(float(li[3]), 2)
  364. return dict(zip(['amount', 'add', 'roi', 'mult'], li))
  365. # print(data)
  366. for i in data:
  367. for k, v in i.items():
  368. if k in ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'd10', 'd11', 'd12', 'd13', 'd14', 'd15',
  369. 'd16', 'd17', 'd18',
  370. 'd19', 'd20', 'd21', 'd22', 'd23', 'd24', 'd25', 'd26', 'd27', 'd28', 'd29', 'd30', 'd31', 'd32',
  371. 'd33', 'd34', 'd35', 'd36', 'd37', 'd38',
  372. 'd39', 'd40', 'd41', 'd42', 'd43', 'd44', 'd45', 'd46', 'd47', 'd48', 'd49', 'd50', 'd51', 'd52',
  373. 'd53', 'd54', 'd55', 'd56', 'd57', 'd58', 'd59',
  374. 'd60', 'm3', 'm4', 'm5']:
  375. i[k] = parse(v) if v else {}
  376. return data, total
  377. def pitcher_overview(user_id, start, end, pitcher, page, page_size, order_by, order):
  378. if user_id in super_auth():
  379. op = ''
  380. else:
  381. user = tuple([i['nick_name'] for i in get_pitcher({'user_id': user_id})] + [get_user_name_by_id(user_id)])
  382. if len(user) == 1:
  383. op = f" and pitcher ='{user[0]}'"
  384. else:
  385. op = f" and pitcher in {str(user)}"
  386. op1 = f" and pitcher='{pitcher}' " if pitcher else ''
  387. op2 = f" and dt>='{start}' " if start else ''
  388. op3 = f" and dt<='{end}' " if end else ''
  389. op4 = f" order by {order_by} {order}" if order_by and order else ''
  390. db = MysqlUtils()
  391. sql = f""" select pitcher,
  392. DATE_FORMAT(min(dt),'%Y%m%d') start_date,
  393. DATE_FORMAT(max(dt),'%Y%m%d') end_date,
  394. sum(cost) cost,
  395. sum(reg_amount) amount,
  396. sum(first_order_amount) first_amount,
  397. round(sum(reg_amount)/sum(cost),4) roi,
  398. round(sum(first_order_amount)/sum(cost),4) first_roi,
  399. round(sum(d7)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 5 day),0,cost)),4) roi7,
  400. round(sum(d30)/sum(if(dt>=SUBDATE(CURRENT_DATE,INTERVAL 5 day),0,cost)),4) roi30,
  401. sum(reg_amount-cost) profit,
  402. round(sum(click_count)/sum(view_count),4) click_rate,
  403. round(sum(follow_user)/sum(click_count),4) follow_rate,
  404. round(sum(reg_order_user)/sum(click_count),4) order_rate,
  405. round(sum(first_order_user)/sum(click_count),4) first_order_rate,
  406. sum(view_count) view_count,
  407. sum(click_count) click_count,
  408. sum(follow_user) follow_user,
  409. sum(reg_order_user) order_user,
  410. sum(first_order_user) first_order_user,
  411. round(sum(cost)/sum(follow_user),2) follow_cost,
  412. round(sum(cost)/sum(reg_order_user),2) order_cost,
  413. round(sum(cost)/sum(first_order_user),2) first_order_cost,
  414. round(sum(reg_amount)/sum(reg_order_user),2) avg_amount,
  415. sum(ba1) td_amount,
  416. sum(ba2) yd_amount,
  417. sum(ba3) byd_amount,sum(d7) d7 ,sum(d30) d30
  418. from dw_pitcher_trend where cost>0 and pitcher!='' {op} {op1} {op2} {op3} group by pitcher {op4}
  419. """
  420. sum_sql = f"""select '总计' as pitcher,
  421. sum(cost) cost,
  422. sum(amount) amount,
  423. sum(first_amount) first_amount,
  424. round(sum(amount)/sum(cost),4) roi,
  425. round(sum(first_amount)/sum(cost),4) first_roi,
  426. round(sum(d7)/sum(cost),4) roi7,
  427. round(sum(d30)/sum(cost),4) roi30,
  428. sum(amount-cost) profit,
  429. round(sum(click_count)/sum(view_count),4) click_rate,
  430. round(sum(follow_user)/sum(click_count),4) follow_rate,
  431. round(sum(order_user)/sum(click_count),4) order_rate,
  432. round(sum(first_order_user)/sum(click_count),4) first_order_rate,
  433. sum(view_count) view_count,
  434. sum(click_count) click_count,
  435. sum(follow_user) follow_user,
  436. sum(order_user) order_user,
  437. sum(first_order_user) first_order_user,
  438. round(sum(cost)/sum(follow_user),2) follow_cost,
  439. round(sum(cost)/sum(order_user),2) order_cost,
  440. round(sum(cost)/sum(first_order_user),2) first_order_cost,
  441. round(sum(amount)/sum(order_user),2) avg_amount,
  442. sum(td_amount) td_amount,
  443. sum(yd_amount) yd_amount,
  444. sum(byd_amount) byd_amount from ({sql}) a
  445. """
  446. return getLimitSumDataV2(db.dm, sql, sum_sql, page, page_size)
  447. def boss_panel_summary(user_id, start, end, channel, pitcher, type, stage, page, page_size, order_by, order):
  448. if user_id in super_auth():
  449. op = ''
  450. else:
  451. x = UserAuthUtils.get_auth_channel(user_id)
  452. if len(x) == 0:
  453. return None, None
  454. elif len(x) == 1:
  455. op = f" and channel ='{x[0]}'"
  456. else:
  457. op = f" and channel in {str(UserAuthUtils.get_auth_channel(user_id))}"
  458. op1 = f" and pitcher='{pitcher}' " if pitcher else ''
  459. op2 = f" and dt>='{start}' " if start else ''
  460. op3 = f" and dt<='{end}' " if end else ''
  461. op4 = f" and type='{type}' " if type else ''
  462. op5 = f" and stage='{stage}' " if stage else ''
  463. op6 = f" and channel='{channel}' " if channel else ''
  464. op7 = f" order by {order_by} {order}" if order_by and order else 'order by dt desc'
  465. dm = MysqlUtils().dm
  466. sql = f"""select sum(order_amount) order_amount,sum(cost) cost,round(sum(reg_order_amount)/sum(cost),4) roi,dt from dw_channel
  467. where 1=1 {op} {op1} {op2} {op3} {op4} {op5} {op6}
  468. GROUP BY dt HAVING order_amount+cost>0 {op7} """
  469. # print(sql)
  470. return getLimitData(dm, sql, page, page_size)
  471. def image_rank(start, end, type, book, page, page_size, order_by, order):
  472. op1 = f" and book='{book}' " if book else ''
  473. op2 = f" and dt>='{start}' " if start else ''
  474. op3 = f" and dt<='{end}' " if end else ''
  475. op4 = f" and type='{type}' " if type else ''
  476. op5 = f" order by {order_by} {order}" if order_by and order else 'order by dt desc'
  477. db = MysqlUtils().quchen_text
  478. sql = f"""select preview_url,
  479. sum(cost),
  480. round(sum(click_count)/sum(view_count),4) ctr,
  481. round(sum(cost)/sum(click_count),2) cpc
  482. from dm_image_cost_day where preview_url!='' {op1} {op2} {op3} {op4} GROUP BY signature,preview_url
  483. {op5} """
  484. return getLimitData(db, sql, page, page_size)
  485. """广告排行榜"""
  486. def advertisement_rank(user_id, start, end, type, page, page_size, order, order_by, book, channel, pitcher, has_order,
  487. is_video, show_type):
  488. # TODO:修改为clickhouse来进行数据访问
  489. if user_id in super_auth():
  490. op1 = ''
  491. else:
  492. user = tuple([i['nick_name'] for i in get_pitcher({'user_id': user_id})] + [get_user_name_by_id(user_id)])
  493. if len(user) == 1:
  494. op1 = f" and pitcher ='{user[0]}'"
  495. else:
  496. op1 = f" and pitcher in {str(user)}"
  497. op4 = f" and channel='{channel}'" if channel else ''
  498. op5 = f" and pitcher ='{pitcher}' " if pitcher else ''
  499. op8 = f" and type='{type}'" if type else ''
  500. op10 = f" and book='{book}'" if book else ''
  501. op11 = f" and order_count>0" if has_order else ''
  502. op12 = f" and is_video" if is_video else ''
  503. # 公共数据,和素材库一样,个人只显示个人(小组)数据
  504. # TODO:之后op_or1 变化为owner来限制,------dw_image_cost_day 生成时就根据dt,cost来归类owner
  505. op_or1 = f' or (dt<date_add(now(),interval -5 day) or cost>5000) ' if show_type == 'public' else ''
  506. op_order = f" order by {order_by} {order}" if order_by and order else ''
  507. # 时间为基底限制,必须遵守
  508. op_time_bigger = f" and dt>='{start}' " if start else ''
  509. op_time_small = f" and dt<='{end}' " if end else ''
  510. db = MysqlUtils().dm
  511. ck = CkUtils()
  512. sql = f"""
  513. select
  514. row_number () over() as id,
  515. dt,stage,platform,book,`type`, cost,channel,pitcher,
  516. view_count,
  517. click_count,
  518. follow_count,
  519. round((cost/view_count)*1000,2) cpm,
  520. round(click_count/view_count,4) ctr,
  521. round(cost/click_count,2) cpc,
  522. order_count,
  523. order_amount,
  524. round(order_count/click_count,4) order_rate,
  525. round(order_amount/order_count,2) unit_price,
  526. round(cost/follow_count) follow_cost,
  527. round(cost/order_count,2) order_cost,
  528. round(order_amount/cost,4) roi,
  529. title,
  530. description,
  531. image_id,
  532. is_video,
  533. use_times,
  534. preview_url
  535. from dw_image_cost_day
  536. where replace (preview_url,' ,','') !=''
  537. and (1=1 {op1} {op4} {op5} {op8} {op10} {op11} {op12} {op_or1})
  538. {op_time_bigger} {op_time_small}
  539. {op_order}
  540. """
  541. print(sql)
  542. sum_sql = f"""select '总计' as pitcher,
  543. sum(cost) cost,
  544. sum(view_count) view_count,
  545. sum(click_count) click_count,
  546. sum(follow_count) follow_count,
  547. round((sum(cost)/sum(view_count))*1000,4) cpm,
  548. round(sum(click_count)/sum(view_count),4) ctr,
  549. round(sum(cost)/sum(click_count),2) cpc,
  550. sum(order_count),
  551. sum(order_amount),
  552. round(sum(order_count)/sum(click_count),4) order_rate,
  553. round(sum(order_amount)/sum(order_count),2) unit_price,
  554. round(sum(cost)/sum(follow_count),2) follow_cost,
  555. round(sum(cost)/sum(order_count),2) order_cost,
  556. sum(use_times) use_times,
  557. round(sum(order_amount)/sum(cost),4) ROI
  558. from ({sql}) a
  559. """
  560. return getLimitSumData(db, sql, sum_sql, page, page_size)
  561. """创意展示"""
  562. def idea_rank(user_id, start, end, page, page_size, order, order_by, book, channel, is_singleimg,
  563. is_video, labels, collect, data_type):
  564. # TODO:修改为clickhouse来进行数据访问
  565. # 时间的归因-----获取到所有这段时间内的记录,并进行聚合(聚合周末再做,先把数据拿出来)
  566. # 认为素材消耗的数据,已经是一条数据的所有归因直接根据dt来就可以
  567. if user_id in super_auth():
  568. op1 = ''
  569. else:
  570. user = tuple([i['nick_name'] for i in get_pitcher({'user_id': user_id})] + [get_user_name_by_id(user_id)])
  571. if len(user) == 1:
  572. op1 = f" and pitcher ='{user[0]}'"
  573. else:
  574. op1 = f" and pitcher in {str(user)}"
  575. op4 = f" and channel='{channel}'" if channel else ''
  576. op10 = f" and book='{book}'" if book else ''
  577. # TODO:添加标签相关处理------id与对应计划进行--对应
  578. op11 = f" and image_id like '%,%' " if not is_singleimg else ''
  579. op12 = f" and is_video" if is_video else '' # 进行对应修改1----图片
  580. # 公共数据,和素材库一样,个人只显示个人(小组)数据
  581. # TODO:之后op_or1 变化为owner来限制,------dw_image_cost_day 生成时就根据dt,cost来归类owner
  582. op_or1 = f' or (dt<date_add(now(),interval -5 day) or cost>5000) ' if data_type == 'all' else ''
  583. # clicktimes,view_times,consume_amount,click_rate---------数据进行一一对应
  584. if order_by == 'click_times':
  585. order_by = 'click_count'
  586. if order_by == 'view_times':
  587. order_by = 'view_count'
  588. if order_by == 'consume_amount':
  589. order_by = 'cost'
  590. if order_by == 'click_rate':
  591. order_by = 'if(click_count=0 or view_count =0 or view_count is null or click_count is null,0,round(click_count / view_count,2)) '
  592. if order_by == 'create_time' or order_by == 'start_date':
  593. order_by = 'cost'
  594. op_order = f" order by {order_by} {order}" if order_by and order else ''
  595. # 时间为基底限制,必须遵守
  596. op_time_bigger = f" and dt>='{start}' " if start else ''
  597. op_time_small = f" and dt<='{end}' " if end else ''
  598. db = MysqlUtils().dm
  599. sql = f"""
  600. select
  601. row_number () over() as id,
  602. book as novels,
  603. dt as startDate,
  604. date_format( now(),'%Y-%m-%d') as endDate,
  605. `type` as channel,
  606. 'all' as dataType,
  607. owner as creator,
  608. 0 as delFlag,
  609. False as isCollected,
  610. '' as labels,
  611. download_path as downloadPath,
  612. height,
  613. width,
  614. preview_url as media,
  615. format as mediaFormat,
  616. size as mediaSize,
  617. if(click_count=0 or view_count =0 or view_count is null or click_count is null,0,click_count / view_count) as clickRate,
  618. round(width/if(height,height,1),2) aspect_ratio,
  619. cost as consumeAmount,
  620. view_count as viewTimes,
  621. click_count as clickTimes,
  622. round((cost/view_count)*1000,2) cpm,
  623. round(click_count/view_count,4) ctr,
  624. round(cost/click_count,2) cpc,
  625. title,
  626. description as article,
  627. date_format( now(),'%Y-%m-%d %H:%i:%S') as upateTime,
  628. null as updateBy,
  629. if(is_video,2,1) as type,
  630. video_bit_rate as videoBitRate,
  631. null as videoFirstPage,
  632. video_length as videoLength,
  633. use_times as userTimes
  634. from dw_image_cost_day
  635. where replace (preview_url,' ,','') !=''
  636. and (1=1 {op1} {op4} {op10} {op11} {op12} {op_or1})
  637. {op_time_bigger} {op_time_small}
  638. {op_order}
  639. """
  640. print(sql)
  641. data, total = getLimitData(db, sql, page, page_size)
  642. data = {'records': data, 'total': total, 'size': page_size, 'current': page, 'pages': int(total / page_size) + 1}
  643. return data
  644. def media_rank(user_id, start, end, page, page_size, order, order_by, book, channel, is_singleimg,
  645. is_video, labels, collect, data_type):
  646. # TODO:修改为clickhouse来进行数据访问
  647. # 时间的归因-----获取到所有这段时间内的记录,并进行聚合(聚合周末再做,先把数据拿出来)
  648. # 认为素材消耗的数据,已经是一条数据的所有归因直接根据dt来就可以
  649. if user_id in super_auth():
  650. op1 = ''
  651. else:
  652. user = tuple([i['nick_name'] for i in get_pitcher({'user_id': user_id})] + [get_user_name_by_id(user_id)])
  653. if len(user) == 1:
  654. op1 = f" and pitcher ='{user[0]}'"
  655. else:
  656. op1 = f" and pitcher in {str(user)}"
  657. op4 = f" and channel='{channel}'" if channel else ''
  658. op10 = f" and book='{book}'" if book else ''
  659. # TODO:添加标签相关处理------id与对应计划进行--对应
  660. op11 = f" and image_id like '%,%' " if not is_singleimg else ''
  661. op12 = f" and is_video" if is_video else '' # 进行对应修改1----图片
  662. # 公共数据,和素材库一样,个人只显示个人(小组)数据
  663. # TODO:之后op_or1 变化为owner来限制,------dw_image_cost_day 生成时就根据dt,cost来归类owner
  664. op_or1 = f' or (dt<date_add(now(),interval -5 day) or cost>5000) ' if data_type == 'all' else ''
  665. # clicktimes,view_times,consume_amount,click_rate---------数据进行一一对应
  666. if order_by == 'click_times':
  667. order_by = 'click_count'
  668. if order_by == 'view_times':
  669. order_by = 'view_count'
  670. if order_by == 'consume_amount':
  671. order_by = 'cost'
  672. if order_by == 'click_rate':
  673. order_by = 'if(click_count=0 or view_count =0 or view_count is null or click_count is null,0,click_count / view_count) '
  674. if order_by == 'create_time' or order_by == 'start_date':
  675. order_by = 'cost'
  676. op_order = f" order by {order_by} {order}" if order_by and order else ''
  677. # 时间为基底限制,必须遵守
  678. op_time_bigger = f" and dt>='{start}' " if start else ''
  679. op_time_small = f" and dt<='{end}' " if end else ''
  680. db = MysqlUtils().dm
  681. sql = f"""
  682. select
  683. row_number () over() as id,
  684. book as novels,
  685. dt as startDate,
  686. date_format( now(),'%Y-%m-%d') as endDate,
  687. `type` as channel,
  688. 'all' as dataType,
  689. owner as creator,
  690. 0 as delFlag,
  691. False as isCollected,
  692. '' as labels,
  693. download_path as downloadPath,
  694. height,
  695. width,
  696. preview_url as content,
  697. format as mediaFormat,
  698. size as mediaSize,
  699. if(click_count=0 or view_count =0 or view_count is null or click_count is null,0,round(click_count / view_count,2)) as clickRate,
  700. round(width/if(height,height,1),2) aspect_ratio,
  701. cost as consumeAmount,
  702. view_count as viewTimes,
  703. click_count as clickTimes,
  704. round((cost/view_count)*1000,2) cpm,
  705. round(click_count/view_count,4) ctr,
  706. round(cost/click_count,2) cpc,
  707. date_format( now(),'%Y-%m-%d %H:%i:%S') as upateTime,
  708. null as updateBy,
  709. if (image_id not like '%,%' ,true,false) as singleImg,
  710. if(is_video,2,1) as type,
  711. video_bit_rate as videoBitRate,
  712. null as videoFirstPage,
  713. video_length as videoLength,
  714. use_times as userTimes
  715. from dw_image_cost_day
  716. where replace (preview_url,' ,','') !=''
  717. and (1=1 {op1} {op4} {op10} {op11} {op12} {op_or1})
  718. {op_time_bigger} {op_time_small}
  719. {op_order}
  720. """
  721. print(sql)
  722. data, total = getLimitData(db, sql, page, page_size)
  723. data = {'records': data, 'total': total, 'size': page_size, 'current': page, 'pages': int(total / page_size) + 1}
  724. return data
  725. def content_rank(user_id, start, end, page, page_size, order, order_by, book, channel, is_singleimg,
  726. is_video, labels, collect, data_type):
  727. # TODO:修改为clickhouse来进行数据访问
  728. # 时间的归因-----获取到所有这段时间内的记录,并进行聚合(聚合周末再做,先把数据拿出来)
  729. # 认为素材消耗的数据,已经是一条数据的所有归因直接根据dt来就可以
  730. if user_id in super_auth():
  731. op1 = ''
  732. else:
  733. user = tuple([i['nick_name'] for i in get_pitcher({'user_id': user_id})] + [get_user_name_by_id(user_id)])
  734. if len(user) == 1:
  735. op1 = f" and pitcher ='{user[0]}'"
  736. else:
  737. op1 = f" and pitcher in {str(user)}"
  738. op4 = f" and channel='{channel}'" if channel else ''
  739. op10 = f" and book='{book}'" if book else ''
  740. # TODO:添加标签相关处理------id与对应计划进行--对应
  741. op11 = f" and image_id like '%,%' " if not is_singleimg else ''
  742. op12 = f" and is_video" if is_video else '' # 进行对应修改1----图片
  743. # 公共数据,和素材库一样,个人只显示个人(小组)数据
  744. # TODO:之后op_or1 变化为owner来限制,------dw_image_cost_day 生成时就根据dt,cost来归类owner
  745. op_or1 = f' or (dt<date_add(now(),interval -5 day) or cost>5000) ' if data_type == 'all' else ''
  746. # clicktimes,view_times,consume_amount,click_rate---------数据进行一一对应
  747. if order_by == 'click_times':
  748. order_by = 'clickTimes'
  749. if order_by == 'view_times':
  750. order_by = 'viewTimes'
  751. if order_by == 'consume_amount':
  752. order_by = 'consumeAmount'
  753. if order_by == 'click_rate':
  754. order_by = 'if(clickTimes=0 or viewTimes =0 or viewTimes is null or clickTimes is null,0,clickTimes / viewTimes) '
  755. if order_by == 'create_time' or order_by == 'start_date':
  756. order_by = 'consumeAmount'
  757. op_order = f" order by {order_by} {order}" if order_by and order else ''
  758. # 时间为基底限制,必须遵守
  759. op_time_bigger = f" and dt>='{start}' " if start else ''
  760. op_time_small = f" and dt<='{end}' " if end else ''
  761. db = MysqlUtils().dm
  762. title_totle = db.getData(f'''select count(*) from dw_image_cost_day dicd
  763. where REPLACE(REPLACE(title , CHAR(10), ''), CHAR(13), '') is not null and length(title)>0
  764. and (1=1 {op1} {op4} {op10} {op11} {op12} {op_or1})
  765. {op_time_bigger} {op_time_small}
  766. ''')[0][0]
  767. des_totle = db.getData(f'''select count(*) from dw_image_cost_day dicd
  768. where REPLACE(REPLACE(description , CHAR(10), ''), CHAR(13), '') is not null and length(description)>0
  769. and (1=1 {op1} {op4} {op10} {op11} {op12} {op_or1})
  770. {op_time_bigger} {op_time_small}
  771. ''')[0][0]
  772. total = des_totle + title_totle
  773. if total:
  774. end_title = int((page * page_size) / total * title_totle) + 1
  775. start_title = int(((page - 1) * page_size) / total * title_totle)
  776. end_des = int((page * page_size) / total * des_totle) + 1
  777. start_des = int(((page - 1) * page_size) / total * des_totle)
  778. else:
  779. end_title = 0
  780. start_title = 0
  781. end_des = 0
  782. start_des = 0
  783. print(page, page_size, start_title, end_title, start_des, end_des)
  784. sql = f"""
  785. select * from (select
  786. row_number () over() as id,
  787. book as novels,
  788. dt as startDate,
  789. date_format( now(),'%Y-%m-%d') as endDate,
  790. 1 as type,
  791. 'all' as dataType,
  792. owner as creator,
  793. False as isCollected,
  794. '' as labels,
  795. if(click_count=0 or view_count =0 or view_count is null or click_count is null,0,round(click_count / view_count,2)) as clickRate,
  796. round(width/if(height,height,1),2) aspect_ratio,
  797. cost as consumeAmount,
  798. view_count as viewTimes,
  799. click_count as clickTimes,
  800. round((cost/view_count)*1000,2) cpm,
  801. round(click_count/view_count,4) ctr,
  802. round(cost/click_count,2) cpc,
  803. REPLACE(REPLACE(description , CHAR(10), ''), CHAR(13), '') as content ,
  804. date_format( now(),'%Y-%m-%d %H:%i:%S') as upateTime,
  805. null as updateBy,
  806. use_times as userTimes
  807. from dw_image_cost_day
  808. where REPLACE(REPLACE(description, CHAR(10), ''), CHAR(13), '') is not null and length(description)>0
  809. and (1=1 {op1} {op4} {op10} {op11} {op12} {op_or1})
  810. {op_time_bigger} {op_time_small}
  811. limit {start_title} , {end_title}) as a
  812. union all
  813. select * from (select
  814. row_number () over() as id,
  815. book as novels,
  816. dt as startDate,
  817. date_format( now(),'%Y-%m-%d') as endDate,
  818. 2 as type,
  819. 'all' as dataType,
  820. owner as creator,
  821. False as isCollected,
  822. '' as labels,
  823. if(click_count=0 or view_count =0 or view_count is null or click_count is null,0,round(click_count / view_count,2)) as clickRate,
  824. round(width/if(height,height,1),2) aspect_ratio,
  825. cost as consumeAmount,
  826. view_count as viewTimes,
  827. click_count as clickTimes,
  828. round((cost/view_count)*1000,2) cpm,
  829. round(click_count/view_count,4) ctr,
  830. round(cost/click_count,2) cpc,
  831. REPLACE(REPLACE(title, CHAR(10), ''), CHAR(13), '') as content ,
  832. date_format( now(),'%Y-%m-%d %H:%i:%S') as upateTime,
  833. null as updateBy,
  834. use_times as userTimes
  835. from dw_image_cost_day
  836. where REPLACE(REPLACE(title, CHAR(10), ''), CHAR(13), '') is not null and length(title)>0
  837. and (1=1 {op1} {op4} {op10} {op11} {op12} {op_or1})
  838. {op_time_bigger} {op_time_small}
  839. limit {start_des} , {end_des}
  840. ) as b
  841. {op_order}
  842. """
  843. print(sql)
  844. data = db.getData_json(sql)
  845. data = {'records': data, 'total': total, 'size': page_size, 'current': page, 'pages': int(total / page_size) + 1}
  846. return data
  847. if __name__ == '__main__':
  848. print(get_pitcher({"user_id": 78}))