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 '函数已锁定'