diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/metadatacopy/VoMetadataCopyProvider.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/metadatacopy/VoMetadataCopyProvider.java index d9c7144af013f33c5476070e588b339161ed4f25..cdd4695cea9371fa12a650c63a9e5227c53ec7f2 100644 --- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/metadatacopy/VoMetadataCopyProvider.java +++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/metadatacopy/VoMetadataCopyProvider.java @@ -1,3 +1,19 @@ +/* + * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd. + * + * 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.formserver.vmmanager.metadatacopy; import com.inspur.edp.das.commonmodel.IGspCommonObject; @@ -26,6 +42,8 @@ public class VoMetadataCopyProvider implements MetadataCopySpi { return; } GspViewModel vo = (GspViewModel) gspMetadata.getContent(); + // 复制时不复制authConfig + vo.setAuthConfig(null); vo.setDotnetGeneratingAssembly(gspMetadata.getHeader().getNameSpace() + ".Vo"); vo.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(gspMetadata.getHeader().getNameSpace() + ".Vo")); this.erasureI18nResourceInfoPrefix(vo); diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushChangeSets.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushChangeSets.java index 749e267c453d3eb23f125ac8aec04d7ce156cacf..71b39c08d86e95b437a52475e5bdc23b7cadf3f7 100644 --- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushChangeSets.java +++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushChangeSets.java @@ -1,6 +1,29 @@ +/* + * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd. + * + * 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.formserver.vmmanager.util; -import com.inspur.edp.bef.bizentity.pushchangesetargs.*; +import com.inspur.edp.bef.bizentity.pushchangesetargs.ActionChangeDetail; +import com.inspur.edp.bef.bizentity.pushchangesetargs.ActionChangeSet; +import com.inspur.edp.bef.bizentity.pushchangesetargs.ChangeType; +import com.inspur.edp.bef.bizentity.pushchangesetargs.ElementChangeDetail; +import com.inspur.edp.bef.bizentity.pushchangesetargs.ElementChangeSet; +import com.inspur.edp.bef.bizentity.pushchangesetargs.ObjectChangeDetail; +import com.inspur.edp.bef.bizentity.pushchangesetargs.ObjectChangeSet; +import com.inspur.edp.bef.bizentity.pushchangesetargs.PushChangeSet; import com.inspur.edp.bef.bizentity.util.StringUtil; import com.inspur.edp.cef.designtime.api.IGspCommonField; import com.inspur.edp.formserver.viewmodel.GspViewModel; @@ -120,14 +143,17 @@ public class PushChangeSets { PushObjectChangeSet pushObject = new PushObjectChangeSet(); GspViewObject orgObject = pushObject.getObjectByID(this.metadata, detail.getBizObjectId()); GspViewObject newObject = null; + + // 根据父对象ID获取对应的VO对象 + String parentObjID = detail.getParentObjIDElementId(); + GspViewObject parentVoObj = pushObject.getObjectByID(this.metadata, parentObjID); + if (set.getChangeDetail().getBizObject() != null) { newObject = ConvertUtils.toObject(set.getChangeDetail().getBizObject(), ((GspViewModel) metadata.getContent()).getMapping().getTargetMetadataPkgName(), ((GspViewModel) metadata.getContent()).getMapping().getTargetMetadataId(), - detail.getParentObjIDElementId(), GspVoObjectSourceType.BeObject); + parentVoObj, GspVoObjectSourceType.BeObject); } - ; - String parentObjID = set.getChangeDetail().getParentObjIDElementId(); // 新增节点 if (set.getChangeType().equals(ChangeType.Add) && newObject != null && !parentObjectHasBeenAdded(parentObjID)) { diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushObjectChangeSet.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushObjectChangeSet.java index bbd57ca5dc16bdb69f64e979ca41a08dd528c19d..5ef9890a998c39898e997fc54e6a798a4152a099 100644 --- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushObjectChangeSet.java +++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/PushObjectChangeSet.java @@ -1,3 +1,19 @@ +/* + * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd. + * + * 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.formserver.vmmanager.util; import com.inspur.edp.bef.bizentity.pushchangesetargs.ObjectChangeDetail; @@ -68,6 +84,9 @@ public class PushObjectChangeSet { return; } GspViewObject parentObject = getObjectByID(metadata, parentId); + if (parentObject == null) { + return; + } for (IGspCommonObject child : parentObject.getContainChildObjects()) { if (child.getCode() != null && child.getCode().equalsIgnoreCase(object.getCode())) { return; diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertUtils.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertUtils.java index 5c0eb137107f5bafaa93e664594bbaa207fdc0eb..134d361d8bdb2d91a153e7a1a000977e6dee391e 100644 --- a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertUtils.java +++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertUtils.java @@ -107,7 +107,7 @@ public final class ConvertUtils { //① BasicInfo convertBasicInfo(cm, vm, pkgName, metadataId, voGeneratingAssembly, relativePath); //② MainObject - vm.setMainObject(toObject(cm.getMainObject(), pkgName, metadataId, null, GspVoObjectSourceType.BeObject)); + vm.setMainObject(toObject(cm.getMainObject(), pkgName, metadataId, "", GspVoObjectSourceType.BeObject)); //③ BelongModel递归赋值 vm.getMainObject().setBelongModel(vm); vm.getMainObject().setBelongModelID(vm.getID()); @@ -155,14 +155,10 @@ public final class ConvertUtils { // } if (DotNetToJavaStringHelper.isNullOrEmpty(voGeneratingAssembly)) { vm.setDotnetGeneratingAssembly(cm.getDotnetGeneratingAssembly() + ".Vo"); - vm.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(cm.getDotnetGeneratingAssembly() + ".Vo")); + vm.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(packagePrefix, cm.getDotnetGeneratingAssembly() + ".Vo")); } else { vm.setDotnetGeneratingAssembly(voGeneratingAssembly + ".Vo"); - if (packagePrefix != null) { - vm.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(packagePrefix, voGeneratingAssembly + ".Vo")); - } else { - vm.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(voGeneratingAssembly + ".Vo")); - } + vm.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(packagePrefix, voGeneratingAssembly + ".Vo")); } ViewModelMapping tempVar = new ViewModelMapping(); tempVar.setMapType(MappingType.BizEntity); @@ -195,6 +191,23 @@ public final class ConvertUtils { } // //#region Object + public static GspViewObject toObject(IGspCommonObject cmObject, String pkgName, String metadataId, GspViewObject parentVoObj, GspVoObjectSourceType sourceType) { + GspViewObject vmObject = new GspViewObject(); + + //① BasicInfo + convertObjectBasicInfo(cmObject, vmObject, pkgName, metadataId, sourceType); + //② Element + convertContainElements(cmObject, vmObject, pkgName, metadataId, sourceType); + //③ 更新字段相关的属性(分级信息、ID字段等) + // QO无相关属性,故不需要传入sourceType区分qo源 + convertObjectSelfInfo(cmObject, vmObject, parentVoObj, sourceType); + //⑤ ChildObject + // QO无子节点 + convertChildObjects(cmObject, vmObject, pkgName, metadataId); + + return vmObject; + } + public static GspViewObject toObject(IGspCommonObject cmObject, String pkgName, String metadataId, String parentObjIDElementId, GspVoObjectSourceType sourceType) { GspViewObject vmObject = new GspViewObject(); @@ -212,6 +225,7 @@ public final class ConvertUtils { return vmObject; } + @Deprecated public static GspViewObject transToObject(IGspCommonObject cmObject, String pkgName, String metadataId, String parentObjIDElementId, GspVoObjectSourceType sourceType, List fieldCodes) { GspViewObject vmObject = new GspViewObject(); @@ -284,14 +298,33 @@ public final class ConvertUtils { /** * vo对象转换时,更新字段相关属性 - * - * @param cmObject - * @param vmObject - * @param parentObjIDElementId */ + private static void convertObjectSelfInfo(IGspCommonObject cmObject, GspViewObject vmObject, GspViewObject parentVoObj, GspVoObjectSourceType objSourceType) { + + List elementList = vmObject.getContainElements().stream().filter(item -> !item.getIsVirtual()).collect(Collectors.toList()); + Map viewElements = elementList.stream().collect(Collectors.toMap(IGspCommonField::getID, item -> item)); + java.util.HashMap elementMappings = getElementMappingsDic(elementList); + + //① ID字段和Keys更新 + updateIDElement(cmObject, vmObject); + updateViewObjectKeys(cmObject, vmObject, parentVoObj); + //② 分级信息HirachyInfo +// GspVoElementSourceType eleSourceType = GetEleSourceType(objSourceType); +// updateHirarchyInfo(cmObject, vmObject, elementMappings, viewElements, eleSourceType); + //③ 列生成规则ColumnGenerateID + updateColumnGenerateId(cmObject, vmObject, elementMappings); + //④ 唯一性约束ContainConstraints + updateContainConstraints(cmObject, vmObject, elementMappings, viewElements); +// //⑤ 时间戳(创建人等信息) +// updateTimeStampElements(cmObject, vmObject, elementMappings); + //⑥ 状态字段 + updateStateElementId(cmObject, vmObject, elementMappings); + + } + private static void convertObjectSelfInfo(IGspCommonObject cmObject, GspViewObject vmObject, String parentObjIDElementId, GspVoObjectSourceType objSourceType) { - List elementList = vmObject.getContainElements().stream().filter(item -> item.getIsVirtual() == false).collect(Collectors.toList()); + List elementList = vmObject.getContainElements().stream().filter(item -> !item.getIsVirtual()).collect(Collectors.toList()); Map viewElements = elementList.stream().collect(Collectors.toMap(IGspCommonField::getID, item -> item)); java.util.HashMap elementMappings = getElementMappingsDic(elementList); @@ -458,27 +491,42 @@ public final class ConvertUtils { * @param cmObject * @param vmObject */ + private static void updateViewObjectKeys(IGspCommonObject cmObject, GspViewObject vmObject, GspViewObject parentVoObj) { + // keys + var keys = cmObject.getKeys(); + if (!keys.isEmpty()) { + if (vmObject.getKeys().isEmpty()) { + throw new ViewModelException(VoModelErrorCodes.GSP_VIEWOBJECT_MODEL_1005, null, cmObject.getCode(), cmObject.getName()); + } + for (GspAssociationKey key : vmObject.getKeys()) { + GspAssociationKey associationKey = getAssociationKeyBySourceElementId(keys, key.getSourceElement()); + key.setSourceElement(getVmElementByMappedBizEleId(vmObject, associationKey.getSourceElement()).getID()); + key.setTargetElement(getVmElementByMappedBizEleId(parentVoObj, associationKey.getTargetElement()).getID()); + } + } + } + public static void updateViewObjectKeys(IGspCommonObject cmObject, GspViewObject vmObject, String parentObjIDElementId) { - var vmElements = vmObject.getAllElementList(true); // keys var keys = cmObject.getKeys(); - if (keys.size() > 0) { - if (vmObject.getKeys().size() == 0) { + if (!keys.isEmpty()) { + if (vmObject.getKeys().isEmpty()) { throw new ViewModelException(VoModelErrorCodes.GSP_VIEWOBJECT_MODEL_1005, null, cmObject.getCode(), cmObject.getName()); } for (GspAssociationKey key : vmObject.getKeys()) { String beSourceEleId = getAssociationKeyBySourceElementId(keys, key.getSourceElement()).getSourceElement(); - key.setSourceElement(getVmElementByMappedBizEleId(vmElements, beSourceEleId).getID()); + key.setSourceElement(getVmElementByMappedBizEleId(vmObject, beSourceEleId).getID()); key.setTargetElement(parentObjIDElementId); } } } - private static GspCommonElement getVmElementByMappedBizEleId(ArrayList vmElements, String bizEleId) { - if (vmElements.isEmpty()) { + private static GspCommonElement getVmElementByMappedBizEleId(GspViewObject vmObject, String bizEleId) { + ArrayList vmElements = vmObject != null ? vmObject.getAllElementList(true): null; + if (CollectionUtils.isEmpty(vmElements)) { throw new ViewModelException(VoModelErrorCodes.GSP_VIEWOBJECT_MODEL_1006, null, bizEleId); } - for (var item : vmElements) { + for (IGspCommonElement item : vmElements) { if (bizEleId.equals(((GspViewModelElement) item).getMapping().getTargetObjId())) { return (GspCommonElement) item; } @@ -515,7 +563,7 @@ public final class ConvertUtils { private static void convertChildObjects(IGspCommonObject cmObject, GspViewObject vmObject, String pkgName, String metadataId) { for (var childObject : cmObject.getContainChildObjects()) { - GspViewObject cmChildObject = toObject(childObject, pkgName, metadataId, vmObject.getIDElement().getID(), GspVoObjectSourceType.BeObject); + GspViewObject cmChildObject = toObject(childObject, pkgName, metadataId, vmObject, GspVoObjectSourceType.BeObject); cmChildObject.setParentObject(vmObject); vmObject.getContainChildObjects().add(cmChildObject); } diff --git a/view-object-webapi/src/main/java/com/inspur/edp/formserver/viewmodel/webapi/ViewModelController.java b/view-object-webapi/src/main/java/com/inspur/edp/formserver/viewmodel/webapi/ViewModelController.java index 70d4319a21dc7e2711cee157ef63ccb1c5cbbb74..4322d9d20dfb9c6fffda01d3ce962edc03379080 100644 --- a/view-object-webapi/src/main/java/com/inspur/edp/formserver/viewmodel/webapi/ViewModelController.java +++ b/view-object-webapi/src/main/java/com/inspur/edp/formserver/viewmodel/webapi/ViewModelController.java @@ -300,7 +300,8 @@ public class ViewModelController { String beId = node.get("beId").textValue(); String voGeneratingAssembly = node.get("voGeneratingAssembly").textValue(); GspMetadata metadata = WebControllerService.getMetadata(node, null, bePkgName, beId); - GspBusinessEntity be = (GspBusinessEntity) metadata.getContent(); + // 克隆以防止修改缓存中对象 + GspBusinessEntity be = ((GspBusinessEntity) metadata.getContent()).clone(); GspBizEntityObject bizObj = (GspBizEntityObject) be.findObjectById(newObjId); if (bizObj == null) { throw new ViewModelException(VoWebApiErrorCodes.GSP_VIEWOBJECT_WEBAPI_1008, null, be.getCode(), be.getName(), newObjId);