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