From adcfa78c0d086ba8999d4549338fe57e6088f7ae Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 26 Feb 2025 17:58:44 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E7=94=9F=E6=88=90=E8=A7=86=E5=9B=BE=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1365294474297344]资源中心生成视图逻辑优化 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1365294474297344 --- .../utils/ResourceViewGenerateSqlUtil.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/neatlogic/framework/cmdb/utils/ResourceViewGenerateSqlUtil.java b/src/main/java/neatlogic/framework/cmdb/utils/ResourceViewGenerateSqlUtil.java index 7326f33a..a9440e7c 100644 --- a/src/main/java/neatlogic/framework/cmdb/utils/ResourceViewGenerateSqlUtil.java +++ b/src/main/java/neatlogic/framework/cmdb/utils/ResourceViewGenerateSqlUtil.java @@ -109,23 +109,29 @@ public class ResourceViewGenerateSqlUtil { PlainSelect plainSelect = new PlainSelect() .withFromItem(mainTable); addJoinTable(mainTable); - Table cmdbCi = new Table("cmdb_ci").withAlias(new Alias("cientity_" + mainTableAlias + "_ci").withUseAs(false)); - Column cmdbCiIdColumn = new Column(cmdbCi, "id"); - Column mainTableCiIdColumn = new Column(mainTable, "ci_id"); - EqualsTo equalsTo = new EqualsTo(cmdbCiIdColumn, mainTableCiIdColumn); - Column cmdbCiLftColumn = new Column(cmdbCi, "lft"); - Column cmdbCiRhtColumn = new Column(cmdbCi, "rht"); -// GreaterThanEquals greaterThanEquals = new GreaterThanEquals(">=").withLeftExpression(cmdbCiLftColumn).withRightExpression(new LongValue(mainCiVo.getLft())); -// MinorThanEquals minorThanEquals = new MinorThanEquals("<=").withLeftExpression(cmdbCiRhtColumn).withRightExpression(new LongValue(mainCiVo.getRht())); - Table cmdbCiTable = new Table("cmdb_ci"); - SubSelect subSelectLft = new SubSelect().withSelectBody(new PlainSelect().withFromItem(cmdbCiTable).addSelectItems(new SelectExpressionItem(new Column( "lft"))).withWhere(new EqualsTo(new Column("id"), new LongValue(mainCiVo.getId())))); - SubSelect subSelectRht = new SubSelect().withSelectBody(new PlainSelect().withFromItem(cmdbCiTable).addSelectItems(new SelectExpressionItem(new Column( "rht"))).withWhere(new EqualsTo(new Column("id"), new LongValue(mainCiVo.getId())))); - GreaterThanEquals greaterThanEquals = new GreaterThanEquals(">=").withLeftExpression(cmdbCiLftColumn).withRightExpression(subSelectLft); - MinorThanEquals minorThanEquals = new MinorThanEquals("<=").withLeftExpression(cmdbCiRhtColumn).withRightExpression(subSelectRht); - AndExpression andExpression = new AndExpression(greaterThanEquals, minorThanEquals); - Join joinCmdbCi = new Join().withRightItem(cmdbCi).addOnExpression(new AndExpression(equalsTo, andExpression)); + + Table a = new Table("cmdb_ci").withAlias(new Alias("a").withUseAs(false)); + Column aLftColumn = new Column(a, "lft"); + Column aRhtColumn = new Column(a, "rht"); + + Table b = new Table("cmdb_ci").withAlias(new Alias("b").withUseAs(false)); + Column bLftColumn = new Column(b, "lft"); + Column bRhtColumn = new Column(b, "rht"); + + GreaterThanEquals greaterThanEquals = new GreaterThanEquals(">=").withLeftExpression(bLftColumn).withRightExpression(aLftColumn); + MinorThanEquals minorThanEquals = new MinorThanEquals("<=").withLeftExpression(bRhtColumn).withRightExpression(aRhtColumn); + Join join = new Join().withRightItem(b).addOnExpression(new AndExpression(greaterThanEquals, minorThanEquals)); + + SubSelect subSelect = new SubSelect().withSelectBody( + new PlainSelect().withFromItem(a).addJoins(join) + .addSelectItems(new SelectExpressionItem(new Column( b, "*"))) + .withWhere(new EqualsTo(new Column(a, "id"), new LongValue(mainCiVo.getId()))) + ).withAlias(new Alias("cientity_" + mainTableAlias + "_ci").withUseAs(false)); + + Column mainTableCiIdColumn = new Column(mainTable.getAlias().getName() + ".ci_id"); + Column cmdbCiIdColumn = new Column( subSelect.getAlias().getName() + ".id"); + Join joinCmdbCi = new Join().withRightItem(subSelect).addOnExpression(new EqualsTo(cmdbCiIdColumn, mainTableCiIdColumn)); plainSelect.addJoins(joinCmdbCi); - addJoinTable(cmdbCi); addEqualColumn(cmdbCiIdColumn, mainTableCiIdColumn); plainSelect.withWhere(getExpiredExpression(mainTable)); return plainSelect; -- Gitee