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