timed_task.py 4.46 KB
# coding: utf-8

"""
找出所有 ifa
        找出 ifa 所有的客户
                           进行月报生成
"""
import datetime
import time
import traceback
import uuid

import oss2

# from app.api.engine import logging, pdf_folder, tamp_diagnose_app_engine, config, env
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])