diff --git a/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/helper/ListenerManager.java b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/helper/ListenerManager.java
new file mode 100644
index 0000000..708826f
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/helper/ListenerManager.java
@@ -0,0 +1,183 @@
+package com.ruoyi.common.orm.helper;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.function.Supplier;
+
+/**
+ * 监听器管理
+ *
+ * 考虑任务调度、三方接口回调等可自由控制审计字段
+ *
+ * @author Ice
+ * @version 1.0
+ */
+@Slf4j
+public class ListenerManager {
+
+ private ListenerManager() {}
+
+ private static ThreadLocal ignoreInsertListenerTl = ThreadLocal.withInitial(() -> Boolean.FALSE);
+
+ private static ThreadLocal ignoreUpdateListenerTl = ThreadLocal.withInitial(() -> Boolean.FALSE);
+
+
+ /**
+ * 设置 InsertListenerThreadLocal
+ * @param tl ThreadLocal
+ */
+ public static synchronized void setInsertListenerTl(ThreadLocal tl) {
+ ignoreInsertListenerTl = tl;
+ }
+
+ /**
+ * 设置 UpdateListenerThreadLocal
+ * @param tl ThreadLocal
+ */
+ public static synchronized void setUpdateListenerTl(ThreadLocal tl) {
+ ignoreUpdateListenerTl = tl;
+ }
+
+ /**
+ * 是否执行 InsertListener
+ * @return 是否执行
+ */
+ public static boolean isDoInsertListener() {
+ return !ignoreInsertListenerTl.get();
+ }
+
+ /**
+ * 是否执行 UpdateListener
+ * @return 是否执行
+ */
+ public static boolean isDoUpdateListener() {
+ return !ignoreUpdateListenerTl.get();
+ }
+
+ /**
+ * 忽略 Listener
+ */
+ public static T withoutListener(Supplier supplier) {
+ try {
+ ignoreListener();
+ return supplier.get();
+ } finally {
+ restoreListener();
+ }
+ }
+
+ /**
+ * 忽略 Listener
+ */
+ public static void withoutListener(Runnable runnable) {
+ try {
+ ignoreListener();
+ runnable.run();
+ } finally {
+ restoreListener();
+ }
+ }
+
+
+ /**
+ * 忽略 Listener
+ */
+ public static void ignoreListener() {
+ ignoreInsertListenerTl.set(Boolean.TRUE);
+ ignoreUpdateListenerTl.set(Boolean.TRUE);
+ }
+
+
+ /**
+ * 恢复 Listener
+ */
+ public static void restoreListener() {
+ ignoreInsertListenerTl.remove();
+ ignoreUpdateListenerTl.remove();
+ }
+
+
+
+ /**
+ * 忽略 InsertListener
+ */
+ public static T withoutInsertListener(Supplier supplier) {
+ try {
+ ignoreInsertListener();
+ return supplier.get();
+ } finally {
+ restoreInsertListener();
+ }
+ }
+
+ /**
+ * 忽略 InsertListener
+ */
+ public static void withoutInsertListener(Runnable runnable) {
+ try {
+ ignoreInsertListener();
+ runnable.run();
+ } finally {
+ restoreInsertListener();
+ }
+ }
+
+
+ /**
+ * 忽略 InsertListener
+ */
+ public static void ignoreInsertListener() {
+ ignoreInsertListenerTl.set(Boolean.TRUE);
+ }
+
+
+ /**
+ * 恢复 InsertListener
+ */
+ public static void restoreInsertListener() {
+ ignoreInsertListenerTl.remove();
+ }
+
+
+
+
+ /**
+ * 忽略 UpdateListener
+ */
+ public static T withoutUpdateListener(Supplier supplier) {
+ try {
+ ignoreUpdateListener();
+ return supplier.get();
+ } finally {
+ restoreUpdateListener();
+ }
+ }
+
+ /**
+ * 忽略 UpdateListener
+ */
+ public static void withoutUpdateListener(Runnable runnable) {
+ try {
+ ignoreUpdateListener();
+ runnable.run();
+ } finally {
+ restoreUpdateListener();
+ }
+ }
+
+
+ /**
+ * 忽略 UpdateListener
+ */
+ public static void ignoreUpdateListener() {
+ ignoreUpdateListenerTl.set(Boolean.TRUE);
+ }
+
+
+ /**
+ * 恢复 UpdateListener
+ */
+ public static void restoreUpdateListener() {
+ ignoreUpdateListenerTl.remove();
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityInsertListener.java b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityInsertListener.java
index 16cd82b..2379dee 100644
--- a/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityInsertListener.java
+++ b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityInsertListener.java
@@ -5,6 +5,7 @@ import cn.hutool.http.HttpStatus;
import com.mybatisflex.annotation.InsertListener;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.orm.core.domain.BaseEntity;
+import com.ruoyi.common.orm.helper.ListenerManager;
import com.ruoyi.common.security.utils.LoginHelper;
import java.util.Date;
@@ -19,7 +20,7 @@ public class EntityInsertListener implements InsertListener {
@Override
public void onInsert(Object entity) {
try {
- if (ObjectUtil.isNotNull(entity) && (entity instanceof BaseEntity)) {
+ if (ListenerManager.isDoInsertListener() && ObjectUtil.isNotNull(entity) && (entity instanceof BaseEntity)) {
BaseEntity baseEntity = (BaseEntity) entity;
Long loginUserId = LoginHelper.getUserId();
diff --git a/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityUpdateListener.java b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityUpdateListener.java
index 3b42383..ba72e05 100644
--- a/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityUpdateListener.java
+++ b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/listener/EntityUpdateListener.java
@@ -5,6 +5,7 @@ import cn.hutool.http.HttpStatus;
import com.mybatisflex.annotation.UpdateListener;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.orm.core.domain.BaseEntity;
+import com.ruoyi.common.orm.helper.ListenerManager;
import com.ruoyi.common.security.utils.LoginHelper;
import java.util.Date;
@@ -18,7 +19,7 @@ public class EntityUpdateListener implements UpdateListener {
@Override
public void onUpdate(Object entity) {
try {
- if (ObjectUtil.isNotNull(entity) && (entity instanceof BaseEntity)) {
+ if (ListenerManager.isDoUpdateListener() && ObjectUtil.isNotNull(entity) && (entity instanceof BaseEntity)) {
BaseEntity baseEntity = (BaseEntity) entity;
baseEntity.setUpdateBy(LoginHelper.getUserId());
baseEntity.setUpdateTime(new Date());