1.新增日充总额订单详情下载功能
2.新增分布分析-分组项可按自定义区间,默认区间进行分组
This commit is contained in:
parent
a26f3035bb
commit
44a001ba22
@ -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']
|
||||
if analysis.event_view['groupBy'] != []:
|
||||
columnName = analysis.event_view['groupBy'][-1]['columnName']
|
||||
if analysis.event_view['groupBy'] != []:
|
||||
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)
|
||||
@ -1206,6 +1236,69 @@ async def scatter_model(
|
||||
|
||||
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='')
|
||||
|
||||
@router.post("/trace_model_sql")
|
||||
|
@ -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 # 结束时间
|
Loading…
Reference in New Issue
Block a user