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.
		
		
		
		
		
			
		
			
				
					
					
						
							201 lines
						
					
					
						
							7.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							201 lines
						
					
					
						
							7.4 KiB
						
					
					
				| from fastapi import APIRouter, Depends, Form, Request | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from config.get_db import get_db | |
| from datetime import datetime | |
| from module_admin.entity.vo.user_vo import CurrentUserModel | |
| from module_admin.aspect.interface_auth import CheckUserInterfaceAuth | |
| from module_admin.service.login_service import LoginService | |
| from module_admin.service.data_asset_service import DataAssetService | |
| from module_admin.service.dataast_service import DataAstService | |
| from module_admin.entity.vo.dataast_vo import DataAstInfoModel, DataAstInfoPageQueryModel,DataAstApprModel,DataAstApprBatchModel | |
| from module_admin.entity.vo.data_asset_vo import DataAssetBatchModel, DataAssetPageQueryModel, DataAssetResultModel, DataAssetSearchModel | |
| from utils.log_util import logger | |
| from utils.page_util import PageResponseModel | |
| from utils.response_util import ResponseUtil | |
| from typing import List | |
| from config.enums import BusinessType | |
| from utils.common_util import bytes2file_response | |
| from module_admin.annotation.log_annotation import Log | |
| 
 | |
| dataAssetController = APIRouter(prefix='/system/dataAsset') | |
| 
 | |
| 
 | |
| @dataAssetController.get('/list', response_model=PageResponseModel) | |
| async def get_data_asset_list( | |
|     request: Request, | |
|     data_asset_page_query: DataAssetPageQueryModel = Depends(DataAssetPageQueryModel.as_query), | |
|     query_db: AsyncSession = Depends(get_db), | |
| ): | |
|     """ | |
|     获取数据资产信息列表 | |
|      | |
|     :param request: 请求对象 | |
|     :param data_asset_page_query: 查询参数 | |
|     :param query_db: 数据库会话 | |
|     :return: 数据资产信息列表 | |
|     """ | |
|     # 获取分页数据 | |
|     data_asset_page_query_result = await DataAssetService.get_data_asset_list_services( | |
|         query_db, data_asset_page_query, is_page=True | |
|     ) | |
|     logger.info('获取数据资产信息列表成功') | |
| 
 | |
|     return ResponseUtil.success(model_content=data_asset_page_query_result) | |
| 
 | |
| 
 | |
| @dataAssetController.post('/batch') | |
| async def batch_process_data_asset( | |
|     request: Request, | |
|     batch_data: DataAssetBatchModel, | |
|     query_db: AsyncSession = Depends(get_db), | |
| ): | |
|     """ | |
|     批量处理数据资产信息(新增/修改/删除) | |
|      | |
|     :param request: 请求对象 | |
|     :param batch_data: 批量处理数据 | |
|     :param query_db: 数据库会话 | |
|     :return: 处理结果 | |
|     """ | |
|     try: | |
|         # 批量处理数据资产 | |
|         result = await DataAssetService.batch_process_data_asset_services(query_db, batch_data) | |
|          | |
|         # 记录处理结果 | |
|         logger.info(f'批量处理数据资产成功,成功: {result.success_count},失败: {result.failed_count}') | |
|          | |
|         # 返回处理结果 | |
|         return ResponseUtil.success(data=result) | |
|     except Exception as e: | |
|         logger.error(f'批量处理数据资产失败: {str(e)}') | |
|         return ResponseUtil.error(msg=f"处理失败: {str(e)}")  | |
| 
 | |
| @dataAssetController.get('/sources', response_model=List[str]) | |
| async def get_data_asset_sources( | |
|     request: Request, | |
|     query_db: AsyncSession = Depends(get_db), | |
| ): | |
|     """ | |
|     获取所有数据资产来源列表 | |
|      | |
|     :param request: 请求对象 | |
|     :param query_db: 数据库会话 | |
|     :return: 数据资产来源列表 | |
|     """ | |
|     sources = await DataAssetService.get_data_asset_sources_services(query_db) | |
|     logger.info('获取数据资产来源列表成功') | |
|      | |
|     return ResponseUtil.success(data=sources) | |
| 
 | |
| 
 | |
