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)