Browse Source

元数据字段查询优化

master
xueyinfei 1 month ago
parent
commit
f77868c7fa
  1. 86
      vue-fastapi-backend/module_admin/dao/meta_dao.py
  2. 8
      vue-fastapi-backend/module_admin/service/meta_service.py
  3. 25
      vue-fastapi-frontend/src/views/meta/metaInfo/index.vue

86
vue-fastapi-backend/module_admin/dao/meta_dao.py

@ -149,61 +149,37 @@ class MetaDao:
@classmethod
async def get_meta_col_list(cls, db: AsyncSession, query_object: MetaColObject):
query_result = (
(
await db.execute(
select(
MetadataFldTabExtractInfo.onum.label('extract_onum'),
MetadataFldTabExtractInfo.extract_ver_num,
MetadataFldTabExtractInfo.ssys_id,
MetadataFldTabExtractInfo.data_whs_name,
MetadataFldTabExtractInfo.mdl_name,
MetadataFldTabExtractInfo.tab_no,
MetadataFldTabExtractInfo.tab_eng_name,
MetadataFldTabExtractInfo.fld_no,
MetadataFldTabExtractInfo.fld_eng_name,
MetadataFldTabExtractInfo.fld_cn_name,
MetadataFldTabExtractInfo.fld_type,
MetadataFldTabExtractInfo.pk_flag,
MetadataFldTabExtractInfo.require_flag,
MetadataFldTabExtractInfo.idx_flag,
MetadataFldTabExtractInfo.upd_time.label('extract_upd_time'),
MetadataFldSuppInfo.onum.label('supp_onum'),
MetadataFldSuppInfo.crrct_ver_num,
MetadataFldSuppInfo.fld_crrct_name,
MetadataFldSuppInfo.crrct_pk_flag,
MetadataFldSuppInfo.fld_desc,
MetadataFldSuppInfo.pic,
MetadataFldSuppInfo.fld_clas,
# MetadataFldSuppInfo.fld_null_rate,
MetadataFldSuppInfo.data_dict_id,
MetadataFldSuppInfo.data_sec_lvl,
DataStdDict.data_dict_cn_name.label('data_dict_name'),
MetadataFldSuppInfo.rec_stat.label('supp_rec_stat'),
MetadataFldSuppInfo.upd_time.label('supp_upd_time')
).select_from(MetadataFldTabExtractInfo)
.join(
MetadataFldSuppInfo,
and_(
MetadataFldTabExtractInfo.ssys_id == MetadataFldSuppInfo.ssys_id,
MetadataFldTabExtractInfo.mdl_name == MetadataFldSuppInfo.mdl_name,
MetadataFldTabExtractInfo.tab_eng_name == MetadataFldSuppInfo.tab_eng_name,
MetadataFldTabExtractInfo.fld_eng_name == MetadataFldSuppInfo.fld_eng_name
), isouter=True
).join(
DataStdDict,
and_(
DataStdDict.onum == MetadataFldSuppInfo.data_dict_id
), isouter=True
).where(
MetadataFldTabExtractInfo.ssys_id == query_object.ssys_id,
MetadataFldTabExtractInfo.mdl_name == query_object.mdl_name,
MetadataFldTabExtractInfo.tab_eng_name == query_object.tab_name
).distinct().order_by(MetadataFldTabExtractInfo.fld_no)
)
).all()
)
return [row._asdict() for row in query_result]
sql_query = text("select a.onum as 'extract_onum',a.extract_ver_num,a.ssys_id,a.data_whs_name,a.mdl_name"
",a.tab_no,a.tab_eng_name,"
"a.fld_no,a.fld_eng_name,a.fld_cn_name,a.fld_type,a.pk_flag,a.require_flag,a.idx_flag,"
"a.upd_time as 'extract_upd_time',b.onum as 'supp_onum',b.crrct_ver_num,b.fld_crrct_name"
",b.crrct_pk_flag,b.fld_desc,b.pic,"
"b.fld_clas,b.data_dict_id,"
"IF(b.data_sec_lvl is null and b.data_dict_id is not null, d.data_sec_lvl, b.data_sec_lvl) "
"as 'data_sec_lvl',b.rec_stat as 'supp_rec_stat',b.upd_time as 'supp_upd_time',"
"c.data_dict_cn_name as 'data_dict_name',g.batchColClas as batchColClas "
"from t_metadata_fld_tab_extract_info a "
"left join t_metadata_fld_supp_info b on a.ssys_id=b.ssys_id and a.mdl_name=b.mdl_name"
" and a.tab_eng_name=b.tab_eng_name and a.fld_eng_name=b.fld_eng_name "
"left join t_data_dict c on b.data_dict_id = c.onum "
"left join t_data_std d on c.data_std_no = d.data_std_no "
"left join (select JSON_ARRAYAGG("
"JSON_OBJECT('onum',e.onum,'ssysId',e.ssys_id,"
"'dataWhsName',e.data_whs_name,'tabNo',e.tab_no,'tabEngName',e.tab_eng_name,"
"'fldEngName',e.fld_eng_name,'clasOnum',e.clas_onum,'clasValue',e.clas_value,"
"'clasTmpl', f.clas_tmpl,'clasEffFlag', f.clas_eff_flag,'recSumbPrsn', f.rec_subm_prsn,"
"'beltBatchContent',f.belt_batch_content,'clasName',f.clas_name)) as batchColClas,"
"e.ssys_id, e.mdl_name,e.tab_eng_name,e.fld_eng_name from t_batch_fld_clas e "
"left join t_metadata_clas f on e.clas_onum = f.clas_onum "
"where e.ssys_id= :ssysId and e.mdl_name=:mdlName and e.tab_eng_name=:tableName "
"group by e.fld_eng_name) g on g.ssys_id=a.ssys_id and g.mdl_name = a.mdl_name "
"and g.tab_eng_name = a.tab_eng_name and g.fld_eng_name = a.fld_eng_name "
"where a.ssys_id = :ssysId and a.mdl_name=:mdlName and a.tab_eng_name=:tableName"
" order by a.fld_no")
result = (await db.execute(sql_query, {"ssysId": query_object.ssys_id, "mdlName": query_object.mdl_name,
"tableName": query_object.tab_name}))
columns = result.keys()
return [dict(zip(columns, row)) for row in result.fetchall()]
@classmethod
async def get_meta_clas_list(cls, db: AsyncSession):

