def get_all_party(headers):
    party_list = []
    parties = utils.call_request(bct_ip, 'reference-data-service',
                                 'refPartyList', {}, headers)
    for party in parties:
        party_list.append(party.get('legalName'))
    return party_list
def get_all_book(headers):
    book_list = []
    books = utils.call_request(bct_ip, 'auth-service', 'authBookGetCanRead',
                               {}, headers)
    for book in books:
        book_list.append(book.get('resourceName'))
    return book_list
def create_book(book_name, department_id, headers):
    params = {
        'resourceType': 'BOOK',
        'resourceName': book_name,
        'departmentId': department_id
    }
    return utils.call_request(bct_ip, 'auth-service',
                              'authNonGroupResourceAdd', params, headers)
Exemple #4
0
def save_instrument(ip, headers, instrument_id, asset_class, instrument_type,
                    instrument_info):
    params = {
        'instrumentId': instrument_id,
        'assetClass': asset_class,
        'instrumentType': instrument_type,
        'instrumentInfo': instrument_info
    }
    return utils.call_request(ip, 'market-data-service', 'mktInstrumentCreate',
                              params, headers)
def set_role_permission(role_id, resource_ids, resource_permission_dict,
                        headers):
    params = {
        'roleId':
        role_id,
        'permissions': [{
            'resourceId': i,
            'resourcePermission': resource_permission_dict.get(i)
        } for i in resource_ids]
    }
    return utils.call_request(bct_ip, 'auth-service',
                              'authRolePermissionsModify', params, headers)
def create_party(legal_name, master_agreement_id, headers):
    params = {
        'clientType': 'INSTITUTION',
        'legalName': legal_name,
        'legalRepresentative': legal_name,
        'address': legal_name,
        'contact': legal_name,
        'warrantor': legal_name,
        'warrantorAddress': legal_name,
        'tradePhone': '123456789',
        'tradeEmail': '*****@*****.**',
        'subsidiaryName': '分公司000',
        'branchName': '营业部000',
        'salesName': '销售000',
        'investorType': 'FINANCIAL_INSTITUTIONAL_INVESTOR',
        'masterAgreementId': master_agreement_id
    }
    return utils.call_request(bct_ip, 'reference-data-service', 'refPartySave',
                              params, headers)
Exemple #7
0
def get_instruments(ip, headers, params):
    return utils.call_request(ip, 'market-data-service',
                              'mktInstrumentsListPaged', params,
                              headers)['page']
Exemple #8
0
def get_all_instrument_id(ip, headers):
    params = {'instrumentIdPart': ''}
    return utils.call_request(ip, 'market-data-service', 'mktInstrumentSearch',
                              params, headers)
def get_resource_info_by_role_id(role_id, headers):
    return utils.call_request(bct_ip, 'auth-service',
                              'authResourceGetByRoleId', {'roleId': role_id},
                              headers)
Exemple #10
0
def get_role_info_by_role_name(role_name, headers):
    return utils.call_request(bct_ip, 'auth-service', 'authRoleGetByRoleName',
                              {'roleName': role_name}, headers)
Exemple #11
0
def get_department_id(headers):
    department_info = utils.call_request(bct_ip, 'auth-service',
                                         'authAllDepartmentGet', {}, headers)
    return department_info['children'][0]['id']
