You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
7.7 KiB

from Utils.Db import Db
from unittest import mock
from snapshot_selenium import snapshot as driver
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie
from pyecharts.render import make_snapshot
from selenium.webdriver.chrome.options import Options
option = Options()
option.add_argument('--headless')
option.add_argument('--no-sandbox')
option.add_argument('--disable-dev-shm-usage')
def get_chrome_driver():
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless")
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
return webdriver.Chrome(options=options)
# 获取学校情况
def getSchoolInfo(basepath, year):
sql = "SELECT SUM ( CASE schooltype WHEN '小学' THEN total END) AS xx_1,SUM ( CASE schooltype WHEN '初级中学' THEN total END) AS cjzx_1,SUM ( CASE schooltype WHEN '高级中学' THEN total END) AS gjzx_1,SUM ( CASE schooltype WHEN '完全中学' THEN total END) AS wqzx_1,SUM ( CASE schooltype WHEN '九年一贯制学校' THEN total END) AS jnygz_1,SUM ( CASE schooltype WHEN '十二年一贯制学校' THEN total END) AS senygz_1,sum(total) as total_1 FROM mv_dp_school_count_area WHERE recordyear = %s"
sql = sql % year
res = Db.find(sql)
obj = res[0]
x_data = ["小学", "初级中学", "高级中学", "完全中学", "九年一贯制学校", "十二年一贯制学校"]
y_data = [obj['xx_1'], obj['cjzx_1'], obj['gjzx_1'], obj['wqzx_1'], obj['jnygz_1'], obj['senygz_1']]
c = (
Pie(init_opts=opts.InitOpts(
animation_opts=opts.AnimationOpts(
animation=False
)
))
.add("", data_pair=[list(z) for z in zip(x_data, y_data)], radius=["40%", "75%"])
.set_colors(["#264478", "#006FA1", "#0099AE", "#00C09F", "#86E182", "#F9F871"])
)
# 导出图片
with mock.patch('snapshot_selenium.snapshot.get_chrome_driver', get_chrome_driver):
# 需要安装 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, c.render(), basepath + "/OutImage/1.png", delay=0.3)
return obj
# 获取学生情况
def getStudentInfo(basepath, year):
sql = "SELECT SUM(CASE stage WHEN '小学' THEN zaixiaono END ) AS xx_2,SUM(CASE stage WHEN '初中' THEN zaixiaono END ) AS cz_2,SUM(CASE stage WHEN '高中' THEN zaixiaono END ) AS gz_2,SUM(zaixiaono ) AS total_2,SUM(CASE stage WHEN '小学' THEN biyeno END ) AS by_xx_2,SUM(CASE stage WHEN '初中' THEN biyeno END ) AS by_cz_2,SUM(CASE stage WHEN '高中' THEN biyeno END ) AS by_gz_2,SUM(biyeno) AS by_total_2 FROM mv_dp_student_area WHERE recordyear = %s"
sql = sql % year
res = Db.find(sql)
obj = res[0]
c = (
Bar(init_opts=opts.InitOpts(
animation_opts=opts.AnimationOpts(
animation=False
)
))
.add_xaxis(['小学', '初中', '高中'])
.add_yaxis("在校生", [obj['xx_2'], obj['cz_2'], obj['gz_2']], color="#5B9BD5", category_gap="50%")
.add_yaxis("毕业生", [obj['by_xx_2'], obj['by_cz_2'], obj['by_gz_2']], color="#EB7073", category_gap="50%")
)
# 导出图片
with mock.patch('snapshot_selenium.snapshot.get_chrome_driver', get_chrome_driver):
# 需要安装 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, c.render(), basepath + "/OutImage/2.png", delay=0.3)
return obj
# 获取教职工
def getJzgInfo(basepath, year):
sql = "select SUM ( CASE schooltype WHEN '小学' THEN total END) AS xx_3,SUM ( CASE schooltype WHEN '初级中学' THEN total END) AS cjzx_3,SUM ( CASE schooltype WHEN '高级中学' THEN total END) AS gjzx_3,SUM ( CASE schooltype WHEN '完全中学' THEN total END) AS wqzx_3,SUM ( CASE schooltype WHEN '九年一贯制学校' THEN total END) AS jnygz_3,SUM ( CASE schooltype WHEN '十二年一贯制学校' THEN total END) AS senygz_3,sum(total) as total_3 from mv_dp_teacher_jzg_count_area WHERE recordyear = %s"
sql = sql % year
res = Db.find(sql)
obj = res[0]
c = (
Bar(init_opts=opts.InitOpts(
animation_opts=opts.AnimationOpts(
animation=False
)
))
.add_xaxis(["小学", "初级中学", "高级中学", "完全中学", "九年一贯制学校", "十二年一贯制学校"])
.add_yaxis("", [obj['xx_3'], obj['cjzx_3'], obj['gjzx_3'], obj['wqzx_3'], obj['jnygz_3'], obj['senygz_3']],
color="#ED7D31", category_gap="50%")
.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)))
)
# 导出图片
with mock.patch('snapshot_selenium.snapshot.get_chrome_driver', get_chrome_driver):
# 需要安装 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, c.render(), basepath + "/OutImage/3.png", delay=0.3)
return obj
# 获取专任教师
def getZrjsInfo(basepath, year):
sql = "SELECT SUM ( CASE stage WHEN '小学' THEN total END) AS xx_4,SUM ( CASE stage WHEN '初中' THEN total END) AS cz_4,SUM ( CASE stage WHEN '高中' THEN total END) AS gz_4,sum(total) as total_4 from mv_dp_teacher_zrjs_count_area WHERE recordyear = %s"
sql = sql % year
res = Db.find(sql)
obj = res[0]
c = (
Bar(init_opts=opts.InitOpts(
animation_opts=opts.AnimationOpts(
animation=False
)
))
.add_xaxis(['小学', '初中', '高中'])
.add_yaxis("", [obj['xx_4'], obj['cz_4'], obj['gz_4']], color="#E45C64", category_gap="50%")
)
# 导出图片
with mock.patch('snapshot_selenium.snapshot.get_chrome_driver', get_chrome_driver):
# 需要安装 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, c.render(), basepath + "/OutImage/4.png", delay=0.3)
return obj
# 获取办学条件的占地面积
def getZdmjInfo(basepath, year):
sql = "SELECT SUM ( CASE stage WHEN '小学' THEN zhandimianjino END) AS xx_zdmj_5,SUM ( CASE stage WHEN '小学' THEN xiaosheno END) AS xx_xsmj_5,SUM ( CASE stage WHEN '初中' THEN zhandimianjino END) AS cz_zdmj_5,SUM ( CASE stage WHEN '初中' THEN xiaosheno END) AS cz_xsmj_5,SUM ( CASE stage WHEN '高中' THEN zhandimianjino END) AS gz_zdmj_5,SUM ( CASE stage WHEN '高中' THEN xiaosheno END) AS gz_xsmj_5 FROM mv_dp_banxuetiaojian_area WHERE recordyear = %s"
sql = sql % year
res = Db.find(sql)
obj = res[0]
c = (
Bar(init_opts=opts.InitOpts(
animation_opts=opts.AnimationOpts(
animation=False
)
))
.add_xaxis(['小学', '初中', '高中'])
.add_yaxis("学校占地面积", [obj['xx_zdmj_5'], obj['cz_zdmj_5'], obj['gz_zdmj_5']], color="#70AD47",
category_gap="50%")
.add_yaxis("校舍建筑面积", [obj['xx_xsmj_5'], obj['cz_xsmj_5'], obj['gz_xsmj_5']], color="#005AA2",
category_gap="50%")
)
# 导出图片
with mock.patch('snapshot_selenium.snapshot.get_chrome_driver', get_chrome_driver):
# 需要安装 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, c.render(), basepath + "/OutImage/5.png", delay=0.3)
return obj
# 获取办学条件的其它
def getQtInfo(year):
sql = "SELECT tushu as ts_6,jisuanji as jsj_6,gudingzichan as gdzc_6,jiaoxueyiqi as jxyq_6 FROM mv_dp_bxtj2 WHERE recordyear = %s"
sql = sql % year
res = Db.find(sql)
obj = res[0]
return obj
if __name__ == '__main__':
getSchoolInfo(r"D:\dsWork\baseServiceJava\ETL\Mars", 2020)