Compare commits

...

2 Commits

  1. 142
      vue-fastapi-backend/module_admin/dao/meta_dao.py
  2. 39
      vue-fastapi-frontend/src/views/dataint/dataquery/dataquerychat.vue

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

@ -519,54 +519,50 @@ class MetaDao:
@classmethod
async def get_er_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str):
sql = text("select a1.*,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father "
"from ( select a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name,"
"b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation "
"where rela_type = 'sub_flag' and rela_value ='1') a1 "
"left join t_batch_fld_relation a2 "
"on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name "
"and a1.a_tab_eng_name = a2.a_tab_eng_name "
"and a1.a_fld_eng_name = a2.a_fld_eng_name "
"and a1.b_ssys_cd = a2.b_ssys_cd "
"and a1.b_mdl_name = a2.b_mdl_name "
"and a1.b_tab_eng_name = a2.b_tab_eng_name "
"and a1.b_fld_eng_name = a2.b_fld_eng_name "
"and a2.rela_type = 'set_flag' "
"where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)"
"or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas))"
"and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName)"
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName))")
sql = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"b_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
" and a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName")
sql2 = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"b_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
" and a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName")
result = (await result_db.execute(sql, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name}))
result2 = (await result_db.execute(sql2, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name}))
# 获取列名
columns = result.keys() # 返回列名列表
columns2 = result2.keys() # 返回列名列表
# 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict
result_as_dict2 = [dict(zip(columns, row)) for row in result2.fetchall()]
result3 = result_as_dict + result_as_dict2
return result3
@classmethod
async def get_op_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str):
sql = text("select a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"b_fld_eng_name,case when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and "
"max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' "
"when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and "
"max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' "
"when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND "
"max(case when rela_type = 'op_relation' then rela_value end) <> 0 and "
"max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' "
"when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND "
"max(case when rela_type = 'op_relation' then rela_value end) <> 0 and "
"max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' END as father "
"from t_batch_fld_relation "
"where ((a_ssys_cd = :sysCode and a_mdl_name = :mdlName and a_tab_eng_name = :tabName) "
" or (b_ssys_cd = :sysCode and b_mdl_name = :mdlName and b_tab_eng_name = :tabName))"
"group by a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name,b_tab_eng_name"
",b_fld_eng_name "
"having max(case when rela_type = 'op2_relation' then rela_value end) <> '[]'"
" or max(case when rela_type = 'sub_flag' then rela_value end) = '1'")
sql = text("select a1.* ,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end as father"
" from (select distinct a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd,b_mdl_name,"
"b_tab_eng_name ,b_fld_eng_name from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name,"
"b_ssys_cd,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name from t_batch_fld_relation "
"where rela_type in ('jd_relation','op_relation') and rela_value not in ('0') union all "
"SELECT a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd ,b_mdl_name,b_tab_eng_name,"
"b_fld_eng_name FROM t_batch_fld_relation t ,JSON_TABLE(replace(t.rela_value,'''','\"'),'$[*]' "
"COLUMNS (value_num DOUBLE PATH '$.value')) AS j group by a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,"
"a_fld_eng_name ,b_ssys_cd ,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name "
"having max(j.value_num) > 0.1) b1 ) a1 left join t_batch_fld_relation a2 "
"on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name "
"and a1.a_tab_eng_name = a2.a_tab_eng_name and a1.a_fld_eng_name = a2.a_fld_eng_name "
"and a1.b_ssys_cd = a2.b_ssys_cd and a1.b_mdl_name = a2.b_mdl_name "
"and a1.b_tab_eng_name = a2.b_tab_eng_name and a1.b_fld_eng_name = a2.b_fld_eng_name "
"and a2.rela_type = 'set_flag' left join t_batch_fld_clas a4 on a1.a_ssys_cd = a4.ssys_cd "
"and a1.a_mdl_name = a4.mdl_name and a1.a_tab_eng_name = a4.tab_eng_name "
"and a1.a_fld_eng_name = a4.fld_eng_name and a4.clas_onum = '2001001002' "
"where coalesce(a4.clas_value,' ') <> '日期时间类'"
" and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName) "
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName))")
result = (await result_db.execute(sql, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name}))
# 获取列名
@ -578,56 +574,48 @@ class MetaDao:
@classmethod
async def get_er_relation_by_column(cls, result_db: AsyncSession, column: {}, module: str):
sql = text("select a1.*,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father "
"from ( select a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name,"
"b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation "
"where rela_type = 'sub_flag' and rela_value ='1') a1 "
"left join t_batch_fld_relation a2 "
"on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name "
"and a1.a_tab_eng_name = a2.a_tab_eng_name "
"and a1.a_fld_eng_name = a2.a_fld_eng_name "
"and a1.b_ssys_cd = a2.b_ssys_cd "
"and a1.b_mdl_name = a2.b_mdl_name "
"and a1.b_tab_eng_name = a2.b_tab_eng_name "
"and a1.b_fld_eng_name = a2.b_fld_eng_name "
"and a2.rela_type = 'set_flag' "
"where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) "
"in (select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)"
"or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) "
"in (select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas))"
"and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName "
"and a1.a_tab_eng_name = :tabName and a1.a_fld_eng_name = :fldName "
"and a2.rela_value = :rela_value)"
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName "
"and a1.b_tab_eng_name = :tabName and a1.b_fld_eng_name = :fldName "
"and a2.rela_value = :rela_value2))")
if module == 'pre':
sql = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"b_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
"and a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName "
"and a1.b_tab_eng_name = :tabName and a1.b_fld_eng_name = :fldName ")
else:
sql = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"b_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
"and a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName "
"and a1.a_tab_eng_name = :tabName and a1.a_fld_eng_name = :fldName ")
result = (await result_db.execute(sql, {"sysCode": column['ssys_cd'],
"mdlName": column['mdl_name'], "tabName": column['tab_eng_name'],
"fldName": column['fld_eng_name'],
"rela_value": '2' if module == 'pre' else '1',
"rela_value2": '1' if module == 'pre' else '2'
"fldName": column['fld_eng_name']
}))
# 获取列名
columns = result.keys() # 返回列名列表
# 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict
@classmethod
async def get_op_relation_by_column(cls, result_db: AsyncSession, column: {}, module: str):
sql = text("select a1.* ,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father"
" from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd ,b_mdl_name "
",b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation where rela_type = 'op2_relation' "
"and rela_value <> '[]') a1 left join t_batch_fld_relation a2 on a1.a_ssys_cd = a2.a_ssys_cd "
" and a1.a_mdl_name = a2.a_mdl_name and a1.a_tab_eng_name = a2.a_tab_eng_name and "
"a1.a_fld_eng_name = a2.a_fld_eng_name and a1.b_ssys_cd = a2.b_ssys_cd "
"and a1.b_mdl_name = a2.b_mdl_name and a1.b_tab_eng_name = a2.b_tab_eng_name "
"and a1.b_fld_eng_name = a2.b_fld_eng_name and a2.rela_type = 'set_flag' and a2.rela_value <> 0 "
" where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas) "
"or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)) "
sql = text("select a1.* ,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end as father"
" from (select distinct a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd,b_mdl_name,"
"b_tab_eng_name ,b_fld_eng_name from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name,"
"b_ssys_cd,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name from t_batch_fld_relation "
"where rela_type in ('jd_relation','op_relation') and rela_value not in ('0') union all "
"SELECT a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd ,b_mdl_name,b_tab_eng_name,"
"b_fld_eng_name FROM t_batch_fld_relation t ,JSON_TABLE(replace(t.rela_value,'''','\"'),'$[*]' "
"COLUMNS (value_num DOUBLE PATH '$.value')) AS j group by a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,"
"a_fld_eng_name ,b_ssys_cd ,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name "
"having max(j.value_num) > 0.1) b1 ) a1 left join t_batch_fld_relation a2 "
"on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name "
"and a1.a_tab_eng_name = a2.a_tab_eng_name and a1.a_fld_eng_name = a2.a_fld_eng_name "
"and a1.b_ssys_cd = a2.b_ssys_cd and a1.b_mdl_name = a2.b_mdl_name "
"and a1.b_tab_eng_name = a2.b_tab_eng_name and a1.b_fld_eng_name = a2.b_fld_eng_name "
"and a2.rela_type = 'set_flag' left join t_batch_fld_clas a4 on a1.a_ssys_cd = a4.ssys_cd "
"and a1.a_mdl_name = a4.mdl_name and a1.a_tab_eng_name = a4.tab_eng_name "
"and a1.a_fld_eng_name = a4.fld_eng_name and a4.clas_onum = '2001001002' "
"where coalesce(a4.clas_value,' ') <> '日期时间类'"
"and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName "
" and a1.a_fld_eng_name = :fldName and a2.rela_value = :rela_value) "
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName "

39
vue-fastapi-frontend/src/views/dataint/dataquery/dataquerychat.vue

@ -53,13 +53,14 @@
<template v-for="filter in item.content.query">
<div v-if="filter.ct_type === 'mselect'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span>
<el-select v-model="filter.default_value" multiple style="width: 100%;" clearable>
<el-select @change="changeInputValue(item.content)" v-model="filter.default_value" multiple style="width: 100%;" clearable>
<el-option v-for="opt in filter.options" :key="opt" :value="opt" :label="opt"></el-option>
</el-select>
</div>
<div v-if="filter.ct_type === 'datePicker'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span>
<el-date-picker
@change="changeInputValue(item.content)"
v-model="filter.default_value"
type="date"
placeholder="Pick a day"
@ -68,6 +69,7 @@
<div v-if="filter.ct_type === 'dateRangePicker'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span>
<el-date-picker
@change="changeInputValue(item.content)"
v-model="filter.dateRangeValue"
type="daterange"
range-separator="-"
@ -77,13 +79,13 @@
</div>
<div v-if="filter.ct_type === 'radioGroup'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span>
<el-radio-group v-model="filter.default_value">
<el-radio-group v-model="filter.default_value" @change="changeInputValue(item.content)">
<el-radio :key="'radio'+opt" v-for="opt in filter.options" :value="opt">{{ opt }}</el-radio>
</el-radio-group>
</div>
<div v-if="filter.ct_type === 'input'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span>
<el-input style="width: calc(100% - 150px)" v-model="filter.default_value"/>
<el-input @input="changeInputValue(item.content)" style="width: calc(100% - 150px)" v-model="filter.default_value"/>
</div>
</template>
@ -232,7 +234,38 @@ function edit(data){
function download(data){
emit('download',data)
}
function formatDefaultValue(item){
let value = item.default_value
if (item.cd_type === '输出结果'){
return item.name
}
if (item.ct_type === 'dateRangePicker'){
if (item.dateRangeValue){
return "开始日期为"+item.dateRangeValue[0]+"截止日期为"+item.dateRangeValue[1]
}else {
return ""
}
}
return value
}
function changeInputValue(content){
let query = content.query
let result = content.result
let resultList = []
let queryList = []
for (let i = 0; i < query.length; i++) {
queryList.push(query[i].name+"为"+formatDefaultValue(query[i]))
}
for (let i = 0; i < result.length; i++) {
resultList.push(result[i].name)
}
if (resultList.length > 0){
queryList.push("输出结果为"+resultList.join("和"))
}
inputValue.value = "查询" + queryList.join(",")
}
/**
* 滚动条距离最上面的高度
*/

Loading…
Cancel
Save