From 8cb7e0ff697195b2ac6738fc396dacc1bbe2b5ae Mon Sep 17 00:00:00 2001 From: zhouhao Date: Sun, 25 Jun 2023 14:14:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E7=9A=84toString=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../crud/events/EntityBeforeCreateEvent.java | 5 +++ .../crud/events/EntityBeforeDeleteEvent.java | 4 +++ .../crud/events/EntityBeforeModifyEvent.java | 8 +++-- .../crud/events/EntityBeforeQueryEvent.java | 4 +++ .../crud/events/EntityBeforeSaveEvent.java | 5 +++ .../web/crud/events/EntityCreatedEvent.java | 5 +++ .../web/crud/events/EntityDeletedEvent.java | 5 +++ .../web/crud/events/EntityModifyEvent.java | 4 +++ .../crud/events/EntityPrepareCreateEvent.java | 5 +++ .../crud/events/EntityPrepareModifyEvent.java | 4 +++ .../crud/events/EntityPrepareSaveEvent.java | 5 +++ .../web/crud/events/EntitySavedEvent.java | 5 +++ .../events/expr/SpelSqlExpressionInvoker.java | 31 ++++++++++++++++--- 13 files changed, 83 insertions(+), 7 deletions(-) diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeCreateEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeCreateEvent.java index 73491fa2c..4cc2bbeee 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeCreateEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeCreateEvent.java @@ -18,4 +18,9 @@ public class EntityBeforeCreateEvent extends DefaultAsyncEvent implements Ser private final List entity; private final Class entityType; + + @Override + public String toString() { + return "EntityBeforeCreateEvent<" + entityType.getSimpleName() + ">"+entity; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeDeleteEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeDeleteEvent.java index 83bb172d1..c05f1ad87 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeDeleteEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeDeleteEvent.java @@ -21,4 +21,8 @@ public class EntityBeforeDeleteEvent extends DefaultAsyncEvent implements Ser private final Class entityType; + @Override + public String toString() { + return "EntityBeforeDeleteEvent<" + entityType.getSimpleName() + ">"+entity; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeModifyEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeModifyEvent.java index 30bbc15da..d94508536 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeModifyEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeModifyEvent.java @@ -8,12 +8,12 @@ import java.io.Serializable; import java.util.List; /** - * @see org.hswebframework.web.crud.annotation.EnableEntityEvent * @param + * @see org.hswebframework.web.crud.annotation.EnableEntityEvent */ @AllArgsConstructor @Getter -public class EntityBeforeModifyEvent extends DefaultAsyncEvent implements Serializable{ +public class EntityBeforeModifyEvent extends DefaultAsyncEvent implements Serializable { private static final long serialVersionUID = -7158901204884303777L; @@ -23,4 +23,8 @@ public class EntityBeforeModifyEvent extends DefaultAsyncEvent implements Ser private final Class entityType; + @Override + public String toString() { + return "EntityBeforeModifyEvent<" + entityType.getSimpleName() + ">\n{\nbefore:" + before + "\nafter: " + after + "\n}"; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeQueryEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeQueryEvent.java index 7c46f3cbd..f163f1834 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeQueryEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeQueryEvent.java @@ -21,4 +21,8 @@ public class EntityBeforeQueryEvent extends DefaultAsyncEvent implements Seri private final Class entityType; + @Override + public String toString() { + return "EntityBeforeQueryEvent<" + entityType.getSimpleName() + ">"+param; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeSaveEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeSaveEvent.java index 0df1b5d58..582e8778b 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeSaveEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityBeforeSaveEvent.java @@ -18,4 +18,9 @@ public class EntityBeforeSaveEvent extends DefaultAsyncEvent implements Seria private final List entity; private final Class entityType; + + @Override + public String toString() { + return "EntityBeforeSaveEvent<" + entityType.getSimpleName() + ">"+entity; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityCreatedEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityCreatedEvent.java index 9653026d9..11415b627 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityCreatedEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityCreatedEvent.java @@ -18,4 +18,9 @@ public class EntityCreatedEvent extends DefaultAsyncEvent implements Serializ private final List entity; private final Class entityType; + + @Override + public String toString() { + return "EntityCreatedEvent<" + entityType.getSimpleName() + ">"+entity; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityDeletedEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityDeletedEvent.java index 746948c52..7fcd6906e 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityDeletedEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityDeletedEvent.java @@ -22,4 +22,9 @@ public class EntityDeletedEvent extends DefaultAsyncEvent implements Serializ private final Class entityType; + @Override + public String toString() { + return "EntityDeletedEvent<" + entityType.getSimpleName() + ">"+entity; + } + } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityModifyEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityModifyEvent.java index e15d55fef..ffece1438 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityModifyEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityModifyEvent.java @@ -23,4 +23,8 @@ public class EntityModifyEvent extends DefaultAsyncEvent implements Serializa private final Class entityType; + @Override + public String toString() { + return "EntityModifyEvent<" + entityType.getSimpleName() + ">\n{\nbefore:" + before + "\nafter: " + after + "\n}"; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareCreateEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareCreateEvent.java index c83d14a52..e0f39d6c2 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareCreateEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareCreateEvent.java @@ -18,4 +18,9 @@ public class EntityPrepareCreateEvent extends DefaultAsyncEvent implements Se private final List entity; private final Class entityType; + + @Override + public String toString() { + return "EntityPrepareCreateEvent<" + entityType.getSimpleName() + ">"+entity; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareModifyEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareModifyEvent.java index d59430d48..752cad145 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareModifyEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareModifyEvent.java @@ -23,4 +23,8 @@ public class EntityPrepareModifyEvent extends DefaultAsyncEvent implements Se private final Class entityType; + @Override + public String toString() { + return "EntityPrepareModifyEvent<" + entityType.getSimpleName() + ">\n{\nbefore:" + before + "\nafter: " + after + "\n}"; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareSaveEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareSaveEvent.java index 030379006..15c073a28 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareSaveEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityPrepareSaveEvent.java @@ -18,4 +18,9 @@ public class EntityPrepareSaveEvent extends DefaultAsyncEvent implements Seri private final List entity; private final Class entityType; + + @Override + public String toString() { + return "EntityPrepareSaveEvent<" + entityType.getSimpleName() + ">"+entity; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntitySavedEvent.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntitySavedEvent.java index 370f9dc09..222030058 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntitySavedEvent.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntitySavedEvent.java @@ -18,4 +18,9 @@ public class EntitySavedEvent extends DefaultAsyncEvent implements Serializab private final List entity; private final Class entityType; + + @Override + public String toString() { + return "EntitySavedEvent<" + entityType.getSimpleName() + ">"+entity; + } } diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/expr/SpelSqlExpressionInvoker.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/expr/SpelSqlExpressionInvoker.java index 01c90b533..291d87781 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/expr/SpelSqlExpressionInvoker.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/expr/SpelSqlExpressionInvoker.java @@ -20,7 +20,7 @@ import java.util.function.BiFunction; @Slf4j public class SpelSqlExpressionInvoker extends AbstractSqlExpressionInvoker { - static class SqlFunctions extends HashMap { + protected static class SqlFunctions extends HashMap { public SqlFunctions(Map map) { super(map); @@ -74,6 +74,20 @@ public class SpelSqlExpressionInvoker extends AbstractSqlExpressionInvoker { return super.resolve(context, targetObject, name.toLowerCase(), argumentTypes); } }); + context.setOperatorOverloader(new OperatorOverloader() { + @Override + public boolean overridesOperation(@Nonnull Operation operation, Object leftOperand, Object rightOperand) throws EvaluationException { + if (leftOperand instanceof Number || rightOperand instanceof Number) { + return leftOperand == null || rightOperand == null; + } + return leftOperand == null && rightOperand == null; + } + + @Override + public Object operate(@Nonnull Operation operation, Object leftOperand, Object rightOperand) throws EvaluationException { + return null; + } + }); return context; } }; @@ -101,7 +115,7 @@ public class SpelSqlExpressionInvoker extends AbstractSqlExpressionInvoker { if (errorCount.get() > 1024) { return null; } - object = new SqlFunctions(object); + object = createArguments(object); if (args != null && args.length != 0) { int index = 0; @@ -126,17 +140,24 @@ public class SpelSqlExpressionInvoker extends AbstractSqlExpressionInvoker { return null; }; } catch (Throwable error) { - log.warn("create sql expression [{}] parser error", sql, error); - return (args, data) -> null; + return spelError(sql, error); } } + protected SqlFunctions createArguments(Map args) { + return new SqlFunctions(args); + } + + protected BiFunction, Object> spelError(String sql, Throwable error) { + log.warn("create sql expression [{}] parser error", sql, error); + return (args, data) -> null; + } static ExtMapAccessor accessor = new ExtMapAccessor(); static class ExtMapAccessor extends MapAccessor { @Override - public boolean canRead(@Nonnull EvaluationContext context, Object target,@Nonnull String name) throws AccessException { + public boolean canRead(@Nonnull EvaluationContext context, Object target, @Nonnull String name) throws AccessException { return target instanceof Map; }