185 lines
5.1 KiB
Python
185 lines
5.1 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 make_new_cid():
|
|
new_cid = CommonUtils.random_code(8)
|
|
case = DB_TEST.find_single_column(
|
|
"模型数据",
|
|
"计算函数",
|
|
{"函数ID": new_cid},
|
|
"函数ID"
|
|
) is not None
|
|
while case:
|
|
new_cid = CommonUtils.random_code(8)
|
|
return new_cid
|
|
|
|
def new_calculate_func(self, **kwargs):
|
|
"""新建计算函数"""
|
|
data = kwargs['data']
|
|
func = FinIndexObj()
|
|
func.func_id = self.make_new_cid()
|
|
func.func_name = data['函数名称']
|
|
func.describe = data['说明']
|
|
func.method = data['方法']
|
|
func.param = list()
|
|
for params in data['参数']:
|
|
param = func.Param()
|
|
param.name = params['参数名']
|
|
param.mark = params['备注']
|
|
func.param.append(param)
|
|
func.tags = data['标签']
|
|
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['函数ID']
|
|
func = FinIndexObj()
|
|
func.func_name = data['函数名称']
|
|
func.describe = data['说明']
|
|
func.method = data['方法']
|
|
func.param = list()
|
|
for params in data['参数']:
|
|
param = func.Param()
|
|
param.name = params['参数名']
|
|
param.mark = params['备注']
|
|
func.param.append(param)
|
|
func.tags = data['标签']
|
|
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 '函数已锁定'
|