You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							426 lines
						
					
					
						
							17 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							426 lines
						
					
					
						
							17 KiB
						
					
					
				| from datetime import datetime | |
| from collections import defaultdict | |
| from fastapi.responses import HTMLResponse | |
| from fastapi import APIRouter, Depends, Request | |
| from pydantic_validation_decorator import ValidateFields | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from config.enums import BusinessType | |
| from config.get_db import get_db | |
| from module_admin.annotation.log_annotation import Log | |
| from module_admin.aspect.interface_auth import CheckUserInterfaceAuth | |
| from module_admin.service.login_service import LoginService | |
| from module_admin.service.data_ast_content_service import DataCatalogService | |
| from module_admin.entity.vo.data_ast_content_vo import DataAstSecuResponse, DataAstSecuRequest,DataCatalogRequest, DataCatalogResponse, DataCatalogPageQueryModel, DeleteDataCatalogModel,DataCatalogResponseWithChildren,DataAssetCatalogTreeResponse,DataCatalogMovedRequest,DataCatalogMergeRequest,DataCatalogChild,DataCatalogMoverelRequest,DataAstIndxRequest,DataAstBookmarkRelaRequest | |
| from module_admin.entity.vo.user_vo import CurrentUserModel | |
| from module_admin.entity.vo.metasecurity_vo import MetaSecurityApiModel | |
| from module_admin.service.metasecurity_service import MetaSecurityService | |
| from utils.common_util import bytes2file_response | |
| from utils.log_util import logger | |
| from utils.page_util import PageResponseModel | |
| from utils.response_util import ResponseUtil | |
| 
 | |
| 
 | |
| dataCatalogController = APIRouter(prefix='/system/data_catalog', dependencies=[Depends(LoginService.get_current_user)]) | |
| 
 | |
| 
 | |
