From 80cac5260049ecbfa5170142ac0b07a954881cdd Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Mon, 17 Mar 2025 11:28:29 +0800 Subject: [PATCH] 'commit' --- AI/Text2Sql/Util/EchartsUtil.py | 86 +-- .../__pycache__/EchartsUtil.cpython-310.pyc | Bin 3360 -> 3284 bytes AI/Text2Sql/__pycache__/app.cpython-310.pyc | Bin 8111 -> 7902 bytes AI/Text2Sql/app.py | 31 +- .../c37ac7ef-626a-4bff-a739-abb8bb07c676.html | 715 ++++++++++++++++++ 5 files changed, 765 insertions(+), 67 deletions(-) create mode 100644 AI/Text2Sql/static/html/c37ac7ef-626a-4bff-a739-abb8bb07c676.html diff --git a/AI/Text2Sql/Util/EchartsUtil.py b/AI/Text2Sql/Util/EchartsUtil.py index a5b00d01..6e7c5836 100644 --- a/AI/Text2Sql/Util/EchartsUtil.py +++ b/AI/Text2Sql/Util/EchartsUtil.py @@ -5,7 +5,6 @@ import os def generate_chart( _data, - chart_type: str, # 图表类型:'bar' 或 'pie' title: str, # 图表标题 category_columns: list, # 分类数据列(X 轴或饼图标签) value_column: str, # 数值数据列(Y 轴或饼图值) @@ -49,52 +48,48 @@ def generate_chart( ''') # 生成柱形图 - if chart_type == 'bar': - chart = Bar() - chart.add_xaxis(categories) - chart.add_yaxis( - series_name=value_column, - y_axis=values, - bar_width="30%", - itemstyle_opts=opts.ItemStyleOpts(color=color_js) - ) - chart.set_global_opts( - title_opts=opts.TitleOpts(title=title), - xaxis_opts=opts.AxisOpts( - name=" - ".join(category_columns), - axislabel_opts=opts.LabelOpts(rotate=45), - boundary_gap=True, - splitline_opts=opts.SplitLineOpts(is_show=False) - ), - yaxis_opts=opts.AxisOpts(name=value_column), - legend_opts=opts.LegendOpts(is_show=False) - ) + bar_chart = Bar() + bar_chart.add_xaxis(categories) + bar_chart.add_yaxis( + series_name=value_column, + y_axis=values, + bar_width="30%", + itemstyle_opts=opts.ItemStyleOpts(color=color_js) + ) + bar_chart.set_global_opts( + title_opts=opts.TitleOpts(title=title), + xaxis_opts=opts.AxisOpts( + name=" - ".join(category_columns), + axislabel_opts=opts.LabelOpts(rotate=45), + boundary_gap=True, + splitline_opts=opts.SplitLineOpts(is_show=False) + ), + yaxis_opts=opts.AxisOpts(name=value_column), + legend_opts=opts.LegendOpts(is_show=False) + ) # 生成饼形图 - elif chart_type == 'pie': - data_pairs = list(zip(categories, values)) - chart = Pie() - chart.add( - series_name="占比", - data_pair=data_pairs, - radius=["30%", "55%"], - label_opts=opts.LabelOpts( - formatter="{b}\n{d}%", - position="outside", - font_size=14 - ), - itemstyle_opts=opts.ItemStyleOpts(color=color_js) - ) - chart.set_global_opts( - title_opts=opts.TitleOpts( - title=title, - subtitle="数据维度:" + " → ".join(category_columns) - ), - legend_opts=opts.LegendOpts(is_show=False) - ) + data_pairs = list(zip(categories, values)) + pie_chart = Pie() + pie_chart.add( + series_name="占比", + data_pair=data_pairs, + radius=["30%", "55%"], + label_opts=opts.LabelOpts( + formatter="{b}\n{d}%", + position="outside", + font_size=14 + ), + itemstyle_opts=opts.ItemStyleOpts(color=color_js) + ) + pie_chart.set_global_opts( + title_opts=opts.TitleOpts( + title=title, + subtitle="数据维度:" + " → ".join(category_columns) + ), + legend_opts=opts.LegendOpts(is_show=False) + ) - else: - raise ValueError("不支持的图表类型!") # 确保目标目录存在 os.makedirs(os.path.dirname(output_file), exist_ok=True) @@ -102,7 +97,8 @@ def generate_chart( # 创建 Page 实例,并指定标题 page = Page(page_title="长春云校数据统计分析系统") # 将两个图表添加到 Page 实例中 - page.add(chart) + page.add(bar_chart) + page.add(pie_chart) # 将 Page 实例保存为 HTML 文件 page.render(output_file) diff --git a/AI/Text2Sql/Util/__pycache__/EchartsUtil.cpython-310.pyc b/AI/Text2Sql/Util/__pycache__/EchartsUtil.cpython-310.pyc index b7b4134ee2fcece0d82bee051f5c220c27d28dbb..b0077f2308478de08b1529570a93e1f853de09e4 100644 GIT binary patch delta 1018 zcmYjQO=}cM7_PVatGfCl-9u{_)!@{zEK)k3#*L|y#tQOSM&-?vUcXhA)`{be3D3XlU z*{6Rrej8xyA7gyId@_#HZk^vabZlRUZX(f30u=Q06M0Rb#Nd&$7@~cS)uN3j$2MLc zJ?(teg1Ry@!!ljo0%Q08Qmo}=450%*L6>!*0VQ^lT^?*Z%25pYB)bD?g)%JV=AgFhqa}WJxjTp08GiI-38@gkU33P z`55MaQEnFzk9jI7!1<{VbWZGqM zHlSSPbvVfgvO$s&s<1hP6Dq&}CmXzITgGp&f>XIg)~=jAxkGZo=B}K*`0cik62pBt z&(@vh?x^XU)2QL*2<_3{n6fuXBUTIVIL_c~4(&)qy&)xw(;F7=B~LeQ7gvt4g{pqy)(;PxkbxRcO-VXrIHcy< z6#k+v9Vc^Em%Mj+M4WJi35NQT_z|Y`&*D4%Mx22Oz2H}&te5j(>JI8rnDXs@L~OTFu`4+KLyja`!0_3Y&cVKx5lNkB$pt0 zXvGlom{&kNHFF6=Xv4eEVI8PL zk-f~`%C~H3ONM-yU4pnw2t(Rx21ZwN@53Bm4(&A|3E760s52CwL(5439qDW^bTC#mE%Di-_cZLcqrAx-KLe4Q&W?sby&|c8CV#k zUFhzU))vXeBf6dp;nVm`3avl}-G1q16A8LSjiIW>m$V=MmJDOHO}W<@PM%^E9c{zO z-Oyyo$cJ#54s3g0v#sdx&^~8E*T)&4Z z#QI6Z^a5F2Ak%YCEY3HRb4wQ*(-k#m*Cq#bNt-HN)WS98lNAi&SdNN9v|{4MtSnIRs_(yi=Ldu%2ixpH1eI#faLB zY2HCH%lpaP`Zm4u(U*6wU)%m_t$R3jtMZNR@|=bYf@g7 zyrajh>?fFYv6j@%G-~s4vu8GH^{5BY?oF~=XIChwRj*{P5t|RHO|N7MVT1a{8@I)M z5rm+A^(tlYNH{}=>$=?Kz7aym^Slh=9sVSqQKSAeOsY5i@!4m!hESVh+RSM4-~9d` rR!^L`u!PHt(KHaEIYy?yeDFa47v@9G`D1SIzq!f(;ue3z?eO70f|mHU diff --git a/AI/Text2Sql/__pycache__/app.cpython-310.pyc b/AI/Text2Sql/__pycache__/app.cpython-310.pyc index 83259e11dd1650709ddeb291edd7905ce8209f76..4ba9da3cd838869ce9f3f1e21ec15343addbb2d6 100644 GIT binary patch delta 458 zcmYk0J4jqn5Qfjpz2`nQ*N{TRbvNrH3a*N-5fO{1@oj`O76BWxICp)c+&z`tCF!_dk%nUFwzkcCECPITWv?cQ} z)!~1n;YIuj!L~0KI%$MPX^h6{OTh#|F!@4q;`F=mty14d(|WqP>4$t3#bs?XXQeb5 zZX2LPXoez>~43rTVm2kY&R+@9u|lxC?2!|DoF7Mn$(jQQu-Dxn9^+51Iad^ z^`OxvnoT?i3O$%;IFQPLgAE=`y!Z#0)Wm2ENKd`jA2?gk$eVoLy!V}NGH>Sdsiofb z$v{9QJYGNkcs+WAkZ)e|e>Cx?kCTm*+TYXZ9_+=|0yPx`?E6=pZd9_lKM!LPhRg$a zhI5wF&l%w8=E3npV;Y{r!MkD}u63GS7@MGvzGCP z@8~?SK40RVTKQpDt^Bn5qRbojRVX3*?5T`7l0sJr8`F|^%XWCbA#>hwvU5D$2Aepd zL-KTpAc^t8LIi1uf}=!HE=WMq!EK|$jj@JN-D%wNp&vCz!N44g6Qjvp3AeN~KBU4%6ILBM z49Obcb63>ljf7>7cn@{IhTGIC^;DKgnXX@tfb2%~!@&wmrESaaoru}Y&6I7Z?xemO z=G__nC7H=7uA>s8l$ka8Z)iu>xT>hlj02bX3d%NL_3;W)-svv<- c=iW_9>2J#DFDlTVRHQ!yNvo@E%^+<40c82Dm;e9( diff --git a/AI/Text2Sql/app.py b/AI/Text2Sql/app.py index b10c613c..a005d23d 100644 --- a/AI/Text2Sql/app.py +++ b/AI/Text2Sql/app.py @@ -33,8 +33,8 @@ async def lifespan(app: FastAPI): database=PG_DATABASE, user=PG_USER, password=PG_PASSWORD, - min_size=1, - max_size=10 + min_size=5, + max_size=20 ) yield # 关闭时释放连接池 @@ -274,7 +274,6 @@ async def get_data_scheme_by_id( async def get_chart( question_id: str = Form(None, description="问题ID(POST请求)"), title: str = Form(None, description="图表标题(POST请求)"), - type_id: str = Form(1, description="图表类型ID(POST请求),1:柱图,2:饼图"), category_columns_str: str = Form(None, description="分类数据列(X 轴或饼图标签)"), value_column_str: str = Form(None, description="数值数据列(Y 轴或饼图值)"), db: asyncpg.Connection = Depends(get_db) @@ -289,25 +288,13 @@ async def get_chart( filename = f"static/html/{uuid_str}.html" # 根据图表类型生成图表 - if int(type_id) == 1: # 1、生成柱状图 - generate_chart( - _data=_data, - chart_type='bar', - title=title, - category_columns=category_columns_str.split(","), - value_column=value_column_str, - output_file=filename - ) - elif int(type_id) == 2: # 2、生成饼状图 - generate_chart( - _data=_data, - chart_type='pie', - title=title, - category_columns=category_columns_str.split(","), - value_column=value_column_str, - output_file=filename - ) - + generate_chart( + _data=_data, + title=title, + category_columns=category_columns_str.split(","), + value_column=value_column_str, + output_file=filename + ) # 返回静态文件URL return {"success": True, "message": "图表文件生成成功", "url": filename} diff --git a/AI/Text2Sql/static/html/c37ac7ef-626a-4bff-a739-abb8bb07c676.html b/AI/Text2Sql/static/html/c37ac7ef-626a-4bff-a739-abb8bb07c676.html new file mode 100644 index 00000000..4bdcb6e7 --- /dev/null +++ b/AI/Text2Sql/static/html/c37ac7ef-626a-4bff-a739-abb8bb07c676.html @@ -0,0 +1,715 @@ + + + + + 长春云校数据统计分析系统 + + + + + + +
+
+ +
+ +
+ + +