8
vue-fastapi-backend/module_admin/service/meta_service.py

@ -64,14 +64,6 @@ class MetaService:
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['ssysId'], column['mdlName'],
column['tabEngName'], column['fldEngName'])
column['batchFldClas'] = CamelCaseUtil.transform_result(fld_list)
if column['dataSecLvl'] is None and column['dataDictId'] is not None:
# 获取数据标准的安全等级
data_sec_lvl = await DataStdDao.get_data_sec_lvl_by_dict_id(result_db, column['dataDictId'])
column['dataSecLvl'] = data_sec_lvl
return result
@classmethod

25
vue-fastapi-frontend/src/views/meta/metaInfo/index.vue

@ -334,7 +334,7 @@
<!-- </el-table-column>-->
<el-table-column label="字段标签" width="150" align="center" prop="fldClas">
<template #default="scope">
<el-popover placement="right" width="auto" trigger="hover">
<el-popover v-if="scope.row.tempFldClas && scope.row.tempFldClas.length>0" placement="right" width="auto" trigger="hover">
<template #reference>
<template v-for="item in scope.row.tempFldClas">
<el-tag v-if="item.clasEffFlag === '1'">{{item.clasName}}</el-tag>
@ -1158,7 +1158,7 @@
changed = true
}
}
let batchFldClas = columnList.value[i].batchFldClas
let batchFldClas = columnList.value[i].batchColClas
if (fldClas.length > 0){
for (let j = 0; j < fldClas.length; j++) {
for (let k = 0; k < batchFldClas.length; k++) {
@ -1473,15 +1473,16 @@
mdlName: row.mdlName
}
getColumnList(columnData).then(res=>{
columnList.value = res.data
if (columnList.value.length>0){
for (let i = 0; i < columnList.value.length; i++) {
let batchFldClas = columnList.value[i].batchFldClas
let colList = res.data
if (colList.length>0){
for (let i = 0; i < colList.length; i++) {
colList[i].batchColClas = JSON.parse(colList[i].batchColClas)
let batchFldClas = colList[i].batchColClas
let fldClas =[]
if (columnList.value[i].fldClas && columnList.value[i].fldClas !== '[]'){
fldClas = JSON.parse(columnList.value[i].fldClas)
if (colList[i].fldClas && colList[i].fldClas !== '[]'){
fldClas = JSON.parse(colList[i].fldClas)
}
if (fldClas.length > 0){
if (fldClas.length > 0 && batchFldClas){
for (let j = 0; j < fldClas.length; j++) {
for (let k = 0; k < batchFldClas.length; k++) {
if (batchFldClas[k].clasPriClas === fldClas[j].clasPriClas
@ -1520,10 +1521,12 @@
}
}
}
columnList.value[i].showFldClas = batchFldClas
columnList.value[i].tempFldClas = tempFldClas
colList[i].showFldClas = batchFldClas
colList[i].tempFldClas = tempFldClas
}
}
columnList.value = colList
console.log(columnList)
})
activeColumnTab.value = 'column'
drawer.value = true

Loading…
Cancel
Save