Browse Source

元數據掛載數據字典

master
xueyinfei 1 month ago
parent
commit
00924bf69c
  1. 17
      vue-fastapi-backend/module_admin/controller/datastd_controller.py
  2. 30
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  3. 71
      vue-fastapi-backend/module_admin/dao/meta_dao.py
  4. 4
      vue-fastapi-backend/module_admin/entity/do/meta_do.py
  5. 1
      vue-fastapi-backend/module_admin/entity/vo/meta_vo.py
  6. 13
      vue-fastapi-backend/module_admin/service/datastd_service.py
  7. 2
      vue-fastapi-backend/module_admin/service/meta_service.py
  8. 7
      vue-fastapi-frontend/src/api/datastd/std.js
  9. 48
      vue-fastapi-frontend/src/views/meta/metaInfo/index.vue
  10. 15
      vue-fastapi-frontend/src/views/system/flow/index.vue

17
vue-fastapi-backend/module_admin/controller/datastd_controller.py

@ -249,6 +249,23 @@ async def get_std_dict_list(
dict_page_query_result = await DataStdService.get_std_dict_list_services(query_db, dict_page_query, is_page=True)
logger.info('获取列配置列表成功')
return ResponseUtil.success(model_content=dict_page_query_result)
@datastdController.get(
'/stddict/dict/listNoPage', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:list'))]
)
async def get_std_dict_list_no_page(
request: Request,
query: str,
query_db: AsyncSession = Depends(get_db),
):
dict_page_query_result = await DataStdService.get_std_dict_list_no_page_services(query_db, query)
logger.info('获取列配置列表成功')
return ResponseUtil.success(data=dict_page_query_result)
@datastdController.get(
'/stddict/dict/{id}', response_model=DataStdDictModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:list'))]
)

30
vue-fastapi-backend/module_admin/dao/datastd_dao.py

@ -387,6 +387,36 @@ class DataStdDao:
)
return col_list
@classmethod
async def get_std_dict_list_no_page(cls, db: AsyncSession, query: str):
"""
获取 DataStdDict 的列表信息支持模糊查询和分页
:param db: ORM对象
:param query_object: 查询参数对象
:param is_page: 是否开启分页
:return: 列表信息
"""
# 构建查询条件
filters = []
filters.append(or_(
DataStdDict.data_dict_cn_name.like(f"%{query}%"),
DataStdDict.data_dict_eng_name.like(f"%{query}%")
))
# c1 = aliased(DataStdDict) # 技术部门
# 构建查询语句
query = (
select(DataStdDict.onum,
DataStdDict.data_dict_no,
DataStdDict.data_dict_eng_name,
DataStdDict.data_dict_cn_name)
.where(*filters)
.order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序
)
list = (await db.execute(query)).fetchall()
return list
@classmethod
async def add_std_dict(cls, db: AsyncSession,model:DataStdDictModel):
col = DataStdDict(

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

@ -1,8 +1,9 @@
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join, update, desc
from module_admin.entity.vo.meta_vo import MetaPageObject, MetaColObject
from module_admin.entity.do.datastd_do import DataStdDict
from module_admin.entity.do.meta_do import MetadataExtractInfo, MetadataSuppInfo, MetadataFldTabExtractInfo, \
MetadataFldSuppInfo, MetadataClas, MetadataSuppInfoVett, MetadataFldSuppInfoVett, MetaBatchTabClas,\
MetadataFldSuppInfo, MetadataClas, MetadataSuppInfoVett, MetadataFldSuppInfoVett, MetaBatchTabClas, \
MetaBatchFldClas, MetaBloodAnalysis
from utils.common_util import CamelCaseUtil
import uuid
@ -175,19 +176,24 @@ class MetaDao:
MetadataFldSuppInfo.pic,
MetadataFldSuppInfo.fld_clas,
MetadataFldSuppInfo.fld_null_rate,
MetadataFldSuppInfo.data_dict_id,
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(
join(
MetadataFldTabExtractInfo,
MetadataFldSuppInfo,
and_(
MetadataFldTabExtractInfo.ssys_cd == MetadataFldSuppInfo.ssys_cd,
MetadataFldTabExtractInfo.mdl_name == MetadataFldSuppInfo.mdl_name,
MetadataFldTabExtractInfo.tab_eng_name == MetadataFldSuppInfo.tab_eng_name,
MetadataFldTabExtractInfo.fld_eng_name == MetadataFldSuppInfo.fld_eng_name
), isouter=True
)
).select_from(MetadataFldTabExtractInfo)
.join(
MetadataFldSuppInfo,
and_(
MetadataFldTabExtractInfo.ssys_cd == MetadataFldSuppInfo.ssys_cd,
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_cd == query_object.ssys_cd,
MetadataFldTabExtractInfo.mdl_name == query_object.mdl_name,
@ -288,16 +294,48 @@ class MetaDao:
query_result = (
(
await db.execute(
select(MetadataFldSuppInfoVett).where(
select(MetadataFldSuppInfoVett,
DataStdDict.data_dict_cn_name.label("data_dict_name"), )
.join(
DataStdDict,
MetadataFldSuppInfoVett.data_dict_id == DataStdDict.onum, # 假设关联条件
isouter=True, # 可选,是否左连接
).where(
MetadataFldSuppInfoVett.ssys_cd == tableInfo.ssys_cd,
MetadataFldSuppInfoVett.mdl_name == tableInfo.mdl_name,
MetadataFldSuppInfoVett.tab_eng_name == tableInfo.tab_eng_name,
MetadataFldSuppInfoVett.apply_time == tableInfo.apply_time
)
)
).scalars().all()
).all()
)
return query_result
result = []
for record in query_result:
vett_info = record[0] # MetadataFldSuppInfoVett 对象
dict_name = record[1] # data_dict_name
result.append({
"onum": vett_info.onum,
"crrct_ver_num": vett_info.crrct_ver_num,
"ssys_cd": vett_info.ssys_cd,
"mdl_name": vett_info.mdl_name,
"tab_eng_name": vett_info.tab_eng_name,
"fld_eng_name": vett_info.fld_eng_name,
"fld_crrct_name": vett_info.fld_crrct_name,
"crrct_pk_flag": vett_info.crrct_pk_flag,
"fld_desc": vett_info.fld_desc,
"pic": vett_info.pic,
"fld_clas": vett_info.fld_clas,
"fld_null_rate": vett_info.fld_null_rate,
"data_dict_id": vett_info.data_dict_id,
"rec_stat": vett_info.rec_stat,
"upd_time": vett_info.upd_time,
"rec_subm_prsn": vett_info.rec_subm_prsn,
"apply_time": vett_info.apply_time,
"apply_status": vett_info.apply_status,
"oldColumnData": vett_info.oldColumnData,
"data_dict_name": dict_name
})
return result
@classmethod
async def get_supp_table_by_vett(cls, sysCode: str, mdlName: str, tableName: str, db: AsyncSession):
@ -348,6 +386,7 @@ class MetaDao:
pic=column.pic,
fld_clas=column.fld_clas,
fld_null_rate=column.fld_null_rate,
data_dict_id=column.data_dict_id,
rec_stat=column.rec_stat,
upd_time=column.upd_time,
)
@ -367,6 +406,7 @@ class MetaDao:
suppColumn.pic = column.pic
suppColumn.fld_clas = column.fld_clas
suppColumn.fld_null_rate = column.fld_null_rate
suppColumn.data_dict_id = column.data_dict_id
suppColumn.rec_stat = column.rec_stat
suppColumn.upd_time = column.upd_time
db.add(suppColumn)
@ -661,7 +701,6 @@ class MetaDao:
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict
@classmethod
async def get_blood_by_procId(cls, result_db: AsyncSession, procId: int):
query_result = (

4
vue-fastapi-backend/module_admin/entity/do/meta_do.py

@ -129,6 +129,7 @@ class MetadataFldSuppInfo(Base):
pic = Column(String(255, collation='utf8_general_ci'), comment='图片字段')
fld_clas = Column(Text, comment='字段分类')
fld_null_rate = Column(String(50, collation='utf8_general_ci'), comment='字段空值率')
data_dict_id = Column(String(50, collation='utf8_general_ci'), comment='数据字典ID')
rec_stat = Column(String(50, collation='utf8_general_ci'), comment='记录状态')
upd_time = Column(DateTime, comment='更新时间')
@ -151,6 +152,7 @@ class MetadataFldSuppInfoVett(Base):
pic = Column(String(255, collation='utf8_general_ci'), comment='图片字段')
fld_clas = Column(Text, comment='字段分类')
fld_null_rate = Column(String(50, collation='utf8_general_ci'), comment='字段空值率')
data_dict_id = Column(String(50, collation='utf8_general_ci'), comment='数据字典ID')
rec_stat = Column(String(50, collation='utf8_general_ci'), comment='记录状态')
upd_time = Column(DateTime, comment='更新时间')
rec_subm_prsn = Column(String(255, collation='utf8_general_ci'), comment='记录提交人')
@ -189,7 +191,7 @@ class MetaBatchFldClas(Base):
class MetaBloodAnalysis(Base):
"""字段标签"""
"""血緣分析"""
__tablename__ = 'meta_blood_analysis'
id = Column(String(50, collation='utf8_general_ci'), primary_key=True, comment='id')

1
vue-fastapi-backend/module_admin/entity/vo/meta_vo.py

@ -40,6 +40,7 @@ class ColumnSuppleModel(BaseModel):
fld_clas: Optional[str] = None
fld_null_rate: Optional[str] = None
rec_stat: Optional[str] = None
data_dict_id: Optional[str] = None
class SuppleModel(BaseModel):

13
vue-fastapi-backend/module_admin/service/datastd_service.py

@ -619,6 +619,19 @@ class DataStdService:
col_list_result = await DataStdDao.get_std_dict_list(query_db, query_object, is_page)
return col_list_result
@classmethod
async def get_std_dict_list_no_page_services(cls, query_db: AsyncSession, query: str):
"""
获取列配置列表信息service
:param query_db: orm对象
:param query_object: 查询参数对象
:param is_page: 是否开启分页
:return: 列配置列表信息对象
"""
col_list_result = await DataStdDao.get_std_dict_list_no_page(query_db, query)
return CamelCaseUtil.transform_result(col_list_result)
@classmethod
async def get_std_dict_by_id_services(cls, query_db: AsyncSession, id: str):

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

@ -111,6 +111,7 @@ class MetaService:
suppColumnInfo.pic = column.pic
suppColumnInfo.fld_clas = column.fld_clas
suppColumnInfo.fld_null_rate = column.fld_null_rate
suppColumnInfo.data_dict_id = column.data_dict_id
suppColumnInfo.rec_stat = column.rec_stat
suppColumnInfo.rec_subm_prsn = current_user.user.user_name
suppColumnInfo.apply_time = applyTime
@ -167,6 +168,7 @@ class MetaService:
pic=column.pic if column else None,
fldClas=column.fld_clas if column else None,
fldNullRate=column.fld_null_rate if column else None,
dataDictId=column.data_dict_id if column else None,
recStat=column.rec_stat if column else None,
updTime=column.upd_time if column else None
)

7
vue-fastapi-frontend/src/api/datastd/std.js

@ -154,6 +154,12 @@ export function listStdDict(query) {
method: 'get',
params: query
})
}export function listStdDictNoPage(query) {
return request({
url: '/default-api/datastd/stddict/dict/listNoPage',
method: 'get',
params: query
})
}
@ -307,3 +313,4 @@ export function changeStdMainOum(data) {

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

@ -312,7 +312,7 @@
<span>{{scope.row.fldNullRate}}</span>
</template>
</el-table-column>
<el-table-column label="引用字典/标准" align="center"></el-table-column>
<el-table-column label="引用字典/标准" align="center" prop="dataDictName"></el-table-column>
<el-table-column label="更新时间" align="center" prop="suppUpdTime" width="180">
<template #default="scope">
<template v-if="scope.row.suppUpdTime && scope.row.suppUpdTime !== ''">
@ -505,6 +505,25 @@
<el-form-item label="字段空值率">
<el-input v-model="currentColumnData.fldNullRate"/>
</el-form-item>
<el-form-item label="引用字典/标准">
<el-select
v-model="currentColumnData.dataDictId"
filterable
remote
reserve-keyword
style="width: 192px"
placeholder="请输入关键词"
:remote-method="remoteStddict"
@change="changestdDict"
:loading="loading">
<el-option
v-for="item in stddictOptions"
:key="item.onum"
:label="item.dataDictCnName"
:value="item.onum">
</el-option>
</el-select>
</el-form-item>
</el-form>
<el-form :model="currentColumnTag" :inline="true" label-width="100px">
<el-form-item label="一级分类:" prop="userName">
@ -716,6 +735,7 @@
<script setup name="Meta">
import {getDataSourceList, getMetaDataList, getColumnList, getMetaClasList, postMetaSupp, getMetaDataRelship, getMetaDataBloodRelship, getProcData, runBloodAnalysis, publishAstData} from "@/api/meta/metaInfo"
import { getMetaSecurityData } from "@/api/dataAsset/directory"
import { listStdDictNoPage } from "@/api/datastd/std.js"
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import SQLCodeMirror from "@/components/codemirror/SQLCodeMirror.vue";
import cache from "@/plugins/cache";
@ -805,6 +825,7 @@
"clasPriClas": "",
"clasScdClas": ""
});
const stddictOptions = ref([])
function changeColumnTab(){
if (activeColumnTab.value === 'businessRelation'){
@ -818,6 +839,25 @@
}
}
function changestdDict(val){
console.log(val)
for (let i = 0; i < stddictOptions.value.length; i++) {
if (val === stddictOptions.value[i].onum){
currentColumnData.value.dataDictName = stddictOptions.value[i].dataDictCnName
}
}
console.log()
}
function remoteStddict(query){
if (query !== ""){
let param = {query:query}
listStdDictNoPage(param).then(res=>{
stddictOptions.value = res.data
})
}else{
stddictOptions.value = []
}
}
function generateDemoData(){
let param ={
@ -921,6 +961,11 @@
columnList.value[i].fldNullRate = currentColumnData.value.fldNullRate
changed = true
}
if (columnList.value[i].dataDictId !== currentColumnData.value.dataDictId){
columnList.value[i].dataDictId = currentColumnData.value.dataDictId
columnList.value[i].dataDictName = currentColumnData.value.dataDictName
changed = true
}
if (currentColumnData.value.showFldClas && currentColumnData.value.showFldClas.length > 0){
let showFldClas = currentColumnData.value.showFldClas
let fldClas = []
@ -1455,6 +1500,7 @@
pic: column.pic,
fldClas: JSON.stringify(column.showFldClas),
fldNullRate: column.fldNullRate,
dataDictId: column.dataDictId,
recStat: column.recStat
})
}

