From c2fccb01b972176dc3da5a497b5e904025e9e98d Mon Sep 17 00:00:00 2001
From: bsw215583320 <baoshiwei121@163.com>
Date: 星期二, 16 四月 2024 15:06:51 +0800
Subject: [PATCH] Merge branch 'master' of http://210.22.126.130:1111/r/dry/herb

---
 jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java |  167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 167 insertions(+), 0 deletions(-)

diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java
new file mode 100644
index 0000000..6ed3ba1
--- /dev/null
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java
@@ -0,0 +1,167 @@
+package org.jeecg.config.mybatis;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import org.jeecg.common.config.TenantContext;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.constant.TenantConstant;
+import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.common.util.oConvertUtils;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
+
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
+
+/**
+ * 鍗曟暟鎹簮閰嶇疆锛坖eecg.datasource.open = false鏃剁敓鏁堬級
+ * @Author zhoujf
+ *
+ */
+@Configuration
+@MapperScan(value={"org.jeecg.modules.**.mapper*"})
+public class MybatisPlusSaasConfig {
+
+    /**
+     * 鏄惁寮�鍚郴缁熸ā鍧楃殑绉熸埛闅旂
+     *  鎺у埗鑼冨洿锛氱敤鎴枫�佽鑹层�侀儴闂ㄣ�佹垜鐨勯儴闂ㄣ�佸瓧鍏搞�佸垎绫诲瓧鍏搞�佸鏁版嵁婧愩�佽亴鍔°�侀�氱煡鍏憡
+     *
+     *  瀹炵幇鍔熻兘
+     *  1.鐢ㄦ埛琛ㄩ�氳繃纭紪鐮佸疄鐜扮鎴稩D闅旂
+     *  2.瑙掕壊銆侀儴闂ㄣ�佹垜鐨勯儴闂ㄣ�佸瓧鍏搞�佸垎绫诲瓧鍏搞�佸鏁版嵁婧愩�佽亴鍔°�侀�氱煡鍏憡闄や簡纭紪鐮佽繕鍔犲叆鐨� TENANT_TABLE 閰嶇疆涓紝瀹炵幇绉熸埛闅旂鏇村畨鍏�
+     *  3.鑿滃崟琛ㄣ�佺鎴疯〃涓嶅仛绉熸埛闅旂
+     *  4.閫氳繃鎷︽埅鍣∕ybatisInterceptor瀹炵幇锛屽鍒犳敼鏌ユ暟鎹� 鑷姩娉ㄥ叆绉熸埛ID
+     */
+    public static final Boolean OPEN_SYSTEM_TENANT_CONTROL = true;
+
+    /**
+     * 鍝簺琛ㄩ渶瑕佸仛澶氱鎴� 琛ㄩ渶瑕佹坊鍔犱竴涓瓧娈� tenant_id
+     */
+    public static final List<String> TENANT_TABLE = new ArrayList<String>();
+
+    static {
+        //1.闇�瑕佺鎴烽殧绂荤殑琛ㄨ鍦ㄦ閰嶇疆
+        if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
+            //a.绯荤粺绠$悊琛�
+            TENANT_TABLE.add("sys_role");
+            TENANT_TABLE.add("sys_user_role");
+            TENANT_TABLE.add("sys_depart");
+            TENANT_TABLE.add("sys_category");
+            TENANT_TABLE.add("sys_data_source");
+            TENANT_TABLE.add("sys_position");
+            TENANT_TABLE.add("sys_announcement");
+        }
+
+        //2.绀轰緥娴嬭瘯
+        //TENANT_TABLE.add("demo");
+        //3.online绉熸埛闅旂娴嬭瘯
+        //TENANT_TABLE.add("ceapp_issue");
+
+        TENANT_TABLE.add("dry_eqp_type");
+        TENANT_TABLE.add("dry_equipment");
+        TENANT_TABLE.add("dry_eqp_type");
+        TENANT_TABLE.add("dry_herb");
+        TENANT_TABLE.add("dry_herb_type");
+        TENANT_TABLE.add("dry_order");
+        TENANT_TABLE.add("dry_shop");
+    }
+
+
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        // 鍏� add TenantLineInnerInterceptor 鍐� add PaginationInnerInterceptor
+        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
+            @Override
+            public Expression getTenantId() {
+                String tenantId = TenantContext.getTenant();
+                //濡傛灉閫氳繃绾跨▼鑾峰彇绉熸埛ID涓虹┖锛屽垯閫氳繃褰撳墠璇锋眰鐨剅equest鑾峰彇绉熸埛锛坰hiro鎺掗櫎鎷︽埅鍣ㄧ殑璇锋眰浼氳幏鍙栦笉鍒扮鎴稩D锛�
+                if(oConvertUtils.isEmpty(tenantId)){
+                    try {
+                        tenantId = TokenUtils.getTenantIdByRequest(SpringContextUtils.getHttpServletRequest());
+                    } catch (Exception e) {
+                        //e.printStackTrace();
+                    }
+                }
+                if(oConvertUtils.isEmpty(tenantId)){
+                    tenantId = "0";
+                }
+                return new LongValue(tenantId);
+            }
+
+            @Override
+            public String getTenantIdColumn(){
+                return TenantConstant.TENANT_ID_TABLE;
+            }
+
+            // 杩斿洖 true 琛ㄧず涓嶈蛋绉熸埛閫昏緫
+            @Override
+            public boolean ignoreTable(String tableName) {
+                for(String temp: TENANT_TABLE){
+                    if(temp.equalsIgnoreCase(tableName)){
+                        return false;
+                    }
+                }
+                return true;
+            }
+        }));
+        //update-begin-author:zyf date:20220425 for:銆怴UEN-606銆戞敞鍏ュ姩鎬佽〃鍚嶉�傞厤鎷︽埅鍣ㄨВ鍐冲琛ㄥ悕闂
+        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor());
+        //update-end-author:zyf date:20220425 for:銆怴UEN-606銆戞敞鍏ュ姩鎬佽〃鍚嶉�傞厤鎷︽埅鍣ㄨВ鍐冲琛ㄥ悕闂
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+        //銆恓eecg-boot/issues/3847銆戝鍔燖Version涔愯閿佹敮鎸�
+        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+        return interceptor;
+    }
+
+    /**
+     * 鍔ㄦ�佽〃鍚嶅垏鎹㈡嫤鎴櫒,鐢ㄤ簬閫傞厤vue2鍜寁ue3鍚屼竴涓〃鏈夊涓殑鎯呭喌,濡俿ys_role_index鍦╲ue3鎯呭喌涓嬭〃鍚嶄负sys_role_index_v3
+     * @return
+     */
+    private DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() {
+        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
+        dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
+            //鑾峰彇闇�瑕佸姩鎬佽В鏋愮殑琛ㄥ悕
+            String dynamicTableName = ThreadLocalDataHelper.get(CommonConstant.DYNAMIC_TABLE_NAME);
+            //褰揹ynamicTableName涓嶄负绌烘椂鎵嶈蛋鍔ㄦ�佽〃鍚嶅鐞嗛�昏緫,鍚﹀垯杩斿洖鍘熷琛ㄥ悕
+            if (ObjectUtil.isNotEmpty(dynamicTableName) && dynamicTableName.equals(tableName)) {
+                // 鑾峰彇鍓嶇浼犻�掔殑鐗堟湰鍙锋爣璇�
+                Object version = ThreadLocalDataHelper.get(CommonConstant.VERSION);
+                if (ObjectUtil.isNotEmpty(version)) {
+                    //鎷兼帴琛ㄥ悕瑙勫垯(鍘熷琛ㄥ悕+涓嬪垝绾�+鍓嶇浼犻�掔殑鐗堟湰鍙�)
+                    return tableName + "_" + version;
+                }
+            }
+            return tableName;
+        });
+        return dynamicTableNameInnerInterceptor;
+    }
+
+//    /**
+//     * 涓嬩釜鐗堟湰浼氬垹闄わ紝鐜板湪涓轰簡閬垮厤缂撳瓨鍑虹幇闂涓嶅緱涓嶉厤缃�
+//     * @return
+//     */
+//    @Bean
+//    public ConfigurationCustomizer configurationCustomizer() {
+//        return configuration -> configuration.setUseDeprecatedExecutor(false);
+//    }
+//    /**
+//     * mybatis-plus SQL鎵ц鏁堢巼鎻掍欢銆愮敓浜х幆澧冨彲浠ュ叧闂��
+//     */
+//    @Bean
+//    public PerformanceInterceptor performanceInterceptor() {
+//        return new PerformanceInterceptor();
+//    }
+
+}

--
Gitblit v1.9.3