feat: 2.6.0

1. 新增表达式检验逻辑
This commit is contained in:
byteblogs168 2024-01-18 10:29:32 +08:00
parent 054ce1fdf2
commit 0d57da22a1
9 changed files with 80 additions and 60 deletions

View File

@ -1,9 +1,12 @@
package com.aizuda.easy.retry.server.job.task.support.expression;
import cn.hutool.core.util.StrUtil;
import com.aizuda.easy.retry.common.core.exception.EasyRetryCommonException;
import com.aizuda.easy.retry.common.core.util.JsonUtil;
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@ -22,8 +25,9 @@ public class ExpressionInvocationHandler implements InvocationHandler {
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
public Object invoke(Object proxy, Method method, Object[] args) {
try {
Object[] expressionParams = (Object[]) args[1];
String params = (String) expressionParams[0];
Map<String, Object> contextMap = new HashMap<>();
@ -33,5 +37,11 @@ public class ExpressionInvocationHandler implements InvocationHandler {
args[1] = new Object[]{contextMap};
return method.invoke(expressionEngine, args);
} catch (InvocationTargetException e) {
Throwable targetException = e.getTargetException();
throw new EasyRetryServerException(targetException.getMessage());
} catch (Exception e) {
throw new EasyRetryServerException("表达式执行失败", e);
}
}
}

View File

@ -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;
@ -81,8 +82,8 @@ public class WorkflowController {
@PostMapping("/check-node-expression")
@LoginRequired(role = RoleEnum.ADMIN)
public void checkNodeExpression(@RequestBody DecisionConfig decisionConfig) {
workflowService.checkNodeExpression(decisionConfig);
public Pair<Integer, String> checkNodeExpression(@RequestBody DecisionConfig decisionConfig) {
return workflowService.checkNodeExpression(decisionConfig);
}
}

View File

@ -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<WorkflowResponseVO> getWorkflowNameList(String keywords, Long workflowId);
void checkNodeExpression(DecisionConfig decisionConfig);
Pair<Integer, String> checkNodeExpression(DecisionConfig decisionConfig);
}

View File

@ -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) {
public Pair<Integer, String> 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(), new HashMap<>());
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);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,8 +5,8 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Easy Retry</title>
<script type="module" crossorigin src="./assets/O1TCl_bu.js"></script>
<link rel="stylesheet" crossorigin href="./assets/gKrsqr4E.css">
<script type="module" crossorigin src="./assets/8zF6m6u3.js"></script>
<link rel="stylesheet" crossorigin href="./assets/EQnfluSr.css">
</head>
<body>

View File

@ -180,7 +180,7 @@ export default {
z-index: 0;
.gutters {
min-height: 108px;
min-height: 100%;
position: sticky;
background-color: #1e1f22;
color: #7d8799;
@ -188,7 +188,6 @@ export default {
flex-shrink: 0;
display: flex;
flex-direction: column;
height: 100%;
box-sizing: border-box;
inset-inline-start: 0;
z-index: 200;