15
vue-fastapi-frontend/src/views/system/flow/index.vue

@ -338,7 +338,12 @@
<span v-else style="color: red">{{scope.row.fldNullRate}}</span>
</template>
</el-table-column>
<el-table-column label="引用字典/标准" align="center"></el-table-column>
<el-table-column label="引用字典/标准" align="center" prop="dataDictName">
<template #default="scope">
<span v-if="oldColumnList[scope.$index].dataDictName === newColumnList[scope.$index].dataDictName">{{scope.row.dataDictName}}</span>
<span v-else style="color: red">{{scope.row.dataDictName}}</span>
</template>
</el-table-column>
</el-table>
</div>
<br><br>
@ -513,7 +518,12 @@
<span v-else style="color: red">{{scope.row.fldNullRate}}</span>
</template>
</el-table-column>
<el-table-column label="引用字典/标准" align="center"></el-table-column>
<el-table-column label="引用字典/标准" align="center" prop="dataDictName">
<template #default="scope">
<span v-if="oldColumnList[scope.$index].dataDictName === newColumnList[scope.$index].dataDictName">{{scope.row.dataDictName}}</span>
<span v-else style="color: red">{{scope.row.dataDictName}}</span>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
@ -972,6 +982,7 @@ function showBusinessDataDialog(row){
updTime:col.updTime,
fldCnName:column.fldCnName,
fldType:column.fldType,
dataDictName: col.dataDictName,
showColClas: showNewColClas
})
}

Loading…
Cancel
Save