|  |  |  | from sqlalchemy import delete, select, update, desc,or_,not_,insert,and_,text | 
					
						
							|  |  |  | from sqlalchemy.ext.asyncio import AsyncSession | 
					
						
							|  |  |  | from module_admin.entity.do.dataast_do import DataAssetInfoAppr | 
					
						
							|  |  |  | from module_admin.entity.do.data_ast_content_do import DataAssetInfo | 
					
						
							|  |  |  | from module_admin.entity.vo.dataast_vo import DataAstApprModel,DataAstInfoModel | 
					
						
							|  |  |  | from utils.page_util import PageUtil | 
					
						
							|  |  |  | from sqlalchemy.orm import aliased | 
					
						
							|  |  |  | from datetime import datetime | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DataAstDao: | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def get_dataast_appr_list(cls, flowId:str,db: AsyncSession): | 
					
						
							|  |  |  |        filters = [] | 
					
						
							|  |  |  |        filters.append(DataAssetInfoAppr.flowId == flowId) | 
					
						
							|  |  |  |        query = select(DataAssetInfoAppr).where(*filters).order_by(desc(DataAssetInfoAppr.create_time)) | 
					
						
							|  |  |  |        return await PageUtil.paginate(db, query, 0, 0, False) | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def get_dataast_appr_list_Flow(cls, flowId:str,db: AsyncSession): | 
					
						
							|  |  |  |        filters = [] | 
					
						
							|  |  |  |        filters.append(DataAssetInfoAppr.flowId == flowId) | 
					
						
							|  |  |  |        query = select(DataAssetInfoAppr).where(*filters).order_by(desc(DataAssetInfoAppr.create_time)) | 
					
						
							|  |  |  |        return await PageUtil.paginate(db, query, 0, 0, False)       | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def add_dataast_appr(cls, db: AsyncSession, model: DataAstApprModel): | 
					
						
							|  |  |  |         # 从model中获取ast_no | 
					
						
							|  |  |  |         ast_no = model.ast_no | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         # 查询当前ast_no对应的最大版本号 | 
					
						
							|  |  |  |         from sqlalchemy import select, func | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         query = select(func.max(DataAssetInfoAppr.version_no)).where( | 
					
						
							|  |  |  |             DataAssetInfoAppr.ast_no == ast_no | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         result = await db.execute(query) | 
					
						
							|  |  |  |         max_version = result.scalar_one_or_none() | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         # 计算新的版本号 | 
					
						
							|  |  |  |         new_version = '1' if max_version is None else str(int(max_version) + 1) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         # 创建对象时设置版本号 | 
					
						
							|  |  |  |         data = model.model_dump() | 
					
						
							|  |  |  |         data['version_no'] = new_version | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         col = DataAssetInfoAppr(**data) | 
					
						
							|  |  |  |         db.add(col) | 
					
						
							|  |  |  |         await db.flush() | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return col | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def add_dataast_data(cls, db: AsyncSession, model: DataAstInfoModel): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             # 构建 SQL 语句 | 
					
						
							|  |  |  |             upsert_sql = text("""
 | 
					
						
							|  |  |  |                 INSERT INTO t_data_ast_info ( | 
					
						
							|  |  |  |                     data_ast_eng_name, | 
					
						
							|  |  |  |                     data_ast_cn_name, | 
					
						
							|  |  |  |                     data_ast_type, | 
					
						
							|  |  |  |                     data_ast_stat, | 
					
						
							|  |  |  |                     data_ast_desc, | 
					
						
							|  |  |  |                     data_ast_screen, | 
					
						
							|  |  |  |                     data_ast_scren_clas, | 
					
						
							|  |  |  |                     data_ast_cont, | 
					
						
							|  |  |  |                     data_ast_faq, | 
					
						
							|  |  |  |                     data_ast_estb_time, | 
					
						
							|  |  |  |                     data_ast_upd_time, | 
					
						
							|  |  |  |                     data_ast_src, | 
					
						
							|  |  |  |                     ast_no, | 
					
						
							|  |  |  |                     data_ast_clas | 
					
						
							|  |  |  |                 ) VALUES ( | 
					
						
							|  |  |  |                     :data_ast_eng_name, | 
					
						
							|  |  |  |                     :data_ast_cn_name, | 
					
						
							|  |  |  |                     :data_ast_type, | 
					
						
							|  |  |  |                     :data_ast_stat, | 
					
						
							|  |  |  |                     :data_ast_desc, | 
					
						
							|  |  |  |                     :data_ast_screen, | 
					
						
							|  |  |  |                     :data_ast_scren_clas, | 
					
						
							|  |  |  |                     :data_ast_cont, | 
					
						
							|  |  |  |                     :data_ast_faq, | 
					
						
							|  |  |  |                     :data_ast_estb_time, | 
					
						
							|  |  |  |                     :data_ast_upd_time, | 
					
						
							|  |  |  |                     :data_ast_src, | 
					
						
							|  |  |  |                     :ast_no, | 
					
						
							|  |  |  |                     :data_ast_clas | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |                 ON DUPLICATE KEY UPDATE | 
					
						
							|  |  |  |                     data_ast_eng_name = VALUES(data_ast_eng_name), | 
					
						
							|  |  |  |                     data_ast_cn_name = VALUES(data_ast_cn_name), | 
					
						
							|  |  |  |                     data_ast_type = VALUES(data_ast_type), | 
					
						
							|  |  |  |                     data_ast_stat = VALUES(data_ast_stat), | 
					
						
							|  |  |  |                     data_ast_desc = VALUES(data_ast_desc), | 
					
						
							|  |  |  |                     data_ast_screen = VALUES(data_ast_screen), | 
					
						
							|  |  |  |                     data_ast_scren_clas = VALUES(data_ast_scren_clas), | 
					
						
							|  |  |  |                     data_ast_cont = VALUES(data_ast_cont), | 
					
						
							|  |  |  |                     data_ast_faq = VALUES(data_ast_faq), | 
					
						
							|  |  |  |                     data_ast_estb_time = VALUES(data_ast_estb_time), | 
					
						
							|  |  |  |                     data_ast_upd_time = VALUES(data_ast_upd_time), | 
					
						
							|  |  |  |                     data_ast_src = VALUES(data_ast_src), | 
					
						
							|  |  |  |                     data_ast_clas = VALUES(data_ast_clas); | 
					
						
							|  |  |  |             """)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             model_dict = model.model_dump() | 
					
						
							|  |  |  |             model_dict['data_ast_upd_time'] = datetime.now() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # 执行 UPSERT 操作 | 
					
						
							|  |  |  |             await db.execute(upsert_sql, model_dict) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # 提交事务 | 
					
						
							|  |  |  |             await db.commit() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return "元数据成功发布到数据资产!" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         except Exception as e: | 
					
						
							|  |  |  |             # 出现异常时回滚事务 | 
					
						
							|  |  |  |             await db.rollback() | 
					
						
							|  |  |  |             raise e | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def update_data_ast_appr(cls, db: AsyncSession, update_data: DataAstInfoModel): | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |         await db.execute(update(DataAssetInfoAppr), [update_data]) | 
					
						
							|  |  |  |         await db.flush() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def get_ast_main_appr_list(cls, flowId:str,db: AsyncSession): | 
					
						
							|  |  |  |        filters = [] | 
					
						
							|  |  |  |        filters.append(DataAssetInfoAppr.flowId == flowId)     | 
					
						
							|  |  |  |        query = select(DataAssetInfoAppr).where(*filters).order_by(desc(DataAssetInfoAppr.create_time)) | 
					
						
							|  |  |  |        return await PageUtil.paginate(db, query, 0, 0, False)  |