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