1、增加一个MyBatis拦截器,这个拦截器可配置启用,拦截器实现设置虚拟卡占用状态时,统一设置为非占用状态;
2、完善代码。
4个文件已修改
2个文件已添加
114 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/AutoGenerateIdInterceptor.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/MyBatisGlConfig.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/VirtualCardInUseInterceptor.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(121服务器).yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(233服务器).yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-common-web.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/MyBatisGlConfig.java
New file
@@ -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());
            }
        }
    }
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/VirtualCardInUseInterceptor.java
New file
@@ -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) {
                    //当entityClass没有setInUse方法时,会抛出异常
                }
                if (setInUse != null) {
                    setInUse.invoke(entity, 0);
                }
                invocation.getArgs()[PARAMETER_INDEX] = entity;
            }
        }
        return invocation.proceed();
    }
}
pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(121·þÎñÆ÷).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
pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(233·þÎñÆ÷).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
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