123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from model.UserAuthUtils import super_auth,get_auth_channel
- from model.CommonUtils import getLimitSumData,get_dict_list
- from model.DataBaseUtils import CkUtils
- def channel_analysis_select(arg):
- """公众号订单跟踪查询"""
- ck = CkUtils()
- start = arg.get("start")
- end = arg.get("end")
- st = arg.get("st")
- et = arg.get("et")
- channel = arg.get("channel")
- user_id = arg.get('user_id')
- page = arg.get("page")
- page_size = arg.get("page_size")
- order_by = arg.get("order_by", 'cost')
- order = arg.get("order", 'desc')
- if not (start and end and st and et):
- return {}
- if user_id in super_auth():
- op = ''
- else:
- op = f' and channel in {tuple(get_auth_channel(user_id))}'
- op1 = f" and channel in {tuple(channel.split(','))}" if channel else ''
- op2 = f" order by {order_by} {order}" if order_by and order else ''
- op3 = f" limit {(page - 1) * page_size},{page_size} " if (page and page_size) else ''
- sql = f"""
- select a.channel,cost,amount from
- (select channel,round(sum(cost),2) cost from dw_daily_channel_cost
- where dt>='{start}' and dt<='{end}' {op} {op1} group by channel) a
- left join
- (select channel,round(sum(amount),2) amount from `order` where date>='{st}' and date<='{et}' and
- formatDateTime(reg_time,'%Y-%m-%d')>='{start}' and formatDateTime(reg_time,'%Y-%m-%d')<='{end}' {op} {op1}
- group by channel) b
- using (channel) {op2} {op3}"""
- print(sql)
- data = get_dict_list(['channel','cost','amount'],ck.getDataList(sql))
- sum_sql = f"""select round(sum(cost),2) cost,round(sum(amount),2) amount from ({sql}) a"""
- total_data = get_dict_list(['cost','amount'],ck.getDataList(sum_sql))
- total_sql = f"""select count(1) from ({sql}) a"""
- total = ck.getDataOne(total_sql)
- # print(total_data,total)
- return {"data":data,"total_data":total_data,"total":total}
- def channel_analysis_select_daily(arg):
- ck = CkUtils()
- start = arg.get("start")
- end = arg.get("end")
- st = arg.get("st")
- et = arg.get("et")
- channel = arg.get("channel")
- if not (start and end and st and et and channel):
- return {}
- sql = f"""select formatDateTime(date,'%Y-%m-%d'),round(sum(amount),2) from `order` where formatDateTime(reg_time,'%Y-%m-%d')>='{start}' and formatDateTime(reg_time,'%Y-%m-%d')<='{end}'
- and date>='{st}' and date<='{et}' and channel = '{channel}'
- group by date order by date desc limit 10"""
- data = get_dict_list(['dt','amount'],ck.getDataList(sql))
- # print(data)
- return {"data": data}
- if __name__ == '__main__':
- arg={"channel":"白雁阅读",'start':'2021-03-01','end':'2021-03-10','st':'2021-04-01','et':'2021-04-10'}
- channel_analysis_select_daily(arg)
|