From b3ce91b63025a797572b002e44cbfcc22b920406 Mon Sep 17 00:00:00 2001 From: wangshaoping Date: Thu, 18 Sep 2025 16:40:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6=E5=8F=91?= =?UTF-8?q?=E5=B8=83:=208.2.41=20=20=201.=20=E8=A7=84=E5=88=99=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E5=B0=86=E6=9E=9A=E4=B8=BE=E5=8F=98=E9=87=8F=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E4=B8=BA=E6=9E=9A=E4=B8=BE=E5=80=BC=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=BB=99=E5=AE=A2=E6=88=B7=E7=AB=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端核心发布: 8.2.134 1. 修改错误处理机制 --- .../views/resources/designer/Parameter.vue | 14 +- .../ParameterAndValueTypeServiceImpl.java | 3 + .../common/service/support/Property.java | 9 + .../dictionary/service/EnumItemService.java | 4 +- .../service/impl/EnumItemServiceImpl.java | 33 ++ .../server/model/entity/ParameterEntity.java | 41 +++ .../plugin/manager/ServerExceptionHandler.ts | 28 +- .../src/views/testcase/form/form.vue | 293 ++++++------------ .../platform/core/i18n/exception.properties | 2 +- .../core/i18n/exception_tw_CN.properties | 2 +- .../core/i18n/exception_zh_CN.properties | 2 +- 11 files changed, 231 insertions(+), 200 deletions(-) diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue index e0bb5c1b..a36e5378 100644 --- a/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue +++ b/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue @@ -281,7 +281,11 @@ name: 'componentType', label: $t('re.addition.grid.entity.componentType'), format: (value: any, row: any) => { - return $t('io.sc.engine.rule.core.enums.QualitativeAdditionComponentType.' + value); + if (value) { + return $t('io.sc.engine.rule.core.enums.QualitativeAdditionComponentType.' + value); + } else { + return null; + } }, }, { @@ -293,7 +297,13 @@ width: 70, name: 'required', label: $t('required'), - format: Formater.yesNo(), + format: (value: any, row: any) => { + if (row.componentType) { + return Formater.yesNo()(value); + } else { + return null; + } + }, }, { width: 120, diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/impl/ParameterAndValueTypeServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/impl/ParameterAndValueTypeServiceImpl.java index a09eb86f..08d6cd24 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/impl/ParameterAndValueTypeServiceImpl.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/impl/ParameterAndValueTypeServiceImpl.java @@ -377,10 +377,13 @@ public class ParameterAndValueTypeServiceImpl implements ParameterAndValueTypeSe property.setType("ENUM"); if(EnumDictionaryItemValueType.STRING.equals(item.getValueType())){ property.setValueType("java.lang.String"); + property.setValue(item.getValue()); }else if(EnumDictionaryItemValueType.INTEGER.equals(item.getValueType())){ property.setValueType("java.lang.Long"); + property.setValue(item.getValue()); }else if(EnumDictionaryItemValueType.DECIMAL.equals(item.getValueType())){ property.setValueType("java.math.BigDecimal"); + property.setValue(item.getValue()); } // 添加枚举类型的枚举项的数据类型 buildValueType(parameterAndValueType,property.getValueType(),property.getValueTypeVersion(),locale); diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/support/Property.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/support/Property.java index 0c02fcdc..100e8b01 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/support/Property.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/common/service/support/Property.java @@ -7,6 +7,7 @@ public class Property { private String valueType; private Integer valueTypeVersion; private Boolean valueTypeIsList =false; + private String value; public String getCode() { return code; @@ -55,4 +56,12 @@ public class Property { public void setValueTypeIsList(Boolean valueTypeIsList) { this.valueTypeIsList = valueTypeIsList; } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/EnumItemService.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/EnumItemService.java index 16f08f54..ac82c327 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/EnumItemService.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/EnumItemService.java @@ -4,6 +4,8 @@ import io.sc.engine.rule.server.dictionary.entity.EnumItemEntity; import io.sc.engine.rule.server.dictionary.repository.EnumItemRepository; import io.sc.platform.orm.service.DaoService; +import java.util.Map; + public interface EnumItemService extends DaoService{ - + public Map getAllEnumItemValues(); } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/impl/EnumItemServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/impl/EnumItemServiceImpl.java index dd7d9e6c..f6953b9c 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/impl/EnumItemServiceImpl.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/dictionary/service/impl/EnumItemServiceImpl.java @@ -7,12 +7,15 @@ import io.sc.engine.rule.server.dictionary.repository.EnumDictionaryRepository; import io.sc.engine.rule.server.dictionary.repository.EnumItemRepository; import io.sc.engine.rule.server.dictionary.service.EnumItemService; import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.platform.util.CollectionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; @Service("io.sc.engine.rule.server.dictionary.service.impl.EnumItemServiceImpl") @@ -91,4 +94,34 @@ public class EnumItemServiceImpl extends DaoServiceImpl getAllEnumItemValues() { + Map result =new HashMap<>(); + List enumDictionaryEntities =enumDictionaryRepository.findAll(); + if(CollectionUtil.hasElements(enumDictionaryEntities)){ + for(EnumDictionaryEntity entity : enumDictionaryEntities){ + List items =entity.getItems(); + if(CollectionUtil.hasElements(items)){ + for(EnumItemEntity item : items){ + String key ="#{" + entity.getCode() + (entity.getVersion()==null?"":"_V"+ entity.getVersion())+ "}.#{" + item.getCode() + "}"; + String value =""; + switch (item.getValueType()){ + case INTEGER: + case DECIMAL: + value =item.getValue(); + break; + case STRING: + value ="\"" + item.getValue() + "\""; + break; + } + if(StringUtils.hasText(key) && StringUtils.hasText(value)) { + result.put(key, value); + } + } + } + } + } + return result; + } } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/ParameterEntity.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/ParameterEntity.java index 7881c82d..0164fc26 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/ParameterEntity.java +++ b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/ParameterEntity.java @@ -10,16 +10,19 @@ import io.sc.engine.rule.core.enums.ReplaceMode; import io.sc.engine.rule.server.common.CodeAndNameReplacer; import io.sc.engine.rule.server.common.service.support.ParameterAndValueType; import io.sc.engine.rule.server.common.service.support.ParameterCodeReplacer; +import io.sc.engine.rule.server.dictionary.service.EnumItemService; import io.sc.engine.rule.server.model.entity.parameter.*; import io.sc.engine.rule.server.model.vo.ParameterVo; import io.sc.engine.rule.server.resource.entity.ResourceEntity; import io.sc.engine.rule.server.testcase.annotation.TestCaseParameterAble; import io.sc.engine.rule.server.testcase.wrapper.TestCaseParameterWrapper; +import io.sc.platform.core.Environment; import io.sc.platform.orm.DeepClone; import io.sc.platform.orm.IdClearable; import io.sc.platform.orm.converter.MapStringConverter; import io.sc.platform.orm.converter.NumericBooleanConverter; import io.sc.platform.orm.entity.CorporationAuditorEntity; +import io.sc.platform.util.CollectionUtil; import io.sc.platform.util.ObjectMapperUtil; import org.hibernate.annotations.GenericGenerator; import org.springframework.beans.BeanUtils; @@ -410,12 +413,32 @@ public class ParameterEntity extends CorporationAuditorEntity imple return json; } try { + // 获取枚举项服务 + EnumItemService service =Environment.getInstance().getApplicationContext().getBean(EnumItemService.class); + List properties = ObjectMapperUtil.json().readValue(json, new TypeReference>() { }); for (Property property : properties) { property.setValue(parameterAndValueType.replace(property.getValue(), mode)); + property.setCalValue(parameterAndValueType.replace(property.getValue(), mode)); property.setPrompt(parameterAndValueType.replace(property.getPrompt(), mode)); + property.setCalPrompt(parameterAndValueType.replace(property.getPrompt(), mode)); property.normalize(); + + // 将枚举值变量替换成枚举值常量,便于客户端使用 + if(service!=null){ + Map items =service.getAllEnumItemValues(); + if(items!=null && !items.isEmpty()){ + for(String key : items.keySet()){ + if(property.getCalValue()!=null) { + property.setCalValue(property.getCalValue().replace(key, items.get(key))); + } + if(property.getCalPrompt()!=null) { + property.setCalPrompt(property.getCalPrompt().replace(key, items.get(key))); + } + } + } + } } return ObjectMapperUtil.json().writeValueAsString(properties); } catch (Exception e) { @@ -426,6 +449,7 @@ public class ParameterEntity extends CorporationAuditorEntity imple static class Property { String name; String value; + String calValue; QualitativeAdditionComponentType componentType; Boolean required; String label; @@ -438,6 +462,7 @@ public class ParameterEntity extends CorporationAuditorEntity imple String attachmentExtendNames; Integer attachmentMaxCount; String prompt; + String calPrompt; public void normalize(){ if(componentType==null) { @@ -501,6 +526,14 @@ public class ParameterEntity extends CorporationAuditorEntity imple this.value = value; } + public String getCalValue() { + return calValue; + } + + public void setCalValue(String calValue) { + this.calValue = calValue; + } + public QualitativeAdditionComponentType getComponentType() { return componentType; } @@ -596,6 +629,14 @@ public class ParameterEntity extends CorporationAuditorEntity imple public void setPrompt(String prompt) { this.prompt = prompt; } + + public String getCalPrompt() { + return calPrompt; + } + + public void setCalPrompt(String calPrompt) { + this.calPrompt = calPrompt; + } } } diff --git a/io.sc.platform.core.frontend/src/platform/plugin/manager/ServerExceptionHandler.ts b/io.sc.platform.core.frontend/src/platform/plugin/manager/ServerExceptionHandler.ts index 0321709d..fc370122 100644 --- a/io.sc.platform.core.frontend/src/platform/plugin/manager/ServerExceptionHandler.ts +++ b/io.sc.platform.core.frontend/src/platform/plugin/manager/ServerExceptionHandler.ts @@ -24,11 +24,31 @@ class ServerExceptionHandler { } public static handle(error: ResponseErrorType) { - const message = i18n.global.t(error?.errorMessageI18nKey); - if (error?.errorMessageI18nKey === message) { - NotifyManager.error(i18n.global.t('java.lang.Exception')); + const exception = error?.exception; + + if (exception) { + //普通错误 + if ('java.lang.RuntimeException' === exception) { + // RuntimeException + if (error.errorMessage) { + //服务端指定了错误消息, 则直接使用该消息,如: throw new RuntimeException("error!"); + NotifyManager.error(i18n.global.t(error.errorMessage)); + } else { + //服务端未指定错误消息, 则直接显示:"服务器发生错误,请联系管理员", 如: throw new RuntimeException(); + NotifyManager.error(i18n.global.t('java.lang.Exception')); + } + } else { + // 非 RuntimeException + const message = i18n.global.t(error?.errorMessageI18nKey); + if (error?.errorMessageI18nKey === message) { + NotifyManager.error(i18n.global.t('java.lang.Exception')); + } else { + NotifyManager.error(message); + } + } } else { - NotifyManager.error(message); + //下载错误 + NotifyManager.error(i18n.global.t('java.lang.Exception')); } } diff --git a/io.sc.platform.core.frontend/src/views/testcase/form/form.vue b/io.sc.platform.core.frontend/src/views/testcase/form/form.vue index 8e85a6e1..168b86e4 100644 --- a/io.sc.platform.core.frontend/src/views/testcase/form/form.vue +++ b/io.sc.platform.core.frontend/src/views/testcase/form/form.vue @@ -1,199 +1,112 @@ diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception.properties index aa452db2..1e558c6d 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception.properties @@ -1,4 +1,4 @@ -java.lang.Exception=Server Error\uFF01 Please try again. +java.lang.Exception=Server Error\uFF01 Please Contact the Administrator. io.sc.platform.core.response.ValidateException=Request Parameter Validate Error io.sc.platform.core.exception.PasswordStrengthException=Password must contain uppercase, lowercase, numbers, special characters, and must be greater than or equal to {0} in length. io.sc.platform.core.exception.LicenseInvalidatedException=License Invalidated! \ No newline at end of file diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_tw_CN.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_tw_CN.properties index 0235b712..92393c67 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_tw_CN.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_tw_CN.properties @@ -1,4 +1,4 @@ -java.lang.Exception=\u670D\u52D9\u5668\u932F\u8AA4\uFF01\u8ACB\u91CD\u65B0\u5617\u8A66\u4E00\u6B21. +java.lang.Exception=\u670D\u52D9\u5668\u53D1\u751F\u932F\u8AA4\uFF01\u8ACB\u806F\u7E6B\u7CFB\u7D71\u7BA1\u7406\u54E1. io.sc.platform.core.response.ValidateException=\u8ACB\u6C42\u53C3\u6578\u9A57\u8B49\u932F\u8AA4 io.sc.platform.core.exception.PasswordStrengthException=\u5BC6\u78BC\u5FC5\u9808\u5305\u542B:\u5927\u5BEB\u5B57\u6BCD\u3001\u5C0F\u5BEB\u5B57\u6BCD\u3001\u6578\u5B57\u3001\u7279\u6B8A\u5B57\u7B26, \u4E14\u9577\u5EA6\u5FC5\u9808\u5927\u65BC\u7B49\u65BC {0} \u4E2A\u3002 io.sc.platform.core.exception.LicenseInvalidatedException=\u8A31\u53EF\u8B49\u5931\u6548! \ No newline at end of file diff --git a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_zh_CN.properties b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_zh_CN.properties index d3e0b124..5de9a759 100644 --- a/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_zh_CN.properties +++ b/io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/exception_zh_CN.properties @@ -1,4 +1,4 @@ -java.lang.Exception=\u670D\u52A1\u5668\u9519\u8BEF\uFF01\u8BF7\u91CD\u65B0\u5C1D\u8BD5\u4E00\u6B21. +java.lang.Exception=\u670D\u52A1\u5668\u9519\u8BEF\uFF01\u8BF7\u8054\u7CFB\u7CFB\u7EDF\u7BA1\u7406\u5458. io.sc.platform.core.response.ValidateException=\u8BF7\u6C42\u53C2\u6570\u9A8C\u8BC1\u9519\u8BEF io.sc.platform.core.exception.PasswordStrengthException=\u5BC6\u7801\u5FC5\u987B\u5305\u542B:\u5927\u5199\u5B57\u6BCD\u3001\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u7279\u6B8A\u5B57\u7B26, \u4E14\u957F\u5EA6\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E {0} \u4E2A\u3002 io.sc.platform.core.exception.LicenseInvalidatedException=\u8BB8\u53EF\u8BC1\u5931\u6548! \ No newline at end of file