1.新增日充总额订单详情下载功能

2.新增分布分析-分组项可按自定义区间,默认区间进行分组
This commit is contained in:
李伟 2022-04-27 09:43:04 +08:00
parent a26f3035bb
commit 44a001ba22
2 changed files with 100 additions and 3 deletions

View File

@ -111,8 +111,36 @@ async def event_model_export(request: Request,
export = d.to_stream()
return StreamingResponse(export, media_type=mime, headers={'Content-Disposition': f'filename="{file_name}"'})
@router.post("/event_model_pay")
async def event_model_export(request: Request,
game: str,
data_in: schemas.Times,
ckdb: CKDrive = Depends(get_ck_db)
):
"""下载日充总额详细订单数据"""
sql=f"""select * FROM {game}.event WHERE addHours(`#event_time`, 8) >= '{data_in.start_time}' and addHours(`#event_time`, 8) <= '{data_in.end_time}' and `#event_name` = 'pay' and
orderid NOT LIKE '%GM%' order by `#event_time`"""
df = await ckdb.query_dataframe(sql)
list_columns=list(df.columns.values)
drop_list=[]
for i in list_columns:
aa=type(df[i][0])
if df[i][0] == None or df[i][0] == [] or df[i][0] == '':
drop_list.append(i)
else:
if 'time' in i :
df[i] = df[i].astype(str)
for nu in range(len(df)):
df.replace(to_replace=df[i][nu],value=df[i][nu].split('+')[0],inplace=True)
df.drop(drop_list, axis=1, inplace=True)
file_name=quote(f'订单详情.xlsx')
mime = mimetypes.guess_type(file_name)[0]
df_to_stream = DfToStream((df, '订单详情'))
with df_to_stream as d:
export = d.to_stream()
return StreamingResponse(export, media_type=mime, headers={'Content-Disposition': f'filename="{file_name}"'})
#
# @router.get("/event_model_export")
# async def event_model_export(request: Request,
# game: str,
@ -1136,9 +1164,11 @@ async def scatter_model(
res = await analysis.scatter_model_sql()
except Exception as e:
return schemas.Msg(code=-9, msg='报表配置参数异常')
event_type = analysis.events[0]['eventName']
where = analysis.events[-1]['quotaname']
sql=res['sql']
columnName = analysis.event_view['groupBy'][-1]['columnName']
if analysis.event_view['groupBy'] != []:
columnName=analysis.event_view['groupBy'][-1]['columnName']
sql=sql.replace(f'toDate(addHours({game}.event."#event_time", 8)) AS date', f'max(`{columnName}`) as va', 1)
sql=sql.replace(f'toDate(addHours({game}.event."#event_time", 8)),','',1)
df = await ckdb.query_dataframe(sql)
@ -1204,6 +1234,69 @@ async def scatter_model(
'p': p,
'title': '总体'}
return schemas.Msg(code=0, msg='ok', data=resp)
else:
resp = {'list': {}, 'label': [],
'start_date': res['start_date'],
'end_date': res['end_date'],
'time_particle': res['time_particle'],
'biaotou':columnName
}
labels = [str(i) for i in sorted(df['values'].unique())]
resp['label'] = labels
for key, tmp_df in df.groupby(['va']):
total = len(tmp_df)
if res['time_particle'] == 'total':
dt = '合计'
else:
dt = key
#dt = key.strftime('%Y-%m-%d')
#dt='合计'
labels_dict = {}
for key2, tmp_df2 in tmp_df.groupby('values'):
label = str(key2)
n = len(tmp_df2)
labels_dict[label] = n
if event_type == 'pay':
# 如需要2之后所有之和则执行下面代码返回值为字典的labels_dict01
labels_dict01 = {}
v = -1
for i in labels:
v += 1
if int(i) == 1:
labels_dict01["1"] = labels_dict["1"]
else:
# for number in labels_dict.keys():
# if number >=i:
values = list(labels_dict.values())
n = sum(values[v:])
labels_dict01[i] = n
# 传入百分比数据
list_p = []
for i in labels:
number_int = round(labels_dict01.get(i, 0) * 100 / total, 2)
number_str = str(number_int) + '%'
list_p.append(number_str)
resp['list'][dt] = {'n': [labels_dict01.get(i, 0) for i in labels], 'total': total,
'p': list_p}
else:
list_p = []
for i in labels:
number_int = round(labels_dict.get(i, 0) * 100 / total, 2)
number_str = str(number_int) + '%'
list_p.append(number_str)
resp['list'][dt] = {'n': [labels_dict.get(i, 0) for i in labels], 'total': total,
'p': list_p}
# resp['list'][dt] = {'总体': {'n': [labels_dict.get(i, 0) for i in labels], 'total': total,
# 'p': [round(labels_dict.get(i, 0) * 100 / total, 2) for i in labels]}}
if where == "step_id" and event_type == "guide":
sql = f"""SELECT toDate(addHours({game}.event."#event_time", 8)) AS date, count(DISTINCT {game}.event."#account_id") AS values FROM {game}.event WHERE addHours({game}.event."#event_time", 8) >= '{start_date}' AND addHours({game}.event."#event_time", 8) <= '{end_date}' AND {game}.event."#event_name" = 'create_account' GROUP BY toDate(addHours({game}.event."#event_time", 8)) ORDER BY date"""
df = await ckdb.query_dataframe(sql)
for i in range(len(df)):
resp['list'][str(df['date'][i])]['总体']['total'] = int(df['values'][i])
return schemas.Msg(code=0, msg='ok', data=resp)
else:
return schemas.Msg(code=-9, msg='没有添加分组项', data='')

View File

@ -31,3 +31,7 @@ class Ck_solo_user(BaseModel):
start_time: str # 开始时间 例2022-04-02
end_time: str # 结束时间
event_list: List[Dict] =None#事件名
class Times(BaseModel):
start_time: str # 开始时间 例2022-04-02 00:00:00
end_time: str # 结束时间