# coding: utf-8 """ 找出所有 ifa 找出 ifa 所有的客户 进行月报生成 """ import datetime import time import traceback import uuid import oss2 from app.api.engine import pdf_folder, tamp_diagnose_app_engine, config, env import os from app.api.engine import tamp_user_engine, tamp_order_engine, TAMP_SQL from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, String, Integer, and_ from app.service.portfolio_diagnose import fund_rank, tamp_fund from app.utils.jinjia2html_v2 import DataIntegrate from concurrent import futures Base = declarative_base() class IfaUser(Base): __tablename__ = "user_info" id = Column(String(64), primary_key=True) ui_username = Column(String(64)) ui_sex = Column(String(64)) class Ifa_Customer(Base): __tablename__ = "ifa_customer" id = Column(String(64), primary_key=True) customer_id = Column(String(32)) ifa_id = Column(String(64)) class Customer(Base): __tablename__ = "customer" id = Column(String(64), primary_key=True) customer_name = Column(String(128)) # class CustomerOrder(Base): # __tablename__ = 'customer_order' # # user_id = Column(String(128)) # customer_id = Column(String(128)) # class UserInfo(Base): # __tablename__ = 'user_info' # # id = Column(String(64), primary_key=True) # ui_username = Column(String(128)) def call_month_report(ifauser_id, ifauser_name, customer_id, customer_name): # filename = '{}_{}_.pdf'.format(ifauser_name, customer_name) # if os.path.exists(pdf_folder + filename): # return None pdf_name = str(uuid.uuid4()) + '.pdf' with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: tamp_diagnose_app_session = tamp_diagnose_app.session sql = "update hold_report set update_time='{}', update_status='{}' where ifa_id='{}' and customer_id='{}'".format( datetime.datetime.now(), 1, ifauser_id, customer_id ) tamp_diagnose_app_session.execute(sql) print('开始制作IFA: {}, 客户: {}的基金月报'.format(ifauser_name, customer_name)) start = time.time() try: dt = DataIntegrate(ifauser_id, customer_id, '{}_{}_.pdf'.format(ifauser_name, customer_name)) dt.render_data() print('IFA: {}, 客户: {}的基金月报已经生成, 耗时{}秒'.format(ifauser_name, customer_name, time.time()-start)) except OSError: print('IFA: {}, 客户: {}的基金月报已经生成,耗时{}秒'.format(ifauser_name, customer_name, time.time()-start)) except Exception as e: # logging.error("IFAID{}: IFAName{}, 客户ID{}, 客户Name: {}的基金月报生成异常,错误追踪:{}".format(ifauser_id, ifauser_name, customer_id, customer_name, traceback.format_exc())) print("IFA: {}, 客户: {}的基金月报生成异常,错误追踪:{}".format(ifauser_name, customer_name, traceback.format_exc())) finally: auth = oss2.Auth(config[env]['oss']['account'], config[env]['oss']['password']) # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-shanghai.aliyuncs.com', 'tamperdev') # 生成下载文件的签名URL,有效时间为60s。 path = bucket.sign_url('GET', 'productionenv/Start/' + pdf_name, 60) with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: tamp_diagnose_app_session = tamp_diagnose_app.session sql = "update hold_report set update_time='{}', update_status='{}', file='{}' where ifa_id='{}' and customer_id='{}'".format( datetime.datetime.now(), 2, pdf_name, ifauser_id, customer_id ) tamp_diagnose_app_session.execute(sql) if __name__ == '__main__': data = [] with TAMP_SQL(tamp_user_engine) as tamp_user, TAMP_SQL(tamp_order_engine) as tamp_order: tamp_user_session = tamp_user.session res = tamp_user_session.execute('SELECT DISTINCT user_id, customer_id , realname, customer_name FROM (select f1.user_id, f1.customer_id, f2.realname,f3.customer_name from customer_order f1, user_info f2,customer_info f3 where f2.id=f1.user_id and f3.id=f1.customer_id) res;') data = res.fetchall() for d in data: call_month_report(d[0], d[2], d[1], d[3])