From 6a6fdb7655f658550efa1d4916d36f216fe34a23 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期日, 27 四月 2025 09:58:37 +0800
Subject: [PATCH] 1、增加一个MyBatis拦截器,这个拦截器可配置启用,拦截器实现设置虚拟卡占用状态时,统一设置为非占用状态; 2、完善代码。

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/AutoGenerateIdInterceptor.java        |    3 -
 pipIrr-platform/pipIrr-global/src/main/resources/application-common-web.yml                             |    5 ++
 pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(233服务器).yml                     |    5 ++
 pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(121服务器).yml                     |    5 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/MyBatisGlConfig.java             |   35 +++++++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/VirtualCardInUseInterceptor.java |   61 ++++++++++++++++++++++++++++++
 6 files changed, 111 insertions(+), 3 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/AutoGenerateIdInterceptor.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/AutoGenerateIdInterceptor.java
index f518814..3219a26 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/AutoGenerateIdInterceptor.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/AutoGenerateIdInterceptor.java
@@ -1,8 +1,5 @@
 package com.dy.common.mybatis;
 
-
-import com.alibaba.fastjson2.JSONObject;
-import com.alibaba.fastjson2.JSONWriter;
 import com.dy.common.po.BaseEntity;
 import com.dy.common.util.IDLongGenerator;
 import org.apache.ibatis.executor.Executor;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/MyBatisGlConfig.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/MyBatisGlConfig.java
new file mode 100644
index 0000000..dfa7e99
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/MyBatisGlConfig.java
@@ -0,0 +1,35 @@
+package com.dy.pipIrrGlobal.config;
+
+import jakarta.annotation.PostConstruct;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/4/27 9:31
+ * @Description
+ */
+@Configuration
+public class MyBatisGlConfig {
+
+    @Autowired
+    private List<SqlSessionFactory> sqlSessionFactoryList;
+
+    @Value("${common.virtual_card_disable_set_inuse}")
+    private Boolean disableSetInUse;
+    /**
+     * 涓や釜鎷︽埅鍣紝鑷姩鐢熸垚ID锛屽紓甯告椂杈撳嚭SQL
+     */
+    @PostConstruct
+    public void addMyInterceptor() {
+        for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
+            if (disableSetInUse != null && disableSetInUse.booleanValue()) {
+                sqlSessionFactory.getConfiguration().addInterceptor(new VirtualCardInUseInterceptor());
+            }
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/VirtualCardInUseInterceptor.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/VirtualCardInUseInterceptor.java
new file mode 100644
index 0000000..e80ca9a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/VirtualCardInUseInterceptor.java
@@ -0,0 +1,61 @@
+package com.dy.pipIrrGlobal.config;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/4/27 9:19
+ * @Description
+ */
+import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Intercepts;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Signature;
+import java.lang.reflect.Method;
+
+/**
+ * 鎷︽埅铏氭嫙鍗¤〃鐨勬洿鏂版搷浣滐紝璁剧疆鍗犵敤鐘舵�佹搷浣滅殑浣夸笉鑳�
+ */
+@Intercepts({
+        @Signature(
+                type = Executor.class,
+                method = "update",
+                args = {
+                        MappedStatement.class,
+                        Object.class
+                }
+        )
+})
+@Slf4j
+public class VirtualCardInUseInterceptor  implements Interceptor {
+
+    static int MAPPED_STATEMENT_INDEX = 0;
+    static int PARAMETER_INDEX = 1;
+    static String BASE_FIELD_SET_PRIMARY_KEY_FUNTION_SETINUSE = "setInUse";
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        Object entity = invocation.getArgs()[PARAMETER_INDEX];
+        if (entity instanceof SeVirtualCard) {
+            MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[MAPPED_STATEMENT_INDEX];
+            SqlCommandType commandType = mappedStatement.getSqlCommandType();
+            if (commandType.equals(SqlCommandType.INSERT)) {
+                Class<?> entityClass = entity.getClass();
+                Method setInUse = null;
+                try {
+                    setInUse = entityClass.getMethod(BASE_FIELD_SET_PRIMARY_KEY_FUNTION_SETINUSE, Long.class);
+                } catch (Exception e) {
+                    //褰揺ntityClass娌℃湁setInUse鏂规硶鏃讹紝浼氭姏鍑哄紓甯�
+                }
+                if (setInUse != null) {
+                    setInUse.invoke(entity, 0);
+                }
+                invocation.getArgs()[PARAMETER_INDEX] = entity;
+            }
+        }
+        return invocation.proceed();
+    }
+}
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050121\346\234\215\345\212\241\345\231\250\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050121\346\234\215\345\212\241\345\231\250\051.yml"
index 08b0b74..f0d89cb 100644
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050121\346\234\215\345\212\241\345\231\250\051.yml"
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050121\346\234\215\345\212\241\345\231\250\051.yml"
@@ -2,3 +2,8 @@
   # 233鏈嶅姟鍣細ym,mj,sp,test
   # 121鏈嶅姟鍣細mq,yq,hlj,gz,lz,jc
   spring_main_datasource_names: mq,yq,hlj,gz,lz,jc
+
+  # 铏氭嫙鍗¤〃瀛楁in_use鎰忎负鍗犵敤鐘舵�侊紝褰撲负true鏃剁粺涓�璁剧疆鍊间负0
+  # 233鏈嶅姟鍣細false
+  # 121鏈嶅姟鍣細true
+  virtual_card_disable_set_inuse: true
\ No newline at end of file
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050233\346\234\215\345\212\241\345\231\250\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050233\346\234\215\345\212\241\345\231\250\051.yml"
index 919318c..f274f98 100644
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050233\346\234\215\345\212\241\345\231\250\051.yml"
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web\050233\346\234\215\345\212\241\345\231\250\051.yml"
@@ -2,3 +2,8 @@
   # 233鏈嶅姟鍣細ym,mj,sp,test
   # 121鏈嶅姟鍣細mq,yq,hlj,gz,lz,jc
   spring_main_datasource_names: ym,mj,sp,test
+
+  # 铏氭嫙鍗¤〃瀛楁in_use鎰忎负鍗犵敤鐘舵�侊紝褰撲负true鏃剁粺涓�璁剧疆鍊间负0
+  # 233鏈嶅姟鍣細false
+  # 121鏈嶅姟鍣細true
+  virtual_card_disable_set_inuse: false
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web.yml
index 919318c..4bc3dd2 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-common-web.yml
@@ -2,3 +2,8 @@
   # 233鏈嶅姟鍣細ym,mj,sp,test
   # 121鏈嶅姟鍣細mq,yq,hlj,gz,lz,jc
   spring_main_datasource_names: ym,mj,sp,test
+
+  # 铏氭嫙鍗¤〃瀛楁in_use鎰忎负鍗犵敤鐘舵�侊紝褰撲负true鏃剁粺涓�璁剧疆鍊间负0
+  # 233鏈嶅姟鍣細false
+  # 121鏈嶅姟鍣細true
+  virtual_card_disable_set_inuse: false

--
Gitblit v1.8.0