1.新增月充总额和充值总额看板
This commit is contained in:
parent
8408fe5af8
commit
9bd21f574c
@ -245,8 +245,12 @@ async def event_model(
|
||||
sql = item['sql']
|
||||
groupby = item['groupby']
|
||||
date_range = item['date_range'] # 获取的要查询的每一天的时间
|
||||
q['date_range'] = date_range # 把要查询的时间加入q字典中
|
||||
df = await ckdb.query_dataframe(sql) # 以sql语句查出数据,df是二维列表
|
||||
if item['event_name'] == '月充总额':
|
||||
date_range=df['date'].tolist()
|
||||
q['date_range']=[str(i).split('-')[0]+'-'+str(i).split('-')[1] for i in date_range]
|
||||
else:
|
||||
q['date_range'] = date_range # 把要查询的时间加入q字典中
|
||||
df.fillna(0, inplace=True) # 以0填补空数据
|
||||
# 映射对应中文返回给前端展示
|
||||
for i in groupby:
|
||||
@ -268,9 +272,12 @@ async def event_model(
|
||||
df = pd.DataFrame({'date': date_range, 'values': 0 * len(date_range)})
|
||||
# continue
|
||||
# return schemas.Msg(code=0, msg='ok', data=[q])
|
||||
if item['time_particle'] == 'total':
|
||||
if item['time_particle'] == 'total' or item['event_name'] == '充值总额':
|
||||
# for group, df_group in df.groupby(groupby):
|
||||
# df_group.reset_index(drop=True, inplace=True)
|
||||
if item['event_name'] == '充值总额':
|
||||
q['groups']=[]
|
||||
else:
|
||||
q['groups'].append(groupby)
|
||||
q['values'].append(df['values'].to_list())
|
||||
q['sum'].append(round(float(df['values'].sum()), 2))
|
||||
@ -360,9 +367,11 @@ async def event_model(
|
||||
else:
|
||||
# 无分组
|
||||
concat_data = []
|
||||
|
||||
for i in set(date_range) - set(df['date']):
|
||||
concat_data.append((i, 0))
|
||||
# 纵向拼接两个表
|
||||
if item['event_name'] != '月充总额':
|
||||
df = pd.concat([df, pd.DataFrame(concat_data, columns=df.columns)])
|
||||
# 在原数据上按data排序
|
||||
df.sort_values('date', inplace=True)
|
||||
|
@ -1,3 +1,5 @@
|
||||
import calendar
|
||||
import datetime
|
||||
import re
|
||||
from typing import Tuple
|
||||
from copy import deepcopy
|
||||
@ -19,7 +21,7 @@ from db import get_database
|
||||
|
||||
from db.redisdb import get_redis_pool, RedisDrive
|
||||
from models.user_label import UserClusterDef
|
||||
from utils import get_week, strptime, start_end_month, strptime1, get_event
|
||||
from utils import get_week, strptime, start_end_month, strptime1, get_event, get_time
|
||||
|
||||
|
||||
class CombinationEvent:
|
||||
@ -568,6 +570,7 @@ class BehaviorAnalysis:
|
||||
"""事件分析生成sql会经过"""
|
||||
sqls = []
|
||||
event_time_col = getattr(self.event_tbl.c, '#event_time')
|
||||
event_date_col = settings.TIME_GRAIN_EXPRESSIONS['P1M'](event_time_col, self.zone_time)#按月的
|
||||
for idx, event in enumerate(self.events):
|
||||
operator_ = event.get('operator_val', '')
|
||||
# 排头显示名
|
||||
@ -602,6 +605,41 @@ class BehaviorAnalysis:
|
||||
self.ext_filters, nu=idx
|
||||
)
|
||||
select_exprs.extend(self.groupby)
|
||||
if event_name_display == '充值总额':
|
||||
qry = sa.select(
|
||||
custom['select']
|
||||
).where(*where,*event_filter)
|
||||
elif event_name_display == '月充总额':
|
||||
times = self.start_date.split('-')
|
||||
start_date = times[0] + '-' + times[1] + '-' + '01 00:00:00'
|
||||
now = get_time('%Y-%m-%d %H:%M:%S')
|
||||
_sp_end = self.end_date[0:7]
|
||||
_now = now[0:7]
|
||||
if self.end_date < now:
|
||||
if _sp_end == _now: # 如果结束时间和现在时间是一个月,则取今天为结束时间
|
||||
times = now.split(' ')
|
||||
end_date = times[0] + ' 23:59:59'
|
||||
else: # 如果是之前月份,则算出那个月的最后一天
|
||||
data = self.end_date.split(' ')[0].split('-')
|
||||
year = int(data[0])
|
||||
month = int(data[1])
|
||||
weekDay, monthCountDay = calendar.monthrange(year, month)
|
||||
time = str(datetime.date(year, month, day=monthCountDay))
|
||||
end_date = time + ' 23:59:59'
|
||||
else: # 结束时间大于现在的时间,则取今天的时间
|
||||
times = now.split(' ')
|
||||
end_date = times[0] + ' 23:59:59'
|
||||
base_time = [
|
||||
func.addHours(event_time_col, self.zone_time) >= start_date,
|
||||
func.addHours(event_time_col, self.zone_time) <= end_date,
|
||||
]
|
||||
qry = sa.select(event_date_col,
|
||||
custom['select']
|
||||
).where(*base_time, *where, *event_filter)#.group_by(event_date_col)
|
||||
# qry = sa.select(event_date_col, *self.groupby, values_col) \
|
||||
# .where(and_(*where)) \
|
||||
# .group_by(event_date_col, *self.groupby, e_account_id_col)
|
||||
else:
|
||||
qry = sa.select(
|
||||
*select_exprs,
|
||||
custom['select']
|
||||
@ -685,15 +723,19 @@ class BehaviorAnalysis:
|
||||
|
||||
else:
|
||||
qry = sa.select(selectd).where(and_(*event_filter, *base_where))
|
||||
|
||||
if event_name_display == '月充总额':
|
||||
qry = qry.group_by(event_date_col)
|
||||
else:
|
||||
qry = qry.group_by(*select_exprs)
|
||||
if self.time_particle != 'total':
|
||||
qry = qry.order_by(sa.Column('date'))
|
||||
else:
|
||||
qry = qry.order_by(sa.Column('values').desc())
|
||||
qry = qry.limit(10000)
|
||||
|
||||
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
|
||||
if event_name_display == '充值总额':
|
||||
sql=sql.replace("""GROUP BY toDate(addHours(huixie.event."#event_time", 8)) ORDER BY date
|
||||
LIMIT 10000""",'',1)
|
||||
print(sql)
|
||||
# 单独付费率的拿出来
|
||||
if event.get('customEvent') == 'pay.touch_user_count/login.touch_user_count':
|
||||
|
@ -223,10 +223,20 @@ async def get_event(attr, game):
|
||||
:param game: str 游戏名
|
||||
:return: str 事件名
|
||||
"""
|
||||
res = await crud.event_point.all_event(get_database(),game)
|
||||
event_name=''
|
||||
res = await crud.event_point.all_event(get_database(), game)
|
||||
event_name = ''
|
||||
for i in res:
|
||||
if attr in i['event_attr']:
|
||||
event_name = i['event_name']
|
||||
break
|
||||
return event_name
|
||||
|
||||
|
||||
def get_time(fmt: str = '%Y-%m-%d') -> str:
|
||||
'''
|
||||
获取当前时间
|
||||
'''
|
||||
ts = time.time()
|
||||
ta = time.localtime(ts)
|
||||
t = time.strftime(fmt, ta)
|
||||
return t
|
||||
|
Loading…
Reference in New Issue
Block a user