# coding: utf-8 import datetime import os from celery import Celery from sqlalchemy import and_, or_ from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine, template_folder, temp_img_save_folder, \ redis_host, redis_port, redis_db, redis_password, pdf_save_folder from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport, Customer, ReportView from app.utils.jinjia2html_v2 import DataIntegrate from jinja2 import PackageLoader, Environment from app.utils.html_to_pdf import html_to_pdf celery_app = Celery(__name__) celery_conf = "redis://:{}@{}:{}/{}".format(redis_password,redis_host[0],redis_port[0],redis_db[0]) celery_app.conf.update({"broker_url": celery_conf, "result_backend": celery_conf}) @celery_app.task def save_pdf(id, ifa_id, customer_id, pdf_name, type, report_data): """ 加法 :param x: :param y: :return: """ try: env = Environment(loader=PackageLoader('app', 'templates')) # 创建一个包加载器对象 template = env.get_template('/v2/monthReportV2.1.html') # 获取一个模板文件 monthReport_html = template.render(report_data).replace('None', 'none') # 渲染 # 生成pdf html_to_pdf(monthReport_html, pdf_save_folder + pdf_name) except: pass with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: tamp_diagnose_session = tamp_diagnose_app.session res = None if type == 1: res = tamp_diagnose_session.query(HoldReport).filter(and_( HoldReport.id == id, HoldReport.ifa_id == ifa_id, )) elif type == 2: res = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_( HoldDiagnoseReport.id == id, HoldDiagnoseReport.ifa_id == ifa_id, )) elif type == 3: res = tamp_diagnose_session.query(PeriodicReport).filter(and_( PeriodicReport.id == id, PeriodicReport.ifa_id == ifa_id, )) else: return False if res.all(): if os.path.exists(pdf_save_folder + pdf_name): res.update({ 'file': pdf_name, 'update_status': 2, 'update_time': datetime.datetime.now() }) else: res.update({ 'update_status': 0, 'update_time': datetime.datetime.now() }) return True