|
|
@ -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 " |
|
|
|