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 51e766ef57c6e646aae59c63499ca0f2880854d4..2b9d5d29eaa051b9e810d257db0cc09ad7f797dc 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 @@ -768,7 +768,7 @@ public final class ConvertUtils { } private static void transViewModelParameter(ViewModelParameter vmParam, IBizParameter param) { - vmParam.setID(Guid.newGuid().toString()); + vmParam.setID(param.getID()); vmParam.setAssembly(param.getAssembly()); vmParam.setClassName(param.getClassName()); vmParam.setDotnetClassName(((BizParameter) param).getNetClassName()); diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/LinkBeUtils.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/LinkBeUtils.java index ed9c68a953512dfde369058d9bbfc83a066b6134..c9acbd51721cde8d76a013e67f91473438a9418b 100644 --- a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/LinkBeUtils.java +++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/LinkBeUtils.java @@ -20,10 +20,12 @@ import com.inspur.edp.formserver.viewmodel.DotNetToJavaStringHelper; import com.inspur.edp.formserver.viewmodel.GspViewModel; import com.inspur.edp.formserver.viewmodel.GspViewModelElement; import com.inspur.edp.formserver.viewmodel.GspViewObject; +import com.inspur.edp.formserver.viewmodel.action.IViewModelParameterCollection; import com.inspur.edp.formserver.viewmodel.action.MappedBizAction; import com.inspur.edp.formserver.viewmodel.action.ViewModelAction; import com.inspur.edp.formserver.viewmodel.action.ViewModelActionType; import com.inspur.edp.formserver.viewmodel.action.mappedbiz.MappedBizActionParameter; +import com.inspur.edp.formserver.viewmodel.action.mappedbiz.MappedBizActionParameterCollection; import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelReturnValue; import com.inspur.edp.formserver.viewmodel.collection.VMActionCollection; import com.inspur.edp.formserver.viewmodel.collection.ViewObjectCollection; @@ -546,27 +548,27 @@ public class LinkBeUtils { GspBusinessEntity be = null; be = getBizEntity(vm, vm.getMapping().getTargetMetadataId()); if (mappedBeActions.size() > 0) { - for (ViewModelAction action : mappedBeActions) { - ViewModelMapping mapping = action.getMapping(); + for (ViewModelAction voAction : mappedBeActions) { + ViewModelMapping mapping = voAction.getMapping(); if (mapping == null || mapping.getTargetObjId() == null || "".equals(mapping.getTargetObjId())) continue; String actionId = mapping.getTargetObjId(); BizMgrAction mgrAction = (BizMgrAction) be.getBizMgrActions().getItem(item -> actionId.equals(item.getID())); if (mgrAction == null) { - vm.getActions().remove(action); + vm.getActions().remove(voAction); continue; } - MappedBizAction tranAction = ConvertUtils.toMappedAction(mgrAction, action.getMapping().getTargetMetadataId(), null); - linkWithMgrAction(action, tranAction); + MappedBizAction beAction = ConvertUtils.toMappedAction(mgrAction, voAction.getMapping().getTargetMetadataId(), null); + linkWithMgrAction(voAction, beAction); } } } - public void linkWithMgrAction(ViewModelAction targetAction, MappedBizAction sourceAction) { - targetAction.setCode(sourceAction.getCode()); - targetAction.setName(sourceAction.getName()); - linkParameters(targetAction, sourceAction); - linkReturnValue(targetAction, sourceAction); + public void linkWithMgrAction(ViewModelAction voAction, MappedBizAction beAction) { + voAction.setCode(beAction.getCode()); + voAction.setName(beAction.getName()); + linkParameters(voAction, beAction); + linkReturnValue(voAction, beAction); // targetAction.getParameterCollection().clear(); // if (sourceAction.getParameterCollection().getCount() > 0) // for (int i = 0; i < sourceAction.getParameterCollection().getCount(); i++) { @@ -576,17 +578,95 @@ public class LinkBeUtils { // targetAction.setReturnValue(sourceAction.getReturnValue()); } - private void linkParameters(ViewModelAction targetAction, MappedBizAction sourceAction) { - if (targetAction.getParameterCollection().getCount() == 0 && sourceAction.getParameterCollection().getCount() == 0) + /** + * vo上联动be的参数 + * @param voAction + * @param beAction + */ + private void linkParameters(ViewModelAction voAction, MappedBizAction beAction) { + //vo上的业务实体映射操作参数列表 + IViewModelParameterCollection voParams = voAction.getParameterCollection(); + //be上的动作参数列表 + IViewModelParameterCollection beParams = beAction.getParameterCollection(); + //如果be上的参数为空, be上把参数都去掉了,此时vo上的参数需要直接清空 + if (beParams.getCount()==0) { + voParams.clear(); + return; + } + //1、vo上的动作参数和be上的动作参数个数保持一致 + //2、vo上的动作参数比be上的动作参数少 be上新增参数 + if (voParams.getCount()<=beParams.getCount()) { + linkAddedParameter(beParams,voParams); return; - for (int i = 0; i < targetAction.getParameterCollection().getCount(); i++) { - MappedBizActionParameter parameter = (MappedBizActionParameter) sourceAction.getParameterCollection().getItem(i); - parameter.setID(targetAction.getParameterCollection().getItem(i).getID()); } - targetAction.getParameterCollection().clear(); - for (int i = 0; i < sourceAction.getParameterCollection().getCount(); i++) { - targetAction.getParameterCollection().add(sourceAction.getParameterCollection().getItem(i)); + //3、vo上的动作参数比be上的动作参数多 be上删除了参数 + linkDeletedParameter(beParams,voParams); + } + + /** + * 处理be上删除参数以及修改参数编号的场景 + * @param beParams be动作参数集合 + * @param voParams vo动作参数集合 + */ + private void linkDeletedParameter(IViewModelParameterCollection beParams, IViewModelParameterCollection voParams) { + //构造map集合,be和vo上的动作参数编号有哪些保持一致 + Map usedParamDic=new HashMap<>(); + for (int i = 0; i < voParams.getCount(); i++) { + MappedBizActionParameter voParam = (MappedBizActionParameter) voParams.getItem(i); + MappedBizActionParameter beParam = (MappedBizActionParameter) beParams.stream(). + filter(item -> voParam.getParamCode().equals(((MappedBizActionParameter) item).getParamCode())). + findFirst().orElse(null); + if (beParam!=null) { + //vo和be动作参数编号一致的参数 + usedParamDic.put(voParam.getParamCode(), voParam.getID()); + } + } + //vo上的动作参数编号和be上的动作参数编号,完全不一致了,be上修改了所有参数的编号 + //usedParamDic个数为0时,be上修改了所有动作参数的编号,默认按照vo上的参数顺序,重新赋值id + if (usedParamDic.size()==0){ + for (int i = 0; i < voParams.getCount(); i++) { + MappedBizActionParameter voParam = (MappedBizActionParameter) voParams.getItem(i); + MappedBizActionParameter beParam = (MappedBizActionParameter) beParams.getItem(i); + if (beParam!=null) { + beParam.setID(voParam.getID()); + } + } + voParams.clear(); + voParams.addAll(beParams); + return; + } + //vo上的动作参数编号和be上的动作参数编号一致的,按照vo上动作参数编号对应的id赋值 + //vo上的部分动作参数编号和be上的动作参数编号不一致的, be上修改了部分参数的编号,此时按照be上的动作参数id赋值 + for (int i = 0; i < beParams.getCount(); i++) { + MappedBizActionParameter beParam = (MappedBizActionParameter) beParams.getItem(i); + if (usedParamDic.containsKey(beParam.getParamCode())) + beParam.setID(usedParamDic.get(beParam.getParamCode())); + } + voParams.clear(); + voParams.addAll(beParams); + } + + /** + * 处理参数个数一致修改参数编号以及新增参数的场景 + * @param beParams be动作参数集合 + * @param voParams vo动作参数集合 + */ + private void linkAddedParameter(IViewModelParameterCollection beParams, IViewModelParameterCollection voParams) { + IViewModelParameterCollection newVoParams=new MappedBizActionParameterCollection(); + for (int i = 0; i < beParams.getCount(); i++) { + MappedBizActionParameter beParam = (MappedBizActionParameter) beParams.getItem(i); + MappedBizActionParameter voParam = (MappedBizActionParameter) voParams.getItem(i); + //be上新增的动作参数,vo上添加新参数 + if (voParam == null) { + newVoParams.add(beParam); + } else { + //参数个数一致的情况,回写vo上的原动作参数id + beParam.setID(voParam.getID()); + newVoParams.add(beParam); + } } + voParams.clear(); + voParams.addAll(newVoParams); } private void linkReturnValue(ViewModelAction targetAction, MappedBizAction sourceAction) {