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 @classmethod
async def get_er_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str): 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 " sql = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_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_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation " "from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
"where rela_type = 'sub_flag' and rela_value ='1') a1 " " and a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName")
"left join t_batch_fld_relation a2 " sql2 = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name " "b_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"and a1.a_tab_eng_name = a2.a_tab_eng_name " "from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
"and a1.a_fld_eng_name = a2.a_fld_eng_name " " and a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName")
"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))")
result = (await result_db.execute(sql, {"sysCode": ssys_cd, result = (await result_db.execute(sql, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name})) "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() # 返回列名列表 columns = result.keys() # 返回列名列表
columns2 = result2.keys() # 返回列名列表
# 将结果转换为字典列表 # 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()] 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 @classmethod
async def get_op_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str): 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," sql = text("select a1.* ,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end as father"
"b_fld_eng_name,case when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and " " from (select distinct a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd,b_mdl_name,"
"max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' " "b_tab_eng_name ,b_fld_eng_name from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name,"
"when max(case when rela_type = 'sub_flag' then rela_value end) = '1' and " "b_ssys_cd,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name from t_batch_fld_relation "
"max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' " "where rela_type in ('jd_relation','op_relation') and rela_value not in ('0') union all "
"when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND " "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,"
"max(case when rela_type = 'op_relation' then rela_value end) <> 0 and " "b_fld_eng_name FROM t_batch_fld_relation t ,JSON_TABLE(replace(t.rela_value,'''','\"'),'$[*]' "
"max(case when rela_type = 'set_flag' then rela_value end) = '1' then 'A' " "COLUMNS (value_num DOUBLE PATH '$.value')) AS j group by a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,"
"when max(case when rela_type = 'op2_relation' then rela_value end) <> '[]' AND " "a_fld_eng_name ,b_ssys_cd ,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name "
"max(case when rela_type = 'op_relation' then rela_value end) <> 0 and " "having max(j.value_num) > 0.1) b1 ) a1 left join t_batch_fld_relation a2 "
"max(case when rela_type = 'set_flag' then rela_value end) = '2' then 'B' END as father " "on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name "
"from t_batch_fld_relation " "and a1.a_tab_eng_name = a2.a_tab_eng_name and a1.a_fld_eng_name = a2.a_fld_eng_name "
"where ((a_ssys_cd = :sysCode and a_mdl_name = :mdlName and a_tab_eng_name = :tabName) " "and a1.b_ssys_cd = a2.b_ssys_cd and a1.b_mdl_name = a2.b_mdl_name "
" or (b_ssys_cd = :sysCode and b_mdl_name = :mdlName and b_tab_eng_name = :tabName))" "and a1.b_tab_eng_name = a2.b_tab_eng_name and a1.b_fld_eng_name = a2.b_fld_eng_name "
"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" "and a2.rela_type = 'set_flag' left join t_batch_fld_clas a4 on a1.a_ssys_cd = a4.ssys_cd "
",b_fld_eng_name " "and a1.a_mdl_name = a4.mdl_name and a1.a_tab_eng_name = a4.tab_eng_name "
"having max(case when rela_type = 'op2_relation' then rela_value end) <> '[]'" "and a1.a_fld_eng_name = a4.fld_eng_name and a4.clas_onum = '2001001002' "
" or max(case when rela_type = 'sub_flag' then rela_value end) = '1'") "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, result = (await result_db.execute(sql, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name})) "mdlName": mdl_name, "tabName": tab_eng_name}))
# 获取列名 # 获取列名
@ -578,56 +574,48 @@ class MetaDao:
@classmethod @classmethod
async def get_er_relation_by_column(cls, result_db: AsyncSession, column: {}, module: str): 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 " if module == 'pre':
"from ( select a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name," sql = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation " "b_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"where rela_type = 'sub_flag' and rela_value ='1') a1 " "from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
"left join t_batch_fld_relation a2 " "and a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName "
"on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name " "and a1.b_tab_eng_name = :tabName and a1.b_fld_eng_name = :fldName ")
"and a1.a_tab_eng_name = a2.a_tab_eng_name " else:
"and a1.a_fld_eng_name = a2.a_fld_eng_name " sql = text("with tmp as (select a1.*,row_number()over(partition by b_ssys_cd,b_mdl_name,b_tab_eng_name,"
"and a1.b_ssys_cd = a2.b_ssys_cd " "b_fld_eng_name order by concat(op_relation,',',jd_relation) desc) as rn "
"and a1.b_mdl_name = a2.b_mdl_name " "from t_batch_er_relation_step1 a1)select a1.*,'A' AS father from tmp a1 where a1.rn = 1 "
"and a1.b_tab_eng_name = a2.b_tab_eng_name " "and a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName "
"and a1.b_fld_eng_name = a2.b_fld_eng_name " "and a1.a_tab_eng_name = :tabName and a1.a_fld_eng_name = :fldName ")
"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))")
result = (await result_db.execute(sql, {"sysCode": column['ssys_cd'], result = (await result_db.execute(sql, {"sysCode": column['ssys_cd'],
"mdlName": column['mdl_name'], "tabName": column['tab_eng_name'], "mdlName": column['mdl_name'], "tabName": column['tab_eng_name'],
"fldName": column['fld_eng_name'], "fldName": column['fld_eng_name']
"rela_value": '2' if module == 'pre' else '1',
"rela_value2": '1' if module == 'pre' else '2'
})) }))
# 获取列名 # 获取列名
columns = result.keys() # 返回列名列表 columns = result.keys() # 返回列名列表
# 将结果转换为字典列表 # 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()] result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict return result_as_dict
@classmethod @classmethod
async def get_op_relation_by_column(cls, result_db: AsyncSession, column: {}, module: str): 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" 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 " " 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 t_batch_fld_relation where rela_type = 'op2_relation' " "b_tab_eng_name ,b_fld_eng_name from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name,"
"and rela_value <> '[]') a1 left join t_batch_fld_relation a2 on a1.a_ssys_cd = a2.a_ssys_cd " "b_ssys_cd,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name from t_batch_fld_relation "
" and a1.a_mdl_name = a2.a_mdl_name and a1.a_tab_eng_name = a2.a_tab_eng_name and " "where rela_type in ('jd_relation','op_relation') and rela_value not in ('0') union all "
"a1.a_fld_eng_name = a2.a_fld_eng_name and a1.b_ssys_cd = a2.b_ssys_cd " "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,"
"and a1.b_mdl_name = a2.b_mdl_name and a1.b_tab_eng_name = a2.b_tab_eng_name " "b_fld_eng_name FROM t_batch_fld_relation t ,JSON_TABLE(replace(t.rela_value,'''','\"'),'$[*]' "
"and a1.b_fld_eng_name = a2.b_fld_eng_name and a2.rela_type = 'set_flag' and a2.rela_value <> 0 " "COLUMNS (value_num DOUBLE PATH '$.value')) AS j group by a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,"
" where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in " "a_fld_eng_name ,b_ssys_cd ,b_mdl_name ,b_tab_eng_name ,b_fld_eng_name "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas) " "having max(j.value_num) > 0.1) b1 ) a1 left join t_batch_fld_relation a2 "
"or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in " "on a1.a_ssys_cd = a2.a_ssys_cd and a1.a_mdl_name = a2.a_mdl_name "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)) " "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_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) " " 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 " " 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"> <template v-for="filter in item.content.query">
<div v-if="filter.ct_type === 'mselect'" style="display:flex;width: 100%;margin-bottom: 10px"> <div v-if="filter.ct_type === 'mselect'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span> <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-option v-for="opt in filter.options" :key="opt" :value="opt" :label="opt"></el-option>
</el-select> </el-select>
</div> </div>
<div v-if="filter.ct_type === 'datePicker'" style="display:flex;width: 100%;margin-bottom: 10px"> <div v-if="filter.ct_type === 'datePicker'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span> <span style="width: 150px">{{filter.name + ": "}}</span>
<el-date-picker <el-date-picker
@change="changeInputValue(item.content)"
v-model="filter.default_value" v-model="filter.default_value"
type="date" type="date"
placeholder="Pick a day" placeholder="Pick a day"
@ -68,6 +69,7 @@
<div v-if="filter.ct_type === 'dateRangePicker'" style="display:flex;width: 100%;margin-bottom: 10px"> <div v-if="filter.ct_type === 'dateRangePicker'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span> <span style="width: 150px">{{filter.name + ": "}}</span>
<el-date-picker <el-date-picker
@change="changeInputValue(item.content)"
v-model="filter.dateRangeValue" v-model="filter.dateRangeValue"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
@ -77,13 +79,13 @@
</div> </div>
<div v-if="filter.ct_type === 'radioGroup'" style="display:flex;width: 100%;margin-bottom: 10px"> <div v-if="filter.ct_type === 'radioGroup'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span> <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 :key="'radio'+opt" v-for="opt in filter.options" :value="opt">{{ opt }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div v-if="filter.ct_type === 'input'" style="display:flex;width: 100%;margin-bottom: 10px"> <div v-if="filter.ct_type === 'input'" style="display:flex;width: 100%;margin-bottom: 10px">
<span style="width: 150px">{{filter.name + ": "}}</span> <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> </div>
</template> </template>
@ -232,7 +234,38 @@ function edit(data){
function download(data){ function download(data){
emit('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