import uuid from module_admin.entity.vo.meta_vo import MetaPageObject, MetaColObject, SuppleModel from module_admin.entity.do.meta_do import MetadataSuppInfo, MetadataFldSuppInfo, MetadataSuppInfoVett, \ MetadataFldSuppInfoVett from module_admin.dao.meta_dao import MetaDao from datetime import datetime from module_admin.entity.vo.user_vo import CurrentUserModel from module_admin.entity.vo.approval_vo import ApplyModel from sqlalchemy.ext.asyncio import AsyncSession from exceptions.exception import ServiceException, ServiceWarning from utils.pwd_util import * from utils.common_util import * from utils.log_util import logger from module_admin.service.login_service import LoginService from module_admin.service.approval_service import ApprovalService from module_admin.entity.vo.common_vo import CrudResponseModel from module_admin.entity.vo.user_vo import CurrentUserModel from utils.common_util import CamelCaseUtil import re class MetaService: @classmethod async def get_meta_list_services(cls, result_db: AsyncSession, query_object: MetaPageObject, current_user: CurrentUserModel): """ 获取元信息service :param result_db: orm对象 :param query_object: 查询参数对象 :param data_scope_sql: 数据权限对应的查询sql语句 :return: 用户列表信息对象 """ # print("********") # 0,正常,1已发布,2审核中,3已审核,4已作废 if 'admin' in current_user.roles: meta_rel_list = await MetaDao.get_meta_rel_list(result_db, query_object) return meta_rel_list else: # meta_rel_list = MetaDao.get_meta_rel_list(result_db, query_object, data_scope_sql) return None @classmethod async def get_meta_col_list_services(cls, result_db: AsyncSession, query_object: MetaColObject): meta_result = await MetaDao.get_meta_col_list(result_db, query_object) return cls.convert_json_keys(meta_result) @classmethod async def get_meta_clas_list_services(cls, result_db: AsyncSession): result = await MetaDao.get_meta_clas_list(result_db) return CamelCaseUtil.transform_result(result) @classmethod async def meta_supp(cls, result_db: AsyncSession, supple: SuppleModel, current_user: CurrentUserModel): # 0,暂存 waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消 hasTable = await MetaDao.get_lastest_meta_data_supp_vett(result_db, supple.ssys_cd, supple.mdl_name, supple.tab_eng_name) tableOnum = uuid.uuid4() if hasTable is not None: if hasTable.apply_status == 'waiting': raise ServiceException(message=f'所补录对象已存在补录待审核记录,请等待审批完成或撤回申请后,再行补录') if hasTable.apply_status == 'pending': raise ServiceException(message=f'所补录对象已存在待审核记录,请等待审批完成后,再行补录') suppTableInfo = MetadataSuppInfoVett() suppTableInfo.onum = tableOnum suppTableInfo.ssys_cd = supple.ssys_cd suppTableInfo.mdl_name = supple.mdl_name suppTableInfo.tab_eng_name = supple.tab_eng_name suppTableInfo.tab_crrct_name = supple.tab_crrct_name suppTableInfo.tab_desc = supple.tab_desc suppTableInfo.pic = supple.pic suppTableInfo.gov_flag = supple.gov_flag suppTableInfo.tab_clas = supple.tab_clas suppTableInfo.rec_subm_prsn = current_user.user.user_name suppTableInfo.apply_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") suppTableInfo.apply_status = 'waiting' await MetaDao.insertMetadataSuppInfoVett(suppTableInfo, result_db) await result_db.commit() if supple.columnInfo is not None and len(supple.columnInfo) > 0: for column in supple.columnInfo: suppColumnInfo = MetadataFldSuppInfoVett() suppColumnInfo.onum = uuid.uuid4() suppColumnInfo.ssys_cd = supple.ssys_cd suppColumnInfo.mdl_name = supple.mdl_name suppColumnInfo.tab_eng_name = supple.tab_eng_name suppColumnInfo.fld_eng_name = column.fld_eng_name suppColumnInfo.fld_crrct_name = column.fld_crrct_name suppColumnInfo.crrct_pk_flag = column.crrct_pk_flag suppColumnInfo.fld_desc = column.fld_desc suppColumnInfo.pic = column.pic suppColumnInfo.fld_clas = column.fld_clas suppColumnInfo.fld_null_rate = column.fld_null_rate suppColumnInfo.rec_stat = column.rec_stat suppColumnInfo.rec_subm_prsn = current_user.user.user_name suppColumnInfo.apply_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") suppColumnInfo.apply_status = 'waiting' await MetaDao.insertMetadataFldSuppInfoVett(suppColumnInfo, result_db) await result_db.commit() applyModel = ApplyModel() applyModel.businessType = "metaDataInfo" applyModel.businessId = tableOnum applyModel.applicant = current_user.user.user_name await ApprovalService.apply_services(result_db, applyModel, 'metaDataInfo') return CrudResponseModel(is_success=True, message='操作成功') @classmethod def snake_to_camel(cls, snake_str: str): # 将字符串按下划线分割成列表 components = snake_str.split('_') # 第一个单词保持小写,后续单词首字母大写 camel_str = components[0] + ''.join(word.capitalize() for word in components[1:]) return camel_str @classmethod def convert_json_keys(cls, data): if isinstance(data, dict): # 如果数据是字典,则转换键名并递归处理值 return {cls.snake_to_camel(k): cls.convert_json_keys(v) for k, v in data.items()} elif isinstance(data, list): # 如果数据是列表,则递归处理列表中的每个元素 return [cls.convert_json_keys(element) for element in data] else: # 如果数据不是字典或列表,则直接返回(即基本数据类型,如字符串、数字等) return data