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.
209 lines
11 KiB
209 lines
11 KiB
import json
|
|
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, MetadataExtractInfo, MetadataFldTabExtractInfo
|
|
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
|
|
|
|
|
|
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)
|
|
if meta_rel_list and len(meta_rel_list.rows) > 0:
|
|
for table in meta_rel_list.rows:
|
|
tab_list = await MetaDao.get_meta_tab_clas(result_db, table['ssysCd'], table['mdlName'],
|
|
table['tabEngName'])
|
|
table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list)
|
|
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)
|
|
result = CamelCaseUtil.transform_result(meta_result)
|
|
for column in result:
|
|
fld_list = await MetaDao.get_meta_fld_clas(result_db, column['ssysCd'], column['mdlName'],
|
|
column['tabEngName'], column['fldEngName'])
|
|
column['batchFldClas'] = CamelCaseUtil.transform_result(fld_list)
|
|
return 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)
|
|
oldTable = await MetaDao.get_supp_table_by_vett(supple.ssys_cd, supple.mdl_name, supple.tab_eng_name, result_db)
|
|
tableInfo = await MetaDao.get_meta_table(supple.ssys_cd, supple.mdl_name, supple.tab_eng_name, result_db)
|
|
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'所补录对象已存在待审核记录,请等待审批完成后,再行补录')
|
|
applyTime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
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 = applyTime
|
|
suppTableInfo.apply_status = 'waiting'
|
|
suppTableInfo.oldTableData = cls.castToTableStr(oldTable, tableInfo)
|
|
await MetaDao.insertMetadataSuppInfoVett(suppTableInfo, result_db)
|
|
if supple.columnInfo is not None and len(supple.columnInfo) > 0:
|
|
for column in supple.columnInfo:
|
|
oldColumn = await MetaDao.get_supp_column_by_columnInfo(supple.ssys_cd, supple.mdl_name,
|
|
supple.tab_eng_name,
|
|
column.fld_eng_name, result_db)
|
|
columnInfo = await MetaDao.get_meta_column(supple.ssys_cd, supple.mdl_name, supple.tab_eng_name,
|
|
column.fld_eng_name, result_db)
|
|
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 = applyTime
|
|
suppColumnInfo.apply_status = 'waiting'
|
|
suppColumnInfo.oldColumnData = cls.castToColumnStr(oldColumn, columnInfo)
|
|
await MetaDao.insertMetadataFldSuppInfoVett(suppColumnInfo, result_db)
|
|
applyModel = ApplyModel()
|
|
applyModel.businessType = "metaDataInfo"
|
|
applyModel.businessId = tableOnum
|
|
applyModel.applicant = current_user.user.user_name
|
|
await ApprovalService.apply_services(result_db, applyModel, 'metaDataInfo')
|
|
await result_db.commit()
|
|
return CrudResponseModel(is_success=True, message='操作成功')
|
|
|
|
@classmethod
|
|
def castToTableStr(cls, table: MetadataSuppInfo, tableInfo: MetadataExtractInfo):
|
|
tableDict = dict(
|
|
onum=tableInfo.onum,
|
|
crrctVerNum=table.crrct_ver_num if table else None,
|
|
ssysCd=tableInfo.ssys_cd,
|
|
mdlName=tableInfo.mdl_name,
|
|
tabEngName=tableInfo.tab_eng_name,
|
|
tabCnName=tableInfo.tab_cn_name,
|
|
tabType=tableInfo.tab_type,
|
|
tabRecNum=tableInfo.tab_rec_num,
|
|
tabCrrctName=table.tab_crrct_name if table else None,
|
|
tabDesc=table.tab_desc if table else None,
|
|
pic=table.pic if table else None,
|
|
govFlag=table.gov_flag if table else None,
|
|
recStat=table.rec_stat if table else None,
|
|
tabClas=table.tab_clas if table else None,
|
|
recSubmPrsn=table.rec_subm_prsn if table else None,
|
|
updTime=table.upd_time if table else None
|
|
)
|
|
return json.dumps(tableDict)
|
|
|
|
@classmethod
|
|
def castToColumnStr(cls, column: MetadataFldSuppInfo, columnInfo: MetadataFldTabExtractInfo):
|
|
columnDict = dict(
|
|
onum=columnInfo.onum,
|
|
crrctVerNum=column.crrct_ver_num if column else None,
|
|
ssysCd=columnInfo.ssys_cd,
|
|
mdlName=columnInfo.mdl_name,
|
|
tabEngName=columnInfo.tab_eng_name,
|
|
fldEngName=columnInfo.fld_eng_name,
|
|
fldCnName=columnInfo.fld_cn_name,
|
|
fldType=columnInfo.fld_type,
|
|
pkFlag=columnInfo.pk_flag,
|
|
requireFlag=columnInfo.require_flag,
|
|
idxFlag=columnInfo.idx_flag,
|
|
fldCrrctName=column.fld_crrct_name if column else None,
|
|
crrctPkFlag=column.crrct_pk_flag if column else None,
|
|
fldDesc=column.fld_desc if column else None,
|
|
pic=column.pic if column else None,
|
|
fldClas=column.fld_clas if column else None,
|
|
fldNullRate=column.fld_null_rate if column else None,
|
|
recStat=column.rec_stat if column else None,
|
|
updTime=column.upd_time if column else None
|
|
)
|
|
return json.dumps(columnDict)
|
|
|
|
@classmethod
|
|
async def get_meta_apply_detail_services(cls, result_db: AsyncSession, businessId: str):
|
|
tableData = await MetaDao.get_supp_table_vett_by_id(businessId, result_db)
|
|
table = CamelCaseUtil.transform_result(tableData)
|
|
clas_list = await MetaDao.get_meta_tab_clas(result_db, tableData.ssys_cd, tableData.mdl_name,
|
|
tableData.tab_eng_name)
|
|
table['batchTabClas'] = CamelCaseUtil.transform_result(clas_list)
|
|
columnData = await MetaDao.get_supp_column_vett_by_tableInfo(result_db, tableData)
|
|
column_list = CamelCaseUtil.transform_result(columnData)
|
|
for column in column_list:
|
|
col_list = await MetaDao.get_meta_fld_clas(result_db, column['ssysCd'], column['mdlName'],
|
|
column['tabEngName'], column['fldEngName'])
|
|
column['batchColClas'] = CamelCaseUtil.transform_result(col_list)
|
|
result = dict(
|
|
table=table,
|
|
column=column_list
|
|
)
|
|
return result
|
|
|
|
@classmethod
|
|
async def get_table_by_id(cls, result_db: AsyncSession, tableId: int):
|
|
table = await MetaDao.get_meta_table_by_id(tableId, result_db)
|
|
tab_list = await MetaDao.get_meta_tab_clas(result_db, table['ssysCd'], table['mdlName'],
|
|
table['tabEngName'])
|
|
table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list)
|
|
colQuery = MetaColObject()
|
|
colQuery.ssys_cd = table['ssysCd']
|
|
colQuery.mdl_name = table['mdlName']
|
|
colQuery.tab_name = table['tabEngName']
|
|
columnList = await MetaDao.get_meta_col_list(result_db, colQuery)
|
|
for column in columnList:
|
|
col_list = await MetaDao.get_meta_fld_clas(result_db, column['ssys_cd'], column['mdl_name'],
|
|
column['tab_eng_name'], column['fld_eng_name'])
|
|
column['batchColClas'] = CamelCaseUtil.transform_result(col_list)
|
|
table['columnList'] = CamelCaseUtil.transform_result(columnList)
|
|
return table
|
|
|