From df165628c4f09d49bc5280812c4df4d4a36deb84 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Sat, 31 May 2025 21:01:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=85=B3=E7=B3=BB,=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=B0=83=E6=95=B4=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_admin/dao/meta_dao.py | 142 ++++++++---------- .../views/dataint/dataquery/dataquerychat.vue | 39 ++++- 2 files changed, 101 insertions(+), 80 deletions(-) diff --git a/vue-fastapi-backend/module_admin/dao/meta_dao.py b/vue-fastapi-backend/module_admin/dao/meta_dao.py index d6e7ed8..bd967d3 100644 --- a/vue-fastapi-backend/module_admin/dao/meta_dao.py +++ b/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 " diff --git a/vue-fastapi-frontend/src/views/dataint/dataquery/dataquerychat.vue b/vue-fastapi-frontend/src/views/dataint/dataquery/dataquerychat.vue index 925ce83..af3d77f 100644 --- a/vue-fastapi-frontend/src/views/dataint/dataquery/dataquerychat.vue +++ b/vue-fastapi-frontend/src/views/dataint/dataquery/dataquerychat.vue @@ -53,13 +53,14 @@ @@ -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(",") +} /** * 滚动条距离最上面的高度 */