diff --git a/api/api_v1/endpoints/query.py b/api/api_v1/endpoints/query.py index a5c5fae..740aaff 100644 --- a/api/api_v1/endpoints/query.py +++ b/api/api_v1/endpoints/query.py @@ -1401,16 +1401,35 @@ async def trace_model_sql( if df.empty: return schemas.Msg(code=-9, msg='无数据', data=None) chain_dict = defaultdict(dict) + event_num_dict={} nodes = {'流失'} + name_list=analysis.events['event_namesdes'] + name_dict={} + for i in name_list: + name_dict[i['event_name']]=i['event_desc'] for event_names, count in zip(df['event_chain'], df['values']): + fmt_keys=[] chain_len = len(event_names) for i, event_name in enumerate(event_names): if i >= 10: continue next_event = event_names[i + 1] if i < chain_len - 1 else '流失' - key = (f'{event_name}{i}', f'{next_event}{i + 1}') + #按对应的中文名显示 + event_namess=name_dict.get(event_name,event_name) + next_eventss=name_dict.get(next_event,next_event) + key = (f'{event_namess}-{i}', f'{next_eventss}-{i + 1}') + #key = (f'{event_name}', f'{next_event}') nodes.update(key) chain_dict[i][key] = chain_dict[i].setdefault(key, 0) + count + keys = list(key) + for true_key in keys: + if true_key in fmt_keys: + continue + if true_key in event_num_dict: + event_num_dict[true_key] += count + else: + event_num_dict[true_key] = count + fmt_keys.append(true_key) links = [] for _, items in chain_dict.items(): @@ -1420,15 +1439,30 @@ async def trace_model_sql( "target": keys[1], "value": val }) - # nodes = set() - # for item in links: - # nodes.update(( - # item['source'], - # item['target']) - # ) + node=[ item for item in nodes] + node.sort() + #按固定的首尾排序 + first = [] + trail = [] + nodes = [] + for i in node: + if analysis.events['source_event']['eventDesc'] in i: + first.append(i) + elif '流失' in i: + trail.append(i) + else: + nodes.append(i) + first.sort(reverse=True) + for i in first: + nodes.insert(0, i) + for i in trail: + nodes.append(i) + data = { + #'nodes': [{'name': item} for item in nodes], 'nodes': [{'name': item} for item in nodes], 'links': links, + #'event_num':event_num_dict, 'start_date': res['start_date'], 'end_date': res['end_date'], 'time_particle': res['time_particle']