diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java index a854a272..a8d6a842 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/WorkflowController.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.web.controller; +import cn.hutool.core.lang.Pair; import com.aizuda.easy.retry.server.common.dto.DecisionConfig; import com.aizuda.easy.retry.server.web.annotation.LoginRequired; import com.aizuda.easy.retry.server.web.annotation.RoleEnum; @@ -74,15 +75,15 @@ public class WorkflowController { @GetMapping("/workflow-name/list") @LoginRequired(role = RoleEnum.USER) public List getWorkflowNameList( - @RequestParam(value = "keywords", required = false) String keywords, - @RequestParam(value = "workflowId", required = false) Long workflowId) { + @RequestParam(value = "keywords", required = false) String keywords, + @RequestParam(value = "workflowId", required = false) Long workflowId) { return workflowService.getWorkflowNameList(keywords, workflowId); } @PostMapping("/check-node-expression") @LoginRequired(role = RoleEnum.ADMIN) - public void checkNodeExpression(@RequestBody DecisionConfig decisionConfig) { - workflowService.checkNodeExpression(decisionConfig); + public Pair checkNodeExpression(@RequestBody DecisionConfig decisionConfig) { + return workflowService.checkNodeExpression(decisionConfig); } } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java index 058f49dd..a5deadc4 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/WorkflowService.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.web.service; +import cn.hutool.core.lang.Pair; import com.aizuda.easy.retry.server.common.dto.DecisionConfig; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.WorkflowQueryVO; @@ -33,5 +34,5 @@ public interface WorkflowService { List getWorkflowNameList(String keywords, Long workflowId); - void checkNodeExpression(DecisionConfig decisionConfig); + Pair checkNodeExpression(DecisionConfig decisionConfig); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java index 771aadb0..ca14d1ce 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java @@ -1,6 +1,7 @@ package com.aizuda.easy.retry.server.web.service.impl; import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.Pair; import cn.hutool.core.util.HashUtil; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.constant.SystemConstants; @@ -8,6 +9,7 @@ import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.core.expression.ExpressionEngine; import com.aizuda.easy.retry.common.core.expression.ExpressionFactory; import com.aizuda.easy.retry.common.core.util.JsonUtil; +import com.aizuda.easy.retry.common.log.EasyRetryLog; import com.aizuda.easy.retry.server.common.WaitStrategy; import com.aizuda.easy.retry.server.common.config.SystemProperties; import com.aizuda.easy.retry.server.common.dto.DecisionConfig; @@ -326,12 +328,19 @@ public class WorkflowServiceImpl implements WorkflowService { } @Override - public void checkNodeExpression(DecisionConfig decisionConfig) { - ExpressionEngine realExpressionEngine = ExpressionTypeEnum.valueOf(decisionConfig.getExpressionType()); - Assert.notNull(realExpressionEngine, () -> new EasyRetryServerException("表达式引擎不存在")); - ExpressionInvocationHandler invocationHandler = new ExpressionInvocationHandler(realExpressionEngine); - ExpressionEngine expressionEngine = ExpressionFactory.getExpressionEngine(invocationHandler); - expressionEngine.eval(decisionConfig.getNodeExpression(), StrUtil.EMPTY); + public Pair checkNodeExpression(DecisionConfig decisionConfig) { + try { + ExpressionEngine realExpressionEngine = ExpressionTypeEnum.valueOf(decisionConfig.getExpressionType()); + Assert.notNull(realExpressionEngine, () -> new EasyRetryServerException("表达式引擎不存在")); + ExpressionInvocationHandler invocationHandler = new ExpressionInvocationHandler(realExpressionEngine); + ExpressionEngine expressionEngine = ExpressionFactory.getExpressionEngine(invocationHandler); + expressionEngine.eval(decisionConfig.getNodeExpression(), StrUtil.EMPTY); + } catch (Exception e) { + EasyRetryLog.LOCAL.error("表达式异常. [{}]", decisionConfig.getNodeExpression(), e); + return Pair.of(StatusEnum.NO.getStatus(), e.getMessage()); + } + + return Pair.of(StatusEnum.YES.getStatus(), StrUtil.EMPTY); } }