template_manage_service.py 8.57 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 15
from sqlalchemy import and_

pengxiong's avatar
pengxiong committed
16
from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine, config, env
17 18 19
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
20 21
from app.utils.jinjia2html_v2 import DataIntegrate

22 23 24

def get_default_template(args):
    """"""
pengxiong's avatar
pengxiong committed
25
    data = {}
26 27 28
    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
29
            FundReportManange.id == args.get('id'),
30 31
            FundReportManange.delete_tag == 0,
        )).first()
pengxiong's avatar
pengxiong committed
32 33
        if not res:
            return False
pengxiong's avatar
pengxiong committed
34
        type = res.type
35
        default_template, default_data = None, None
pengxiong's avatar
pengxiong committed
36 37 38 39
        if res.default_template:
            default_template = res.default_template
        elif res.custom_template:
            default_template = res.custom_template
40 41 42 43
        if type == 1:
            default_data = hold_default_data
        elif type == 2:
            default_data = diagnose_default_data
pengxiong's avatar
3  
pengxiong committed
44
        data = {**json.loads(default_template), **default_data}
45 46 47 48
        return data

def add_template(args):
    """新建模版"""
pengxiong's avatar
pengxiong committed
49 50
    type = args.get('type')
    custom_template = json.loads(args.get('custom_template'))
51 52 53
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
        args['id'] = str(uuid.uuid4())
pengxiong's avatar
pengxiong committed
54 55 56 57 58 59 60 61 62 63 64
        if type == 1:
            allowed_keys = hold_default_template.keys()
            for key in list(custom_template.keys()):
                if key not in allowed_keys:
                    custom_template.pop(key)
        elif type == 2:
            allowed_keys = diagnose_default_template.keys()
            for key in list(custom_template.keys()):
                if key not in allowed_keys:
                    custom_template.pop(key)
        args['custom_template'] = json.dumps(custom_template)
65 66
        args['create_by'] = args.get('ifa_id')
        args['create_time'] = datetime.datetime.now()
pengxiong's avatar
pengxiong committed
67
        args['default'] = 0
pengxiong's avatar
pengxiong committed
68
        fund_report_manange = FundReportManange(**args)
69 70 71
        tamp_diagnose_session.add(fund_report_manange)

def update_template(args):
pengxiong's avatar
pengxiong committed
72
    """更新模版"""
pengxiong's avatar
pengxiong committed
73
    template_data = json.loads(args.get('template_data'))
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:
pengxiong's avatar
pengxiong committed
83
            allowed_keys = json.loads(res[0].default_template).keys()
pengxiong's avatar
pengxiong committed
84
            for key in list(template_data.keys()):
pengxiong's avatar
pengxiong committed
85 86
                if key not in allowed_keys:
                    template_data.pop(key)
87
            # 更新默认模版
pengxiong's avatar
pengxiong committed
88
            res.update({
pengxiong's avatar
pengxiong committed
89
                'default_template': json.dumps(template_data),
pengxiong's avatar
pengxiong committed
90 91 92 93
                'update_by': args.get('ifa_id'),
                'update_time': datetime.datetime.now()
            })
        else:
pengxiong's avatar
pengxiong committed
94
            allowed_keys = json.loads(res[0].custom_template).keys()
pengxiong's avatar
pengxiong committed
95
            for key in list(template_data.keys()):
pengxiong's avatar
pengxiong committed
96 97
                if key not in allowed_keys:
                    template_data.pop(key)
98 99 100 101
            # 更新自定义模版
            args['update_by'] = args.get('ifa_id')
            args['update_time'] = datetime.datetime.now()
            res.update({
pengxiong's avatar
pengxiong committed
102
                'custom_template': json.dumps(template_data),
103 104 105 106 107 108 109 110 111 112
                '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
113 114 115 116
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
            FundReportManange.id == args.get('id'),
            FundReportManange.ifa_id == args.get('ifa_id')
        )).update({
117 118 119 120
            'delete_tag': 1,
            'update_by': args.get('ifa_id'),
            'update_time': datetime.datetime.now()
        })
pengxiong's avatar
pengxiong committed
121 122 123
        if res > 0:
            return True
        return False
124 125 126 127


def get_template_list(args):
    """."""
pengxiong's avatar
pengxiong committed
128 129 130
    # pageNumber = args.get('pageNumber')
    # pageSize = args.get('pageSize')
    # offset = (pageNumber - 1) * pageSize
131
    dtype = args.get('type')
pengxiong's avatar
pengxiong committed
132 133 134 135 136 137 138 139 140
    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'))
141 142
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
pengxiong's avatar
pengxiong committed
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
        # 新增默认模版
        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
168
            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
169
            tamp_diagnose_session.add(new_template)
pengxiong's avatar
pengxiong committed
170 171
        res = tamp_diagnose_session.query(FundReportManange).filter(and_(
                *conditions
172 173 174 175
            ))
        if not res:
            return False
        totalSize = res.count()
pengxiong's avatar
pengxiong committed
176
        data = res.order_by(FundReportManange.create_time.desc())
177 178 179
        data = [r.to_dict() for r in data]
        return {
            'content': data,
pengxiong's avatar
pengxiong committed
180 181
            # 'pageNum': pageNumber,
            # 'pageSize': pageSize,
182 183 184
            'totalSize': totalSize
        }

pengxiong's avatar
pengxiong committed
185 186 187 188 189 190

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
191
    template = ''
pengxiong's avatar
pengxiong committed
192 193 194 195 196 197 198 199 200 201
    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
202 203 204 205
        template = res.default_template
        if not template:
            template = res.custom_template
        template = json.loads(template)
pengxiong's avatar
pengxiong committed
206 207 208
    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
209 210 211
    return data


pengxiong's avatar
pengxiong committed
212 213 214 215 216 217 218 219 220 221 222
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
223 224
        type = res[0].type
        tamp_diagnose_session.query(FundReportManange).filter(FundReportManange.type == type).update({
pengxiong's avatar
pengxiong committed
225 226 227 228 229 230 231 232 233
            'default': 0
        })
        r = res.update({
            'default': 1
        })
        if r > 0:
            return True
        return False