OrderHandler.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. from handlers.HandlerBase import BaseHandler
  2. import time
  3. from model.DataBaseUtils import *
  4. from model.CommonUtils import *
  5. from model import UserAuthUtils
  6. from model.UserAuthUtils import super_auth
  7. from model.DateUtils import DateUtils
  8. from datetime import datetime, timedelta
  9. class OrderInfoGame(BaseHandler):
  10. def get(self):
  11. if not self._au:
  12. self.write_fail(msg='auth error')
  13. else:
  14. db = MysqlUtils()
  15. sql = f'''
  16. select id,name from db_mp.h_game
  17. '''
  18. data = db.quchen_text.getData_json(sql)
  19. self.write_json(data=data)
  20. class OrderInfoAgent(BaseHandler):
  21. def post(self):
  22. if not self._au:
  23. self.write_fail(msg='auth error')
  24. else:
  25. args = self.get_args()
  26. user_id = args.get('user_id')
  27. db = MysqlUtils()
  28. if user_id in super_auth():
  29. op = ''
  30. else:
  31. if len(UserAuthUtils.get_auth_channel(user_id)) == 0:
  32. return None, None, None
  33. elif len(UserAuthUtils.get_auth_channel(user_id)) == 1:
  34. op = f" and b.wx_name = '{UserAuthUtils.get_auth_channel(user_id)[0]}'"
  35. else:
  36. op = f" and b.wx_name in {str(UserAuthUtils.get_auth_channel(user_id))}"
  37. sql = f'''
  38. select row_number() over() as id,
  39. d.user_nicename as agent_name
  40. from quchen_text.advertiser_vx a
  41. left join db_mp.mp_mp_conf b on a.name =b.wx_name
  42. left join db_mp.mp_conf_agent c on b.id = c.advertiser_conf_id
  43. left join db_mp.h_user d on c.agent_id = d.id
  44. where d.user_nicename is not null
  45. {op}
  46. group by d.user_nicename
  47. '''
  48. data = db.quchen_text.getData_json(sql)
  49. data.insert(0, {'id': -1, 'agent_name': '自然流量渠道'})
  50. data.insert(0, {'id': -2, 'agent_name': '客服渠道'})
  51. self.write_json(data=data)
  52. class OrderInfo(BaseHandler):
  53. def post(self):
  54. if not self._au:
  55. self.write_fail(msg='auth error')
  56. else:
  57. args = self.get_args()
  58. user_id = args.get('user_id')
  59. # 渠道表
  60. channel = args.get("channel")
  61. pitcher = args.get("pitcher")
  62. # role 表
  63. role_name = args.get("role_name")
  64. start = args.get("start", self.thisday)
  65. if args.get("end"):
  66. tmp_end = args.get("end")
  67. tmp_end = datetime.strptime(tmp_end, '%Y-%m-%d')
  68. tmp_end = tmp_end + timedelta(days=1)
  69. end = tmp_end.strftime('%Y-%m-%d')
  70. else:
  71. end = None
  72. user_start = args.get("user_start")
  73. if args.get("user_end"):
  74. tmp_end = args.get("user_end")
  75. tmp_end = datetime.strptime(tmp_end, '%Y-%m-%d')
  76. tmp_end = tmp_end + timedelta(days=1)
  77. user_end = tmp_end.strftime('%Y-%m-%d')
  78. else:
  79. user_end = None
  80. order_id = args.get('order_id')
  81. member_id = args.get('member_id')
  82. status = (args.get('status'))
  83. game = (args.get('game'))
  84. agent_name = (args.get('agent_name'))
  85. page = args.get("page", 1)
  86. page_size = args.get("page_size", 20)
  87. order_by = args.get("order_by", 'order_date')
  88. order_ = args.get("order", 'desc')
  89. data, total, total_data = self.get_order_info(user_id, channel, pitcher, role_name, start, end,
  90. user_end, user_start, order_id, member_id, status,
  91. game, agent_name,
  92. page, page_size, order_, order_by)
  93. if args.get("download"):
  94. data, total, total_data = self.get_order_info(user_id, channel, pitcher, role_name, start, end,
  95. user_end, user_start, order_id, member_id, status,
  96. game, agent_name,
  97. 1, 100000000, order_, order_by)
  98. self.write_download(str(int(time.time())), data)
  99. else:
  100. self.write_json(data=data, total=total, total_data=total_data)
  101. def get_order_info(self, user_id, channel, pitcher, role_name, start, end,
  102. user_end, user_start, order_id, member_id, status,
  103. game, agent_name,
  104. page, page_size, order_, order_by):
  105. db = MysqlUtils()
  106. if user_id in super_auth():
  107. op_channel = ''
  108. op_game = ''
  109. else:
  110. op_game = ''
  111. op_base = f' and j.game_name is not null and d.create_time >= j.create_time '
  112. # 限制为自己游戏的1.自然流量,2.客服流量
  113. if agent_name and ('自然流量渠道' in agent_name or '客服渠道' in agent_name):
  114. op_game = '' + op_base
  115. # 限制为自己公众号开始时候的数据
  116. if len(UserAuthUtils.get_auth_channel(user_id)) == 0:
  117. return None, None, None
  118. elif len(UserAuthUtils.get_auth_channel(user_id)) == 1:
  119. op_channel = f''' and c.wx_name = '{UserAuthUtils.get_auth_channel(user_id)[0]}'
  120. ''' + op_base
  121. else:
  122. op_channel = f'''
  123. and c.wx_name in {str(UserAuthUtils.get_auth_channel(user_id))}
  124. ''' + op_base
  125. op = op_game if agent_name and ('自然流量渠道' in agent_name or '客服渠道' in agent_name) else op_channel
  126. op1 = f" and h.pitcher ='{pitcher}' " if pitcher else ''
  127. op2 = f''' and c.wx_name in ({"'" + "','".join(channel) + "'"})''' if channel else ''
  128. op3 = f" and from_unixtime(a.create_time) >'{start}' " if start else ''
  129. op4 = f" and from_unixtime(a.create_time) <'{end}' " if end else ''
  130. op5 = f" and CONVERT (g.role_name USING utf8)='{role_name}' " if role_name else ''
  131. op6 = f" and from_unixtime(d.create_time) >'{user_start}' " if user_start else ''
  132. op7 = f" and from_unixtime(d.create_time) <'{user_end}' " if user_end else ''
  133. op8 = f" and a.order_id='{order_id}'" if order_id else ''
  134. op9 = f" and a.mem_id='{member_id}'" if member_id else ''
  135. op10 = f" and a.status={status} " if status else ''
  136. op11 = f" and e.name='{game}'" if game else ''
  137. #有自然流量和客服渠道时,其他渠道进行规避
  138. if agent_name and '自然流量渠道' in agent_name and '客服渠道' in agent_name:
  139. op12 = f" and a.agent_id in (12,0) "
  140. elif agent_name and '自然流量渠道' in agent_name:
  141. op12 = f" and a.agent_id=0 "
  142. elif agent_name and '客服渠道' in agent_name:
  143. op12 = f" and a.agent_id=12 "
  144. else:
  145. op12 = f''' and q.user_nicename in ({"'" + "','".join(agent_name) + "'"}) ''' if agent_name else ''
  146. # 选项:order_date:订单时间,user_date:用户时间,amount:金额,game:游戏名字,payway:支付方式,agent_name:渠道
  147. if order_by == 'agent_name':
  148. order_by = 'q.user_nicename'
  149. elif order_by == 'user_date':
  150. order_by = 'd.create_time'
  151. elif order_by == 'amount':
  152. order_by = 'amount'
  153. elif order_by == 'game':
  154. order_by = 'e.name'
  155. elif order_by == 'payway':
  156. order_by = 'a.payway'
  157. else:
  158. order_by = 'a.create_time'
  159. op15 = f" order by {order_by} {order_}" if order_by and order_ else ''
  160. sql = f"""select row_number() over() as id,a.order_id ,h.pitcher,
  161. if(a.agent_id =21,'客服渠道',if(a.agent_id=0,'自然流量',q.user_nicename)) as agent_name,
  162. if(a.agent_id =21,'客服渠道',if(a.agent_id=0,'自然流量',c.wx_name)) as channel,
  163. if(a.create_time is not null ,CONVERT(from_unixtime(a.create_time),char(20)),null) order_time,
  164. if(d.create_time is not null,CONVERT(from_unixtime(d.create_time),char(20)),null) user_create_time,
  165. d.id as user_id,e.name as game ,a.amount ,a.real_amount ,g.server_name ,
  166. CONVERT (g.role_name USING utf8) as role_name,a.payway ,a.status status ,a.mem_id
  167. from db_mp.h_pay a
  168. left join
  169. (select b.agent_id as agent_id,b.advertiser_conf_id from
  170. (select agent_id,max(update_time) as update_time
  171. from db_mp.mp_conf_agent mmc
  172. group by agent_id ) a
  173. left join db_mp.mp_conf_agent b on a.agent_id=b.agent_id
  174. and a.update_time = b.update_time) b on a.agent_id =b.agent_id
  175. left join db_mp.mp_mp_conf c on b.advertiser_conf_id = c.id
  176. left join db_mp.h_member d on a.mem_id = d.id
  177. left join db_mp.h_game e on a.app_id =e.id
  178. left join db_mp.h_pay_ext f on a.id = f.pay_id
  179. left join db_mp.h_mg_role g
  180. on g.role_id = f.role_id and g.server_id = f.server_id
  181. and g.app_id = a.app_id and g.mg_mem_id =a.mg_mem_id
  182. left join quchen_text.advertiser_vx h on c.wx_name = h.name
  183. left join db_mp.h_user q on a.agent_id =q.id
  184. left join (
  185. SELECT a.pitcher as pitcher ,a.name as channel ,
  186. d.name as game_name, UNIX_TIMESTAMP(a.start_date) as create_time
  187. FROM quchen_text.advertiser_vx a
  188. left join db_mp.mp_mp_conf b on a.name =b.wx_name
  189. left join db_mp.mp_conf_agent c on c.advertiser_conf_id = b.id
  190. left join db_mp.h_game d on c.app_id = d.id
  191. ) j on e.name = j.game_name
  192. where 1=1 {op} {op1} {op2} {op3} {op4} {op5}
  193. {op6} {op7} {op8} {op9} {op10}
  194. {op11} {op12}
  195. {op15}
  196. """
  197. print(sql)
  198. sumsql = f""" select '' as id,'' as order_id ,'' as pitcher,'' as agent_name, '' as channel,
  199. '' as order_time,'' as user_create_time,'' as user_id,
  200. '' as game,sum(amount) as amount ,'' as real_amount ,'' as server_name,
  201. '' as mem_id , '' as role_name,'' as payway ,'' as status
  202. from ({sql}) a
  203. """
  204. # print(sumsql)
  205. data, total, total_data = getLimitSumData(db.dm, sql, sumsql, page, page_size)
  206. print(len(data))
  207. return data, total, total_data