From aeae906f9d6a70f1d80bb2aae91a7bf07ca213e9 Mon Sep 17 00:00:00 2001 From: zhangweiqing Date: Fri, 6 Feb 2026 16:41:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=94=9F=E6=88=90=E5=9E=8B?= =?UTF-8?q?=E5=B9=B3=E8=A1=8C=E8=A1=A8=201.=20BefEntityResInfoImpl=20=20?= =?UTF-8?q?=20=201.=20=E6=B7=BB=E5=8A=A0=E4=B8=9A=E5=8A=A1=E5=AE=9E?= =?UTF-8?q?=E4=BD=93=E5=85=83=E6=95=B0=E6=8D=AE=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=9E=8B=E5=AD=90=E7=B1=BB=E4=B9=9F=E5=A4=8D?= =?UTF-8?q?=E7=94=A8=E8=AF=A5=E4=BF=A1=E6=81=AF=EF=BC=9B=202.=20BEDeleteSe?= =?UTF-8?q?rvice=20=20=20=201.=20=E5=88=A0=E9=99=A4=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E6=97=B6=E8=8E=B7=E5=8F=96=E8=A1=A8=E7=9A=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E7=A7=BB=E5=88=B0EntityRelationalAdaptor=E4=B8=AD=EF=BC=8C?= =?UTF-8?q?=E5=9B=A0=E4=B8=BA=E5=A4=96=E5=9B=B4=E4=B8=8D=E5=BF=85=E4=BA=86?= =?UTF-8?q?=E8=A7=A3=E5=AD=98=E5=82=A8=E7=BB=93=E6=9E=84=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E5=BA=94=E5=85=B3=E5=BF=83=E6=98=AF=E5=90=A6=E5=B9=B3=E8=A1=8C?= =?UTF-8?q?=E8=A1=A8=EF=BC=9B=203.=20EntityRelationalAdaptor=20=20=20=201.?= =?UTF-8?q?=20=E5=B9=B3=E8=A1=8C=E8=A1=A8=E4=BF=A1=E6=81=AF=E5=92=8C?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E9=83=BD=E8=AE=B0=E5=BD=95=E5=9C=A8=E8=AF=A5=E7=B1=BB?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E7=94=9F=E6=88=90=E5=9E=8B=E5=92=8C=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E5=9E=8B=E5=9C=A8=E5=90=84=E8=87=AA=E7=9A=84=E5=AD=90?= =?UTF-8?q?=E7=B1=BB=E4=B8=AD=E8=B0=83=E7=94=A8=E5=B9=B3=E8=A1=8C=E8=A1=A8?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=9B=20=20=20=202.=20=E5=AF=B9=E9=BD=90=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=9E=8B=E6=94=AF=E6=8C=81UDT=E5=A4=9A=E8=AF=AD?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=9A=84=E8=83=BD=E5=8A=9B=EF=BC=9AgetMultiL?= =?UTF-8?q?anguageColumnInfos=E6=96=B9=E6=B3=95=E4=B8=AD=E4=B8=8D=E5=B1=8F?= =?UTF-8?q?=E8=94=BDUDT=E5=AD=97=E6=AE=B5=EF=BC=8ChandleMultiLanguageColum?= =?UTF-8?q?n=E6=96=B9=E6=B3=95=E6=B7=BB=E5=8A=A0=E5=AF=B9=E5=A4=9A?= =?UTF-8?q?=E8=AF=ADUDT=E5=AD=97=E6=AE=B5=E7=9A=84=E5=A4=84=E7=90=86?= =?UTF-8?q?=EF=BC=9B=20=20=20=203.=20=E6=B7=BB=E5=8A=A0=E5=B9=B3=E8=A1=8C?= =?UTF-8?q?=E8=A1=A8=E5=88=AB=E5=90=8D=E5=A4=84=E7=90=86=EF=BC=8C=E6=B6=89?= =?UTF-8?q?=E5=8F=8A=E6=96=B9=E6=B3=95EntityRelationalAdaptor.getTableName?= =?UTF-8?q?sWithAssociationInfoNew=E3=80=81getTableAliasWithParallel4Assoc?= =?UTF-8?q?iation=E3=80=81setTableAliasWithParallelTable=EF=BC=9B=20=20=20?= =?UTF-8?q?=204.=20=E7=A7=BB=E9=99=A4=E6=9C=AA=E4=BD=BF=E7=94=A8=E7=9A=84i?= =?UTF-8?q?nnerGetInsertSql(String=20parallelTableCode)=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8Cengine=E4=B8=AD=E5=AF=B9=E8=AF=A5=E7=B1=BB=E7=9A=84?= =?UTF-8?q?=E8=A6=86=E5=86=99=E4=B9=9F=E5=90=8C=E6=AD=A5=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=EF=BC=9B=20=20=20=205.=20=E4=BF=AE=E5=A4=8D=E6=9C=89=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=A4=9A=E8=AF=AD=E5=AD=97=E6=AE=B5=EF=BC=8C=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E4=BD=BF=E7=94=A8=E6=99=AE=E9=80=9A=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E6=A1=86=E8=BE=93=E5=85=A5=EF=BC=8C=E4=B8=80=E4=B8=AA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=A4=9A=E8=AF=AD=E6=96=87=E6=9C=AC=E6=A1=86=E8=BE=93?= =?UTF-8?q?=E5=85=A5=EF=BC=8C=E9=83=BD=E5=AD=98=E5=9C=A8=E5=80=BC=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99=E6=99=AE=E9=80=9A=E6=96=87=E6=9C=AC=E6=A1=86?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E7=9A=84=E5=80=BC=E8=A2=AB=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82=E8=A7=81handleMultiLanguag?= =?UTF-8?q?eColumn=E6=96=B9=E6=B3=95=EF=BC=9B=20=20=20=206.=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=B9=B3=E8=A1=8C=E8=A1=A8=E4=B8=8A=E7=9A=84=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=AD=97=E6=AE=B5=E7=9A=84=E5=88=A0=E9=99=A4=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=8A=A5=E9=94=99=EF=BC=8C=E6=B6=89=E5=8F=8A=E6=96=B9?= =?UTF-8?q?=E6=B3=95EntityRelationalAdaptor.getReferenceDataCount=EF=BC=9B?= =?UTF-8?q?=20=20=20=207.=20=E7=A7=BB=E9=99=A4versionControlPropName?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=EF=BC=8C=E5=9B=A0=E4=B8=BA=E8=AF=A5=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=AD=E4=B8=8D=E5=AD=98=E5=9C=A8=E5=AF=B9=E8=AF=A5?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E7=9A=84=E8=B5=8B=E5=80=BC=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=9B=20=20=20=208.=20=E7=A7=BB=E9=99=A4=E6=96=B9=E6=B3=95c?= =?UTF-8?q?onvertVersionControlValues=E7=AC=AC=E4=B8=89=E4=B8=AA=E5=B1=9E?= =?UTF-8?q?=E6=80=A7parameters=EF=BC=8C=E5=9B=A0=E4=B8=BA=E8=AF=A5?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E4=B8=BAprivate=EF=BC=8C=E4=B8=94=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=97=B6=E7=AC=AC=E4=B8=89=E4=B8=AA=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=80=BB=E6=98=AF=E4=BC=A0=E5=85=A5null=EF=BC=9B=20=20=20=209.?= =?UTF-8?q?=20=E7=A7=BB=E9=99=A4=E4=BB=8E=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84private=E6=96=B9=E6=B3=95buildRetrieveOrderBy=EF=BC=9B?= =?UTF-8?q?=20=20=20=2010.=20=E7=AE=80=E5=8C=96initQueryTableName->initQue?= =?UTF-8?q?ryTableNameWithParentAlias->initQueryTableNameWithParentAlias?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E9=93=BE=EF=BC=8C=E5=90=8E=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=B9=B6=E6=97=A0=E5=85=B6=E4=BB=96=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=96=B9=EF=BC=8C=E7=9B=B4=E6=8E=A5=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=88=B0=E7=AC=AC=E4=B8=80=E4=B8=AA=E6=96=B9=E6=B3=95=E4=B8=AD?= =?UTF-8?q?=EF=BC=9B=204.=20EntityRelationalReposAdaptor=20=20=20=201.=20?= =?UTF-8?q?=E4=B8=BA=E5=85=B7=E6=9C=89=E5=B9=B3=E8=A1=8C=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=9E=8B=E5=B7=A5=E7=A8=8B=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9E=84=E9=80=A0=E5=8F=82=E6=95=B0containsParallel=EF=BC=8C?= =?UTF-8?q?=E5=BD=93=E8=AF=A5=E5=8F=82=E6=95=B0=E4=B8=BAtrue=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=8A=A0=E8=BD=BDBE=E5=85=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=B9=B6=E5=88=9D=E5=A7=8B=E5=8C=96=E5=B9=B3=E8=A1=8C=E8=A1=A8?= =?UTF-8?q?=E5=92=8C=E5=AD=97=E6=AE=B5=E7=9B=B8=E5=85=B3=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=9B=20=20=20=202.=20=E5=B0=86insert=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=A4=8D=E7=94=A8=E7=88=B6=E7=B1=BB=E7=9A=84insert?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E5=88=A0=E9=99=A4=E5=8E=9F=E6=9C=89?= =?UTF-8?q?=E7=9A=84insert=E7=9B=B8=E5=85=B3=E7=A7=81=E6=9C=89=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=9B=20=20=20=203.=20EntityRelationalReposAdaptor?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96=E8=A1=A8=E5=90=8D=E7=9A=84?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=96=B9=E6=B3=95=EF=BC=8C=E5=B0=86=E5=B9=B3?= =?UTF-8?q?=E8=A1=8C=E8=A1=A8=E6=8B=BC=E6=8E=A5=E5=88=B0=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E8=A1=A8=E5=90=8D=E4=B8=AD=EF=BC=9B=20=20=20=204.=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E5=B9=B3=E8=A1=8C=E8=A1=A8=E7=9B=B8=E5=85=B3=E6=96=B9?= =?UTF-8?q?=E6=B3=95innerGetDeleteSql=E3=80=81getParentJoin=EF=BC=9B=205.?= =?UTF-8?q?=20=E5=88=A0=E9=99=A4=E6=B2=A1=E6=9C=89=E4=BB=BB=E4=BD=95?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E5=BC=95=E7=94=A8=E7=9A=84=E7=B1=BBExtendAda?= =?UTF-8?q?ptorItem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business-entity-framework-spi/pom.xml | 5 + .../builtinimpls/BefEntityResInfoImpl.java | 40 +- .../cef/api/repository/IRootRepository.java | 44 +- .../inspur/edp/cef/core/BEDeleteService.java | 51 +- common-entity-framework-repository/pom.xml | 9 + .../repository/adaptor/DataTypeAdapter.java | 10 +- .../adaptor/EntityRelationalAdaptor.java | 523 +++++++++++------- .../EntityRelationalReposAdaptor.java | 398 ++++--------- .../adaptoritem/ExtendAdaptorItem.java | 46 -- .../SqlSnippetProcessor.java | 13 +- .../dbcolumninfo/ColumnInfoUtils.java | 112 ++-- .../repository/exception/ExceptionCode.java | 37 ++ .../repository/repo/BaseRootRepository.java | 4 +- .../edp/cef/repository/utils/FilterUtil.java | 8 + .../cef/repository/utils/RepositoryUtil.java | 8 +- .../AbstractCefDataDeSerializer.java | 17 +- .../resources/cef_runtime_core.properties | 9 + .../en/cef_runtime_core.en.properties | 9 + .../zh-CHT/cef_runtime_core.zh-CHT.properties | 9 + 19 files changed, 675 insertions(+), 677 deletions(-) delete mode 100644 common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/ExtendAdaptorItem.java diff --git a/business-entity-framework-spi/pom.xml b/business-entity-framework-spi/pom.xml index b0906169..016fe063 100644 --- a/business-entity-framework-spi/pom.xml +++ b/business-entity-framework-spi/pom.xml @@ -53,5 +53,10 @@ com.inspur.edp cm-entity-framework-spi + + com.inspur.edp + business-entity-model + 0.2.1 + diff --git a/business-entity-framework-spi/src/main/java/com/inspur/edp/bef/spi/entity/builtinimpls/BefEntityResInfoImpl.java b/business-entity-framework-spi/src/main/java/com/inspur/edp/bef/spi/entity/builtinimpls/BefEntityResInfoImpl.java index c5aed274..319e4358 100644 --- a/business-entity-framework-spi/src/main/java/com/inspur/edp/bef/spi/entity/builtinimpls/BefEntityResInfoImpl.java +++ b/business-entity-framework-spi/src/main/java/com/inspur/edp/bef/spi/entity/builtinimpls/BefEntityResInfoImpl.java @@ -16,11 +16,12 @@ package com.inspur.edp.bef.spi.entity.builtinimpls; +import com.inspur.edp.bef.bizentity.GspBizEntityObject; +import com.inspur.edp.bef.bizentity.GspBusinessEntity; import com.inspur.edp.bef.entity.exception.BefRunTimeBaseException; import com.inspur.edp.bef.spi.entity.CodeRuleInfo; import com.inspur.edp.bef.spi.entity.columnconfig.ColumnGenerateInfo; import com.inspur.edp.bef.spi.exception.ExceptionCode; -import com.inspur.edp.cef.api.message.CefException; import com.inspur.edp.cef.api.repository.GspDbDataType; import com.inspur.edp.cef.entity.entity.FieldType; import com.inspur.edp.cef.spi.entity.PropertyDefaultValue; @@ -36,7 +37,6 @@ import com.inspur.edp.cef.spi.entity.info.propertyinfo.SimpleEnumUdtPropertyInfo import com.inspur.edp.cef.spi.entity.info.propertyinfo.SimpleUdtPropertyInfo; import com.inspur.edp.cef.spi.entity.resourceInfo.builinImpls.CefEntityResInfoImpl; import com.inspur.edp.cef.spi.entity.resourceInfo.builinImpls.CefModelResInfoImpl; - import com.inspur.edp.cef.spi.entity.resourceInfo.builinImpls.CefValueObjModelResInfo; import com.inspur.edp.cef.spi.entity.resourceInfo.builinImpls.CefValueObjResInfo; import com.inspur.edp.udt.api.Manager.IUdtManager; @@ -48,12 +48,23 @@ import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; +/** + * 生成型和解析型均继承该类 + */ public abstract class BefEntityResInfoImpl extends CefEntityResInfoImpl { private HashMap beforeSaveCodeRules; private HashMap afterCreateCodeRules; private String versionControlPropertyName; private ColumnGenerateInfo columnGenerateInfo; + /** + * 业务实体,生成型可能为空(仅当使用平行表时给该属性赋值),解析型不为空 + */ + private GspBusinessEntity businessEntity; + /** + * 业务实体对象,生成型可能为空(仅当使用平行表时给该属性赋值),解析型不为空 + */ + private GspBizEntityObject bizEntityObject; public BefEntityResInfoImpl(String entityCode, String displayValueKey, CefModelResInfoImpl modelResInfo, String entityId) { super(entityCode, displayValueKey, modelResInfo, entityId); @@ -61,11 +72,12 @@ public abstract class BefEntityResInfoImpl extends CefEntityResInfoImpl { /** * 构造函数 - * @param entityCode 实体编码 + * + * @param entityCode 实体编码 * @param displayValueKey 实体名称资源项key - * @param modelResInfo 归属模型 - * @param entityId 实体ID - * @param entityName 实体名称 + * @param modelResInfo 归属模型 + * @param entityId 实体ID + * @param entityName 实体名称 */ public BefEntityResInfoImpl(String entityCode, String displayValueKey, CefModelResInfoImpl modelResInfo, String entityId, String entityName) { super(entityCode, displayValueKey, modelResInfo, entityId, entityName); @@ -392,4 +404,20 @@ public abstract class BefEntityResInfoImpl extends CefEntityResInfoImpl { public void setColumnGenerateInfo(ColumnGenerateInfo columnGenerateInfo) { this.columnGenerateInfo = columnGenerateInfo; } + + public GspBusinessEntity getBusinessEntity() { + return businessEntity; + } + + public void setBusinessEntity(GspBusinessEntity businessEntity) { + this.businessEntity = businessEntity; + } + + public GspBizEntityObject getBizEntityObject() { + return bizEntityObject; + } + + public void setBizEntityObject(GspBizEntityObject bizEntityObject) { + this.bizEntityObject = bizEntityObject; + } } diff --git a/common-entity-framework-api/src/main/java/com/inspur/edp/cef/api/repository/IRootRepository.java b/common-entity-framework-api/src/main/java/com/inspur/edp/cef/api/repository/IRootRepository.java index ac79db08..c87dd843 100644 --- a/common-entity-framework-api/src/main/java/com/inspur/edp/cef/api/repository/IRootRepository.java +++ b/common-entity-framework-api/src/main/java/com/inspur/edp/cef/api/repository/IRootRepository.java @@ -19,6 +19,7 @@ package com.inspur.edp.cef.api.repository; import com.inspur.edp.cef.api.RefObject; import com.inspur.edp.cef.api.authority.AuthorityInfo; import com.inspur.edp.cef.api.repository.adaptor.IDataAdapterExtendInfo; +import com.inspur.edp.cef.api.repository.dac.IDataTypeDac; import com.inspur.edp.cef.entity.UQConstraintMediate; import com.inspur.edp.cef.entity.changeset.IChangeDetail; import com.inspur.edp.cef.entity.changeset.Tuple; @@ -26,32 +27,31 @@ import com.inspur.edp.cef.entity.condition.EntityFilter; import com.inspur.edp.cef.entity.condition.NodeSortInfo; import com.inspur.edp.cef.entity.condition.RetrieveFilter; import com.inspur.edp.cef.entity.entity.IEntityData; -import com.inspur.edp.cef.api.repository.dac.IDataTypeDac; - import com.inspur.edp.cef.entity.repository.DataSaveParameter; import com.inspur.edp.cef.entity.repository.DataSaveResult; import io.iec.edp.caf.databaseobject.api.entity.TempTableContext; -import java.util.*; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public interface IRootRepository { - void initParams(java.util.Map pars); + void initParams(Map pars); - void initRepoVariables(java.util.HashMap vars); + void initRepoVariables(HashMap vars); /** * Query方法 * * @param filter 过滤条件 * @param authorities 权限信息 - * @return */ - java.util.List query(EntityFilter filter, - java.util.ArrayList authorities); + List query(EntityFilter filter, ArrayList authorities); - java.util.List query(String entityCode, EntityFilter filter, - java.util.ArrayList authorities); + List query(String entityCode, EntityFilter filter, ArrayList authorities); IEntityData retrieve(String id) throws SQLException; @@ -60,9 +60,8 @@ public interface IRootRepository { * * @param id 传入主表Id * @param sortCondition 传入从表 - * @return */ - IEntityData retrieve(String id, java.util.ArrayList sortCondition) throws SQLException; + IEntityData retrieve(String id, ArrayList sortCondition) throws SQLException; IEntityData retrieve(String id, ArrayList nodeSortInfos, RetrieveFilter retrieveFilter); @@ -70,9 +69,8 @@ public interface IRootRepository { * retrieve * * @param dataIds 数据Id - * @return */ - java.util.List retrieve(java.util.List dataIds) throws SQLException; + List retrieve(List dataIds) throws SQLException; List retrieve(List dataIds, RetrieveFilter retrieveFilter); @@ -80,15 +78,23 @@ public interface IRootRepository { void save(IChangeDetail... changes) throws SQLException; - String getTableNameByColumns(String nodeCode, java.util.HashMap columns, String keyColumnName, RefObject keyDbColumnName, java.util.ArrayList tableAlias); + String getTableNameByColumns(String nodeCode, HashMap columns, String keyColumnName, RefObject keyDbColumnName, ArrayList tableAlias); - String getTableNameByRefColumns(String nodeCode, java.util.HashMap columns, String keyColumnName, RefObject keyDbColumnName, java.util.ArrayList tableAlias); + String getTableNameByRefColumns(String nodeCode, HashMap columns, String keyColumnName, RefObject keyDbColumnName, ArrayList tableAlias); String getTableNameByRefColumns(String nodeCode, TableNameRefContext tableNameRefContext); IDataTypeDac getMainDac(); - int getDataCount(String nodeCode, String tableName, EntityFilter filter); + /** + * 获取该节点中符合条件的数据条数。当annual为是时,仅获取当前年度的数据条数;当annual为否时,获取所有所有年度的数据条数总数 + * + * @param nodeCode 节点编号 + * @param filter 过滤条件,目前仅支持单个过滤条件 + * @param annual 是否只获取当前年度 + * @return 符合过滤条件的数据条数 + */ + int getDataCount(String nodeCode, EntityFilter filter, boolean annual); HashMap getVariables(String nodeCode); @@ -96,9 +102,9 @@ public interface IRootRepository { boolean isEffective(String nodeCode, String dataId); - boolean isDatasEffective(String nodeCode, java.util.ArrayList dataIds, RefObject> noneEffectiveDatas); + boolean isDatasEffective(String nodeCode, ArrayList dataIds, RefObject> noneEffectiveDatas); - boolean isDatasEffective(String nodeCode, java.util.ArrayList dataIds, RefObject> noneEffectiveDatas, String propName); + boolean isDatasEffective(String nodeCode, ArrayList dataIds, RefObject> noneEffectiveDatas, String propName); void generateTable(String nodeCode); diff --git a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/BEDeleteService.java b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/BEDeleteService.java index 0c9c8eb1..5094e737 100644 --- a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/BEDeleteService.java +++ b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/BEDeleteService.java @@ -37,13 +37,11 @@ import com.inspur.edp.cef.entity.condition.EntityFilter; import com.inspur.edp.cef.entity.condition.ExpressCompareType; import com.inspur.edp.cef.entity.condition.FilterCondition; import com.inspur.edp.cef.entity.exception.CefRuntimeBaseException; -import com.inspur.edp.cef.spi.encrypt.IEncrypt; -import io.iec.edp.caf.boot.context.CAFContext; import io.iec.edp.caf.commons.exception.ExceptionLevel; import io.iec.edp.caf.commons.utils.SpringBeanUtils; import io.iec.edp.caf.databaseobject.api.service.IDatabaseObjectRtService; -import java.util.*; +import java.util.Arrays; public class BEDeleteService implements IBefReferenceChecker { public BEDeleteService() { @@ -90,26 +88,15 @@ public class BEDeleteService implements IBefReferenceChecker { IRootRepository rootRepository = repoFactory.createRepository(configId); // 构建过滤条件 EntityFilter filter = buildEntityFilter(propName, dataIds); - // 获取表名列表 - List tables = new ArrayList<>(); try { - tables = getTableNames(rootRepository, nodeCode, annual); + int referenceDataCount = rootRepository.getDataCount(nodeCode, filter, annual); + if (referenceDataCount > 0) { + return true; + } } catch (RuntimeException ex) { throw new CefRuntimeBaseException(ExceptionCode.CEF_RUNTIME_4002, ex, ExceptionLevel.Error, nodeCode, propName, referer, propertyName); } - // 检查引用关系 - for (String tableName : tables) { - try { - int referenceDataCount = rootRepository.getDataCount(nodeCode, tableName, filter); - if (referenceDataCount > 0) { - return true; - } - } catch (RuntimeException ex) { - throw new CefRuntimeBaseException(ExceptionCode.CEF_RUNTIME_4002, ex, ExceptionLevel.Error, - nodeCode, propName, referer, propertyName); - } - } return false; } @@ -133,34 +120,6 @@ public class BEDeleteService implements IBefReferenceChecker { return filter; } - /** - * 获取表名列表 - */ - private List getTableNames(IRootRepository br, String nodeCode, Boolean annual) { - if (annual) { - HashMap varMap = br.getVariables(nodeCode); - HashMap filterVarMap = new HashMap<>(); - if(varMap !=null && !varMap.isEmpty()){ - for(Map.Entry entry : varMap.entrySet()){ - String dimKey = entry.getKey(); - String value = entry.getValue(); - if(!io.iec.edp.caf.commons.utils.StringUtils.isEmpty(value)){ - if(dimKey != null && (dimKey.equalsIgnoreCase("FIYear") || dimKey.equalsIgnoreCase("YYMM") || dimKey.equalsIgnoreCase("YYYY"))){ - // 针对默认的表策略,检查value是否为整数格式,如果不是则跳过处理 - if (!value.matches("\\d+")) { - continue; - } - } - filterVarMap.put(dimKey, value); - } - } - } - return Collections.singletonList(getDboService().getTableNameWithDimensionValue(br.getDboID(nodeCode), filterVarMap)); - } else { - return getDboService().getTableNamesWithDimensionValues(br.getDboID(nodeCode), null); - } - } - private IDatabaseObjectRtService getDboService() { return CefRtBeanUtil.getDboRtService(); } diff --git a/common-entity-framework-repository/pom.xml b/common-entity-framework-repository/pom.xml index c87e10fb..d168202d 100644 --- a/common-entity-framework-repository/pom.xml +++ b/common-entity-framework-repository/pom.xml @@ -83,6 +83,10 @@ com.inspur.edp business-entity-framework-api + + com.inspur.edp + business-entity-framework-spi + javax.persistence javax.persistence-api @@ -133,6 +137,11 @@ com.fasterxml.jackson.core jackson-databind + + com.inspur.edp + business-entity-model + 0.2.1 + diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/DataTypeAdapter.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/DataTypeAdapter.java index d1ea729c..56f147c8 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/DataTypeAdapter.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/DataTypeAdapter.java @@ -19,17 +19,16 @@ package com.inspur.edp.cef.repository.adaptor; import com.inspur.edp.cef.api.RefObject; import com.inspur.edp.cef.api.repository.IRootRepository; import com.inspur.edp.cef.api.repository.RefColumnInfo; +import com.inspur.edp.cef.api.repository.TableNameRefContext; import com.inspur.edp.cef.api.repository.adaptor.IRepositoryAdaptor; import com.inspur.edp.cef.api.repository.readerWriter.ICefReader; import com.inspur.edp.cef.entity.entity.EntityDataPropertyValueUtils; import com.inspur.edp.cef.entity.entity.ICefData; -import com.inspur.edp.cef.repository.exception.ExceptionCode; import com.inspur.edp.cef.repository.assembler.AssoCondition; import com.inspur.edp.cef.repository.assembler.AssociationInfo; import com.inspur.edp.cef.repository.assembler.LogicDeleteInfo; -import com.inspur.edp.cef.api.repository.TableNameRefContext; import com.inspur.edp.cef.repository.exception.CefRepositoryException; -import io.iec.edp.caf.commons.exception.ExceptionLevel; +import com.inspur.edp.cef.repository.exception.ExceptionCode; import java.sql.Clob; import java.sql.SQLException; @@ -58,7 +57,10 @@ public abstract class DataTypeAdapter implements IRepositoryAdaptor { public abstract ICefData createInstance(ICefReader reader); - public abstract ICefData createInstance(List filterFields, ICefReader paramICefReader); + public ICefData createInstance(List filterFields, ICefReader paramICefReader) { + // 这个方法是后添加的,仅供解析型工程使用。但生成型的代码会继承这个类,为避免edp-parent升级造成生成型工程代码编译报错,添加默认实现并抛出异常 + throw new UnsupportedOperationException("No implement this method in class " + getClass().getName()); + } public abstract String getTableNameByColumns(java.util.HashMap columns, String keyColumnName, RefObject keyDbColumnName, java.util.ArrayList tableAlias); diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/EntityRelationalAdaptor.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/EntityRelationalAdaptor.java index 3876f180..d5d10a21 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/EntityRelationalAdaptor.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptor/EntityRelationalAdaptor.java @@ -16,6 +16,10 @@ package com.inspur.edp.cef.repository.adaptor; +import com.inspur.edp.bef.api.BefRtBeanUtil; +import com.inspur.edp.bef.bizentity.GspBizEntityObject; +import com.inspur.edp.bef.bizentity.gspbusinessobject.ParallelTable; +import com.inspur.edp.caf.cef.schema.base.utils.JsonUtil; import com.inspur.edp.cef.api.CefRtBeanUtil; import com.inspur.edp.cef.api.RefObject; import com.inspur.edp.cef.api.authority.AuthFilter; @@ -86,6 +90,8 @@ import com.inspur.edp.cef.spi.repository.ParallelTableInfo; import io.iec.edp.caf.boot.context.CAFContext; import io.iec.edp.caf.commons.dataaccess.DbType; import io.iec.edp.caf.commons.exception.ExceptionLevel; +import io.iec.edp.caf.databaseobject.api.entity.DatabaseObjectColumn; +import io.iec.edp.caf.databaseobject.api.entity.DatabaseObjectTableCore; import io.iec.edp.caf.databaseobject.api.entity.DatabaseObjectType; import io.iec.edp.caf.databaseobject.api.entity.TempTableContext; import io.iec.edp.caf.databaseobject.api.service.IDatabaseObjectRtService; @@ -98,6 +104,7 @@ import org.locationtech.jts.geom.Geometry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.persistence.TemporalType; @@ -105,6 +112,7 @@ import javax.transaction.Transactional; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -117,7 +125,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; /** - * 据说解析型从此类继承 + * 解析型从此类继承,新版生成型间接继承该类,最老版本的生成型直接继承该类 */ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { protected static final Logger logger = LoggerFactory.getLogger(EntityRelationalAdaptor.class); @@ -145,13 +153,27 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { protected Map multiLanguageAlias; protected boolean isMultiData = false; protected Map insertMultiIndexMap = new HashMap<>(); - protected Map parallelTableInfos = new HashMap<>(); - private String versionControlPropName; - private DbColumnInfoCollection containColumns; + /** + * 元数据中该节点的平行表设置信息,Map结构,方便查找。key是平行表的ID(不是平行表对应数据库对象的ID)、value是平行表设置 + */ + private final Map parallelTableMap = new HashMap<>(); + /** + * 该节点所有平行表对应的数据库对象。key是平行表的ID(不是平行表对应数据库对象的ID)、value是平行表对应的数据库对象。 + */ + private final Map parallelTableDboInfos = new HashMap<>(); + /** + * 该节点所有平行表的信息,综合了元数据和数据库对象的部分内容。key是平行表的编号(不是平行表对应数据库对象的编号)、value是平行表信息 + */ + private final Map parallelTableInfos = new HashMap<>(); + /** + * 平行表别名映射,key是平行表编号(ParallelTableInfo.getParallelTableCode()),value为对应的别名 + */ + private final Map parallelTableAliasMap = new HashMap<>(); + private final DbColumnInfoCollection containColumns; //缓存dbo表名 private String dboTableName; private Boolean hasMultiLangCol; - private volatile HashMap nestedRepositories = new HashMap<>(); + private final HashMap nestedRepositories = new HashMap<>(); protected EntityRelationalAdaptor() { this(true); @@ -189,7 +211,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { //region VersionControl protected String getVersionControlPropName() { - return versionControlPropName; + return null; } public HashMap getVersionControlValues(List dataIds) { @@ -207,12 +229,12 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { int endIndex = i == times ? dataIds.size() : batchCount * i; List tempList = dataIds.subList(batchCount * (i - 1), endIndex); String sqlformat = String.format(sql, getInFilter(tempList)); - HashMap tempDic = convertVersionControlValues(sqlformat, tempList, null); + HashMap tempDic = convertVersionControlValues(sqlformat, tempList); dic.putAll(tempDic); } } else { String sqlformat = String.format(sql, getInFilter(dataIds)); - HashMap tempDic = convertVersionControlValues(sqlformat, dataIds, null); + HashMap tempDic = convertVersionControlValues(sqlformat, dataIds); dic.putAll(tempDic); } @@ -241,8 +263,8 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return ""; } - private HashMap convertVersionControlValues(String sql, List dataIds, List parameters) { - Query query = buildQueryManager(sql, parameters); + private HashMap convertVersionControlValues(String sql, List dataIds) { + Query query = buildQueryManager(sql, null); HashMap dic = new HashMap(); List resultSet = query.getResultList(); for (String dataId : dataIds) { @@ -392,6 +414,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { /** * 根据过滤条件构造查询字段和字段mapping映射关系 */ + @Nonnull protected QueryFieldsInfo getQueryFieldsInfo(EntityFilter entityFilter) { QueryFieldsInfo queryFieldsInfo = new QueryFieldsInfo(); StringBuilder columns = new StringBuilder(); @@ -685,6 +708,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return processer; } + @Nonnull private String buildOrderByCondition(ArrayList orderByConditions) { ArrayList defaultSortCondition = getDefaultSortCondition(); String defaultSort = buildDefaultOrderByCondition(defaultSortCondition); @@ -692,7 +716,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { if (orderByConditions != null && orderByConditions.size() > 0) { ArrayList sortConditions = transSortCondition(orderByConditions); for (SortCondition orderByItem : sortConditions) { - if (orderByBuilder.toString() != null && !"".equals(orderByBuilder.toString())) { + if (orderByBuilder.length() > 0) { orderByBuilder.append(", "); } String filedName = trans2DbColumnWithAlias(orderByItem.getSortField()); @@ -700,7 +724,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } } - if (orderByBuilder.toString() == null || orderByBuilder.toString().length() == 0) { + if (orderByBuilder.length() == 0) { return getWrappedTableAlias() + "." + getContainColumns().getPrimaryKey().getDbColumnName() + " ASC"; } return formatMultiLang(orderByBuilder.toString()); @@ -723,7 +747,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { StringBuilder orderByBuilder = new StringBuilder(); if (sortConditions != null && sortConditions.size() > 0) { for (SortCondition orderByItem : sortConditions) { - if (orderByBuilder.toString() != null && !orderByBuilder.toString().equals("")) { + if (orderByBuilder.length() > 0) { orderByBuilder.append(", "); } String filedName = trans2DbColumnWithAlias(orderByItem.getSortField()); @@ -751,7 +775,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return batchIns; } - public String getInFilter(List dataIds) { + public String getInFilter(@Nonnull List dataIds) { return FilterUtil.buildInCondition(dataIds.toArray(new String[]{}), false, getWrappedTableAlias() + "." + getContainColumns().getPrimaryKey().getDbColumnName()); } @@ -781,7 +805,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { /** * 根据主表数据检索从表或者从从表 * - * @param dataIds 主表数据 + * @param dataIds 主表数据 */ public List getDataWithParentJoinIds(List dataIds , ArrayList orderByCondition, ArrayList tableAlias, List dbPars, AdaptorRetrieveParam adaptorRetrieveParam) { @@ -904,19 +928,6 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { */ private String getRetrieveParentJoinInfo(EntityRelationalAdaptor adaptor) { return getParentJoinInfo(adaptor, null); -// ChildEntityDac currentDac = (ChildEntityDac) adaptor.getEntityDac(); -// EntityRelationalAdaptor parentAdaptor = currentDac.getParentDac().getEntityAdaptor(); -// //todo 在BefBaseAdaptor中,ParentTableName和ParentTableAlias PrimaryId都已经替换过了。。。 -// //JOIN @ParentTableName@ @ParentTableAlias@ ON @ParentID@ = @PrimaryID@ -// String currentJoinInfo = adaptor.getParentJoin().replace("@ParentTableName@", parentAdaptor.innerGetTableName()) -// .replace("@ParentTableAlias@", parentAdaptor.getWrappedTableAlias()) -// .replace("@PrimaryID@", parentAdaptor.getWrappedTableAlias() + "." + parentAdaptor.getPrimaryKey()); -// if(currentDac.getParentDac() instanceof MainEntityDac){ -// return currentJoinInfo; -// } -// else { -// return currentJoinInfo + " " + getRetrieveParentJoinInfo(parentAdaptor); -// } } private String getParentJoinInfo(EntityRelationalAdaptor adaptor, ParallelTableInfo parallelTableInfo) { @@ -950,14 +961,6 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } } - - private String buildRetrieveOrderBy(ArrayList orderBys) { - if (orderBys == null || orderBys.size() < 1) { - return ""; - } - return " ORDER BY " + buildDefaultOrderByCondition(orderBys); - } - public DbColumnInfoCollection getContainColumns() { return containColumns; } @@ -1118,7 +1121,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } }); } - return (IEntityData) ((tempVar instanceof IEntityData) ? tempVar : null); + return data; } /** @@ -1218,6 +1221,30 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { public abstract void setTableAlias(String value); + /** + * 设置业务主表的别名和平行表的别名,入参中所有别名已经处理过关键字了。该方法禁止外部调用 + */ + protected final void setTableAliasWithParallelTable(Map aliasMap) { + //设置业务主表的别名 + setTableAlias(aliasMap.get(null)); + //设置平行表的别名 + for (ParallelTableInfo parallelTableInfo : parallelTableInfos.values()) { + String parallelAlias = aliasMap.get(parallelTableInfo.getParallelTableCode()); + this.parallelTableAliasMap.put(parallelTableInfo.getParallelTableCode(), parallelAlias); + } + } + + /** + * 获取平行表的别名,返回的表名已经处理过关键字了 + */ + protected final String getParallelTableAlias(ParallelTableInfo parallelTableInfo) { + String alias = parallelTableAliasMap.get(parallelTableInfo.getParallelTableCode()); + if (StringUtils.isEmpty(alias)) { + alias = KeyWordsManager.getTableAlias(parallelTableInfo.getParallelTableCode()); + } + return alias; + } + // endregion //获取转换后的别名 @@ -1226,7 +1253,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return KeyWordsManager.getTableAlias(getTableAlias()); } ParallelTableInfo parallelTableInfo = parallelTableInfos.get(dbColumnInfo.getRefParallelTableCode()); - return KeyWordsManager.getTableAlias(parallelTableInfo.getParallelTableCode()); + return getParallelTableAlias(parallelTableInfo); } public String getWrappedTableAlias() { @@ -1249,23 +1276,16 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { protected abstract String getConfigId(); ///#region initQueryTableName - private void initQueryTableName() { - initQueryTableNameWithParentAlias(null); - } - - private void initQueryTableNameWithParentAlias(ArrayList alias) { - this.initQueryTableNameWithParentAlias(alias, new AdaptorRetrieveParam(null)); - } /** * 初始化表名,以及查询字段 */ - private void initQueryTableNameWithParentAlias(ArrayList alias, AdaptorRetrieveParam adaptorRetrieveParam) { + private void initQueryTableName() { if (queryTableName != null && queryTableName.length() > 0) { return; } //跟之前一致,并且在当前实例上做缓存。 - TableNameInfo tableNameInfo = getTableNamesWithAssociationInfoNew(getAssociationInfos(), alias); + TableNameInfo tableNameInfo = getTableNamesWithAssociationInfoNew(getAssociationInfos(), null); queryTableName = tableNameInfo.getFullTableName(); } @@ -1274,7 +1294,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { this.multiLanguageColumnInfos = new DbColumnInfoCollection(); //endregion for (DbColumnInfo col : getContainColumns()) { - if (col.getIsMultiLang() && !col.getIsUdtElement()) { + if (col.getIsMultiLang()) { this.multiLanguageColumnInfos.add(col); } } @@ -1324,7 +1344,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { RepositoryUtil.FormatMuliLangColumnName(trans2DbColumnWithAlias(columnInfo.getColumnName()), language); String alias = RepositoryUtil.FormatMuliLangColumnName(columnInfo.getColumnName(), language); // 不使用过滤,则全部添加 - if (columns != null && columns.length() > 0) { + if (columns.length() > 0) { columns.append(","); } columns.append(columnName).append(" AS ").append(alias); @@ -1571,13 +1591,11 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { // region Insert protected abstract String innerGetInsertSql(); - protected abstract String innerGetInsertSql(String parallelTableCode); - /** * 判断当前列是否需要执行插入 * * @param parallelTableCode 平行表编号,对于业务主表,值是"" - * @param dbColumnInfo 当前字段希希 + * @param dbColumnInfo 当前字段信息 */ private boolean isNeedInsert(String parallelTableCode, DbColumnInfo dbColumnInfo) { if (dbColumnInfo.getIsAssociateRefElement()) { @@ -1688,25 +1706,31 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { if (isMultiData) { for (EcpLanguage language : currentEnableLanguages) { - // 添加逗号分隔符 - if (insertFields.length() > 0) { - insertFields.append(","); - values.append(","); - } - + // 避免dbo字段编号和be字段编号不一致时,录入多语数据报错找不到字段 + String dboalias = RepositoryUtil.FormatMuliLangColumnName(containColumn.getDbColumnName(), language); String alias = RepositoryUtil.FormatMuliLangColumnName(containColumn.getColumnName(), language); - insertFields.append(alias); - values.append("?"); MultiLangColumnInfo multiLangColumnInfo = getMultiLanguageAlias().get(alias); - if (multiLangColumnInfo == null) continue; + if (multiLangColumnInfo == null) { + continue; + } DbColumnInfo columnInfo = getContainColumns().getItem(multiLangColumnInfo.getColumnName()); - if (columnInfo == null) continue; + if (columnInfo == null) { + continue; + } String languageCode = multiLangColumnInfo.getLanguageInfo().getCode(); String columnNameWithToken = multiLangColumnInfo.getColumnName() + MultiLanguageInfo.MULTILANGUAGETOKEN; + // 添加逗号分隔符 + if (insertFields.length() > 0) { + insertFields.append(","); + values.append(","); + } + insertFields.append(dboalias); + values.append("?"); + Object value = null; if (multiLanguageData != null && multiLanguageData.getMultiLanguageInfos() != null && @@ -1718,10 +1742,26 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { if (propValueMap != null) { value = propValueMap.get(languageCode); + if (columnInfo.getIsUdtElement()) { + value = getPropertyChangeValue(multiLangColumnInfo.getColumnName(), value); + } } + // 添加参数 + insertSqlInfo.getDbParameters().add(buildParam(alias, columnInfo.getColumnType(), value)); + continue; } - insertSqlInfo.getDbParameters().add(buildParam(alias, columnInfo.getColumnType(), value)); + String columnName = multiLangColumnInfo.getColumnName(); + // 该字段为多语字段,但没有多语数据,按照普通字段取值,存放到当前语言中 + if (!languageCode.equals(CAFContext.current.getLanguage())) { + // 添加参数 + insertSqlInfo.getDbParameters().add(buildParam(columnName, columnInfo.getColumnType(), null)); + continue; + } + // 若为当前语言,需到data中对应属性中取数 + value = this.getPersistenceValue(columnName, (ICefData) multiLanguageData); + Object transValue = value == null ? null : getPropertyChangeValue(columnName, value); + insertSqlInfo.getDbParameters().add(buildParam(columnName, containColumn.getColumnType(), transValue)); } } else { // 添加逗号分隔符 @@ -1730,14 +1770,14 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { values.append(","); } - //todo 这个地方不用别名包装了,@Language@替换后不会出现关键字的情况 String dbCol = containColumn.getDbColumnName().concat("@Language@"); insertFields.append(dbCol); values.append("?"); - Object value = this.getPersistenceValue(containColumn.getColumnName(), (ICefData) multiLanguageData); - Object transValue = value == null ? null : getPropertyChangeValue(containColumn.getColumnName(), value); - insertSqlInfo.getDbParameters().add(buildParam(containColumn.getColumnName(), containColumn.getColumnType(), transValue)); + String columnName = containColumn.getColumnName(); + Object value = this.getPersistenceValue(columnName, (ICefData) multiLanguageData); + Object transValue = value == null ? null : getPropertyChangeValue(columnName, value); + insertSqlInfo.getDbParameters().add(buildParam(columnName, containColumn.getColumnType(), transValue)); } } @@ -1758,10 +1798,8 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { batchInsert = true; InsertSqlInfo insertSqlInfo = getInsertInfo(parallelTableCode, getContainColumns(), entityData, false); insertSqlInfo.setTableName(tableCode); - ; - InsertSqlInfo extendInsertSqlInfo = null; if (parallelTableInfo == null && (extendContainColumns != null && extendContainColumns.getCount() > 0)) { - extendInsertSqlInfo = getInsertInfo(parallelTableCode, extendContainColumns, entityData, true); + InsertSqlInfo extendInsertSqlInfo = getInsertInfo(parallelTableCode, extendContainColumns, entityData, true); //此处判断处理扩展字段全部非持久化,不拼接, if (!extendInsertSqlInfo.getInsertField().isEmpty()) { insertSqlInfo.setInsertField(insertSqlInfo.getInsertField() + "," + extendInsertSqlInfo.getInsertField()); @@ -1775,12 +1813,10 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { @Override public int insert(IEntityData data, DataSaveParameter par, DacSaveContext batcher) throws SQLException { DataValidator.checkForNullReference(data, "data"); - isMultiData = (data instanceof IMultiLanguageData) && !((IMultiLanguageData) data) - .getMultiLanguageInfos().isEmpty(); + isMultiData = (data instanceof IMultiLanguageData) && !((IMultiLanguageData) data).getMultiLanguageInfos().isEmpty(); InsertSqlInfo insertSqlInfo = getInnerInsertSqlInfo(null, data); - //todo 是否根据isMultiData判断 是否需要替换,提升性能? String sql = formatFiscalAndMultiLang(insertSqlInfo.getInsertSql(), batcher); - List inserParameters = insertSqlInfo.getDbParameters(); //getInsertParameters("", data); + List inserParameters = insertSqlInfo.getDbParameters(); if (batchInsert) { batcher.getJDBCExecutor().addBatch(this.getNodeCode(), sql, inserParameters); } else { @@ -1789,7 +1825,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { for (ParallelTableInfo parallelTableInfo : this.parallelTableInfos.values()) { InsertSqlInfo sqlInfo = getInnerInsertSqlInfo(parallelTableInfo, data); sql = formatFiscalAndMultiLang(sqlInfo.getInsertSql(), batcher); - inserParameters = sqlInfo.getDbParameters();// getInsertParameters(parallelTableInfo.getParallelTableCode(), data); + inserParameters = sqlInfo.getDbParameters(); if (batchInsert) { batcher.getJDBCExecutor().addBatch(parallelTableInfo.getParallelTableCode(), sql, inserParameters); } else { @@ -1799,7 +1835,6 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return 1; } - /** * 构造全量的修改参数 */ @@ -1839,31 +1874,6 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return obj; } - //todo buildEXtendInsertParamters,这个地方得处理一下 - private void buildEXtendInsertParamters(IEntityData entityData, ArrayList dbPars) { - for (DbColumnInfo columnInfo : extendContainColumns) { - if (columnInfo.getIsAssociateRefElement()) { - continue; - } - if (!columnInfo.getIsPersistent()) { - continue; - } - Object transValue = null; - if (columnInfo.getIsUdtElement()) { - for (AbstractDataAdapterExtendInfo info : getDataAdapterExtendInfos()) { - transValue = info.getUdtInsertValue(columnInfo.getColumnName(), columnInfo.getBelongElementLabel(), entityData); - if (transValue != null) - break; - } - } else { - Object value = entityData.getValue(columnInfo.getColumnName()); - transValue = columnInfo.getTypeTransProcesser().transType(value); - } - - dbPars.add(buildParam(columnInfo.getColumnName(), columnInfo.getColumnType(), transValue)); - } - } - //endregion // region modify protected abstract String innerGetModifySql(); @@ -2511,6 +2521,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } } + @Nonnull protected final String buildModifyValue_MultiLanguage(Map infos, Set namesOfMultiLangColumns, RefObject> parameters) { if (parameters.argvalue == null) { @@ -2848,7 +2859,7 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { */ public abstract String getParentJoin(); - public abstract String getParentJoin(ParallelTableInfo parallelTableInfo); + protected abstract String getParentJoin(ParallelTableInfo parallelTableInfo); /** * 子表的ParentID是否关联主表的主键列 @@ -3092,7 +3103,6 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { @Transactional public int executeSql(String sqlText, List parameters) { - Query query = buildQueryManager(sqlText, parameters); return query.executeUpdate(); } @@ -3114,17 +3124,11 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } protected final String formatFiscalAndMultiLang(String sql) { - //if (EnableFiscal) - // sql = FormatFiscal(sql); - //if (HasMultiLangCol) sql = formatMultiLang(sql); return sql; } protected final String formatFiscalAndMultiLang(String sql, RetrieveFilter retrieveFilter) { - //if (EnableFiscal) - // sql = FormatFiscal(sql); - //if (HasMultiLangCol) sql = formatMultiLang(sql, retrieveFilter); return sql; } @@ -3134,7 +3138,8 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return sql; } - private String formatMultiLang(String sql) { + @Nonnull + private String formatMultiLang(@Nonnull String sql) { return RepositoryUtil.FormatMuliLang(sql); } @@ -3193,7 +3198,6 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { columns.put(keys.get(i), tempVar); } return tableNameInfo.getFullTableName(); - //return tableName; } public String getTableNameByRefColumns(TableNameRefContext tableNameRefContext) { @@ -3225,46 +3229,8 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { tableNameRefContext.getColumns().put(keys.get(i), tempVar); } return tableNameInfo.getFullTableName(); - //return tableName; } - - ///#region GetJoinTable -// public final String getJoinTableName(ArrayList columns, ArrayList tableAlias, String currentAlias) { -// HashMap> assos = getAssoInfos(columns); -// -// StringBuilder queryTables = new StringBuilder(); -// for (Map.Entry> assoItem : assos.entrySet()) { -// AssociationInfo associationInfo = assoItem.getKey(); -// ArrayList currentColumns = assoItem.getValue(); -// HashMap associationColumns = new HashMap(); -// for (String item : currentColumns) { -// associationColumns.put(associationInfo.getRefColumns().get(item), new RefColumnInfo()); -// } -// -// if (getConfigId().equals(associationInfo.getConfigId())) { -// queryTables.append(getCurrentAssoTableName(associationInfo, tableAlias, associationColumns)); -// continue; -// } -// String targetDbColumnName = ""; -// associationInfo.getRefRepository().initParams(getPars()); -// associationInfo.getRefRepository().initRepoVariables(getVars()); -// RefObject tempRef_targetDbColumnName = new RefObject(targetDbColumnName); -// //根据关联带出字段继续向下查找,拼接表名 -// String tableName = associationInfo.getRefRepository().getTableNameByRefColumns(associationInfo.getNodeCode(), associationColumns, associationInfo.getTargetColumn(), tempRef_targetDbColumnName, tableAlias); -// targetDbColumnName = tempRef_targetDbColumnName.argvalue; -// -// //根据返回信息,添加aataColumns信息 -// initAssociateColumnInfo(associationInfo, associationColumns); -// -// String sourceColumnName = currentAlias + "." + trans2DbColumn(associationInfo.getSourceColumn()); -// queryTables.append(String.format(getJoinTableName(), tableName, sourceColumnName, targetDbColumnName)); -// } -// -// return queryTables.toString(); -// -// } - protected final HashMap> getAssoInfos(ArrayList columns) { HashMap> assos = new HashMap>(); for (String column : columns) { @@ -3485,7 +3451,8 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { //将当前表的别名加入到集合中 addTableAlias(tableAlias); } else { - setTableAlias(getTableAlias4Association(tableAlias)); + Map tableAliasMap = getTableAliasWithParallel4Association(tableAlias); + setTableAliasWithParallelTable(tableAliasMap); } //如果不包含关联信息,返回当前表名:物理表 别名 etc: tablename tableAlias if (associations == null || associations.isEmpty()) { @@ -3755,12 +3722,41 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } /** - * 当前节点表名及表别名,如BPBizPaymentRequest BizPaymentRequest - * @return + * 获取当前表在查询表中的别名,并添加到别名集合中。 + * 结果为Map,其中key为null时,value为业务主表的别名。key为ParallelTableInfo.getParallelTableCode()时,value为平行表的别名。 */ -// public String getTableName() { -// return innerGetTableName() + " " + getWrappedTableAlias(); -// } + protected final Map getTableAliasWithParallel4Association(ArrayList tableAlias) { + //如果别名集合中不包含当前别名,则表名没有出现重复,直接加入 + String wrappedTableAlias = getWrappedTableAlias(); + if (!tableAlias.contains(wrappedTableAlias)) { + tableAlias.add(wrappedTableAlias); + Map aliasMap = new HashMap<>(); + aliasMap.put(null, wrappedTableAlias); + for (ParallelTableInfo parallelTableInfo : parallelTableInfos.values()) { + String parallelTableAlias = KeyWordsManager.getTableAlias(parallelTableInfo.getParallelTableCode()); + aliasMap.put(parallelTableInfo.getParallelTableCode(), parallelTableAlias); + } + return aliasMap; + } + + //如果已包含,则表示已经拼接过当前表,别名要进行+1处理,并加入到别名集合中 + int index = 1; + while (true) { + wrappedTableAlias = getWrappedTableAlias(true) + index; + if (tableAlias.contains(wrappedTableAlias)) { + index++; + } else { + tableAlias.add(wrappedTableAlias); + Map aliasMap = new HashMap<>(); + aliasMap.put(null, wrappedTableAlias); + for (ParallelTableInfo parallelTableInfo : parallelTableInfos.values()) { + String parallelTableAlias = KeyWordsManager.getTableAlias(parallelTableInfo.getParallelTableCode(), true) + index; + aliasMap.put(parallelTableInfo.getParallelTableCode(), parallelTableAlias); + } + return aliasMap; + } + } + } /** * 获取业务主表 表名 + 别名 @@ -3776,8 +3772,9 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { StringBuilder ywMainTableName = new StringBuilder(innerGetTableName() + " " + getWrappedTableAlias()); for (ParallelTableInfo parallelTableInfo : parallelTableInfos.values()) { String parallelTableName = innerGetParallelTableName(parallelTableInfo); - ywMainTableName.append(" LEFT OUTER JOIN ").append(parallelTableName).append(" ").append(parallelTableInfo.getParallelTableCode()); - ywMainTableName.append(String.format(" on %1$s.%2$s=%3$s.%4$s ", getWrappedTableAlias(), getPrimaryKey(), parallelTableInfo.getParallelTableCode(), parallelTableInfo.getPrimaryKeyCode())); + String parallelTableAlias = getParallelTableAlias(parallelTableInfo); + ywMainTableName.append(" LEFT OUTER JOIN ").append(parallelTableName).append(" ").append(parallelTableAlias); + ywMainTableName.append(String.format(" on %1$s.%2$s=%3$s.%4$s ", getWrappedTableAlias(), getPrimaryKey(), parallelTableAlias, parallelTableInfo.getPrimaryKeyCode())); } return ywMainTableName.toString(); } @@ -3923,44 +3920,6 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } } - - - //关联带出的多值UDT - //其余场景待补充 - //最开始的生成工程,继承EntityRelationAdaptor,没有resInfo这个东西,这里需要兼容判断 -// if (getEntityResInfo() == null) { -// return; -// } -// DataTypePropertyInfo assoPropertyInfo = getEntityResInfo().getEntityTypeInfo().getPropertyInfos().get(associationInfo.getSourceColumn()); - - //这个地方应该没有数据了 20240814 - // associationColumns里面都是带出字段的,需要添加到, 已经有一部分在上面的代码中被添加了 -// for (Map.Entry associationColumn : associationColumns.entrySet()) { -// DbColumnInfo tempVar4 = new DbColumnInfo(); -// //这里不会拼上udt的编号了 当前字段_多值字段 -// //如果当前关联是关联UDT,带出字段可能需要拼上 udt的编号 if内的处理是特殊处理适配关联多值UDT字段Mapping格式 -// if (assoPropertyInfo != null && assoPropertyInfo.getObjectInfo() != null && (assoPropertyInfo.getObjectInfo() instanceof SimpleAssoUdtPropertyInfo)) { -// //通过匹配取出关联字段的名称 -// String preFix = ""; -// for (Map.Entry refColumnItem : associationInfo.getRefColumns().entrySet()) { -// String key = refColumnItem.getKey(); -// String value = refColumnItem.getValue(); -// preFix = key.substring(0, key.indexOf("_" + value)); -// tempVar4.setColumnName(preFix + "_" + associationColumn.getKey()); -// break; -// } -// } else { -// tempVar4.setColumnName(associationInfo.getSourceColumn() + "_" + associationColumn.getKey()); -// } -// tempVar4.setDbColumnName(associationColumn.getValue().getColumnName()); -// tempVar4.setTypeTransProcesser((ITypeTransProcesser) ((associationColumn.getValue().getTransProcesser() instanceof ITypeTransProcesser) ? associationColumn.getValue().getTransProcesser() : null)); -// tempVar4.setColumnType(associationColumn.getValue().getColumnType()); -// tempVar4.setIsAssociateRefElement(true); -// tempVar4.setBelongElementLabel(associationInfo.getSourceColumn()); -// tempVar4.setVariableData(associationInfo.getVariableData()); -// DbColumnInfo columnInfo = tempVar4; -// getContainColumns().add(columnInfo); -// } } /** @@ -4044,29 +4003,114 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { } } - public int getReferenceDataCount(String tableName, EntityFilter filter) { - ArrayList parameters = new ArrayList(); - StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("SELECT COUNT(1) FROM ").append(tableName).append(" ").append(getTableAlias()); - - String condition = ""; - if (filter != null && filter.getFilterConditions() != null && !filter.getFilterConditions().isEmpty()) { - // 使用现有的buildWhereCondition方法来构建过滤条件 - condition = buildWhereCondition(filter.getFilterConditions(), parameters, null); + /** + * 获取符合查询条件的数据数量,目前仅支持引用检查场景。 + * + * @param filter 查询条件,目前仅支持单个查询条件 + * @param annual 是否只查询当前年度。是:只查询当前年度表,否:检查所有分表 + * @return 符合条件的总条数 + */ + public int getReferenceDataCount(EntityFilter filter, boolean annual) { + String dboId; + String tableAlias; + ParallelTableInfo parallelTableInfo; + if (filter == null || filter.getFilterConditions() == null || filter.getFilterConditions().isEmpty()) { + parallelTableInfo = null; + } else if (filter.getFilterConditions().size() > 1) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5084, false, JsonUtil.serialize(filter.getFilterConditions()), getConfigId(), getNodeCode()); + } else { + // 根据过滤条件获取字段所在的平行表,参考查询时处理过滤字段的方法:trans2DbColumnWithAlias + FilterCondition filterCondition = filter.getFilterConditions().get(0); + String filterField = filterCondition.getFilterField(); + filterField = DatabaseUtil.getColumnName(filterField); + DbColumnInfo columnInfo = getContainColumns().getItem(filterField); + if (columnInfo == null) { + columnInfo = extendContainColumns.getItem(filterField); + } + if (columnInfo == null) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5085, false, filterField, getConfigId(), getNodeCode()); + } + if (StringUtils.isEmpty(columnInfo.getRefParallelTableCode())) { + parallelTableInfo = null; + } else { + parallelTableInfo = parallelTableInfos.get(columnInfo.getRefParallelTableCode()); + if (parallelTableInfo == null) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5086, false, columnInfo.getRefParallelTableCode(), getConfigId(), getNodeCode(), filterField); + } + } } - - if (condition != null && !condition.isEmpty()) { - sqlBuilder.append(" WHERE ").append(condition); + if (parallelTableInfo == null) { + dboId = getDboID(); + tableAlias = getTableAlias(); + } else { + dboId = parallelTableInfo.getDboId(); + tableAlias = getParallelTableAlias(parallelTableInfo); } - if (getLogicDeleteInfo().isEnableLogicDelete()) { - sqlBuilder.append(" AND ").append(getLogicDeleteInfo().getLabelId()).append(" = ?").append(parameters.size()); - parameters.add(buildParam(getLogicDeleteInfo().getLabelId(), GspDbDataType.Char, "0")); + + List tableNames = getTableNamesByDboId(dboId, annual); + int count = 0; + for (String tableName : tableNames) { + ArrayList parameters = new ArrayList(); + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append("SELECT COUNT(1) FROM ").append(tableName).append(" ").append(tableAlias); + + String condition = ""; + if (filter != null && filter.getFilterConditions() != null && !filter.getFilterConditions().isEmpty()) { + // 使用现有的buildWhereCondition方法来构建过滤条件 + condition = buildWhereCondition(filter.getFilterConditions(), parameters, null); + } + + if (!StringUtils.isEmpty(condition)) { + sqlBuilder.append(" WHERE ").append(condition); + } + if (getLogicDeleteInfo().isEnableLogicDelete()) { + sqlBuilder.append(" AND ").append(getLogicDeleteInfo().getLabelId()).append(" = ?").append(parameters.size()); + parameters.add(buildParam(getLogicDeleteInfo().getLabelId(), GspDbDataType.Char, "0")); + } + try { + Query query = buildQueryManager(sqlBuilder.toString(), parameters); + count += Integer.parseInt(query.getResultList().get(0).toString()); + } catch (Exception ex) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5073, ex, ExceptionLevel.Error, false, tableName); + } } - try { - Query query = buildQueryManager(sqlBuilder.toString(), parameters); - return Integer.parseInt(query.getResultList().get(0).toString()); - } catch (Exception ex) { - throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5073, ex, ExceptionLevel.Error, false, tableName); + return count; + } + + /** + * 获取DBO对应的表名。当annual=false,仅获取当前年度的表;当annual=true,获取所有年度的分表。 + * + * @param dboId 数据库对象ID + * @param annual 是否只查询当前年度。是:只查询当前年度表,否:检查所有分表 + * @return 表名列表 + */ + private List getTableNamesByDboId(String dboId, boolean annual) { + if (annual) { + HashMap varMap = getVariables(); + HashMap filterVarMap = new HashMap<>(); + if (varMap != null && !varMap.isEmpty()) { + for (Map.Entry entry : varMap.entrySet()) { + String dimKey = entry.getKey(); + String value = entry.getValue(); + if (!io.iec.edp.caf.commons.utils.StringUtils.isEmpty(value)) { + if (dimKey != null && (dimKey.equalsIgnoreCase("FIYear") || dimKey.equalsIgnoreCase("YYMM") || dimKey.equalsIgnoreCase("YYYY"))) { + // 针对默认的表策略,检查value是否为整数格式,如果不是则跳过处理 + if (!value.matches("\\d+")) { + continue; + } + } + filterVarMap.put(dimKey, value); + } else { + if (dimKey != null && (dimKey.equalsIgnoreCase("YYYY"))) { + // 电子档案是自然年度,YYYY维度值为空的情况下会查不带年度的历史表(表结构一开始是非年度表,后来改成年度表,与财务年度的规则不一致) + filterVarMap.put(dimKey, value); + } + } + } + } + return Collections.singletonList(getDboService().getTableNameWithDimensionValue(dboId, filterVarMap)); + } else { + return getDboService().getTableNamesWithDimensionValues(dboId, null); } } @@ -4293,4 +4337,53 @@ public abstract class EntityRelationalAdaptor extends BaseEntityAdaptor { return "0"; return this.getVars().getOrDefault("SRID", "0"); } + + /** + * 初始化平行表信息 + */ + protected final void initParallelTableInfos(GspBizEntityObject bizEntityObject) { + if (bizEntityObject.getParallelTableCollection() == null || bizEntityObject.getParallelTableCollection().isEmpty()) { + return; + } + for (ParallelTable parallelTable : bizEntityObject.getParallelTableCollection()) { + this.parallelTableMap.put(parallelTable.getID(), parallelTable); + + DatabaseObjectTableCore parallelTableDbo = getDbo(parallelTable.getRefDboID()); + this.parallelTableDboInfos.put(parallelTable.getID(), parallelTableDbo); + + ParallelTableInfo parallelTableInfo = new ParallelTableInfo(); + parallelTableInfo.setParallelTableCode(parallelTable.getCode()); + parallelTableInfo.setDboId(parallelTable.getRefDboID()); + String tableCode = parallelTableDbo.getCode(); + parallelTableInfo.setTableCode(tableCode); + DatabaseObjectColumn idColumn = parallelTableDbo.getColumnById(parallelTable.getPrimaryKey()); + parallelTableInfo.setPrimaryKeyCode(idColumn.getCode()); + + if (org.apache.commons.lang3.StringUtils.isNotEmpty(parallelTable.getParentID())) { + DatabaseObjectColumn parentIdColumn = parallelTableDbo.getColumnById(parallelTable.getParentID()); + if (parentIdColumn == null) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5083, parallelTable.getCode(), parallelTable.getParentID()); + } + parallelTableInfo.setParentIdCode(parentIdColumn.getCode()); + } + + this.parallelTableInfos.put(parallelTable.getCode(), parallelTableInfo); + } + } + + protected final ParallelTable getParallelTable(String parallelTableId) { + return this.parallelTableMap.get(parallelTableId); + } + + protected final DatabaseObjectTableCore getParallelTableRefDbo(String parallelTableId) { + return this.parallelTableDboInfos.get(parallelTableId); + } + + protected final ParallelTableInfo getParallelTableInfo(String parallelTableCode) { + return this.parallelTableInfos.get(parallelTableCode); + } + + private DatabaseObjectTableCore getDbo(String parallelTableId) { + return (DatabaseObjectTableCore) BefRtBeanUtil.getDboRtService().getDatabaseObject(parallelTableId); + } } diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/EntityRelationalReposAdaptor.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/EntityRelationalReposAdaptor.java index 22dfa46e..633ffb2e 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/EntityRelationalReposAdaptor.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/EntityRelationalReposAdaptor.java @@ -16,14 +16,17 @@ package com.inspur.edp.cef.repository.adaptoritem; +import com.inspur.edp.bef.bizentity.GspBizEntityObject; +import com.inspur.edp.bef.bizentity.GspBusinessEntity; +import com.inspur.edp.bef.spi.entity.builtinimpls.BefEntityResInfoImpl; import com.inspur.edp.cef.api.RefObject; import com.inspur.edp.cef.api.repository.DbParameter; -import com.inspur.edp.cef.api.repository.GspDbDataType; import com.inspur.edp.cef.api.repository.GspDbType; import com.inspur.edp.cef.api.repository.ITypeTransProcesser; import com.inspur.edp.cef.api.repository.RefColumnInfo; import com.inspur.edp.cef.api.repository.TableNameRefContext; import com.inspur.edp.cef.api.repository.readerWriter.ICefReader; +import com.inspur.edp.cef.designtime.api.util.MetadataUtil; import com.inspur.edp.cef.entity.condition.EntityFilter; import com.inspur.edp.cef.entity.condition.ExpressCompareType; import com.inspur.edp.cef.entity.condition.ExpressRelationType; @@ -33,13 +36,10 @@ import com.inspur.edp.cef.entity.condition.SortCondition; import com.inspur.edp.cef.entity.dependenceTemp.DataValidator; import com.inspur.edp.cef.entity.entity.ICefData; import com.inspur.edp.cef.entity.entity.IEntityData; -import com.inspur.edp.cef.entity.entity.IMultiLanguageData; -import com.inspur.edp.cef.entity.i18n.MultiLanguageInfo; import com.inspur.edp.cef.entity.repository.AssoVariable; import com.inspur.edp.cef.entity.repository.DataSaveParameter; import com.inspur.edp.cef.repository.adaptor.EntityRelationalAdaptor; import com.inspur.edp.cef.repository.adaptor.KeyWordsManager; -import com.inspur.edp.cef.repository.adaptor.MultiLangColumnInfo; import com.inspur.edp.cef.repository.adaptor.TableNameInfo; import com.inspur.edp.cef.repository.adaptoritem.dbprocessor.DbProcessor; import com.inspur.edp.cef.repository.adaptoritem.sqlsnippetprocessor.SqlGeneratorFactory; @@ -62,7 +62,7 @@ import com.inspur.edp.cef.spi.entity.info.propertyinfo.UdtPropertyInfo; import com.inspur.edp.cef.spi.entity.resourceInfo.builinImpls.CefEntityResInfoImpl; import com.inspur.edp.cef.spi.jsonser.base.StringUtils; import com.inspur.edp.cef.spi.repository.ParallelTableInfo; -import io.iec.edp.caf.boot.context.CAFContext; +import com.inspur.edp.lcm.metadata.api.entity.GspMetadata; import io.iec.edp.caf.commons.exception.ExceptionLevel; import javax.persistence.Query; @@ -72,18 +72,16 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Objects; /** * 据说生成型从此类继承 */ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdaptor { - private CefEntityResInfoImpl entityResInfo; - private EntityDac entityDac; + private final EntityDac entityDac; private List adaptorItemList; - private DbColumnInfoCollection tempContainColumns = new DbColumnInfoCollection(); - private List extendAssociations = new ArrayList<>(); + private final DbColumnInfoCollection tempContainColumns = new DbColumnInfoCollection(); + private final List extendAssociations = new ArrayList<>(); //是关联进入,还是直接进入 并发下构造的关联columninfo 别名可能不正确 private boolean isInitColumn = true; @@ -101,6 +99,19 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt } public EntityRelationalReposAdaptor(boolean init, EntityDac entityDac, CefEntityResInfoImpl entityResInfo, String tableAlias) { + this(init, entityDac, entityResInfo, tableAlias, false); + } + + /** + * 供包含平行表的业务实体对象生成的代码调用的构造方法 + * + * @param init 解析传false,生成:true(见EntityRelationalAdaptor构造方法参数说明) + * @param entityDac EntityDac + * @param entityResInfo 对象实体资源信息 + * @param tableAlias 表别名 + * @param isContainsParallelTable 是否包含平行表 + */ + public EntityRelationalReposAdaptor(boolean init, EntityDac entityDac, CefEntityResInfoImpl entityResInfo, String tableAlias, boolean isContainsParallelTable) { this(init, entityDac); this.entityResInfo = entityResInfo; this.tableAlias = tableAlias; @@ -113,9 +124,41 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt } } } + + if (isContainsParallelTable && entityResInfo instanceof BefEntityResInfoImpl) { + // 当包含平行表时,需要初始化元数据。该步骤要在new BaseAdaptorItem之前执行,因为BaseAdaptorItem的构造方法中会初始化列信息,用到了元数据 + BefEntityResInfoImpl befEntityResInfo = (BefEntityResInfoImpl) entityResInfo; + if (befEntityResInfo.getBizEntityObject() == null) { + // 如果需要元数据参与初始化,且元数据未赋值,则给entityRefInfo赋值元数据 + initMetadata(befEntityResInfo); + } + // 初始化平行表 + initParallelTableInfos(befEntityResInfo.getBizEntityObject()); + } + addAdaptorItem(new BaseAdaptorItem(this, 1, this.getVars())); } + /** + * 初始化entityResInfo的元数据信息(如平行表就必须初始化元数据) + */ + private void initMetadata(BefEntityResInfoImpl entityResInfo) { + String beId = entityResInfo.getModelResInfo().getMetaDataId(); + GspMetadata metadata = MetadataUtil.getCustomRTMetadata(beId); + if (metadata == null) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5087, false, beId, entityResInfo.getEntityCode()); + } + + GspBusinessEntity be = (GspBusinessEntity) metadata.getContent(); + GspBizEntityObject beNode = be.getNode(getNodeCode()); + if (beNode == null) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5088, false, beId, entityResInfo.getEntityCode(), getNodeCode()); + } + + entityResInfo.setBusinessEntity(be); + entityResInfo.setBizEntityObject(beNode); + } + public DbProcessor getDbProcessor() { return getSqlSnippetProcessor().getDbProcessor(); } @@ -124,7 +167,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return getSqlSnippetCache().getSqlSnippetProcessor(entityDac.getGspDbtype().toString(), this); } - protected String getNodeCode() { return entityDac.getNodeCode(); } @@ -200,20 +242,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return this.entityDac; } - private String buildDefaultOrderByCondition(ArrayList sortConditions) { - StringBuilder orderByBuilder = new StringBuilder(); - if (sortConditions != null && sortConditions.size() > 0) { - for (SortCondition orderByItem : sortConditions) { - if (orderByBuilder.toString() != null && !orderByBuilder.toString().equals("")) { - orderByBuilder.append(", "); - } - String filedName = trans2DbColumnWithAlias(orderByItem.getSortField()); - orderByBuilder.append(orderByItem.trans2Sql(filedName)); - } - } - return String.valueOf(orderByBuilder); - } - public GspDbType getGspDbType() { return entityDac.getGspDbtype(); } @@ -349,8 +377,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt /** * 生成型没有加UDT字段不能为多语的判断 - * - * @return */ protected DbColumnInfoCollection getMultiLanguageColumnInfos() { //region TODO multiLanguageColumnInfos可以缓存起来,没必要每次都new @@ -367,10 +393,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt // region Delete protected final String innerGetDeleteSql() { - return innerGetDeleteSql(""); - } - - protected final String innerGetDeleteSql(String parallelTableCode) { if (!getSqlSnippetCache().getInnerDeleteSqlMap().containsKey(entityDac.getGspDbtype().toString())) { String innerGetDeleteSql = getSqlSnippetProcessor().innerGetDeleteSql(); getSqlSnippetCache().getInnerDeleteSqlMap().put(entityDac.getGspDbtype().toString(), innerGetDeleteSql); @@ -379,6 +401,19 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return getSqlSnippetCache().getInnerDeleteSqlMap().get(entityDac.getGspDbtype().toString()); } + protected final String innerGetDeleteSql(String parallelTableCode) { + if (StringUtils.isEmpty(parallelTableCode)) { + return innerGetDeleteSql(); + } else { + ParallelTableInfo parallelTableInfo = getParallelTableInfo(parallelTableCode); + String parallelTableAlias = getParallelTableAlias(parallelTableInfo); + + String deleteSql = getSqlSnippetProcessor().getSqlGenerator().getDeleteSql(); + deleteSql = String.format(deleteSql, "@TableName@", parallelTableAlias); + return deleteSql; + } + } + //delete from xxx protected final String getDeleteSqlBatch() { if (!getSqlSnippetCache().getDeleteSqlBatchMap().containsKey(entityDac.getGspDbtype().toString())) { @@ -412,112 +447,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return getSqlSnippetCache().getInnerInsertSqlMap().get(entityDac.getGspDbtype().toString()); } - protected final String innerGetInsertSql(String parallelTableCode) { - if (!getSqlSnippetCache().getInnerInsertSqlMap().containsKey(entityDac.getGspDbtype().toString())) { - String sql = getSqlSnippetProcessor().innerGetInsertSql(); - getSqlSnippetCache().getInnerInsertSqlMap().put(entityDac.getGspDbtype().toString(), sql); - return sql; - } - return getSqlSnippetCache().getInnerInsertSqlMap().get(entityDac.getGspDbtype().toString()); - } - - protected String getInsertFields() { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < adaptorItemList.size(); i++) { - if (i > 0) { - sb.append(",").append(adaptorItemList.get(i).getInsertFields(isMultiData)); - } else { - sb.append(adaptorItemList.get(i).getInsertFields(isMultiData)); - } - } - return sb.toString(); - } - - private String getInsertFields(DbColumnInfoCollection columns) { - StringBuilder fields = new StringBuilder(); - boolean contain = false; - for (DbColumnInfo containColumn : columns) { - if (containColumn.getIsAssociateRefElement()) { - continue; - } - if (!containColumn.getIsPersistent()) { - continue; - } - if (contain) - fields.append(","); - String dbCol = containColumn.getDbColumnName(); - if (containColumn.getIsMultiLang()) { - dbCol = dbCol + "@Language@"; - } - fields.append(dbCol); - contain = true; - } - return fields.toString(); - } - - protected String getInsertValues(RefObject valuesCount) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < adaptorItemList.size(); i++) { - if (i > 0) { - sb.append(",").append(adaptorItemList.get(i).getInsertValues(isMultiData, valuesCount)); - } else { - sb.append(adaptorItemList.get(i).getInsertValues(isMultiData, valuesCount)); - } - } - return sb.toString(); - } - - private String getInsertValues(DbColumnInfoCollection columns, RefObject valuesCount) { - StringBuilder values = new StringBuilder(); - for (DbColumnInfo containColumn : columns) { - if (containColumn.getIsAssociateRefElement()) { - continue; - } - if (!containColumn.getIsPersistent()) { - continue; - } - if (valuesCount.argvalue > 0) - values.append(","); - - if (containColumn.getColumnType() == GspDbDataType.Geometry) { - //获取geometry字段的参数化sql - values.append(getGeometryParameterizedSql()); - } else { - values.append("?"); - } - valuesCount.argvalue = valuesCount.argvalue + 1; - } - return values.toString(); - } - - - private String getInsertSql(RefObject fieldsCount) { - return getInnerInsertSql(new RefObject(0)).replace("@TableName@", innerGetTableName()); - } - - private String getInnerInsertSql(RefObject fieldsCount) { - Objects.requireNonNull(fieldsCount); - - String insertFields = getInsertFields(); - String insertValues = getInsertValues(fieldsCount); - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder = stringBuilder.append("INSERT INTO @TableName@ (").append(insertFields); - if (extendContainColumns != null && extendContainColumns.getCount() > 0) { - String extInsertFields = getInsertFields(extendContainColumns); - //此处判断处理扩展字段全部非持久化,不拼接, - if (extInsertFields.length() > 0) { - stringBuilder.append(",").append(getInsertFields(extendContainColumns)); - } - } - stringBuilder.append(" ) Values ( ").append(insertValues); - if (extendContainColumns != null && extendContainColumns.getCount() > 0) { - stringBuilder.append(getInsertValues(extendContainColumns, fieldsCount)); - } - stringBuilder.append(")"); - return stringBuilder.toString(); - } - @Override public int insert(IEntityData data, DataSaveParameter par, DacSaveContext batcher) throws SQLException { DataValidator.checkForNullReference(data, "data"); @@ -525,132 +454,16 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt if (filter != null && !filter.isEmpty()) { throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5039, false, data.getID()); } - //data默认都是实现IMultiLanguageData接口,主要是提交的变更中是否包含多语结构,形成多语信息 - isMultiData = (data instanceof IMultiLanguageData) && !((IMultiLanguageData) data) - .getMultiLanguageInfos().isEmpty(); - String sql = getInsertSql(new RefObject<>(0)); - batcher.getJDBCExecutor().addBatch(this.getNodeCode(), formatFiscalAndMultiLang(sql, batcher), getInserParameters(data)); - return 1; - } - - private List getInserParameters(IEntityData data) { - ArrayList dbPars = new ArrayList(); - if (isMultiData) { - buildInsertParamters_MultiLanguage(data, dbPars); - } else { - buildInsertParamters(data, dbPars); - } - if (extendContainColumns != null && extendContainColumns.getCount() > 0) - buildEXtendInsertParamters(data, dbPars); - return dbPars; - } - - // @Override - protected void buildInsertParamters(IEntityData entityData, ArrayList dbPars) { - //getBaseDict中的ColumnInfo和dict中的不一致,很多属性可能没有初始化,比如processor - for (DbColumnInfo columnInfo : getContainColumns().getBaseDict().values()) { - try { - if (columnInfo.getIsAssociateRefElement()) { - continue; - } - if (columnInfo.isVirtual()) { - continue; - } - //todo 后续重构需要注意:旧的生成型Adaptor重写了getPersistenceValue,且DbColumnInfo也不包含getDataTypePropertyInfo - Object value = this.getPersistenceValue(columnInfo.getColumnName(), entityData); - Object transValue = value == null ? null : getPropertyChangeValue(columnInfo.getColumnName(), value); - dbPars.add(buildParam(columnInfo, transValue)); - } catch (Exception e) { - throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5082, e, columnInfo.getColumnName(), getTableAlias()); - } - } + return super.insert(data, par, batcher); } public final DbParameter buildParam(String columnName, DbColumnInfo columnInfo, Object paramValue) { - return FilterUtil.buildParam(columnName, columnInfo.getColumnType(), columnInfo, paramValue); + return FilterUtil.buildParam(columnName, columnInfo.getColumnType(), paramValue); } public final DbParameter buildParam(DbColumnInfo columnInfo, Object paramValue) { - return FilterUtil.buildParam(columnInfo.getColumnName(), columnInfo.getColumnType(), columnInfo, paramValue); - } - - private void buildInsertParamters_MultiLanguage(IEntityData entityData, - ArrayList dbPars) { - insertMultiIndexMap = getBaseAdaptorItem().getInsertMultiIndexMap(); - if (insertMultiIndexMap.isEmpty()) { - throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5015); - } - IMultiLanguageData multiLanguageData = - entityData instanceof IMultiLanguageData ? (IMultiLanguageData) entityData : null; - for (Map.Entry entry : insertMultiIndexMap.entrySet()) { - String columnName = entry.getValue(); - // 多语 - if (getMultiLanguageAlias().containsKey(columnName)) { - MultiLangColumnInfo multiLangColumnInfo = getMultiLanguageAlias().get(columnName); - DbColumnInfo columnInfo = getContainColumns() - .getItem(multiLangColumnInfo.getColumnName()); - String language = multiLangColumnInfo.getLanguageInfo().getCode(); - String columnNameWithToken = multiLangColumnInfo.getColumnName() - + MultiLanguageInfo.MULTILANGUAGETOKEN; - if (multiLanguageData != null && multiLanguageData.getMultiLanguageInfos() - .containsKey(columnNameWithToken)) { - Object value = multiLanguageData.getMultiLanguageInfos() - .get(columnNameWithToken) - .getPropValueMap().get(language); - if (columnInfo.getIsUdtElement()) - value = getPropertyChangeValue(multiLangColumnInfo.getColumnName(), value); - dbPars.add( - buildParam(columnName, columnInfo, - value)); - continue; - } - if (!language.equals(CAFContext.current.getLanguage())) { - dbPars.add( - buildParam(columnName, columnInfo.getColumnType(), - null)); - continue; - } - // 若为当前语言,需到data中对应属性中取数,走下面的普通分支 - columnName = multiLangColumnInfo.getColumnName(); - } - // 普通 - Object value = this.getPersistenceValue(columnName, entityData); - Object transValue = - value == null ? null : getPropertyChangeValue(columnName, value); - DbColumnInfo columnInfo = getContainColumns().getItem(columnName); - dbPars.add( - buildParam(columnInfo, transValue)); - } - } - - private void buildEXtendInsertParamters(IEntityData entityData, ArrayList dbPars) { - for (DbColumnInfo columnInfo : extendContainColumns) { - if (columnInfo.getIsAssociateRefElement()) { - continue; - } - if (!columnInfo.getIsPersistent()) { - continue; - } - Object transValue = null; - - if (columnInfo.getIsUdtElement()) { - for (AbstractDataAdapterExtendInfo info : getDataAdapterExtendInfos()) { - transValue = info.getUdtInsertValue(columnInfo.getColumnName(), columnInfo.getBelongElementLabel(), entityData); - if (transValue != null) - break; - } - } else { - Object value = entityData.getValue(columnInfo.getColumnName()); - try { - transValue = columnInfo.getTypeTransProcesser().transType(value); - } catch (Exception e) { - throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5082, e, columnInfo.getColumnName(), getTableAlias()); - } - } - - dbPars.add(buildParam(columnInfo.getColumnName(), columnInfo.getColumnType(), transValue)); - } + return FilterUtil.buildParam(columnInfo.getColumnName(), columnInfo.getColumnType(), paramValue); } //endregion @@ -664,10 +477,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return getSqlSnippetCache().getInnerModifySqlMap().get(entityDac.getGspDbtype().toString()); } - private String getModifySql() { - return innerGetModifySql().replace("@TableName@", innerGetTableName()); - } - protected Object getPropertyChangeValue(String key, Object value) { DbColumnInfo dbColumnInfo = getContainColumns().getItem(key); return getPropertyChangeValue(dbColumnInfo, value); @@ -699,7 +508,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt * * @param filedName 字段名 * @param ignoreAlias 是否忽略大小写 - * @return */ protected final String trans2DbColumnWithAlias(String filedName, boolean ignoreAlias) { filedName = DatabaseUtil.getColumnName(filedName); @@ -741,7 +549,7 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt } String dbName = ignoreAlias ? columnInfo.getDbColumnName() - : getWrappedTableAlias() + "." + columnInfo.getDbColumnName(); + : getTableAliasByColumnInfo(columnInfo) + "." + columnInfo.getDbColumnName(); if (columnInfo.getIsMultiLang()) { dbName = dbName + "@Language@"; } @@ -760,8 +568,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt /** * 替换sql:SELECT %1$s FROM %2$s WHERE mainTable.id = %3$s - * - * @return */ protected final String getGetDataByIdSql() { // adaptor.getContainColumns().getPrimaryKey().getDbColumnName() @@ -783,10 +589,6 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt @Override public final String getParentJoin() { - return getParentJoin(null); - } - - public final String getParentJoin(ParallelTableInfo parallelTableInfo) { if (!getSqlSnippetCache().getParentJoinMap().containsKey(entityDac.getGspDbtype().toString())) { String sql = getSqlSnippetProcessor().parentJoin(); getSqlSnippetCache().getParentJoinMap().put(entityDac.getGspDbtype().toString(), sql); @@ -795,6 +597,14 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return getSqlSnippetCache().getParentJoinMap().get(entityDac.getGspDbtype().toString()); } + protected final String getParentJoin(ParallelTableInfo parallelTableInfo) { + if (parallelTableInfo == null) { + return getParentJoin(); + } else { + return getSqlSnippetProcessor().parentJoin(parallelTableInfo); + } + } + @Override protected Query buildQueryManager(String sqlText, List parameters) { Query query = getDbProcessor().buildQueryManager(this.getEntityManager(), sqlText, parameters); @@ -812,7 +622,8 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt } @Override - public String getTableNameByColumns(HashMap columns, String keyColumnName, RefObject keyDbColumnName, ArrayList tableAlias) { + public String getTableNameByColumns(HashMap columns, String + keyColumnName, RefObject keyDbColumnName, ArrayList tableAlias) { //跟之前一致。 ArrayList keys1 = new ArrayList<>(); for (String key : columns.keySet() @@ -820,31 +631,26 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt keys1.add(key); } ArrayList associations = getAssociationInfos(keys1); - String tableName = getTableNamesWithAssociationInfo(associations, tableAlias); + TableNameInfo tableNameInfo = getTableNamesWithAssociationInfoNew(associations, tableAlias); keyDbColumnName.argvalue = trans2DbColumnWithAlias(keyColumnName); String[] keys = keys1.toArray(new String[]{}); for (int i = 0; i < keys.length; i++) { columns.put(keys[i], trans2DbColumnWithAlias(keys[i])); } - return tableName; + return tableNameInfo.getFullTableName(); } /** * 要求关联字段的拼接,在这里进行 把带出字段放在后面。。 - * - * @param columns - * @param keyColumnName - * @param keyDbColumnName - * @param tableAlias - * @return */ @Override - public String getTableNameByRefColumns(HashMap columns, String keyColumnName, RefObject keyDbColumnName, ArrayList tableAlias) { + public String getTableNameByRefColumns(HashMap columns, String + keyColumnName, RefObject keyDbColumnName, ArrayList tableAlias) { //跟之前一致。 isInitColumn = false; ArrayList associations = getAssociationInfos(columns); - String tableName = getTableNamesWithAssociationInfo(associations, tableAlias); + TableNameInfo tableNameInfo = getTableNamesWithAssociationInfoNew(associations, tableAlias); keyDbColumnName.argvalue = trans2DbColumnWithAlias(keyColumnName); List keys = new ArrayList(); @@ -866,7 +672,7 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt columns.remove(keys.get(i)); } } - return tableName; + return tableNameInfo.getFullTableName(); } public String getTableNameByRefColumns(TableNameRefContext tableNameRefContext) { @@ -875,7 +681,7 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt } isInitColumn = false; ArrayList associations = getAssociationInfos(tableNameRefContext.getColumns()); - String tableName = getTableNamesWithAssociationInfo(associations, tableNameRefContext.getTableAlias()); + TableNameInfo tableNameInfo = getTableNamesWithAssociationInfoNew(associations, tableNameRefContext.getTableAlias()); tableNameRefContext.getKeyDbColumnName().argvalue = trans2DbColumnWithAlias(tableNameRefContext.getKeyColumnName()); List keys = new ArrayList(); @@ -898,15 +704,12 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt tableNameRefContext.getColumns().remove(keys.get(i)); } } - return tableName; + return tableNameInfo.getFullTableName(); } /** * 给定的列名在当前节点是否存在 * 兼容部分场景查询报错的问题 - * - * @param filedName - * @return */ private boolean isColumnExists(String filedName) { if (!(getContainColumns().contains(filedName) || tempContainColumns.contains(filedName)) && (extendContainColumns == null || !extendContainColumns.contains(filedName))) { @@ -946,7 +749,8 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt } - private String getTableNamesWithAssociationInfo(ArrayList associations, ArrayList tableAlias) { + private TableNameInfo getTableNamesWithAssociationInfoNew + (ArrayList associations, ArrayList tableAlias) { // if (tableAlias == null || tableAlias.size() == 0) { tableAlias = new ArrayList(); @@ -955,17 +759,20 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt if (StringUtils.isNullOrEmpty(this.originTableAlias)) { this.originTableAlias = getTableAlias(); } - setTableAlias(getTableAlias4Association(tableAlias)); + Map tableAliasMap = getTableAliasWithParallel4Association(tableAlias); + setTableAliasWithParallelTable(tableAliasMap); } if (associations == null || associations.size() < 1) { - return getTableName(); + TableNameInfo tableNameInfo = new TableNameInfo(); + tableNameInfo.setMainTableName(getTableNameWithParallelTable()); + return tableNameInfo; } - TableNameInfo tableNameInfo = buildTableNamesWithAssociationInfoNew(associations, tableAlias, getTableName()); - return tableNameInfo.getFullTableName(); + return buildTableNamesWithAssociationInfoNew(associations, tableAlias, getTableNameWithParallelTable()); } @Override - protected TableNameInfo buildTableNamesWithAssociationInfoNew(ArrayList associations, ArrayList tableAlias, String baseTableName) { + protected TableNameInfo buildTableNamesWithAssociationInfoNew + (ArrayList associations, ArrayList tableAlias, String baseTableName) { TableNameInfo tableNameInfo = new TableNameInfo(); StringBuilder queryTables = new StringBuilder(); tableNameInfo.setMainTableName(baseTableName); @@ -1038,7 +845,8 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return tableNameInfo; } - private void buildAssoCondi(StringBuilder queryTables, AssociationInfo associationInfo, String targetDbColumnName, String tableName) { + private void buildAssoCondi(StringBuilder queryTables, AssociationInfo associationInfo, String + targetDbColumnName, String tableName) { //todo 这个地方别名处理待验证,字段如果与数据库不一致? 前端直接用数据库的? if (associationInfo.getAssoConditions() != null && associationInfo.getAssoConditions().size() > 0) { String targetAlias = targetDbColumnName.substring(0, targetDbColumnName.indexOf(".")); @@ -1063,7 +871,8 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt return targetTableName; } - private String getCurrentAssoTableName(AssociationInfo associationInfo, ArrayList tableAlias, HashMap associationColumns) { + private String getCurrentAssoTableName(AssociationInfo + associationInfo, ArrayList tableAlias, HashMap associationColumns) { String currnetAlias = getTableAlias4Association(tableAlias); ArrayList associations = getAssociationInfos(associationColumns); // String tableName = buildTableNamesWithAssociationInfo(associations, tableAlias, innerGetTableName() + " " + currnetAlias); @@ -1113,7 +922,8 @@ public abstract class EntityRelationalReposAdaptor extends EntityRelationalAdapt tableAlias.add(getWrappedTableAlias()); } - protected void initAssociateColumnInfo(AssociationInfo associationInfo, HashMap associationColumns) { + protected void initAssociateColumnInfo(AssociationInfo + associationInfo, HashMap associationColumns) { for (Map.Entry refColumnItem : associationInfo.getRefColumns().entrySet()) { //这个地方也得加上 扩展字段集合? diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/ExtendAdaptorItem.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/ExtendAdaptorItem.java deleted file mode 100644 index cd8a1f5a..00000000 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/ExtendAdaptorItem.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright © OpenAtom Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.inspur.edp.cef.repository.adaptoritem; - -import com.inspur.edp.cef.api.RefObject; -import com.inspur.edp.cef.entity.condition.EntityFilter; - -import java.util.HashMap; -import java.util.List; - -public abstract class ExtendAdaptorItem extends AdaptorItem { - @Override - public String getQueryFields(EntityFilter entityFilter, HashMap mapping) { - boolean usePropertyFilter = false; - List filterProperties = null; - if (entityFilter != null && entityFilter.getFieldsFilter() != null && entityFilter.getFieldsFilter().isUseFieldsCondition()) { - usePropertyFilter = true; - filterProperties = entityFilter.getFieldsFilter().getFilterFields(); - } - return buildQueryFields(entityFilter, mapping); - } - - @Override - public String getInsertFields(boolean isMultiData) { - return getInsertFields(); - } - - @Override - protected String getInsertValues(boolean isMultiData, RefObject valuesCount) { - return getInsertValues(valuesCount); - } -} diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/sqlsnippetprocessor/SqlSnippetProcessor.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/sqlsnippetprocessor/SqlSnippetProcessor.java index 2a627df0..b3bf05a9 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/sqlsnippetprocessor/SqlSnippetProcessor.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/adaptoritem/sqlsnippetprocessor/SqlSnippetProcessor.java @@ -23,6 +23,7 @@ import com.inspur.edp.cef.repository.dbcolumninfo.DbColumnInfo; import com.inspur.edp.cef.repository.dbcolumninfo.DbColumnInfoCollection; import com.inspur.edp.cef.repository.sqlgenerator.ISqlGenerator; import com.inspur.edp.cef.spi.jsonser.base.StringUtils; +import com.inspur.edp.cef.spi.repository.ParallelTableInfo; public class SqlSnippetProcessor { DbProcessor dbProcessor; @@ -56,9 +57,12 @@ public class SqlSnippetProcessor { /** * JOIN @ParentTableName@ @ParentTableAlias@ ON childTable.parentId = @PrimaryID@ - * @return */ public String parentJoin() { + return parentJoin(null); + } + + public final String parentJoin(ParallelTableInfo parallelTableInfo) { if (isChild) { //JOIN @ParentTableName@ @ParentTableAlias@ ON childTable.parentId = @PrimaryID@ String joinSql = getSqlGenerator().getInnerJoinTableName(); @@ -70,13 +74,16 @@ public class SqlSnippetProcessor { break; } } - joinSql = joinSql.replace("@ParentID@", this.tableAlias + "." + parentID); + if (parallelTableInfo == null) { + joinSql = joinSql.replace("@ParentID@", this.tableAlias + "." + parentID); + } else { + joinSql = joinSql.replace("@ParentID@", parallelTableInfo.getParallelTableCode() + "." + parallelTableInfo.getParentIdCode()); + } return joinSql; } return ""; } - public String getQuerySql() { String querySql = getSqlGenerator().getQuerySql(); return querySql; diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/dbcolumninfo/ColumnInfoUtils.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/dbcolumninfo/ColumnInfoUtils.java index 75763284..4b64342e 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/dbcolumninfo/ColumnInfoUtils.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/dbcolumninfo/ColumnInfoUtils.java @@ -16,56 +16,64 @@ package com.inspur.edp.cef.repository.dbcolumninfo; +import com.inspur.edp.bef.bizentity.GspBizEntityElement; +import com.inspur.edp.bef.bizentity.GspBizEntityObject; +import com.inspur.edp.bef.bizentity.collection.ParallelTableCollection; +import com.inspur.edp.bef.bizentity.gspbusinessobject.ParallelTable; +import com.inspur.edp.bef.spi.entity.builtinimpls.BefEntityResInfoImpl; import com.inspur.edp.cef.api.repository.ITypeTransProcesser; import com.inspur.edp.cef.repository.adaptoritem.BaseAdaptorItem; +import com.inspur.edp.cef.repository.exception.CefRepositoryException; +import com.inspur.edp.cef.repository.exception.ExceptionCode; import com.inspur.edp.cef.repository.typetransprocesser.TypeTransProcessorFactory; -import com.inspur.edp.cef.repository.utils.StringUtil; -import com.inspur.edp.cef.spi.entity.info.propertyinfo.*; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.AssocationPropertyInfo; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.ComplexUdtPropertyInfo; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.DataTypePropertyInfo; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.DynamicSetPropertyInfo; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.EnumPropertyInfo; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.SimpleAssoUdtPropertyInfo; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.SimpleEnumUdtPropertyInfo; +import com.inspur.edp.cef.spi.entity.info.propertyinfo.UdtPropertyInfo; import com.inspur.edp.cef.spi.entity.resourceInfo.builinImpls.CefEntityResInfoImpl; import com.inspur.edp.cef.spi.jsonser.base.StringUtils; import java.util.Map; public final class ColumnInfoUtils { + /** + * 将属性信息转换成字段信息,仅生成型使用 + */ public static void convertPropertyInfoToColumnInfo(DataTypePropertyInfo propertyInfo, CefEntityResInfoImpl entityResInfo, BaseAdaptorItem adaptorItem) { - if (propertyInfo.getObjectInfo() != null && propertyInfo - .getObjectInfo() instanceof ComplexUdtPropertyInfo && (propertyInfo.getDbColumnName() == null || propertyInfo.getDbColumnName().equals(""))) { - ComplexUdtPropertyInfo complexUdtPropertyInfo = (ComplexUdtPropertyInfo) propertyInfo - .getObjectInfo(); + if (propertyInfo.getObjectInfo() != null + && propertyInfo.getObjectInfo() instanceof ComplexUdtPropertyInfo + && (propertyInfo.getDbColumnName() == null || propertyInfo.getDbColumnName().equals(""))) { + // 多值多列UDT + ComplexUdtPropertyInfo complexUdtPropertyInfo = (ComplexUdtPropertyInfo) propertyInfo.getObjectInfo(); - if (propertyInfo.getDbColumnName() != null && "".equals(propertyInfo.getDbColumnName()) == false) { - DbColumnInfo dbColumnInfo = new DbColumnInfo(propertyInfo.getPropertyName(), - propertyInfo.getDbColumnName(), - propertyInfo.getDbDataType(), propertyInfo.getLength(), propertyInfo.getPrecision(), - isPrimaryKey(propertyInfo, entityResInfo), false, propertyInfo.isMultiLaguange(), - isParentId(propertyInfo, entityResInfo, adaptorItem), isUdtElement(propertyInfo), - isAssociation(propertyInfo), isEnumElement(propertyInfo), - propertyInfo.getPropertyName(), getTypeProcessor(propertyInfo)); - dbColumnInfo.setDataTypePropertyInfo(propertyInfo); - adaptorItem - .addColumn(dbColumnInfo); - } else { - for (Map.Entry propertyInfoEntry : complexUdtPropertyInfo - .getPropertyInfos().entrySet()) { - DataTypePropertyInfo refDataTypePropertyInfo = propertyInfoEntry.getValue(); - ComplexUdtRefColumnInfo dbColumnInfo = new ComplexUdtRefColumnInfo(refDataTypePropertyInfo.getPropertyName(), - refDataTypePropertyInfo.getDbColumnName(), - refDataTypePropertyInfo.getDbDataType(), refDataTypePropertyInfo.getLength(), refDataTypePropertyInfo.getPrecision(), - isPrimaryKey(refDataTypePropertyInfo, entityResInfo), false, refDataTypePropertyInfo.isMultiLaguange(), - isParentId(refDataTypePropertyInfo, entityResInfo, adaptorItem), isUdtElement(refDataTypePropertyInfo), - isAssociation(refDataTypePropertyInfo), isEnumElement(refDataTypePropertyInfo), - propertyInfo.getPropertyName(), getTypeProcessor(refDataTypePropertyInfo)); - dbColumnInfo.setBelongUdtPropertyInfo(propertyInfo); - dbColumnInfo.setDataTypePropertyInfo(refDataTypePropertyInfo); - adaptorItem.addColumn(dbColumnInfo); - } + for (Map.Entry propertyInfoEntry : complexUdtPropertyInfo + .getPropertyInfos().entrySet()) { + DataTypePropertyInfo refDataTypePropertyInfo = propertyInfoEntry.getValue(); + ComplexUdtRefColumnInfo dbColumnInfo = new ComplexUdtRefColumnInfo(refDataTypePropertyInfo.getPropertyName(), + refDataTypePropertyInfo.getDbColumnName(), + refDataTypePropertyInfo.getDbDataType(), refDataTypePropertyInfo.getLength(), refDataTypePropertyInfo.getPrecision(), + isPrimaryKey(refDataTypePropertyInfo, entityResInfo), false, refDataTypePropertyInfo.isMultiLaguange(), + isParentId(refDataTypePropertyInfo, entityResInfo, adaptorItem), isUdtElement(refDataTypePropertyInfo), + isAssociation(refDataTypePropertyInfo), isEnumElement(refDataTypePropertyInfo), + propertyInfo.getPropertyName(), getTypeProcessor(refDataTypePropertyInfo)); + dbColumnInfo.setBelongUdtPropertyInfo(propertyInfo); + dbColumnInfo.setDataTypePropertyInfo(refDataTypePropertyInfo); + setParallelInfo(dbColumnInfo, propertyInfo, entityResInfo, adaptorItem); + adaptorItem.addColumn(dbColumnInfo); } } else if (propertyInfo.getObjectInfo() != null && propertyInfo.getObjectInfo() instanceof DynamicSetPropertyInfo) + // 动态属性 return; else if (propertyInfo.getDbColumnName() == null || "".equals(propertyInfo.getDbColumnName())) { + // 虚拟字段 return; } else { + // 单值单列字段,多值单列字段,其他非UDT、非虚拟、非动态属性字段 DbColumnInfo dbColumnInfo = new DbColumnInfo(propertyInfo.getPropertyName(), propertyInfo.getDbColumnName(), propertyInfo.getDbDataType(), propertyInfo.getLength(), propertyInfo.getPrecision(), @@ -74,11 +82,51 @@ public final class ColumnInfoUtils { isAssociation(propertyInfo), isEnumElement(propertyInfo), propertyInfo.getPropertyName(), getTypeProcessor(propertyInfo)); dbColumnInfo.setDataTypePropertyInfo(propertyInfo); + setParallelInfo(dbColumnInfo, propertyInfo, entityResInfo, adaptorItem); adaptorItem.addColumn(dbColumnInfo); } } + /** + * 设置字段的平行表信息 + */ + private static void setParallelInfo(DbColumnInfo dbColumnInfo, DataTypePropertyInfo propertyInfo, CefEntityResInfoImpl entityResInfo, BaseAdaptorItem adaptorItem) { + if (!(entityResInfo instanceof BefEntityResInfoImpl)) { + return; + } + BefEntityResInfoImpl befEntityResInfo = (BefEntityResInfoImpl) entityResInfo; + GspBizEntityObject bizEntityObject = befEntityResInfo.getBizEntityObject(); + if (bizEntityObject == null) { + // 非平行表,不初始化业务实体对象 + return; + } + String labelId = propertyInfo.getPropertyName(); + GspBizEntityElement element = (GspBizEntityElement) bizEntityObject.getElementByLabelId(labelId); + if (element == null) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5089, false, labelId, entityResInfo.getEntityId(), entityResInfo.getEntityCode(), bizEntityObject.getCode()); + } + String parallelId = element.getRefParallelTableId(); + if (StringUtils.isEmpty(parallelId)) { + // 非平行表字段不处理 + return; + } + + ParallelTableCollection parallelTableCollection = bizEntityObject.getParallelTableCollection(); + if (parallelTableCollection == null) { + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5090, false, entityResInfo.getEntityId(), entityResInfo.getEntityCode(), bizEntityObject.getCode()); + } + for (ParallelTable parallelTable : parallelTableCollection) { + if (parallelTable.getID().equals(parallelId)) { + dbColumnInfo.setParalleTlablelColumn(true); + dbColumnInfo.setRefParallelTableCode(parallelTable.getCode()); + dbColumnInfo.setRefParallelTableName(parallelTable.getName()); + return; + } + } + throw new CefRepositoryException(ExceptionCode.CEF_RUNTIME_5091, false, parallelId, entityResInfo.getEntityId(), entityResInfo.getEntityCode(), bizEntityObject.getCode()); + } + /** * 获取虚拟DbColumnInfo * diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/exception/ExceptionCode.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/exception/ExceptionCode.java index 7b92f63f..02c55e4c 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/exception/ExceptionCode.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/exception/ExceptionCode.java @@ -116,4 +116,41 @@ public class ExceptionCode { */ public static final String CEF_RUNTIME_5082 = "CEF_RUNTIME_5082"; + /** + * 未在dbo上找到平行表:{0}的ParentId列:{1}信息,请检查 + */ + public static final String CEF_RUNTIME_5083 = "CEF_RUNTIME_5083"; + /** + * 仅支持单个查询条件,当前查询条件为:{0}。业务实体ConfigId:{1},实体对象编号:{2} + */ + public static final String CEF_RUNTIME_5084 = "CEF_RUNTIME_5084"; + /** + * 未从业务实体元数据上找到字段:{0},请检查业务实体元数据是否已部署。业务实体ConfigId:{1},实体对象编号:{2} + */ + public static final String CEF_RUNTIME_5085 = "CEF_RUNTIME_5085"; + /** + * 未从业务实体元数据上找到平行表:{0},请检查业务实体元数据是否已部署。业务实体ConfigId:{1},实体对象编号:{2},引用字段:{3} + */ + public static final String CEF_RUNTIME_5086 = "CEF_RUNTIME_5086"; + /** + * 未获取到业务实体元数据,请确认相关元数据部署物是否已部署到运行时环境中。业务实体元数据ID:{0},业务实体元数据编号:{1} + */ + public static final String CEF_RUNTIME_5087 = "CEF_RUNTIME_5087"; + /** + * 业务实体元数据中未找到节点,请确认运行时环境中部署的元数据是否最新。业务实体元数据ID:{0},业务实体元数据编号:{1},业务实体节点编号:{2} + */ + public static final String CEF_RUNTIME_5088 = "CEF_RUNTIME_5088"; + /** + * 未从业务实体元数据上找到字段:{0},请检查业务实体元数据是否已部署。业务实体ID:{1},业务实体编号:{2},实体对象编号:{3} + */ + public static final String CEF_RUNTIME_5089 = "CEF_RUNTIME_5089"; + /** + * 未从业务实体元数据上找到平行表集合,请检查业务实体元数据是否已部署。业务实体ID:{0},业务实体编号:{1},实体对象编号:{2} + */ + public static final String CEF_RUNTIME_5090 = "CEF_RUNTIME_5090"; + /** + * 未从业务实体元数据上找到平行表:{0},请检查业务实体元数据是否已部署。业务实体ID:{1},业务实体编号:{2},实体对象编号:{3} + */ + public static final String CEF_RUNTIME_5091 = "CEF_RUNTIME_5091"; + } diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/repo/BaseRootRepository.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/repo/BaseRootRepository.java index a8b88996..c18b93d0 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/repo/BaseRootRepository.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/repo/BaseRootRepository.java @@ -192,8 +192,8 @@ public abstract class BaseRootRepository implements IRootRepository { } @Override - public final int getDataCount(String nodeCode, String tableName, EntityFilter filter) { - return getEntityDac(nodeCode).getEntityAdaptor().getReferenceDataCount(tableName, filter); + public final int getDataCount(String nodeCode, EntityFilter filter, boolean annual) { + return getEntityDac(nodeCode).getEntityAdaptor().getReferenceDataCount(filter, annual); } @Override diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/FilterUtil.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/FilterUtil.java index ebd1b78c..7541231c 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/FilterUtil.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/FilterUtil.java @@ -681,6 +681,14 @@ public final class FilterUtil { } } + /** + * bef框架内部已不使用,仅保留以最大化兼容。原有的使用方是生成型的EntityRelationalReposAdaptor类。 + * 该方法与同名方法的区别是该方法对于几何类型会报错(对应的特性是生成型不支持几何字段), + * 但考虑到调用到该方法时已经是在运行期了,是不是支持几何字段在设计器就会被拦住,因此这里添加对几何类型的报错处理没有太大必要性。 + * 即使这里没有拦住,那么在后续调用中肯定也会出错,否则生成型就支持几何字段了。 + * 综上,废弃该方法。 + */ + @Deprecated public static DbParameter buildParam(String paramName, GspDbDataType dataType, DbColumnInfo columnInfo, Object paramValue) { paramName = KeyWordsManager.getColumnAlias(paramName); switch (dataType) { diff --git a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/RepositoryUtil.java b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/RepositoryUtil.java index c6899838..f85990dd 100644 --- a/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/RepositoryUtil.java +++ b/common-entity-framework-repository/src/main/java/com/inspur/edp/cef/repository/utils/RepositoryUtil.java @@ -26,12 +26,15 @@ import io.iec.edp.caf.i18n.api.LanguageService; import io.iec.edp.caf.i18n.entity.EcpLanguage; import io.iec.edp.caf.runtime.config.CefBeanUtil; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.List; public final class RepositoryUtil { private static LanguageService languageService = null; - public static String FormatMuliLang(String sql) { + @Nonnull + public static String FormatMuliLang(@Nonnull String sql) { return FormatMuliLang(sql, new RetrieveFilter()); } @@ -47,7 +50,8 @@ public final class RepositoryUtil { return sql.replaceAll("@Language@", fieldSuffix); } - public static String FormatMuliLang(String sql, RetrieveFilter retrieveFilter) { + @Nonnull + public static String FormatMuliLang(@Nonnull String sql, @Nullable RetrieveFilter retrieveFilter) { DataValidator.checkForEmptyString(sql, "sql"); String fieldSuffix = ""; diff --git a/common-entity-framework-spi/src/main/java/com/inspur/edp/cef/spi/jsonser/abstractcefchange/AbstractCefDataDeSerializer.java b/common-entity-framework-spi/src/main/java/com/inspur/edp/cef/spi/jsonser/abstractcefchange/AbstractCefDataDeSerializer.java index 1327b945..940fd87c 100644 --- a/common-entity-framework-spi/src/main/java/com/inspur/edp/cef/spi/jsonser/abstractcefchange/AbstractCefDataDeSerializer.java +++ b/common-entity-framework-spi/src/main/java/com/inspur/edp/cef/spi/jsonser/abstractcefchange/AbstractCefDataDeSerializer.java @@ -16,18 +16,13 @@ package com.inspur.edp.cef.spi.jsonser.abstractcefchange; -import static com.fasterxml.jackson.core.JsonToken.FIELD_NAME; - import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import com.inspur.edp.cef.api.RefObject; import com.inspur.edp.cef.api.manager.serialize.CefSerializeContext; -import com.inspur.edp.cef.api.message.CefException; import com.inspur.edp.cef.entity.config.SerializerUtils; import com.inspur.edp.cef.entity.entity.ICefData; - import com.inspur.edp.cef.entity.entity.IMultiLanguageData; import com.inspur.edp.cef.entity.exception.CefRuntimeBaseException; import com.inspur.edp.cef.entity.i18n.MultiLanguageInfo; @@ -78,9 +73,10 @@ public abstract class AbstractCefDataDeSerializer