diff --git a/Controller/BigScreenController.py b/Controller/BigScreenController.py index 2d941f2..90082da 100644 --- a/Controller/BigScreenController.py +++ b/Controller/BigScreenController.py @@ -23,3 +23,7 @@ async def get_urbanization_rate_chart_config(): async def get_preschool_education_chart_config(): return RuYuanZaiYuanModel.generate_preschool_education_config() +@router.get("/school/preschool/inschool/chart") +async def get_preschool_in_school_chart_config(): + return RuYuanZaiYuanModel.generate_in_school_education_config() + diff --git a/Controller/__pycache__/BigScreenController.cpython-310.pyc b/Controller/__pycache__/BigScreenController.cpython-310.pyc index 3331c11..85c8eb0 100644 Binary files a/Controller/__pycache__/BigScreenController.cpython-310.pyc and b/Controller/__pycache__/BigScreenController.cpython-310.pyc differ diff --git a/Log/1.log b/Log/1.log index 38d64ca..b35c5c6 100644 --- a/Log/1.log +++ b/Log/1.log @@ -1,316 +1,186 @@ -{ - "animation": true, - "animationThreshold": 2000, - "animationDuration": 1000, - "animationEasing": "cubicOut", - "animationDelay": 0, - "animationDurationUpdate": 300, - "animationEasingUpdate": "cubicOut", - "animationDelayUpdate": 0, - "aria": { - "enabled": false - }, - "color": [ - "#5470c6", - "#91cc75", - "#fac858", - "#ee6666", - "#73c0de", - "#3ba272", - "#fc8452", - "#9a60b4", - "#ea7ccc" - ], - "series": [ - { - "type": "bar", - "name": "总人口", - "legendHoverLink": true, - "data": [], - "realtimeSort": false, - "showBackground": false, - "stack": "stack1", - "stackStrategy": "samesign", - "cursor": "pointer", - "barMinHeight": 0, - "barCategoryGap": "20%", - "barGap": "30%", - "large": false, - "largeThreshold": 400, - "seriesLayoutBy": "column", - "datasetIndex": 0, - "clip": true, - "zlevel": 0, - "z": 2, - "label": { - "show": false, - "margin": 8, - "valueAnimation": false - }, - "markLine": { - "silent": false, - "precision": 2, - "label": { - "show": true, - "margin": 8, - "valueAnimation": false - }, - "data": [ - { - "name": "平均值", - "type": "average" - } - ] - }, - "rippleEffect": { - "show": true, - "brushType": "stroke", - "scale": 2.5, - "period": 4 - } - }, - { - "type": "bar", - "name": "城镇人口", - "legendHoverLink": true, - "data": [], - "realtimeSort": false, - "showBackground": false, - "stack": "stack1", - "stackStrategy": "samesign", - "cursor": "pointer", - "barMinHeight": 0, - "barCategoryGap": "20%", - "barGap": "30%", - "large": false, - "largeThreshold": 400, - "seriesLayoutBy": "column", - "datasetIndex": 0, - "clip": true, - "zlevel": 0, - "z": 2, - "label": { - "show": false, - "margin": 8, - "valueAnimation": false - }, - "markLine": { - "silent": false, - "precision": 2, - "label": { - "show": true, - "margin": 8, - "valueAnimation": false - }, - "data": [ - { - "name": "平均值", - "type": "average" - } - ] - }, - "rippleEffect": { - "show": true, - "brushType": "stroke", - "scale": 2.5, - "period": 4 - } - }, - { - "type": "bar", - "name": "农村人口", - "legendHoverLink": true, - "data": [], - "realtimeSort": false, - "showBackground": false, - "stack": "stack1", - "stackStrategy": "samesign", - "cursor": "pointer", - "barMinHeight": 0, - "barCategoryGap": "20%", - "barGap": "30%", - "large": false, - "largeThreshold": 400, - "seriesLayoutBy": "column", - "datasetIndex": 0, - "clip": true, - "zlevel": 0, - "z": 2, - "label": { - "show": false, - "margin": 8, - "valueAnimation": false - }, - "markLine": { - "silent": false, - "precision": 2, - "label": { - "show": true, - "margin": 8, - "valueAnimation": false - }, - "data": [ - { - "name": "平均值", - "type": "average" - } - ] - }, - "rippleEffect": { - "show": true, - "brushType": "stroke", - "scale": 2.5, - "period": 4 - } - } - ], - "legend": [ - { - "data": [ - "总人口", - "城镇人口", - "农村人口" - ], - "selected": {}, - "show": true, - "top": "5%", - "padding": 5, - "itemGap": 10, - "itemWidth": 25, - "itemHeight": 14, - "backgroundColor": "transparent", - "borderColor": "#ccc", - "borderRadius": 0, - "pageButtonItemGap": 5, - "pageButtonPosition": "end", - "pageFormatter": "{current}/{total}", - "pageIconColor": "#2f4554", - "pageIconInactiveColor": "#aaa", - "pageIconSize": 15, - "animationDurationUpdate": 800, - "selector": false, - "selectorPosition": "auto", - "selectorItemGap": 7, - "selectorButtonGap": 10 - } - ], - "tooltip": { - "show": true, - "trigger": "axis", - "triggerOn": "mousemove|click", - "axisPointer": { - "type": "shadow" - }, - "showContent": true, - "alwaysShowContent": false, - "showDelay": 0, - "hideDelay": 100, - "enterable": false, - "confine": false, - "appendToBody": false, - "transitionDuration": 0.4, - "textStyle": { - "fontSize": 14 - }, - "borderWidth": 0, - "padding": 5, - "order": "seriesAsc" - }, - "xAxis": [ - { - "show": true, - "scale": false, - "nameLocation": "end", - "nameGap": 15, - "gridIndex": 0, - "axisLabel": { - "show": true, - "rotate": 45, - "margin": 8, - "valueAnimation": false - }, - "inverse": false, - "offset": 0, - "splitNumber": 5, - "minInterval": 0, - "splitLine": { - "show": true, - "lineStyle": { - "show": true, - "width": 1, - "opacity": 1, - "curveness": 0, - "type": "solid" - } - }, - "animation": true, - "animationThreshold": 2000, - "animationDuration": 1000, - "animationEasing": "cubicOut", - "animationDelay": 0, - "animationDurationUpdate": 300, - "animationEasingUpdate": "cubicOut", - "animationDelayUpdate": 0, - "data": [] - } - ], - "yAxis": [ - { - "name": "人口数量(万人)", - "show": true, - "scale": false, - "nameLocation": "middle", - "nameGap": 40, - "gridIndex": 0, - "inverse": false, - "offset": 0, - "splitNumber": 5, - "minInterval": 0, - "splitLine": { - "show": true, - "lineStyle": { - "show": true, - "width": 1, - "opacity": 1, - "curveness": 0, - "type": "solid" - } - }, - "animation": true, - "animationThreshold": 2000, - "animationDuration": 1000, - "animationEasing": "cubicOut", - "animationDelay": 0, - "animationDurationUpdate": 300, - "animationEasingUpdate": "cubicOut", - "animationDelayUpdate": 0 - } - ], - "title": [ - { - "show": true, - "text": "云南省各州市人口分布图(2024年)", - "target": "blank", - "subtarget": "blank", - "padding": 5, - "itemGap": 10, - "textAlign": "auto", - "textVerticalAlign": "auto", - "triggerEvent": false - } - ], - "dataZoom": [ - { - "show": true, - "type": "slider", - "showDetail": true, - "showDataShadow": true, - "realtime": true, - "start": 20, - "end": 80, - "orient": "horizontal", - "zoomLock": false, - "filterMode": "filter" - } - ] -} \ No newline at end of file +C:\Users\Administrator\.conda\envs\yunnan\python.exe D:\dsWork\YunNanProject\Start.py +INFO: Started server process [2204] +INFO: Waiting for application startup. +INFO: Application startup complete. +INFO: Uvicorn running on http://0.0.0.0:8100 (Press CTRL+C to quit) +INFO: 127.0.0.1:62068 - "GET /static/preschool_education.html HTTP/1.1" 200 OK +INFO: 127.0.0.1:62068 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK +INFO: 127.0.0.1:62068 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error +ERROR: Exception in ASGI application +Traceback (most recent call last): + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi + result = await app( # type: ignore[func-returns-value] + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ + return await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__ + await super().__call__(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__ + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app + await route.handle(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle + await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app + response = await f(request) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app + raw_response = await run_endpoint_function( + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function + return await dependant.call(**values) + File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config + return RuYuanZaiYuanModel.generate_in_school_education_config() + File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config + in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {}) +KeyError: 'education_data' +INFO: 127.0.0.1:62715 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK +ERROR: Exception in ASGI application +Traceback (most recent call last): + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi + result = await app( # type: ignore[func-returns-value] + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ + return await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__ + await super().__call__(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__ + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app + await route.handle(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle + await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app + response = await f(request) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app + raw_response = await run_endpoint_function( + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function + return await dependant.call(**values) + File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config + return RuYuanZaiYuanModel.generate_in_school_education_config() + File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config + in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {}) +KeyError: 'education_data' +INFO: 127.0.0.1:62715 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error +INFO: 127.0.0.1:54014 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK +INFO: 127.0.0.1:54014 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error +ERROR: Exception in ASGI application +Traceback (most recent call last): + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi + result = await app( # type: ignore[func-returns-value] + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ + return await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__ + await super().__call__(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__ + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app + await route.handle(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle + await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app + response = await f(request) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app + raw_response = await run_endpoint_function( + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function + return await dependant.call(**values) + File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config + return RuYuanZaiYuanModel.generate_in_school_education_config() + File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config + in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {}) +KeyError: 'education_data' +INFO: 127.0.0.1:59952 - "GET /bigscreen/school/preschool/chart HTTP/1.1" 200 OK +INFO: 127.0.0.1:59952 - "GET /bigscreen/school/preschool/inschool/chart HTTP/1.1" 500 Internal Server Error +ERROR: Exception in ASGI application +Traceback (most recent call last): + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi + result = await app( # type: ignore[func-returns-value] + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ + return await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\applications.py", line 1054, in __call__ + await super().__call__(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\applications.py", line 113, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 186, in __call__ + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\errors.py", line 164, in __call__ + await self.app(scope, receive, _send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\middleware\exceptions.py", line 63, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 716, in __call__ + await self.middleware_stack(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 736, in app + await route.handle(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 290, in handle + await self.app(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 78, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\starlette\routing.py", line 75, in app + response = await f(request) + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 302, in app + raw_response = await run_endpoint_function( + File "C:\Users\Administrator\.conda\envs\yunnan\lib\site-packages\fastapi\routing.py", line 213, in run_endpoint_function + return await dependant.call(**values) + File "D:\dsWork\YunNanProject\Controller\BigScreenController.py", line 28, in get_preschool_in_school_chart_config + return RuYuanZaiYuanModel.generate_in_school_education_config() + File "D:\dsWork\YunNanProject\Model\RuYuanZaiYuanCount.py", line 197, in generate_in_school_education_config + in_school_year_data = yunnan_in_school["education_data"]["preschool"].get(year, {}) +KeyError: 'education_data' \ No newline at end of file diff --git a/Model/RuYuanZaiYuanCount.py b/Model/RuYuanZaiYuanCount.py index 325460b..11f6de3 100644 --- a/Model/RuYuanZaiYuanCount.py +++ b/Model/RuYuanZaiYuanCount.py @@ -51,11 +51,7 @@ class RuYuanZaiYuanModel: # 计算总和作为总入园数,而非使用文件中的total字段 calculated_total = enroll_data.get("urban", 0) + enroll_data.get("town", 0) + enroll_data.get("rural", 0) total_enroll.append(calculated_total / 10000) # 转换为万人 - # print(f"{year}年城区入园数: {enroll_data.get('urban', 0)}") - # print(f"{year}年镇区入园数: {enroll_data.get('town', 0)}") - # print(f"{year}年乡村入园数: {enroll_data.get('rural', 0)}") - # print(f"{year}年入园数: {calculated_total}") - + # 构建ECharts配置 option = { # "title": { @@ -109,7 +105,7 @@ class RuYuanZaiYuanModel: "type": "value", "name": "总入园数", "min": 0, - "max": 140, # 增加最大值以留出更多空间 + "max": 140, "interval": 20, "position": "right", "nameLocation": "end", # 将名称放在轴末端 @@ -175,4 +171,150 @@ class RuYuanZaiYuanModel: "containLabel": True } } + return option + + @staticmethod + def generate_in_school_education_config(): + # 获取学前教育相关数据 + enrollment_data, in_school_data = RuYuanZaiYuanModel.load_student_data() + + # 提取云南省级数据 + yunnan_in_school = next((item for item in in_school_data if item["area_name"] == "云南省"), None) + + if not yunnan_in_school: + return {} + + # 提取年份数据(2015-2024) + years = [str(year) for year in range(2015, 2025)] + + # 构建学前教育数据 + urban_data = [] # 城区数据 + town_data = [] # 镇区数据 + rural_data = [] # 乡村数据 + total_in_school = [] # 总在园数 + + for year in years: + # 将education_data改为student_data + in_school_year_data = yunnan_in_school["student_data"]["preschool"].get(year, {}) + urban_data.append(in_school_year_data.get("urban", 0) / 10000) # 转换为万人 + town_data.append(in_school_year_data.get("town", 0) / 10000) # 转换为万人 + rural_data.append(in_school_year_data.get("rural", 0) / 10000) # 转换为万人 + # 计算总和作为总在园数 + calculated_total = in_school_year_data.get("urban", 0) + in_school_year_data.get("town", 0) + in_school_year_data.get("rural", 0) + total_in_school.append(calculated_total / 10000) # 转换为万人 + + # 构建ECharts配置 + option = { + "tooltip": { + "trigger": "axis", + "axisPointer": { + "type": "cross", + "crossStyle": {"color": "#999"} + }, + "textStyle": {"color": "#333"}, + "backgroundColor": "rgba(255, 255, 255, 0.8)", + "borderColor": "rgba(0, 0, 0, 0.2)", + "borderWidth": 1 + }, + "legend": { + "data": ["城区", "镇区", "乡村", "总在园数"], + "top": 30, + "textStyle": {"color": "#333"}, + "icon": "roundRect", + "itemWidth": 12, + "itemHeight": 12 + }, + "xAxis": [ + { + "type": "category", + "data": years, + "axisPointer": {"type": "shadow"}, + "axisLabel": {"color": "#333"}, + "axisLine": {"lineStyle": {"color": "#333"}} + } + ], + "yAxis": [ + { + "type": "value", + "name": "人数", + "min": 0, + "max": 100, + "interval": 20, + "axisLabel": { + "formatter": "{value} 万人", + "color": "#333" + }, + "axisLine": {"lineStyle": {"color": "#333"}}, + "splitLine": {"lineStyle": {"color": "rgba(0,0,0,0.1)"}} + }, + { + "type": "value", + "name": "总在园数", + "min": 0, + "max": 140, + "interval": 20, + "position": "right", + "nameLocation": "end", + "nameGap": 30, + "axisLabel": { + "formatter": "{value} 万人", + "color": "#ee6666" + }, + "axisLine": {"show": True, "lineStyle": {"color": "#ee6666"}}, + "axisTick": {"show": True}, + "splitLine": {"show": False} + } + ], + "series": [ + { + "name": "城区", + "type": "bar", + "data": urban_data, + "itemStyle": { + "color": "#5470c6", + "borderRadius": [6, 6, 0, 0] + }, + "barWidth": "25%", + "barGap": "-10%" + }, + { + "name": "镇区", + "type": "bar", + "data": town_data, + "itemStyle": { + "color": "#91cc75", + "borderRadius": [6, 6, 0, 0] + }, + "barWidth": "25%", + "barGap": "-10%" + }, + { + "name": "乡村", + "type": "bar", + "data": rural_data, + "itemStyle": { + "color": "#fac858", + "borderRadius": [6, 6, 0, 0] + }, + "barWidth": "25%", + "barGap": "-10%" + }, + { + "name": "总在园数", + "type": "line", + "yAxisIndex": 1, + "data": total_in_school, + "lineStyle": {"color": "#ee6666", "width": 3}, + "symbol": "circle", + "symbolSize": 8, + "itemStyle": {"color": "#ee6666"} + } + ], + "grid": { + "left": "3%", + "right": "8%", + "bottom": "3%", + "containLabel": True + } + } return option \ No newline at end of file diff --git a/Model/__pycache__/RuYuanZaiYuanCount.cpython-310.pyc b/Model/__pycache__/RuYuanZaiYuanCount.cpython-310.pyc index 38cf5da..9ec1255 100644 Binary files a/Model/__pycache__/RuYuanZaiYuanCount.cpython-310.pyc and b/Model/__pycache__/RuYuanZaiYuanCount.cpython-310.pyc differ diff --git a/Start.py b/Start.py index 441ccbf..d00936e 100644 --- a/Start.py +++ b/Start.py @@ -17,4 +17,4 @@ app.include_router(bigscreen_router) # 主程序入口 if __name__ == "__main__": # 启动 FastAPI 应用,监听 8200 端口 - uvicorn.run(app, host="0.0.0.0", port=8200) \ No newline at end of file + uvicorn.run(app, host="0.0.0.0", port=8100) \ No newline at end of file diff --git a/static/preschool_education.html b/static/preschool_education.html index 751c5bb..f8630ac 100644 --- a/static/preschool_education.html +++ b/static/preschool_education.html @@ -95,7 +95,13 @@ // 加载学前教育数据 function loadPreschoolData() { showLoading(); - $.getJSON('/bigscreen/school/preschool/chart') + + // 根据当前类型加载不同数据 + var url = currentType === 'enroll' ? + '/bigscreen/school/preschool/chart' : + '/bigscreen/school/preschool/inschool/chart'; + + $.getJSON(url) .done(function(data) { chartData = data; renderChart(); @@ -116,7 +122,7 @@ $('.btn').removeClass('active'); $(this).addClass('active'); currentType = $(this).data('type'); - renderChart(); + loadPreschoolData(); // 点击按钮后重新加载数据,而不是只渲染 }); // 窗口大小变化时调整图表