diff --git a/approval-format/web-approval-format-rpc/src/main/java/com/inspur/edp/web/approvalformat/rpc/rpcservice/ApprovalFormatRpcServiceImpl.java b/approval-format/web-approval-format-rpc/src/main/java/com/inspur/edp/web/approvalformat/rpc/rpcservice/ApprovalFormatRpcServiceImpl.java index 1358514818af39c2367f2114d6831b104de20292..5c9ed1a7f2f497417560c20a0fdcd81ab9859aea 100644 --- a/approval-format/web-approval-format-rpc/src/main/java/com/inspur/edp/web/approvalformat/rpc/rpcservice/ApprovalFormatRpcServiceImpl.java +++ b/approval-format/web-approval-format-rpc/src/main/java/com/inspur/edp/web/approvalformat/rpc/rpcservice/ApprovalFormatRpcServiceImpl.java @@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; import java.text.MessageFormat; +import java.time.Duration; import java.util.List; /** @@ -47,7 +48,7 @@ public class ApprovalFormatRpcServiceImpl implements IApprovalFormatRpcService { @Override public IEntityData getEntityDataByBizEntityId(String dataId, String bizEntityId) { - SpringBeanUtils.getBean(IBefSessionManager.class).createSession(); + SpringBeanUtils.getBean(IBefSessionManager.class).createSession(Duration.ofMinutes(2)); try { IStandardLcp lcp = null; @@ -68,7 +69,7 @@ public class ApprovalFormatRpcServiceImpl implements IApprovalFormatRpcService { @Override public List queryEntityData(String bizEntityId) { - SpringBeanUtils.getBean(IBefSessionManager.class).createSession(); + SpringBeanUtils.getBean(IBefSessionManager.class).createSession(Duration.ofMinutes(2)); try { IStandardLcp lcp = null; GspMetadata bizEntityMetadata = this.customizationService.getMetadata(bizEntityId); @@ -107,7 +108,7 @@ public class ApprovalFormatRpcServiceImpl implements IApprovalFormatRpcService { MessageFormat.format("{0}", new Object[]{e.getMessage()})); } } - SpringBeanUtils.getBean(IBefSessionManager.class).createSession(); + SpringBeanUtils.getBean(IBefSessionManager.class).createSession(Duration.ofMinutes(2)); try { IStandardLcp lcp = null; diff --git a/pom.xml b/pom.xml index d9f87fe994c6d7bcc9a45b526b2e325fbbcc539c..ff31ac8e1f39989859ed1af282d47c7ac60b4378 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,8 @@ form-process web-formmetadata-relycheck + web-ide-rpc-service + web-metadata-replication-core diff --git a/toout.bat b/toout.bat index 01e525dcb5b80aacc5a8210873b7e5a67fcc5503..b900efba7def390c04fd831e2492fc119ab82ed5 100644 --- a/toout.bat +++ b/toout.bat @@ -61,6 +61,7 @@ COPY web-frontendproject-api\target\web-jitengine-frontendproject-api-%version%. REM COPY web-ide-api\target\web-ide-api-%version%.jar .\out\server\platform\common\libs\web-ide-api.jar COPY web-ide-webapi\target\ide-config-webapi-%version%.jar .\out\server\platform\dev\main\libs\ide-config-webapi.jar +COPY web-ide-rpc-service\target\web-ide-rpc-service-%version%.jar .\out\server\platform\dev\main\libs\web-ide-rpc-service.jar ::pause ::pause diff --git a/web-common/src/main/java/com/inspur/edp/web/common/io/FileUtility.java b/web-common/src/main/java/com/inspur/edp/web/common/io/FileUtility.java index c315ebd720ae162a3e4f079925706177348d330c..dab79beff3f62bb9fcf607a1c51e6d6d2cece758 100644 --- a/web-common/src/main/java/com/inspur/edp/web/common/io/FileUtility.java +++ b/web-common/src/main/java/com/inspur/edp/web/common/io/FileUtility.java @@ -884,21 +884,29 @@ public class FileUtility { */ private static void getRelativePaths(Path root, Path currentDir, List relativePaths) throws IOException { // 获取当前目录下的所有文件和目录 - DirectoryStream stream = Files.newDirectoryStream(currentDir); - - for (Path entry : stream) { - // 构建相对路径 - Path relativePath = root.relativize(entry); - // 如果是目录,则递归遍历 - if (Files.isDirectory(entry)) { - getRelativePaths(root, entry, relativePaths); - } else { - relativePaths.add(relativePath); + DirectoryStream stream = null; + try { + stream = Files.newDirectoryStream(currentDir); + for (Path entry : stream) { + // 构建相对路径 + Path relativePath = root.relativize(entry); + // 如果是目录,则递归遍历 + if (Files.isDirectory(entry)) { + getRelativePaths(root, entry, relativePaths); + } else { + relativePaths.add(relativePath); + } + } + } finally { + // 1. 先判空,避免NPE;2. 捕获close()的异常 + if (stream != null) { + try{ + stream.close(); + } catch (IOException e) { + WebLogger.Instance.error(e); + } } } - - // 关闭流 - stream.close(); } public static List getRelativePaths(String rootPath) { diff --git a/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtility.java b/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtility.java index b932838bfeead204c9b39d8c6dc00471b7a6661b..eacc765d12890afbdbd367773120e938fe0018b1 100644 --- a/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtility.java +++ b/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtility.java @@ -162,7 +162,7 @@ public final class MetadataUtility { // 如果在升级工具中执行 if (isInUpgradeTool) { - if (MetadataUtilityWithRuntimeRpc.hasCustomizationServerServiceInstance()) { + if (MetadataUtilityWithRuntimeRpc.hasCustomizationServiceInstance()) { return MetadataUtilityWithRuntimeRpc.getMetadata(targetMetadataInfo.getId()); } else { // 如果获取不到 那么设定执行运行时获取 diff --git a/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtilityWithRuntimeRpc.java b/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtilityWithRuntimeRpc.java index 161e2c9d88d31ce5f76e96984eafd7a00efa122e..ecfc8e024220607ef075695119f77909cbb7038e 100644 --- a/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtilityWithRuntimeRpc.java +++ b/web-common/src/main/java/com/inspur/edp/web/common/metadata/MetadataUtilityWithRuntimeRpc.java @@ -17,7 +17,7 @@ package com.inspur.edp.web.common.metadata; import com.inspur.edp.lcm.metadata.api.entity.GspMetadata; -import com.inspur.edp.metadata.rtcustomization.serverapi.CustomizationServerService; +import com.inspur.edp.metadata.rtcustomization.api.CustomizationService; import io.iec.edp.caf.commons.utils.SpringBeanUtils; /** @@ -30,8 +30,8 @@ class MetadataUtilityWithRuntimeRpc { * * @return */ - public static boolean hasCustomizationServerServiceInstance() { - return CustomizationServerServiceInstance.get() != null; + public static boolean hasCustomizationServiceInstance() { + return CustomizationServiceInstance.get() != null; } /** @@ -42,15 +42,15 @@ class MetadataUtilityWithRuntimeRpc { * @return */ public static GspMetadata getMetadata(String medaDataId) { - return CustomizationServerServiceInstance.get().getMetadata(medaDataId); + return CustomizationServiceInstance.get().getMetadata(medaDataId); } /** * 运行时元数据服务的rpc */ - private static class CustomizationServerServiceInstance { - public static CustomizationServerService get() { - return SpringBeanUtils.getBean(CustomizationServerService.class); + private static class CustomizationServiceInstance { + public static CustomizationService get() { + return SpringBeanUtils.getBean(CustomizationService.class); } } } diff --git a/web-common/src/main/java/com/inspur/edp/web/common/utility/CommandExecuteInterceptor.java b/web-common/src/main/java/com/inspur/edp/web/common/utility/CommandExecuteInterceptor.java index 3855d37074a7fb36ec29cc4cf5b052c275e07f84..41e654b4952d5d166315bb31bf2ab5b5824854a0 100644 --- a/web-common/src/main/java/com/inspur/edp/web/common/utility/CommandExecuteInterceptor.java +++ b/web-common/src/main/java/com/inspur/edp/web/common/utility/CommandExecuteInterceptor.java @@ -75,6 +75,7 @@ public class CommandExecuteInterceptor extends Thread { @Override public void run() { BufferedReader br = null; + InputStreamReader inputStreamReader = null; try { IdeLogUtils ideLogUtils = new IdeLogUtils(); @@ -82,7 +83,7 @@ public class CommandExecuteInterceptor extends Thread { if (SystemUtils.IS_OS_WINDOWS) { charset = Charset.forName("GBK"); } - InputStreamReader inputStreamReader = new InputStreamReader(this.inputStream, charset); + inputStreamReader = new InputStreamReader(this.inputStream, charset); //读取进程输入流中的内容 String line = null; br = new BufferedReader(inputStreamReader); @@ -171,10 +172,12 @@ public class CommandExecuteInterceptor extends Thread { WebLogger.Instance.error(e); } finally { try { - this.inputStream.close(); if (br != null) { br.close(); } + if (inputStreamReader != null) { + inputStreamReader.close(); + } } catch (IOException ex) { WebLogger.Instance.error(ex); } diff --git a/web-common/src/main/java/com/inspur/edp/web/common/utility/IdeLogUtils.java b/web-common/src/main/java/com/inspur/edp/web/common/utility/IdeLogUtils.java index 10bd88c7ceeee1ee3ca72aefc561695e485bad1e..1336ce97850f054c1b315cf19d0845d4f9e64728 100644 --- a/web-common/src/main/java/com/inspur/edp/web/common/utility/IdeLogUtils.java +++ b/web-common/src/main/java/com/inspur/edp/web/common/utility/IdeLogUtils.java @@ -1,28 +1,26 @@ package com.inspur.edp.web.common.utility; -import com.inspur.edp.lcm.metadata.inner.api.IdeLogService; +import com.inspur.edp.web.common.customexception.WebCustomException; import com.inspur.edp.web.common.logger.WebLogger; +import io.iec.edp.caf.commons.utils.SpringBeanUtils; +import io.iec.edp.caf.rpc.api.service.RpcClient; + +import java.util.LinkedHashMap; public class IdeLogUtils { - private IdeLogService ideLogService; + private static RpcClient rpcClient = SpringBeanUtils.getBean(RpcClient.class); public IdeLogUtils() { - try { - Class.forName("com.inspur.edp.lcm.metadata.inner.api.utils.IdeLogUtils"); - ideLogService = com.inspur.edp.lcm.metadata.inner.api.utils.IdeLogUtils.getIdeLogService(); - } catch (ClassNotFoundException e) { - ideLogService = null; - WebLogger.Instance.warn("com.inspur.edp.lcm.metadata.inner.api.utils.IdeLogUtils not found"); - } } - public void pushLog(String var1, String var2) { - if (ideLogService != null) { - try { - ideLogService.pushLog(var1, var2); - } catch (Exception e) { - WebLogger.Instance.warn("Failed to push log: " + e.getMessage()); - } + public void pushLog(String log, String userId) { + try { + LinkedHashMap params = new LinkedHashMap<>(); + params.put("log", log); + params.put("userId", userId); + rpcClient.invoke(Void.TYPE, "com.inspur.edp.web.rpc.service.idelog.WebIdeLogService.pushLog", "main", params, null); + } catch (Exception e) { + WebLogger.Instance.warn("Failed to push log: " + e.getMessage()); } } } diff --git a/web-designschema-api/src/main/java/com/inspur/edp/web/designschema/api/webservice/DesignSchemaWebService.java b/web-designschema-api/src/main/java/com/inspur/edp/web/designschema/api/webservice/DesignSchemaWebService.java index 88dfc72359240e868985831761578a0cc99a509e..c09c0d611e8e8d767bdf6b5a46efc22ce464cd95 100644 --- a/web-designschema-api/src/main/java/com/inspur/edp/web/designschema/api/webservice/DesignSchemaWebService.java +++ b/web-designschema-api/src/main/java/com/inspur/edp/web/designschema/api/webservice/DesignSchemaWebService.java @@ -34,6 +34,7 @@ public interface DesignSchemaWebService /** * 创建designschema + * * @param content * @return */ diff --git a/web-designschema/src/main/java/com/inspur/edp/web/designschema/synchronization/Synchronizer.java b/web-designschema/src/main/java/com/inspur/edp/web/designschema/synchronization/Synchronizer.java index b2ad143550f21a47ee035ce84903baea4f37c492..993ad88967dc95d70cf903085d3e5513adafadb8 100644 --- a/web-designschema/src/main/java/com/inspur/edp/web/designschema/synchronization/Synchronizer.java +++ b/web-designschema/src/main/java/com/inspur/edp/web/designschema/synchronization/Synchronizer.java @@ -183,9 +183,31 @@ public class Synchronizer { if(externalComponents != null && !externalComponents.isEmpty()){ this.extractLookupFromExternalComponents(externalComponents,lookupConfigs); } + JsonNode formRules = jsonNodeModule.get("formRules"); + if(formRules != null && !formRules.isEmpty()){ + this.extractLookupFromFormRules(formRules, lookupConfigs); + } return lookupConfigs; } + private void extractLookupFromFormRules(JsonNode formRules, HashMap lookupConfigs) { + if (formRules == null || formRules.isEmpty()) { + return; + } + formRules.forEach(formRule -> { + JsonNode fields = formRule.get("fields"); + if (fields == null || fields.isNull() || fields.isMissingNode()) { + return; + } + fields.forEach(field -> { + JsonNode type = field.at("/editor/type"); + if (type != null && "lookup".equals(type.asText())) { + this.appendLookupConfigs(lookupConfigs, JSONObject.parseObject(field.at("/editor").toString())); + } + }); + }); + } + private void extractLookupFromExternalComponents(JsonNode externalComponents,HashMap lookupConfigs) { if(externalComponents == null || externalComponents.isEmpty()){ return; diff --git a/web-designschema/src/main/java/com/inspur/edp/web/designschema/webservice/DesignSchemaWebServiceImpl.java b/web-designschema/src/main/java/com/inspur/edp/web/designschema/webservice/DesignSchemaWebServiceImpl.java index 6f05c3a2aa1de47848f3f36564ec66c93779af24..e9b5b9e3b3e0cad35bdd943e7ef6709e03bd35b7 100644 --- a/web-designschema/src/main/java/com/inspur/edp/web/designschema/webservice/DesignSchemaWebServiceImpl.java +++ b/web-designschema/src/main/java/com/inspur/edp/web/designschema/webservice/DesignSchemaWebServiceImpl.java @@ -60,8 +60,8 @@ public class DesignSchemaWebServiceImpl implements DesignSchemaWebService { SchemaBuilder schemaBuilder = new SchemaBuilder(); Schema schema = schemaBuilder.buildWithScene(vm, scene, isRuntime); - - return SerializeUtility.getInstance().valueToJson(schema, PropertyNamingStrategy.LOWER_CAMEL_CASE).toString(); + String result=SerializeUtility.getInstance().valueToJson(schema, PropertyNamingStrategy.LOWER_CAMEL_CASE).toString(); + return result; } catch (WebCustomException e) { WebLogger.Instance.error(e, DesignSchemaWebServiceImpl.class.getName()); throw e; diff --git a/web-form-metadata-api/src/main/java/com/inspur/edp/web/formmetadata/api/entity/FormRefModifyParam.java b/web-form-metadata-api/src/main/java/com/inspur/edp/web/formmetadata/api/entity/FormRefModifyParam.java new file mode 100644 index 0000000000000000000000000000000000000000..8e63ae0bdbe66fdeb74a31e195f3dd100d186f13 --- /dev/null +++ b/web-form-metadata-api/src/main/java/com/inspur/edp/web/formmetadata/api/entity/FormRefModifyParam.java @@ -0,0 +1,18 @@ +package com.inspur.edp.web.formmetadata.api.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FormRefModifyParam { + private String formMetadataId; + private String fileName; + private String formMetadataPath; + private String name; + private Map nameLanguage; +} diff --git a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/event/FormMetadataSaveEventListener.java b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/event/FormMetadataSaveEventListener.java index 452fc88c05eea937d6b5464e081a7dabeff7dffb..ac4e4dd6d7a73a1af03bfdcd312ebee00d3da622 100644 --- a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/event/FormMetadataSaveEventListener.java +++ b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/event/FormMetadataSaveEventListener.java @@ -29,22 +29,23 @@ import com.inspur.edp.web.common.metadata.MetadataGetterParameter; import com.inspur.edp.web.common.metadata.MetadataTypeEnum; import com.inspur.edp.web.common.metadata.MetadataUtility; import com.inspur.edp.web.common.serialize.SerializeUtility; +import com.inspur.edp.web.common.utility.StringUtility; +import com.inspur.edp.web.formmetadata.api.entity.FormRefModifyParam; import com.inspur.edp.web.formmetadata.entity.ResourceMetadataType; import com.inspur.edp.web.formmetadata.formformat.FormFormatHandler; import com.inspur.edp.web.formmetadata.metadata.FormMetadataContent; import com.inspur.edp.web.formmetadata.metadata.formdom.FormDOM; +import com.inspur.edp.web.formmetadata.service.FormMetadataService; import io.iec.edp.caf.commons.utils.SpringBeanUtils; import org.apache.commons.lang3.StringUtils; import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; + /** * @author guozhiqi */ @@ -56,6 +57,79 @@ public class FormMetadataSaveEventListener implements MetadataEventListener { @Override public void fireMetadataSavingEvent(MetadataEventArgs metadataEventArgs) { publishFormFormat(metadataEventArgs); + modifyFormRefName(metadataEventArgs); + } + + private static void modifyFormRefName(MetadataEventArgs metadataEventArgs) { + GspMetadata metadata = metadataEventArgs.getMetadata(); + String type = metadata.getHeader().getType(); + if ("Form".equals(type)) { + if (checkNameChange(metadata)) { + FormRefModifyParam param = new FormRefModifyParam(metadata.getHeader().getId(), + metadata.getHeader().getFileName(), + metadata.getRelativePath(), + metadata.getHeader().getName(), + metadata.getHeader().getNameLanguage()); + FormMetadataService service = SpringBeanUtils.getBean(FormMetadataService.class); + service.modifyAndSaveMetadata(param); + } + } + + } + + private static boolean isMapEqual(Map map1, Map map2) { + boolean isMap1Empty = map1 == null || map1.isEmpty(); + boolean isMap2Empty = map2 == null || map2.isEmpty(); + + // 只要两个都是空状态 → 无变更 + if (isMap1Empty && isMap2Empty) { + return true; + } + + // 一个空状态,一个非空 → 有变更 + if (isMap1Empty || isMap2Empty) { + return false; + } + + //两个都非空,比较键值对是否完全一致 + return map1.equals(map2); + } + + + private static boolean checkNameChange(GspMetadata metadata) { + //无相对路径,说明为新保存元数据 + if (StringUtility.isNullOrEmpty(metadata.getRelativePath())) { + return false; + } + //不存在元数据,说明为新保存元数据,则不存在名称变更 + if (!MetadataUtility.getInstance().isMetaDataExistsWithMetadataPathAndFileNameWithDesign(metadata.getRelativePath(), metadata.getHeader().getFileName())) { + return false; + } + // 1. 获取历史元数据 + GspMetadata beforeFormMetadata = MetadataUtility.getInstance() + .getMetadataWithDesign(metadata.getHeader().getFileName(), metadata.getRelativePath()); + //分层判断 + //历史元数据不存在,说明为新保存元数据,则认为没变更 + if (beforeFormMetadata == null) { + return false; + } + if (beforeFormMetadata.getHeader() == null && metadata.getHeader() == null) { + return false; + } + if (!metadataNameChange(beforeFormMetadata.getHeader().getName(), metadata.getHeader().getName()) && + !metadataNameLanguageChange(beforeFormMetadata.getHeader().getNameLanguage(), metadata.getHeader().getNameLanguage())) { + return false; + } + return true; + } + + private static boolean metadataNameLanguageChange(Map beforeNameLanguage, Map updateNameLanguage) { + return !isMapEqual(beforeNameLanguage, updateNameLanguage); + } + + private static boolean metadataNameChange(String beforeMetadataName, String updateMetadataName) { + return !((StringUtility.isNullOrEmpty(beforeMetadataName) && StringUtility.isNullOrEmpty(updateMetadataName)) || + (!StringUtility.isNullOrEmpty(beforeMetadataName) && !StringUtility.isNullOrEmpty(updateMetadataName) && beforeMetadataName.equals(updateMetadataName))); } /** @@ -464,7 +538,7 @@ public class FormMetadataSaveEventListener implements MetadataEventListener { String formMetadataStr = ((FormMetadataContent) metadataEventArgs.getMetadata().getContent()).getContents().toString(); FormDOM formDOM = SerializeUtility.getInstance().deserialize(formMetadataStr, FormDOM.class); if (formDOM.getModule().getSchemas() != null && formDOM.getModule().getSchemas().size() > 0) { - deleteRelateEapiMetadata(projectPath, formDOM, metadataEventArgs.getMetadata(),terminalType); + deleteRelateEapiMetadata(projectPath, formDOM, metadataEventArgs.getMetadata(), terminalType); } // 获取待删除的命令元数据 命令构件 ts文件 @@ -499,7 +573,7 @@ public class FormMetadataSaveEventListener implements MetadataEventListener { * @param projectPath * @param formDOM */ - private void deleteRelateEapiMetadata(String projectPath, FormDOM formDOM, GspMetadata sourceFormMetadata,TerminalType terminalType) { + private void deleteRelateEapiMetadata(String projectPath, FormDOM formDOM, GspMetadata sourceFormMetadata, TerminalType terminalType) { Object objEApiId = formDOM.getModule().getSchemas().get(0).get("eapiId"); String metaDataCode = metadataEventArgs.getMetadata().getHeader().getCode(); String eapiCode = metaDataCode + terminalType.getFormMetadataSuffix().replace(".", "_"); @@ -519,7 +593,7 @@ public class FormMetadataSaveEventListener implements MetadataEventListener { if (eapiMetadata != null) { // 如果当前表单是基于vo创建的,删除表单时,不删除eapi String code = eapiMetadata.getHeader().getCode(); - if(code.equals(eapiCode)){ + if (code.equals(eapiCode)) { // eapi 单独删除 MetadataUtility.getInstance().deleteMetadataWithDesign(eapiMetadata.getRelativePath(), eapiMetadata.getHeader().getFileName()); } diff --git a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/filter/LowCodeLanguagePackageFilter.java b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/filter/LowCodeLanguagePackageFilter.java index d3f06141555df949af25b04d102d8923a3a15312..abf0631c601cebf0a94e9affe0611c7fc30f4882 100644 --- a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/filter/LowCodeLanguagePackageFilter.java +++ b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/filter/LowCodeLanguagePackageFilter.java @@ -30,6 +30,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.inspur.edp.web.common.customexception.WebCustomException; import io.iec.edp.caf.boot.context.CAFContext; import io.iec.edp.caf.commons.exception.CAFRuntimeException; import io.iec.edp.caf.commons.utils.SpringBeanUtils; @@ -299,7 +300,7 @@ public class LowCodeLanguagePackageFilter extends OncePerRequestFilter { JsonNode mergedJsonNodes = mergeJsonNodes(originalJson, uiLanguagePackageJson); return objectMapper.writeValueAsString(mergedJsonNodes); } catch (JsonProcessingException e) { - throw new CAFRuntimeException("pfcommon", "", "", e); // todo: 换成多语的抛异常方式。 + throw new WebCustomException(e); // todo: 换成多语的抛异常方式。 } } diff --git a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/FormFormatHandler.java b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/FormFormatHandler.java index 82726ee7a2664a1b72aeb2472b0eeaf3eb0e2638..844442e6d1b324fb8f525f118daa9eb365186c3b 100644 --- a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/FormFormatHandler.java +++ b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/FormFormatHandler.java @@ -28,6 +28,7 @@ public abstract class FormFormatHandler { public abstract void pushFormFormat(GspMetadata formMetadata, String formatType, String formPath); + @Deprecated public abstract void pushRtcFormFormat(GspMetadata formMetadata, String formatType, DimensionExtendEntity dimension); public abstract void pushNoCodeFormFormat(GspMetadata formMetadata, String formatType); diff --git a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/FormFormatRtcUtility.java b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/FormFormatRtcUtility.java new file mode 100644 index 0000000000000000000000000000000000000000..5cce483116120fd8803d772a544f9fd69c36f97c --- /dev/null +++ b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/FormFormatRtcUtility.java @@ -0,0 +1,38 @@ +package com.inspur.edp.web.formmetadata.formformat; + +import com.inspur.edp.formserver.viewmodel.formentity.VoFormModel; +import com.inspur.edp.metadata.rtcustomization.api.entity.DimensionExtendEntity; +import com.inspur.edp.web.common.customexception.WebCustomException; +import io.iec.edp.caf.commons.utils.SpringBeanUtils; +import io.iec.edp.caf.rpc.api.service.RpcClient; + +import java.util.LinkedHashMap; + +public class FormFormatRtcUtility { + + public static boolean canPushFormFormat(String voId) { + try { + LinkedHashMap params = new LinkedHashMap<>(); + params.put("voId", voId); + RpcClient rpcClient = SpringBeanUtils.getBean(RpcClient.class); + return rpcClient.invoke(Boolean.TYPE, "com.inspur.edp.rtc.template.api.rpc.RtcTemplateRpcService.canPushFormFormat", "Bcc", params, null); + } catch (Exception e) { + throw new WebCustomException("failed to invoke the Rpc interface: com.inspur.edp.rtc.template.api.rpc.RtcTemplateRpcService.canPushFormFormat", e); + } + } + + public static void buildRtcFormFormat(VoFormModel voFormModel, DimensionExtendEntity dimension, String voId, String bizObjectID) { + try { + LinkedHashMap params = new LinkedHashMap<>(); + params.put("voFormModel", voFormModel); + params.put("dimensionExtendEntity", dimension); + params.put("voId", voId); + params.put("businessObjectId", bizObjectID); + RpcClient rpcClient = SpringBeanUtils.getBean(RpcClient.class); + rpcClient.invoke(Void.TYPE, "com.inspur.edp.rtc.template.api.rpc.RtcTemplateRpcService.buildRtcFormFormat", "Bcc", params, null); + } catch (Exception e) { + throw new WebCustomException("failed to invoke the Rpc interface: com.inspur.edp.rtc.template.api.rpc.RtcTemplateRpcService.buildRtcFormFormat", e); + } + + } +} diff --git a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/handler/WFFormFormatMobileHandler.java b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/handler/WFFormFormatMobileHandler.java index 95bd4643df32b1265fe2e59ba0cad4c06a9d7202..7c3d375e85e6facf97b2f8ced550909a390dae0f 100644 --- a/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/handler/WFFormFormatMobileHandler.java +++ b/web-form-metadata/src/main/java/com/inspur/edp/web/formmetadata/formformat/handler/WFFormFormatMobileHandler.java @@ -2,8 +2,6 @@ package com.inspur.edp.web.formmetadata.formformat.handler; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; -import com.inspur.edp.customize.form.api.RuntimeCheckVoFormVariableService; -import com.inspur.edp.customize.service.VoRuntimeBuildFormFormatService; import com.inspur.edp.formserver.viewmodel.formentity.*; import com.inspur.edp.formserver.vmapi.formconfig.VoBuildFormFormatService; import com.inspur.edp.lcm.metadata.api.entity.GspMetadata; @@ -14,6 +12,7 @@ import com.inspur.edp.lcm.metadata.api.service.MetadataService; import com.inspur.edp.metadata.rtcustomization.api.entity.DimensionExtendEntity; import com.inspur.edp.web.common.utility.StringUtility; import com.inspur.edp.web.formmetadata.formformat.FormFormatHandler; +import com.inspur.edp.web.formmetadata.formformat.FormFormatRtcUtility; import com.inspur.edp.web.formmetadata.metadata.FormMetadataContent; import io.iec.edp.caf.businessobject.api.entity.DevBasicBoInfo; import io.iec.edp.caf.businessobject.api.service.DevBasicInfoService; @@ -28,12 +27,13 @@ import java.util.*; /** * 向vo推送按钮、字段、命令,用于权限控制 */ -public class WFFormFormatMobileHandler extends FormFormatHandler { +public class WFFormFormatMobileHandler extends FormFormatHandler { - private final List controlsWithButton = Arrays.asList("ListView","Button","ButtonGroup","Card","Section"); + private final List controlsWithButton = Arrays.asList("ListView", "Button", "ButtonGroup", "Card", "Section"); /** * 表单类型 + * * @return */ @Override @@ -63,22 +63,20 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { FormMetadataContent formContents = (FormMetadataContent) formMetadata.getContent(); JsonNode content = formContents.getContents(); String voId = content.at("/module/schemas/0/id").textValue(); - RuntimeCheckVoFormVariableService runtimeCheckVoFormVariableService = SpringBeanUtils.getBean(RuntimeCheckVoFormVariableService.class); - boolean isPushRtcForm = runtimeCheckVoFormVariableService.checkVoFormVariable(voId); + boolean isPushRtcForm = FormFormatRtcUtility.canPushFormFormat(voId); if (!isPushRtcForm) { return; } - VoRuntimeBuildFormFormatService voRuntimeBuildFormFormatService = SpringBeanUtils.getBean(VoRuntimeBuildFormFormatService.class); - VoFormModel voFormModel = getVoFormModel(formMetadata, formatType, null,"LCDP"); - String dim1 = StringUtils.isNotBlank(dimension.getFirstDimension())?dimension.getFirstDimension():"public"; - String dim2 = StringUtils.isNotBlank(dimension.getSecondDimension())?dimension.getSecondDimension():"public"; + VoFormModel voFormModel = getVoFormModel(formMetadata, formatType, null, "LCDP"); + String dim1 = StringUtils.isNotBlank(dimension.getFirstDimension()) ? dimension.getFirstDimension() : "public"; + String dim2 = StringUtils.isNotBlank(dimension.getSecondDimension()) ? dimension.getSecondDimension() : "public"; generateParameters(voFormModel.getUrlParameters(), "dim1", "维度一", dim1); generateParameters(voFormModel.getUrlParameters(), "dim2", "维度二", dim2); generateParameters(voFormModel.getUrlParameters(), "metadataId", "元数据id", dimension.getBasicMetadataId()); - voRuntimeBuildFormFormatService.buildFormFormat(voFormModel, dimension, voId, formMetadata.getHeader().getBizobjectID()); + FormFormatRtcUtility.buildRtcFormFormat(voFormModel, dimension, voId, formMetadata.getHeader().getBizobjectID()); } @Override @@ -135,6 +133,7 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { /** * 获取实体信息 + * * @param formContent * @return */ @@ -167,39 +166,38 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { } - - /** * 提取按钮 + * * @param formContent 表单内容 * @return 按钮信息 */ @Override - public List getButtons(JsonNode formContent){ + public List getButtons(JsonNode formContent) { // 递归找Button JsonNode componentArr = formContent.at("/module/components"); JsonNode viewmodelArr = formContent.at("/module/viewmodels"); - List buttonGroupList = new ArrayList<>(); + List buttonGroupList = new ArrayList<>(); List cardPageviewModelIdList = new ArrayList<>(); - componentArr.forEach(component->{ - String componentType = getValue(component,"componentType",null); - String pageType = getValue(component,"pageType",null); - String viewModelId = getValue(component,"viewModel",null); + componentArr.forEach(component -> { + String componentType = getValue(component, "componentType", null); + String pageType = getValue(component, "pageType", null); + String viewModelId = getValue(component, "viewModel", null); //找到卡片页面的视图模型 - if( "Page".equals(componentType) && "Card".equals(pageType) && StringUtils.isNotBlank(viewModelId)){ + if ("Page".equals(componentType) && "Card".equals(pageType) && StringUtils.isNotBlank(viewModelId)) { cardPageviewModelIdList.add(viewModelId); } }); - for(JsonNode component :componentArr){ - String viewModelId = getValue(component,"viewModel",null); - JsonNode parentViewModel = findParentViewModelId( viewmodelArr, viewModelId); + for (JsonNode component : componentArr) { + String viewModelId = getValue(component, "viewModel", null); + JsonNode parentViewModel = findParentViewModelId(viewmodelArr, viewModelId); //只提取卡片页面及其子组件 - if( cardPageviewModelIdList.contains(getValue(parentViewModel,"id",null))){ + if (cardPageviewModelIdList.contains(getValue(parentViewModel, "id", null))) { searchComponentsForButton(component, buttonGroupList); } } @@ -207,16 +205,16 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { return buttonGroupList; } - private JsonNode findParentViewModelId(JsonNode viewmodelArr,String curViewmodelId){ + private JsonNode findParentViewModelId(JsonNode viewmodelArr, String curViewmodelId) { JsonNode result = null; - if(StringUtils.isNotBlank(curViewmodelId) ){ - for(JsonNode viewmodel :viewmodelArr){ - if(curViewmodelId.equals(getValue(viewmodel,"id",null))){ + if (StringUtils.isNotBlank(curViewmodelId)) { + for (JsonNode viewmodel : viewmodelArr) { + if (curViewmodelId.equals(getValue(viewmodel, "id", null))) { result = viewmodel; - String parentViewModelId = getValue(viewmodel,"parent",null); - if(StringUtils.isNotBlank(parentViewModelId)){ - JsonNode parentViewModel = findParentViewModelId( viewmodelArr, parentViewModelId); - if(parentViewModel != null ){ + String parentViewModelId = getValue(viewmodel, "parent", null); + if (StringUtils.isNotBlank(parentViewModelId)) { + JsonNode parentViewModel = findParentViewModelId(viewmodelArr, parentViewModelId); + if (parentViewModel != null) { result = parentViewModel; } @@ -230,6 +228,7 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { /** * 提取方法 + * * @param formContent * @return */ @@ -237,41 +236,41 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { // 1.遍历页面组件 JsonNode componentArr = formContent.at("/module/components"); String cardViewModelId = null; - for(JsonNode component:componentArr){ - String componentType = getValue(component,"componentType",null); - String pageType = getValue(component,"pageType",null); + for (JsonNode component : componentArr) { + String componentType = getValue(component, "componentType", null); + String pageType = getValue(component, "pageType", null); //找到卡片页面 - if( "Page".equals(componentType) && "Card".equals(pageType)){ - cardViewModelId = getValue(component,"viewModel",""); + if ("Page".equals(componentType) && "Card".equals(pageType)) { + cardViewModelId = getValue(component, "viewModel", ""); break; } } List methodGroupList = new ArrayList<>(); - if(StringUtils.isNotBlank(cardViewModelId)){ + if (StringUtils.isNotBlank(cardViewModelId)) { JsonNode viewModelArr = formContent.at("/module/viewmodels"); //2.遍历视图模型 - for(JsonNode viewModel:viewModelArr){ - String viewModelId = getValue(viewModel,"id",null); - if(StringUtils.isNotBlank(viewModelId) && cardViewModelId.equals(viewModelId)){ + for (JsonNode viewModel : viewModelArr) { + String viewModelId = getValue(viewModel, "id", null); + if (StringUtils.isNotBlank(viewModelId) && cardViewModelId.equals(viewModelId)) { JsonNode commands = viewModel.get("commands"); //3.遍历命令 - if(commands != null && commands.size() > 0){ - commands.forEach(command->{ + if (commands != null && commands.size() > 0) { + commands.forEach(command -> { MethodGroup methodGroup = new MethodGroup(); - methodGroup.setId(getValue(command,"id",null)); - methodGroup.setMethodCode(getValue(command,"code",null)); - methodGroup.setMethodName(getValue(command,"name",null)); + methodGroup.setId(getValue(command, "id", null)); + methodGroup.setMethodCode(getValue(command, "code", null)); + methodGroup.setMethodName(getValue(command, "name", null)); //4.遍历命令参数 JsonNode params = command.get("params"); - if(params != null && params.size() > 0){ + if (params != null && params.size() > 0) { List methodParamList = new ArrayList<>(); - params.forEach(param->{ + params.forEach(param -> { MethodParam methodParam = new MethodParam(); - methodParam.setCode(getValue(param,"name",null)); - methodParam.setName(getValue(param,"shownName",null)); + methodParam.setCode(getValue(param, "name", null)); + methodParam.setName(getValue(param, "shownName", null)); methodParam.setValue(null); methodParamList.add(methodParam); @@ -292,25 +291,26 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { /** * 查找带按钮的组件 - * @param root 页面组件 + * + * @param root 页面组件 * @param buttonGroupList 按钮组列表 */ private void searchComponentsForButton(JsonNode root, List buttonGroupList) { - if(root.isArray()) { + if (root.isArray()) { for (JsonNode jsonNode : root) { searchComponentsForButton(jsonNode, buttonGroupList); } } - if(root.isObject()){ + if (root.isObject()) { JsonNode type = root.get("type"); - if(type != null && controlsWithButton.contains(type.asText())){ + if (type != null && controlsWithButton.contains(type.asText())) { this.findButtons(root, buttonGroupList); - }else { + } else { Iterator fieldNames = root.fieldNames(); - while(fieldNames.hasNext()) { + while (fieldNames.hasNext()) { String fieldName = fieldNames.next(); JsonNode fieldValue = root.get(fieldName); - if(fieldValue.isArray() || fieldValue.isObject()){ + if (fieldValue.isArray() || fieldValue.isObject()) { searchComponentsForButton(fieldValue, buttonGroupList); } } @@ -320,13 +320,14 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { /** * 查找控件中按钮 - * @param node 组件节点 + * + * @param node 组件节点 * @param buttonGroupList 按钮组列表 */ - private void findButtons(JsonNode node,List buttonGroupList){ + private void findButtons(JsonNode node, List buttonGroupList) { String type = node.get("type").asText(); - switch (type){ - case "NavigationBar":{ + switch (type) { + case "NavigationBar": { //在流程中会隐藏头部和尾部,不需要提取导航栏的按钮。 break; // JsonNode toolbar = node.get("toolbar"); @@ -339,52 +340,52 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { // } // break; } - case "ListView":{ + case "ListView": { //删除 - JsonNode swipeToolbar = node.get("swipeToolbar"); - if(swipeToolbar != null){ + JsonNode swipeToolbar = node.get("swipeToolbar"); + if (swipeToolbar != null) { ArrayNode items = (ArrayNode) swipeToolbar.get("items"); - if(items != null && items.size() > 0 ){ - this.findComplexButtons( items, node , buttonGroupList); + if (items != null && items.size() > 0) { + this.findComplexButtons(items, node, buttonGroupList); } } //多选 - JsonNode toolbar = node.get("toolbar"); - if(toolbar != null){ + JsonNode toolbar = node.get("toolbar"); + if (toolbar != null) { ArrayNode items = (ArrayNode) toolbar.get("items"); - if(items != null && items.size() > 0 ){ - this.findComplexButtons( items, node , buttonGroupList); + if (items != null && items.size() > 0) { + this.findComplexButtons(items, node, buttonGroupList); } } break; } - case "Button":{ + case "Button": { findSingleButton(node, buttonGroupList); break; } - case "ButtonGroup":{ + case "ButtonGroup": { ArrayNode items = (ArrayNode) node.get("items"); - if(items != null && items.size() > 0 ){ - this.findComplexButtons( items, node , buttonGroupList); + if (items != null && items.size() > 0) { + this.findComplexButtons(items, node, buttonGroupList); } break; } - case "Card":{ + case "Card": { ArrayNode items = (ArrayNode) node.get("actions"); - if(items != null && items.size() > 0 ){ - this.findComplexButtons( items, node , buttonGroupList); + if (items != null && items.size() > 0) { + this.findComplexButtons(items, node, buttonGroupList); } break; } - case "Section":{ - JsonNode footerToolbar = node.get("footerToolbar"); - if(null == footerToolbar){ + case "Section": { + JsonNode footerToolbar = node.get("footerToolbar"); + if (null == footerToolbar) { break; } ArrayNode items = (ArrayNode) footerToolbar.get("items"); - if(items !=null && items.size() > 0 ){ - this.findComplexButtons( items, node , buttonGroupList); + if (items != null && items.size() > 0) { + this.findComplexButtons(items, node, buttonGroupList); } break; } @@ -393,7 +394,8 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { /** * 查找简单按钮 - * @param node 组件节点 + * + * @param node 组件节点 * @param buttonGroupList 按钮组列表 */ private void findSingleButton(JsonNode node, List buttonGroupList) { @@ -412,11 +414,11 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { //3.创建按钮 List configAbleAttrs = getConfigAbleAttrs(node); if (!configAbleAttrs.isEmpty()) { - Button button = new Button(); + Button button = new Button(); button.setId(node.get("id").asText()); button.setCode(node.get("id").asText()); button.setType(node.get("type").asText()); - button.setName(getName(node,"按钮")); + button.setName(getName(node, "按钮")); button.setConfigurableAttrs(configAbleAttrs); buttonGroup.setButtons(Collections.singletonList(button)); @@ -427,16 +429,17 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { /** * 查找复杂按钮 - * @param childNodes 按钮项 - * @param parentNode 按钮父级信息 + * + * @param childNodes 按钮项 + * @param parentNode 按钮父级信息 * @param buttonGroupList 按钮组列表 */ - private void findComplexButtons(ArrayNode childNodes, JsonNode parentNode , List buttonGroupList){ + private void findComplexButtons(ArrayNode childNodes, JsonNode parentNode, List buttonGroupList) { // 1.创建按钮组。button 当前没有分组信息,用方法名暂时做分组名 ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.setId(parentNode.get("id").asText()); buttonGroup.setCode(parentNode.get("id").asText()); - String name= getName(parentNode,"按钮"); + String name = getName(parentNode, "按钮"); String id = ""; if (parentNode.get("id") != null) { id = parentNode.get("id").asText(); @@ -444,16 +447,16 @@ public class WFFormFormatMobileHandler extends FormFormatHandler { name += "[" + id + "]"; buttonGroup.setName(name); - List