Exemple #12
0
def trade_data_import(valuation_date):
    try:
        oracle_session = None
        wind_oracle_session = None
        total_trades = []
        headers = utils.login(bct_ip, login_body)
        department_id = get_department_id(headers)
        party_list = get_all_party(headers)
        book_list = get_all_book(headers)
        all_instruments = get_all_instruments(headers)
        all_instruments_dict = {}
        for info in all_instruments:
            all_instruments_dict[info.get('instrumentId')] = info
        business_role_result = get_role_info_by_role_name(
            business_role_name, headers)
        if business_role_result is None or business_role_result.get(
                'id') is None:
            raise Exception('查询角色 {} 失败,查询结果:{}'.format(
                business_role_name, business_role_result))

        wind_oracle_session = get_wind_session(wind_oracle_database_url)
        code_and_exchange_relation_dict = get_wind_code_and_exchange_relation(
            wind_oracle_session)

        oracle_session = db_utils.get_session()
        trans_code_list = origin_data_filter.get_active_trans_code_list(
            oracle_session, valuation_date)
        utils.call_request(bct_ip, 'trade-service', 'trdTradeDeleteAll', {},
                           headers)

        for start in range(0, len(trans_code_list), BATCH_SIZE):
            end = start + BATCH_SIZE
            total_trades.extend(
                trade_import_generate(oracle_session,
                                      trans_code_list[start:end],
                                      all_instruments_dict,
                                      code_and_exchange_relation_dict))

        total_books = set(map(lambda t: t.get('book_name'),
                              total_trades)).difference(set(book_list))
        total_parties = set(map(lambda t: t.get('counter_party'),
                                total_trades)).difference(set(party_list))
        print('准备新增 交易 {}笔,交易簿 {}个,交易对手{}个。'.format(len(total_trades),
                                                    len(total_books),
                                                    len(total_parties)))

        # 创建交易簿
        books_add_succeed = set()
        for book in list(total_books):
            try:
                book_result = create_book(book, department_id, headers)
                if book_result.get('id') is not None:
                    books_add_succeed.add(book)
                else:
                    print('交易簿 {} 创建失败: {}'.format(book, book_result))
            except Exception as e:
                print('交易簿 {} 创建异常: {}'.format(book, e))
        print('准备新增 交易簿 {}个,成功创建 {}个,创建失败的有 {}'.format(
            len(total_books), len(books_add_succeed),
            list(total_books.difference(books_add_succeed))))
        # 添加业务角色权限
        try:
            resource_result = get_resource_info_by_role_id(
                business_role_result.get('id'), headers)
            if resource_result is not None and resource_result.get(
                    'resourceType') == 'ROOT':
                book_info_list = []
                resolve_book_from_parent(resource_result, book_info_list)
                book_ids = set()
                book_names = set()
                book_id_permissions_dict = {}
                for info in book_info_list:
                    resource_permissions = info.get(
                        'resourcePermissions') or []
                    if len(
                            set(RESOURCE_PERMISSIONS).difference(
                                set(resource_permissions))) > 0:
                        book_ids.add(info.get('id'))
                        book_names.add(info.get('resourceName'))
                        resource_permissions.extend(RESOURCE_PERMISSIONS)
                        book_id_permissions_dict[info.get('id')] = list(
                            set(resource_permissions))
                if len(book_ids) > 0:
                    permission_set_result = set_role_permission(
                        business_role_result['id'], list(book_ids),
                        book_id_permissions_dict, headers)
                    if permission_set_result is not None and permission_set_result.get(
                            'id') is not None:
                        print('业务角色 {} 为交易簿 {} 添加 {} 权限成功'.format(
                            business_role_name, list(book_names),
                            RESOURCE_PERMISSIONS))
                    else:
                        print('业务角色 {} 设置权限失败:'.format(business_role_name,
                                                       permission_set_result))
                else:
                    print('无交易簿需设置业务权限!')
            else:
                print('查询业务角色权限信息失败,查询结果:{}'.format(resource_result))
        except Exception as e:
            print('业务角色 {} 权限设置出现异常: {}'.format(business_role_name, e))
        # 创建交易对手
        parties_add_succeed = set()
        for party in list(total_parties):
            try:
                party_result = create_party(party, party, headers)
                if party_result.get('uuid') is not None:
                    parties_add_succeed.add(party)
                else:
                    print('交易对手 {} 创建失败: {}'.format(party, party_result))
            except Exception as e:
                print('交易对手 {} 创建异常: {}'.format(party, e))
        print('准备新增 交易对手 {}个,成功创建 {}个,创建失败的有 {}'.format(
            len(total_parties), len(parties_add_succeed),
            list(total_parties.difference(parties_add_succeed))))
        # 创建交易
        trade_dtos = list(map(trans_trade, total_trades))

        failed = []
        pool = Pool(4)
        chunk_size = 100
        for start in range(0, len(trade_dtos), chunk_size):
            end = start + chunk_size
            params = {
                'trades': trade_dtos[start:end],
                'validTime': '2019-08-08T10:00:00'
            }
            pool.apply_async(func=utils.call_request,
                             args=(
                                 bct_ip,
                                 'trade-service',
                                 'trdTradeCreateBatchForJKZX',
                                 params,
                                 headers,
                             ),
                             callback=lambda res: failed.extend(res))
        pool.close()
        pool.join()

        for msg in failed:
            print(msg)

        su_trade_num = utils.call_request(bct_ip, 'trade-service',
                                          'trdTradeListBySimilarTradeId',
                                          {'similarTradeId': ''}, headers)

        if 'error' not in su_trade_num:
            print('可创建交易总数:{}, 成功创建交易数:{}, 创建的交易包括:{}'.format(
                len(total_trades), len(su_trade_num), su_trade_num))

    finally:
        if oracle_session is not None:
            oracle_session.close()
        if wind_oracle_session is not None:
            wind_oracle_session.close()