| @dataCatalogController.get( | |
|     '/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:list'))] | |
| ) | |
| async def get_data_catalog_list( | |
|     request: Request, | |
|     catalog_page_query: DataCatalogPageQueryModel = Depends(DataCatalogPageQueryModel.as_query), | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
| 
 | |
|     #设置字段 | |
|     user_id = current_user.user.user_id | |
|     user_name = current_user.user.user_name | |
|     # 获取分页数据 | |
|     catalog_page_query_result = await DataCatalogService.get_catalog_list_services(query_db, catalog_page_query, user_id, user_name, is_page=True) | |
|     logger.info('获取成功') | |
| 
 | |
| 
 | |
| 
 | |
|     return ResponseUtil.success(model_content=catalog_page_query_result) | |
| 
 | |
| @dataCatalogController.get( | |
|     '/atree',response_model=DataAssetCatalogTreeResponse,dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:atree'))],summary="Data Asset Tree Query" | |
| ) | |
| async def get_data_asset_catalog_tree(query_db: AsyncSession = Depends(get_db)): | |
|     try: | |
|         logger.debug("开始获取数据资产目录树") | |
|         catalog_tree_result = await DataCatalogService.get_data_asset_catalog_tree_services(query_db) | |
|         logger.info('数据资产树获取成功') | |
|         return ResponseUtil.success(data=catalog_tree_result) | |
|     except Exception as e: | |
|         logger.error(f"数据资产树获取失败: {str(e)}", exc_info=True) | |
|         return ResponseUtil.error(msg="数据查询异常,请联系管理员") | |
| 
 | |
| @dataCatalogController.post('', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:add'))]) | |
| @ValidateFields(validate_model='add_data_catalog') | |
| @Log(title='数据目录管理', business_type=BusinessType.INSERT) | |
| async def add_data_catalog( | |
|     request: Request, | |
|     add_catalog: DataCatalogResponseWithChildren, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 设置字段  | |
|     add_catalog.upd_prsn = current_user.user.user_name | |
|      | |
|     # 调用服务层方法 | |
|     add_result = await DataCatalogService.add_catalog_services(query_db, add_catalog) | |
|     logger.info(add_result.message) | |
| 
 | |
|     # 新增成功后,更新新增数据目录的父亲节点的叶子标志为0 | |
|     if add_result.is_success: | |
|         if add_catalog.supr_content_onum is not None: | |
|             supr_content_onum = add_catalog.supr_content_onum | |
|             await DataCatalogService.edit_catalog_leaf_services(query_db,supr_content_onum, 0) | |
|     else: | |
|         logger.error(add_result.message) | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success( | |
|         msg=add_result.message | |
|     ) | |
| 
 | |
| @dataCatalogController.get( | |
|     '/getMetaSercuityData', | |
|     response_model=DataAstSecuResponse, | |
|     dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:secu'))] | |
| ) | |
| @ValidateFields(validate_model='get_secu_data_request') | |
| async def getMetaSercuityData( | |
|     request: Request,  | |
|     dataAstSecuRequest: DataAstSecuRequest=Depends(DataAstSecuRequest), | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
|     ): | |
| 
 | |
|     # 获取当前用户信息 | |
|     user_name = current_user.user.user_name | |
|     password = current_user.user.password | |
|     # logger.info(f"获取当前用户信息:user_id={user_name}, password={password}") | |
| 
 | |
|     # 设置字段 | |
|     apiModel = MetaSecurityApiModel() | |
|     apiModel.dbRCode = dataAstSecuRequest.data_ast_src | |
|     apiModel.username = user_name | |
|     apiModel.password = password | |
|     apiModel.isPage = True | |
|     apiModel.pageNum = 1 | |
|     apiModel.pageSize = 10 | |
|     apiModel.sqlStr = "select * from " + dataAstSecuRequest.data_ast_eng_name | |
|     #logger.info(f"设置 apiModel 参数:dbRId={apiModel.dbRId}, username={apiModel.username}, password={apiModel.password}, sqlStr={apiModel.sqlStr}") | |
| 
 | |
|     # 打印 apiModel 对象 | |
|     # logger.debug(f"apiModel 对象内容:{apiModel}") | |
| 
 | |
|     # 调用服务层方法 | |
|     config_detail_result = await MetaSecurityService.getMetaSercuitybysql(request, query_db, apiModel) | |
|     # logger.info(f"调用 MetaSecurityService.getMetaSercuitybysql 方法,返回结果:{config_detail_result}") | |
| 
 | |
|     # # 记录成功日志 | |
|     # logger.info(f"获取 config_id 为 {apiModel} 的信息成功") | |
| 
 | |
|     return ResponseUtil.success(data=config_detail_result) | |
| 
 | |
| 
 | |
| 
 | |
| @dataCatalogController.put('/edit', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))]) | |
| @ValidateFields(validate_model='edit_data_catalog') | |
| @Log(title='数据目录管理', business_type=BusinessType.UPDATE) | |
| async def edit_data_catalog( | |
|     request: Request, | |
|     edit_catalog: DataCatalogResponseWithChildren, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 设置审计字段 | |
|     edit_catalog.upd_prsn = current_user.user.user_name | |
| 
 | |
| 
 | |
|     # 调用服务层方法 | |
|     edit_result = await DataCatalogService.edit_catalog_child_services(query_db, edit_catalog) | |
|     logger.info(edit_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success( | |
|         msg=edit_result.message | |
|     ) | |
| 
 | |
| 
 | |
| @dataCatalogController.put('/moved', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))]) | |
| @ValidateFields(validate_model='moved_data_catalog') | |
| @Log(title='数据目录管理', business_type=BusinessType.UPDATE) | |
| async def moved_data_catalog( | |
|     request: Request, | |
|     moved_catalog: DataCatalogMovedRequest, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 调用服务层方法 | |
|     moved_result = await DataCatalogService.moved_catalog_instr_services(query_db, moved_catalog) | |
|     logger.info(moved_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success( | |
|         msg=moved_result.message | |
|     ) | |
| 
 | |
| 
 | |
| @dataCatalogController.put('/merge', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))]) | |
| @ValidateFields(validate_model='merge_data_catalog') | |
| @Log(title='数据目录管理', business_type=BusinessType.UPDATE) | |
| async def moved_data_catalog( | |
|     request: Request, | |
|     merge_catalog: DataCatalogMergeRequest, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 调用服务层方法 | |
|     merge_result = await DataCatalogService.merge_catalog_instr_services(query_db, merge_catalog) | |
|     logger.info(merge_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success( | |
|         msg=merge_result.message | |
|     ) | |
| 
 | |
| 
 | |
| @dataCatalogController.put('/removerel', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))]) | |
| @ValidateFields(validate_model='removerel_data_ast_catalog') | |
| @Log(title='数据目录管理', business_type=BusinessType.UPDATE) | |
| async def removerel_data_ast_catalog( | |
|     request: Request, | |
|     removerel_catalog: DataCatalogChild, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 调用服务层方法  | |
|     user_name = current_user.user.user_name | |
|     removerel_result = await DataCatalogService.removerel_data_ast_catalog_services(query_db, removerel_catalog,user_name) | |
|     logger.info(removerel_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success() | |
| 
 | |
| @dataCatalogController.put('/moverel', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))]) | |
| @ValidateFields(validate_model='moverel_data_ast_catalog') | |
| @Log(title='数据目录管理', business_type=BusinessType.UPDATE) | |
| async def moverel_data_ast_catalog( | |
|     request: Request, | |
|     moverel_catalog: DataCatalogMoverelRequest, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 调用服务层方法 | |
|     moverel_result = await DataCatalogService.moverel_data_ast_catalog_services(query_db, moverel_catalog) | |
|     logger.info(moverel_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success() | |
| 
 | |
| 
 | |
| 
 | |
| @dataCatalogController.delete('/{content_onums}', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:remove'))]) | |
| @Log(title='数据目录管理', business_type=BusinessType.DELETE) | |
| async def delete_data_catalog(request: Request, content_onums: str, query_db: AsyncSession = Depends(get_db), | |
|                               current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
|                               ): | |
|     delete_catalog = DeleteDataCatalogModel(content_onums=content_onums) | |
|     delete_catalog_result = await DataCatalogService.delete_catalog_services(query_db, delete_catalog,user_id=current_user.user.user_id) | |
|     logger.info(delete_catalog_result.message) | |
| 
 | |
|     return ResponseUtil.success(msg=delete_catalog_result.message) | |
| 
 | |
| 
 | |
| @dataCatalogController.get( | |
|     '/{content_onum}', response_model=DataCatalogResponse, dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:query'))] | |
| ) | |
| async def query_detail_data_catalog(request: Request, content_onum: int, query_db: AsyncSession = Depends(get_db)): | |
|     catalog_detail_result = await DataCatalogService.get_catalog_detail_services(query_db, content_onum) | |
|     logger.info(f'获取content_onum为{content_onum}的信息成功') | |
|      | |
|     return ResponseUtil.success(data=catalog_detail_result) | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| @dataCatalogController.delete( | |
|     '/bookmark/{rela_onum}',  | |
|     dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))] | |
| ) | |
| @Log(title='数据资产收藏管理', business_type=BusinessType.DELETE) | |
| async def delete_ast_book_mark_rela( | |
|     request: Request, | |
|     rela_onum: int, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     user_name = current_user.user.user_name | |
|     user_id = current_user.user.user_id | |
|     # 创建请求对象 | |
|     delete_request = DataAstBookmarkRelaRequest(rela_onum=rela_onum) | |
|      | |
|     # 调用服务层方法 | |
|     delete_result = await DataCatalogService.delete_ast_book_mark_rela_services(query_db, delete_request,user_name,user_id) | |
|     logger.info(delete_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success(msg=delete_result.message) | |
| 
 | |
| 
 | |
| @dataCatalogController.post( | |
|     '/bookmark',  | |
|     dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))] | |
| ) | |
| @ValidateFields(validate_model='add_data_ast_bookmark') | |
| @Log(title='数据资产收藏管理', business_type=BusinessType.INSERT) | |
| async def add_ast_book_mark_rela( | |
|     request: Request, | |
|     add_bookmark: DataAstBookmarkRelaRequest, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 设置字段 | |
|     add_bookmark.user_id = current_user.user.user_id | |
|     user_name = current_user.user.user_name | |
|      | |
|     # 调用服务层方法 | |
|     add_result = await DataCatalogService.add_ast_book_mark_rela_services(query_db, add_bookmark,user_name) | |
|     logger.info(add_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success(msg=add_result.message) | |
| 
 | |
| 
 | |
| 
 | |
| @dataCatalogController.get( | |
|     '/indx/list',  | |
|     response_class=HTMLResponse,  # 指定返回HTML类型, | |
|     dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:list'))] | |
| ) | |
| async def get_data_ast_indx_list( | |
|     request: Request, | |
|     indx_page_query: DataAstIndxRequest = Depends(DataAstIndxRequest), | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 获取分页数据 | |
|     indx_page_query_result = await DataCatalogService.get_data_ast_indx_list_services(query_db, indx_page_query) | |
|     logger.info('获取成功') | |
| 
 | |
|     return indx_page_query_result | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| @dataCatalogController.post('/bookmark/folder', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:add'))]) | |
| @ValidateFields(validate_model='add_bookmark_folder') | |
| @Log(title='收藏目录管理', business_type=BusinessType.INSERT) | |
| async def add_bookmark_folder( | |
|     request: Request, | |
|     add_folder: DataCatalogRequest, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 设置字段 | |
|     add_folder.upd_prsn = current_user.user.user_name | |
|     add_folder.supr_content_onum = 2  # 固定为"我的收藏"的目录ID | |
|     add_folder.content_stat = "1"  # 设置为有效状态 | |
|     add_folder.leaf_node_flag = 1  # 默认为叶子节点 | |
|      | |
|     # 调用服务层方法 | |
|     add_result = await DataCatalogService.add_bookmark_folder_services(query_db, add_folder) | |
|     logger.info(add_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success( | |
|         msg=add_result.message | |
|     ) | |
| 
 | |
| @dataCatalogController.put('/bookmark/folder', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))]) | |
| @ValidateFields(validate_model='edit_bookmark_folder') | |
| @Log(title='收藏目录管理', business_type=BusinessType.UPDATE) | |
| async def edit_bookmark_folder( | |
|     request: Request, | |
|     edit_folder: DataCatalogRequest, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 设置审计字段 | |
|     edit_folder.upd_prsn = current_user.user.user_name | |
|      | |
|     # 调用服务层方法 | |
|     edit_result = await DataCatalogService.edit_bookmark_folder_services(query_db, edit_folder) | |
|     logger.info(edit_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success( | |
|         msg=edit_result.message | |
|     ) | |
| 
 | |
| @dataCatalogController.delete('/bookmark/folder/{content_onum}', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:remove'))]) | |
| @Log(title='收藏目录管理', business_type=BusinessType.DELETE) | |
| async def delete_bookmark_folder( | |
|     request: Request,  | |
|     content_onum: int,  | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 调用服务层方法 | |
|     delete_result = await DataCatalogService.delete_bookmark_folder_services( | |
|         query_db,  | |
|         content_onum,  | |
|         current_user.user.user_name, | |
|         current_user.user.user_id | |
|     ) | |
|     logger.info(delete_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success( | |
|         msg=delete_result.message | |
|     ) | |
| 
 | |
| @dataCatalogController.get( | |
|     '/bookmark/folders',  | |
|     dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:list'))] | |
| ) | |
| async def get_bookmark_folders( | |
|     request: Request, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 获取当前用户名 | |
|     user_name = current_user.user.user_name | |
|      | |
|     # 调用服务层方法 | |
|     folders = await DataCatalogService.get_bookmark_folders_services(query_db, user_name) | |
|     logger.info(f'获取用户 {user_name} 的收藏目录列表成功') | |
|      | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success(data=folders) | |
| 
 | |
| 
 | |
| 
 | |
| @dataCatalogController.put('/bookmark/asset/move', dependencies=[Depends(CheckUserInterfaceAuth('system:data_catalog:edit'))]) | |
| @ValidateFields(validate_model='move_bookmark_asset') | |
| @Log(title='收藏资产管理', business_type=BusinessType.UPDATE) | |
| async def move_bookmark_asset( | |
|     request: Request, | |
|     moverel_catalog: DataCatalogMoverelRequest, | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     # 设置用户信息 | |
|     moverel_catalog.upd_prsn = current_user.user.user_name | |
|      | |
|     # 调用服务层方法 | |
|     moverel_result = await DataCatalogService.move_bookmark_asset_services(query_db, moverel_catalog) | |
|     logger.info(moverel_result.message) | |
| 
 | |
|     # 返回标准化响应 | |
|     return ResponseUtil.success(msg=moverel_result.message)
 | |
| 
 |