template_manage_service.py 8.19 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name  : template_manage_service.py
# @Time       : 2021/1/8 下午5:26
# @Author     : X. Peng
# @Email      : acepengxiong@163.com
# @Software   : PyCharm
# -----------------------------------------------------------------------------
import datetime
import json
pengxiong's avatar
pengxiong committed
11
import time
12
import uuid
pengxiong's avatar
pengxiong committed
13 14

import oss2
pengxiong's avatar
pengxiong committed
15
from ftfy import fix_text
16 17 18

from sqlalchemy import and_

pengxiong's avatar
pengxiong committed
19
from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine, config, env
20 21 22
from app.config.default_template_params import hold_default_template, hold_default_data, diagnose_default_data, \
    diagnose_default_template
from app.model.tamp_diagnose_app import *
pengxiong's avatar
pengxiong committed
23 24
from app.utils.jinjia2html_v2 import DataIntegrate

25 26 27 28 29 30 31 32 33 34 35

def get_default_template(args):
    """"""
    type = args.get('type')
    data = []
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
            FundReportManange.ifa_id == args.get('ifa_id'),
            FundReportManange.type == type,
            FundReportManange.delete_tag == 0,
pengxiong's avatar
pengxiong committed
36
            FundReportManange.default_template.isnot(None)
37
        )).first()
pengxiong's avatar
pengxiong committed
38 39
        if not res:
            return False
40 41
        default_template, default_data = None, None
        if type == 1:
pengxiong's avatar
pengxiong committed
42
            args['name'] = '持仓报告默认模版'
43 44 45
            default_template = hold_default_template
            default_data = hold_default_data
        elif type == 2:
pengxiong's avatar
pengxiong committed
46
            args['name'] = '诊断报告默认模版'
47 48
            default_template = diagnose_default_template
            default_data = diagnose_default_data
pengxiong's avatar
pengxiong committed
49 50
        if res.default_template:
            data = {'id': res.id, 'template_data': {**json.loads(res.default_template), **default_data}}
51
        else:
pengxiong's avatar
pengxiong committed
52 53 54 55 56 57
            args['id'] = str(uuid.uuid4())
            args['default_template'] = json.dumps(default_template)
            args['create_by'] = args.get('ifa_id')
            args['create_time'] = datetime.datetime.now()
            new_template = FundReportManange(**args)
            tamp_diagnose_session.add(new_template)
58 59 60 61 62 63 64 65 66 67 68
            data = {**default_template, **default_data}
        return data

def add_template(args):
    """新建模版"""
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
        args['id'] = str(uuid.uuid4())
        args['default_template'] = json.dumps(hold_default_template)
        args['create_by'] = args.get('ifa_id')
        args['create_time'] = datetime.datetime.now()
pengxiong's avatar
pengxiong committed
69
        fund_report_manange = FundReportManange(**args)
70 71 72
        tamp_diagnose_session.add(fund_report_manange)

def update_template(args):
pengxiong's avatar
pengxiong committed
73
    """更新模版"""
74 75 76
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
pengxiong's avatar
pengxiong committed
77
            FundReportManange.id == args.get('id'),
78 79
            FundReportManange.delete_tag == 0,
        ))
pengxiong's avatar
pengxiong committed
80 81 82
        if not res:
            return False
        if res[0].default_template:
83
            # 更新默认模版
pengxiong's avatar
pengxiong committed
84 85 86 87 88 89
            res.update({
                'default_template': args.get('template_data'),
                'update_by': args.get('ifa_id'),
                'update_time': datetime.datetime.now()
            })
        else:
90 91 92 93
            # 更新自定义模版
            args['update_by'] = args.get('ifa_id')
            args['update_time'] = datetime.datetime.now()
            res.update({
pengxiong's avatar
pengxiong committed
94
                'custom_template': args.get('template_data'),
95 96 97 98 99 100 101 102 103 104
                'update_by': args.get('ifa_id'),
                'update_time': datetime.datetime.now()
            })
    return True


def delete_template(args):
    """."""
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
pengxiong's avatar
pengxiong committed
105 106 107 108
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
            FundReportManange.id == args.get('id'),
            FundReportManange.ifa_id == args.get('ifa_id')
        )).update({
109 110 111 112
            'delete_tag': 1,
            'update_by': args.get('ifa_id'),
            'update_time': datetime.datetime.now()
        })
