diff --git a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefEntity.java b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefEntity.java index b6c3e5e320d638b41c13593b80347e8cbd15c870..1ded8dc426d967617c9afa5fe7796ff4c12e41e0 100644 --- a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefEntity.java +++ b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefEntity.java @@ -421,7 +421,7 @@ public abstract class CefEntity extends CefDataType implements ICefEntity { addUQConstraintValidations(b4SaveValAssembler); addSecretValidations(b4SaveValAssembler); addRequireValidations(b4SaveValAssembler); - LengthValUtils.addLengthVals(extList, b4SaveValAssembler, getEntityResInfo().getEntityTypeInfo(), getVersion(), getEntityResInfo().getEntityId()); + LengthValUtils.addLengthVals(extList, b4SaveValAssembler, getEntityResInfo().getEntityTypeInfo(), getVersion(), getEntityResInfo().getEntityCode(), getEntityResInfo().getEntityId()); addExtendB4SaveVals(b4SaveValAssembler); addChildTransB4SaveVals(b4SaveValAssembler); // addDeleteCheckValidations(b4SaveValAssembler); diff --git a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefValueObject.java b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefValueObject.java index de6057b38d6921e64f37bc7ab5a0c33ef045b849..5a9f412498287b5102b8a54dc0c0486bbd506a50 100644 --- a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefValueObject.java +++ b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/datatype/CefValueObject.java @@ -284,7 +284,7 @@ public abstract class CefValueObject extends CefDataType { private void addBuiltInB4SaveVals(ValueObjBeforeSaveValAssembler b4SaveValAssembler) { addUdtTransB4SaveVals(b4SaveValAssembler); addRequireValidations(b4SaveValAssembler); - LengthValUtils.addLengthVals(b4SaveValAssembler, getValueObjResInfo().getEntityTypeInfo(), getVersion()); + LengthValUtils.addLengthVals(b4SaveValAssembler, getValueObjResInfo().getEntityTypeInfo(), getVersion(), getValueObjResInfo().getEntityCode()); addUdtB4SaveVals(b4SaveValAssembler); } diff --git a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValAdaptor.java b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValAdaptor.java index 68541e7208fd7587b7ce6806d1d46122f86950e5..69d9f274e55a7d9818f3d2b53ac443fbab3df30e 100644 --- a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValAdaptor.java +++ b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValAdaptor.java @@ -24,6 +24,7 @@ import com.inspur.edp.cef.api.message.IBizMessage; import com.inspur.edp.cef.api.message.ISupportBizMessage; import com.inspur.edp.cef.api.message.MessageLevel; import com.inspur.edp.cef.api.validation.ICefValidationContext; +import com.inspur.edp.cef.api.validation.IValueObjValidationContext; import com.inspur.edp.cef.core.exception.ExceptionCode; import com.inspur.edp.cef.entity.changeset.AbstractModifyChangeDetail; import com.inspur.edp.cef.entity.changeset.ChangeType; @@ -109,14 +110,23 @@ public abstract class LengthValAdaptor implements IValidation { /** * 记录字段长度校验失败的上下文信息,便于定位问题。 - * 具体的限制值和实际值在 getDisplayMessage() 构建的异常消息中已有详细描述。 */ protected void logValidationFailure(ICefValidationContext context) { String beId = null; String beCode = null; String objCode = entityCode; - if (context instanceof IDeterminationContext) { - IDeterminationContext detCtx = (IDeterminationContext) context; + + // 值对象场景:从父上下文提取 BE 信息 + ICefValidationContext beContext = context; + if (context instanceof IValueObjValidationContext) { + ICefValidationContext parentCtx = ((IValueObjValidationContext) context).getParentContext(); + if (parentCtx != null) { + beContext = parentCtx; + } + } + + if (beContext instanceof IDeterminationContext) { + IDeterminationContext detCtx = (IDeterminationContext) beContext; if (detCtx.getModelResInfo() != null) { beId = detCtx.getModelResInfo().getMetaDataId(); beCode = detCtx.getModelResInfo().getRootNodeCode(); @@ -127,7 +137,7 @@ public abstract class LengthValAdaptor implements IValidation { } } - logger.error("字段长度校验失败, BE:[ID:{}, 编号:{}], 对象:[名称:{}, ID:{}, 编号:{}], 字段code:{}", + logger.warn("字段长度校验失败, BE:[ID:{}, 编号:{}], 对象:[名称:{}, ID:{}, 编号:{}], 字段code:{}", Objects.toString(beId, "?"), Objects.toString(beCode, "?"), context.getEntityI18nName(), diff --git a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValUtils.java b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValUtils.java index 10517642627a70697d4a911ebeebf2c235ac9792..10e2ed7bc62b193c0ad5e4082413f48394ccc1c6 100644 --- a/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValUtils.java +++ b/common-entity-framework-core/src/main/java/com/inspur/edp/cef/core/validation/lengthvaladaptor/LengthValUtils.java @@ -17,10 +17,7 @@ package com.inspur.edp.cef.core.validation.lengthvaladaptor; import com.inspur.edp.cef.api.repository.GspDbDataType; -import com.inspur.edp.cef.core.validation.requiredvaladaptor.RequiredStringValAdaptor; import com.inspur.edp.cef.spi.entity.info.CefDataTypeInfo; -import com.inspur.edp.cef.spi.entity.info.CefEntityTypeInfo; -import com.inspur.edp.cef.spi.entity.info.propertyinfo.AssocationPropertyInfo; import com.inspur.edp.cef.spi.entity.info.propertyinfo.DataTypePropertyInfo; import com.inspur.edp.cef.spi.entity.info.propertyinfo.ObjectType; import com.inspur.edp.cef.spi.extend.entity.ICefEntityExtend; @@ -32,20 +29,21 @@ import java.util.Map; public class LengthValUtils { public static void addLengthVals( IRuntimeValidationAssembler validationAssembler, CefDataTypeInfo dataTypeInfo) { - addLengthVals(validationAssembler, dataTypeInfo, 0); + addLengthVals(validationAssembler, dataTypeInfo, 0, null); } /** * 长度校验传入扩展信息 * - * @param extendList - * @param validationAssembler - * @param dataTypeInfo - * @param cefVersion + * @param extendList 扩展信息列表 + * @param validationAssembler 校验装配器 + * @param dataTypeInfo 数据类型信息 + * @param cefVersion CEF版本 + * @param entityCode 实体/值对象编码 + * @param entityId 实体ID(值对象传null) */ - public static void addLengthVals(List extendList, IRuntimeValidationAssembler validationAssembler, CefDataTypeInfo dataTypeInfo, int cefVersion, String entityId) { + public static void addLengthVals(List extendList, IRuntimeValidationAssembler validationAssembler, CefDataTypeInfo dataTypeInfo, int cefVersion, String entityCode, String entityId) { int index = 0; - String entityCode = getEntityCode(dataTypeInfo); for (DataTypePropertyInfo propertyInfo : dataTypeInfo.getPropertyInfos().values()) { if (propertyInfo.getObjectType() == ObjectType.Association) { validationAssembler.getValidations().add(index++, new newAssociationLengthValAdaptor(propertyInfo.getPropertyName(), propertyInfo.getLength(), propertyInfo.getPrecision(), cefVersion, entityCode, entityId)); @@ -92,16 +90,8 @@ public class LengthValUtils { return propertyInfo.getLength(); } - private static String getEntityCode(CefDataTypeInfo dataTypeInfo) { - if (dataTypeInfo instanceof CefEntityTypeInfo) { - return ((CefEntityTypeInfo) dataTypeInfo).getEntityCode(); - } - return null; - } - - public static void addLengthVals(IRuntimeValidationAssembler validationAssembler, CefDataTypeInfo dataTypeInfo, int cefVersion) { + public static void addLengthVals(IRuntimeValidationAssembler validationAssembler, CefDataTypeInfo dataTypeInfo, int cefVersion, String entityCode) { int index = 0; - String entityCode = getEntityCode(dataTypeInfo); for (DataTypePropertyInfo propertyInfo : dataTypeInfo.getPropertyInfos().values()) { if (propertyInfo.getObjectType() == ObjectType.Association) { validationAssembler.getValidations().add(index++, new newAssociationLengthValAdaptor(propertyInfo.getPropertyName(), propertyInfo.getLength(), propertyInfo.getPrecision(), cefVersion, entityCode, null));