feat: codes支持dbname字段实现跨库JOIN

- construct_get_data_sql: 两个路径都支持c.dbname前缀
- get_code_desc: params中dbname优先用c.dbname
- models/*.json codes中添加dbname字段即可跨库引用
This commit is contained in:
Hermes Agent 2026-06-24 09:18:30 +08:00
parent 17f227aaad
commit 51208f7295

View File

@ -163,8 +163,9 @@ def get_code_desc(field: dict, desc: dict) -> dict:
d.uitype = 'code'
d.valueField = d.name
d.textField = d.name + '_text'
dbname_val = "{{get_module_dbname('" + getattr(c, 'dbname', desc.modulename) + "')}}"
d.params = {
'dbname':"{{get_module_dbname('" + desc.modulename + "')}}",
'dbname':dbname_val,
'table':c.table,
'tblvalue':c.valuefield,
'tbltext':c.textfield,
@ -223,11 +224,12 @@ def construct_get_data_sql(desc: dict) -> str:
param_field = "${" + desc.relation.param_field + "}$"
for code in desc.codes:
if code.field == desc.relation.outter_field:
code_tbl = f"{code.dbname}.{code.table}" if getattr(code, 'dbname', None) else code.table
return f"""select '$[{desc.relation.param_field}]$' as {desc.relation.param_field},
case when b.{desc.relation.param_field} is NULL then 0 else 1 end has_{desc.relation.param_field},
a.{code.valuefield} as {code.field},
a.{code.textfield} as {code.field}_text
from {code.table} a left join
from {code_tbl} a left join
(select * from {desc.tblsql or desc.tblname} where {desc.relation.param_field} ={param_field}) b
on a.{code.valuefield} = b.{code.field}
"""
@ -239,8 +241,9 @@ from {code.table} a left join
cond = '1 = 1'
if c.cond:
cond = c.cond
code_tbl = f"{c.dbname}.{c.table}" if getattr(c, 'dbname', None) else c.table
csql = f"""(select {c.valuefield} as {c.field},
{c.textfield} as {c.field}_text from {c.table} where {cond})"""
{c.textfield} as {c.field}_text from {code_tbl} where {cond})"""
infos.append([f'{shortname}.{c.field}_text', f"{csql} {shortname} on a.{c.field} = {shortname}.{c.field}"])
bt = f'(select * from {desc.summary[0].name} where 1=1' + " [[filterstr]]) a"
infos.insert(0, ['a.*', bt])