pengxiong's avatar
pengxiong committed
113 114 115
        if res > 0:
            return True
        return False
116 117 118 119 120 121 122 123


def get_template_list(args):
    """."""
    pageNumber = args['pageNumber']
    pageSize = args['pageSize']
    offset = (pageNumber - 1) * pageSize
    dtype = args.get('type')
pengxiong's avatar
pengxiong committed
124 125 126 127 128 129 130 131 132
    name = args.get('name', '')
    conditions = [
        FundReportManange.delete_tag == 0,
        FundReportManange.ifa_id == args.get('ifa_id')
    ]
    if name:
        conditions.append(FundReportManange.name.like('%' + name + '%'))
    if dtype != 0:
        conditions.append(FundReportManange.type == args.get('type'))
133 134
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
pengxiong's avatar
pengxiong committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
        # 新增默认模版
        res1 = tamp_diagnose_session.query(FundReportManange).filter(and_(
            FundReportManange.ifa_id == args.get('ifa_id'),
            FundReportManange.delete_tag == 0,
            FundReportManange.default_template.isnot(None)
        ))
        if not res1:
            return False
        need_type = {1, 2}
        exist_type = set()
        for r in res1:
            exist_type.add(r.type)
        add_type = list(need_type - exist_type)
        name, default_template = None, None
        for t in add_type:
            if t == 1:
                name = '持仓报告默认模版'
                default_template = hold_default_template
            elif t == 2:
                name = '诊断报告默认模版'
                default_template = diagnose_default_template
            id = str(uuid.uuid4())
            default_template = json.dumps(default_template)
            create_by = args.get('ifa_id')
            create_time = datetime.datetime.now()
pengxiong's avatar
pengxiong committed
160
            new_template = FundReportManange(id=id, ifa_id=args.get('ifa_id'), name=name, default_template=default_template, type=t, create_by=create_by, create_time=create_time, default=1)
pengxiong's avatar
pengxiong committed
161
            tamp_diagnose_session.add(new_template)
pengxiong's avatar
pengxiong committed
162 163
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
                *conditions
164 165 166 167 168 169 170 171 172 173 174 175 176
            ))
        if not res:
            return False
        totalSize = res.count()
        data = res.offset(offset).limit(pageSize)
        data = [r.to_dict() for r in data]
        return {
            'content': data,
            'pageNum': pageNumber,
            'pageSize': pageSize,
            'totalSize': totalSize
        }

pengxiong's avatar
pengxiong committed
177 178 179 180 181 182

def get_make_report_data(args):
    """获取制作模版数据."""
    id = args.get('id')
    ifa_id = args.get('ifa_id')
    customer_id = args.get('customer_id')
pengxiong's avatar
pengxiong committed
183
    template = ''
pengxiong's avatar
pengxiong committed
184 185 186 187 188 189 190 191 192 193
    type = 1
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
            FundReportManange.id == id,
            FundReportManange.delete_tag == 0
        )).first()
        if not res:
            return False
        type = res.type
pengxiong's avatar
pengxiong committed
194 195 196 197
        template = res.default_template
        if not template:
            template = res.custom_template
        template = json.loads(template)
pengxiong's avatar
pengxiong committed
198 199 200
    dt = DataIntegrate(ifa_id=ifa_id, customer_id=customer_id, type=type)
    data = dt.get_template_data(template)
    # data = template
pengxiong's avatar
pengxiong committed
201 202 203
    return data


pengxiong's avatar
pengxiong committed
204 205 206 207 208 209 210 211 212 213 214
def set_default_template(args):
    """."""
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
            FundReportManange.id == args.get('id'),
            FundReportManange.delete_tag == 0,
            FundReportManange.ifa_id == args.get('ifa_id')
        ))
        if not res:
            return False
pengxiong's avatar
pengxiong committed
215 216
        type = res.type
        tamp_diagnose_session.query(FundReportManange).filter(FundReportManange.type==type).update({
pengxiong's avatar
pengxiong committed
217 218 219 220 221 222 223 224 225
            'default': 0
        })
        r = res.update({
            'default': 1
        })
        if r > 0:
            return True
        return False