api-datamanager/Modules/Functions/FinIndex/FinIndexImpl.py

184 lines
5.0 KiB
Python

import time
from DBHelper.MongoHelperInstance import DB_TEST
from Modules.Functions.FinIndex.FinIndexObj import FinIndexObj
from Utils.CommonUtil import CommonUtils
class FinanceIndexImpl(object):
@staticmethod
def new_calculate_func(**kwargs):
"""新建计算函数"""
data = kwargs['data']
case = DB_TEST.find_single_column(
"模型数据",
"计算函数",
{"函数ID": data['func_id']},
"函数ID"
)
if case:
return '函数ID已存在'
func = FinIndexObj()
func.func_id = data['func_id']
func.func_name = data['func_name']
func.describe = data['describe']
func.method = data['method']
func.param = list()
for params in data['params']:
param = func.Param()
param.name = params['name']
param.mark = params['mark']
func.param.append(param)
func.tags = data['tags']
func.edit_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
func.status = 'normal'
DB_TEST.insert_single_data(
'模型数据',
'计算函数',
func.fields_toggle()
)
return '新建成功'
@staticmethod
def check_calculate_func(**kwargs):
"""校验计算函数"""
func = kwargs['data']['方法']
params = kwargs['data']['参数']
param_dict = dict()
for param in params:
param_dict[param['备注']] = param['输入']
try:
result = eval(func)(**param_dict)
if isinstance(result, (int, float)):
return '校验成功'
else:
return '校验失败'
except Exception:
return '校验失败'
@staticmethod
def search_calculate_func(**kwargs):
"""查询指标函数"""
def make_search_body(param):
body = dict()
search_keys = list(param.keys())
if 'name' in search_keys:
body['函数名称'] = {"$regex": param['name']}
if 'tags' in search_keys:
body['标签'] = {"$in": param['tags']}
return body
def make_sort_body(param):
if param == 'asc':
body = {"编辑时间": 1}
else:
body = {"编辑时间": -1}
return body
data = kwargs['data']
sort = data['sort']
page_size = int(data['page_size'])
page_no = int(data['page_no'])
search_body = make_search_body(data)
sort_body = make_sort_body(sort)
page_size = 10 if page_size > 10 else page_size
total = DB_TEST.find_all_data_with_count(
'模型数据',
'计算函数',
search_body
)
records = DB_TEST.find_data_by_page_with_sort(
'模型数据',
'计算函数',
search_body,
['函数ID', '函数名称', '说明', '方法', '参数', '标签', '编辑时间', '状态'],
sort_body,
page_size,
page_no
)
result = {
"total": total,
"records": records
}
return result
@staticmethod
def lock_calculate_func(**kwargs):
"""锁定函数"""
fid = kwargs['fid']
func = FinIndexObj()
func.status = 'lock'
DB_TEST.update_single_data(
'模型数据',
'计算函数',
{'函数ID': fid},
func.fields_toggle()
)
return '锁定成功'
@staticmethod
def view_calculate_func(**kwargs):
fid = kwargs['fid']
record = DB_TEST.find_single_data(
'模型数据',
'计算函数',
{'函数ID': fid},
['函数名称', '说明', '方法', '参数', '标签', '状态']
)
return record
@staticmethod
def edit_calculate_func(**kwargs):
data = kwargs['data']
fid = data['func_id']
func = FinIndexObj()
func.func_name = data['func_name']
func.describe = data['describe']
func.method = data['method']
func.param = list()
for params in data['params']:
param = func.Param()
param.name = params['name']
param.mark = params['mark']
func.param.append(param)
func.tags = data['tags']
func.edit_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
update_data = func.fields_toggle()
status = DB_TEST.find_single_column(
'模型数据',
'计算函数',
{'函数ID': fid},
'状态'
)
if status == 'normal':
DB_TEST.update_single_data(
'模型数据',
'计算函数',
{'函数ID': fid},
update_data
)
return '修改成功'
else:
return '函数已锁定'