| @dataAssetController.get('/search', response_model=PageResponseModel) | |
| async def search_data_assets( | |
|     request: Request, | |
|     search_params: DataAssetSearchModel = Depends(DataAssetSearchModel.as_query), | |
|     query_db: AsyncSession = Depends(get_db), | |
| ): | |
|     """ | |
|     综合查询数据资产信息 | |
|      | |
|     :param request: 请求对象 | |
|     :param search_params: 查询参数 | |
|     :param query_db: 数据库会话 | |
|     :return: 查询结果 | |
|     """ | |
|     # 将查询参数转换为字典,剔除None值 | |
|     params_dict = {k: v for k, v in search_params.model_dump().items()  | |
|                   if v is not None and k not in ['page_num', 'page_size']} | |
|      | |
|     # 执行查询 | |
|     search_result = await DataAssetService.search_data_assets_services( | |
|         query_db,  | |
|         params_dict, | |
|         search_params.page_num, | |
|         search_params.page_size | |
|     ) | |
|      | |
|     logger.info('综合查询数据资产信息成功') | |
|      | |
|     return ResponseUtil.success(model_content=search_result) | |
| 
 | |
| 
 | |
| # @dataAssetController.get('/search', response_model=PageResponseModel) | |
| # async def search_data_assets( | |
| #     request: Request, | |
| #     search_params: DataAssetSearchModel = Depends(DataAssetSearchModel.as_query), | |
| #     query_db: AsyncSession = Depends(get_db), | |
| # ): | |
| 
 | |
| @dataAssetController.post("/export") | |
| @Log(title="数据资产", business_type=BusinessType.EXPORT) | |
| async def export_data_assets( | |
|     request: Request, | |
|     data_asset_query: DataAssetPageQueryModel = Form(), | |
|     query_db: AsyncSession = Depends(get_db), | |
| ): | |
|     """ | |
|     导出数据资产信息 | |
|      | |
|     :param request: 请求对象 | |
|     :param data_asset_query: 查询参数 | |
|     :param query_db: 数据库会话 | |
|     :return: Excel文件流 | |
|     """ | |
| 
 | |
|     data_assets = await DataAssetService.get_data_asset_list_services( | |
|         query_db, data_asset_query, is_page=False | |
|     ) | |
|     excel_data = await DataAssetService.export_data_asset_list_services(data_assets) | |
|     logger.info('导出成功') | |
| 
 | |
|     return ResponseUtil.streaming(data=bytes2file_response(excel_data)) | |
| 
 | |
| 
 | |
| 
 | |
|     # ----------------------------------------------------------------元数据发布相关接口---------------------------------------------------------------------------------------------------- | |
| 
 | |
| # @dataAssetController.post('/addastappr') | |
| # @Log(title='数据资产新增申请', business_type=BusinessType.INSERT) | |
| # async def add_dataast_appr( | |
| #     request: Request, | |
| #     add_dataast: DataAstApprModel, | |
| #     query_db: AsyncSession = Depends(get_db), | |
| #     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| # ): | |
| #     add_dataast.create_by = current_user.user.user_name | |
| #     add_dataast.create_time = datetime.now() | |
| #     add_dataast.upd_prsn = current_user.user.user_name | |
| #     add_dataast.upd_time = datetime.now() | |
| #     add_dataast_result = await DataAstService.add_dataast_appr(query_db, add_dataast) | |
| #     logger.info(add_dataast_result.message) | |
| #     return ResponseUtil.success(msg=add_dataast_result.message)     | |
| 
 | |
| @dataAssetController.post('/addastappr') | |
| @Log(title='数据资产新增申请', business_type=BusinessType.INSERT) | |
| async def add_dataast_appr( | |
|     request: Request, | |
|     add_dataasts: DataAstApprBatchModel,  # 修改为列表 | |
|     query_db: AsyncSession = Depends(get_db), | |
|     current_user: CurrentUserModel = Depends(LoginService.get_current_user), | |
| ): | |
|     for add_dataast in add_dataasts.assetItems: | |
|         add_dataast.create_by = current_user.user.user_name | |
|         add_dataast.create_time = datetime.now() | |
|         add_dataast.upd_prsn = current_user.user.user_name | |
|         add_dataast.upd_time = datetime.now() | |
| 
 | |
|     add_dataast_result = await DataAstService.add_dataasts_appr(query_db, add_dataasts,current_user.user.user_name) | |
|     logger.info(add_dataast_result.message) | |
|     return ResponseUtil.success(msg=add_dataast_result.message) | |
| 
 | |
| 
 | |
| @dataAssetController.get('/listastappr', response_model=PageResponseModel | |
| ) | |
| async def get_ast_main_appr_list( | |
|     request: Request, | |
|         flowId: str, | |
|     query_db: AsyncSession = Depends(get_db), | |
| ): | |
|     main_page_query_result = await DataAstService.get_ast_main_appr_list(query_db, flowId, is_page=True) | |
|     logger.info('获取数据标准列表成功') | |
|     return ResponseUtil.success(data=main_page_query_result) |