diff --git a/payapi/build.gradle b/payapi/build.gradle
index 7e7d2ca..3e3c2ed 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -59,6 +59,16 @@
     }
 }
 
+repositories {
+    maven {
+        url "http://ykt-nx.supwisdom.com/repository/ecard-repo/"
+        credentials {
+            username "${nxUser}"
+            password "${nxPassword}"
+        }
+    }
+}
+
 dependencies {
     implementation project(":payapi-common")
 
@@ -90,6 +100,9 @@
     implementation "net.javacrumbs.shedlock:shedlock-spring:${shedlockVersion}"
     implementation "net.javacrumbs.shedlock:shedlock-provider-redis-spring:${shedlockVersion}"
 
+    implementation "com.supwisdom:multi-tenant-core:${multiTenantLibVersion}"
+    implementation "com.supwisdom:multi-tenant-datasource:${multiTenantLibVersion}"
+
     implementation "org.bitbucket.b_c:jose4j:${jose4jVersion}"
     implementation files("libs/masmgc.sdk.sms-0.0.1-SNAPSHOT.jar")
     implementation "commons-beanutils:commons-beanutils:${beanutilsVersion}"
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java
index 80cb888..e33c0db 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java
@@ -4,8 +4,8 @@
 import com.supwisdom.dlpay.agent.domain.QrcodePattern;
 import com.supwisdom.dlpay.agent.domain.QrcodePayTrans;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -33,18 +33,18 @@
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   public QrcodePayTrans qrcodePayTransFindByRefno(String refno) {
-    return qrcodeTransDao.findByRefnoAndTenantid(refno, TenantContext.getTenantSchema());
+    return qrcodeTransDao.findByRefnoAndTenantid(refno, TenantContextHolder.getContext().getTenant().getId());
   }
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   public QrcodePayTrans qrcodePayTransFindByMerchIdAndBillno(String merchid, String billno) {
     return qrcodeTransDao.findByAgentMerchIdAndHostdateAndBillnoAndTenantid(merchid,
-        systemUtilService.getSysdatetime().getHostdate(), billno, TenantContext.getTenantSchema());
+        systemUtilService.getSysdatetime().getHostdate(), billno, TenantContextHolder.getContext().getTenant().getId());
   }
 
   public QrcodePayTrans qrcodePayTransSaveOrUpdate(@NotNull QrcodePayTrans bean) {
     if (StringUtil.isEmpty(bean.getTenantid())) {
-      bean.setTenantid(TenantContext.getTenantSchema());
+      bean.setTenantid(TenantContextHolder.getContext().getTenant().getId());
     }
     return qrcodeTransDao.save(bean);
   }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
index c14ee51..a0a5c3b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
@@ -3,7 +3,7 @@
 import com.supwisdom.dlpay.agent.dao.QrcodePatternDao;
 import com.supwisdom.dlpay.agent.domain.QrcodePattern;
 import com.supwisdom.dlpay.agent.service.QrcodePatternService;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
@@ -22,20 +22,20 @@
     @Override
     @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern')")
     public List<QrcodePattern> getAllQrcodePattern() {
-        return qrcodePatternDao.findByTenantid(TenantContext.getTenantSchema());
+        return qrcodePatternDao.findByTenantid(TenantContextHolder.getContext().getTenant().getId());
     }
 
     @Override
     @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true)
     public void deleteAllQrcodePattern() {
-        qrcodePatternDao.deleteByTenantid(TenantContext.getTenantSchema());
+        qrcodePatternDao.deleteByTenantid(TenantContextHolder.getContext().getTenant().getId());
     }
 
     @Override
     @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true)
     public QrcodePattern saveOrUpdateQrcodePattern(@NotNull QrcodePattern pattern) {
         if (pattern.getTenantid() == null || pattern.getTenantid().isEmpty()) {
-            pattern.setTenantid(TenantContext.getTenantSchema());
+            pattern.setTenantid(TenantContextHolder.getContext().getTenant().getId());
         }
         return qrcodePatternDao.save(pattern);
     }
@@ -43,6 +43,6 @@
     @Override
     @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern', #sourceType)")
     public List<QrcodePattern> findAllBySourcetype(String sourceType) {
-        return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContext.getTenantSchema());
+        return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContextHolder.getContext().getTenant().getId());
     }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
index 14631ee..5c6b1ea 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
@@ -4,9 +4,9 @@
 import com.supwisdom.dlpay.api.domain.*;
 import com.supwisdom.dlpay.api.service.SourceTypeService;
 import com.supwisdom.dlpay.exception.TransactionProcessException;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.TradeErrorCode;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
@@ -195,18 +195,18 @@
 
   @Override
   public List<TSourceType> getAllEnabledSourcetype() {
-    return sourceTypeDao.findByEnableAndTenantid(true, TenantContext.getTenantSchema());
+    return sourceTypeDao.findByEnableAndTenantid(true, TenantContextHolder.getContext().getTenant().getId());
   }
 
   @Override
   public TSourceTypeCheckStatus getSourceTypeCheckStatus(String sourceType) {
-    return sourceTypeCheckDao.getBySourceTypeAndTenantId(sourceType, TenantContext.getTenantSchema());
+    return sourceTypeCheckDao.getBySourceTypeAndTenantId(sourceType, TenantContextHolder.getContext().getTenant().getId());
   }
 
   @Override
   public TSourceTypeCheckStatus saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus s) {
     if (s.getTenantId() == null || s.getTenantId().isEmpty()) {
-      s.setTenantId(TenantContext.getTenantSchema());
+      s.setTenantId(TenantContextHolder.getContext().getTenant().getId());
     }
     return sourceTypeCheckDao.save(s);
   }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseAdapter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseAdapter.java
new file mode 100644
index 0000000..53c85bf
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseAdapter.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.framework.core;
+
+public interface DatabaseAdapter {
+  default String getDefaultSchema() {
+    return "";
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java
index 99bb014..8312040 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java
@@ -4,11 +4,22 @@
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-public class DatabaseConfig {
+public class DatabaseConfig implements DatabaseAdapter {
   @Value("${spring.datasource.platform}")
   private String platform;
 
   public String getPlatform() {
     return platform;
   }
+
+  @Override
+  public String getDefaultSchema() {
+    if ("postgresql".equals(getPlatform())) {
+      return "public";
+    } else if ("mysql".equals(getPlatform())) {
+      return "mysql";
+    } else {
+      return "";
+    }
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
index f0cc66c..37f30ea 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
@@ -3,9 +3,9 @@
 import com.supwisdom.dlpay.exception.TransactionException;
 import com.supwisdom.dlpay.framework.domain.TSettleLog;
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.Constants;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.multitenant.TenantDetailsProvider;
 import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -18,6 +18,8 @@
   @Autowired
   private DayendSettleService dayendSettleService;
 
+  @Autowired
+  private TenantDetailsProvider tenantDetailsProvider;
   private TSettleLog settleLog;
 
   private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
@@ -26,7 +28,7 @@
   @SchedulerLock(name = "DayendSettleTask", lockAtMostForString = "PT30M")
   public void doSettleTask() {
     if (logger.isDebugEnabled()) logger.debug("进入日结算任务！");
-    if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID);
+    tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID);
 
     settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
     try {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java
new file mode 100644
index 0000000..d462964
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.framework.core;
+
+import com.supwisdom.multitenant.datasource.MultiTenantDataSourceProvider;
+import com.supwisdom.multitenant.datasource.config.MultiTenantDataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConditionalOnBean({MultiTenantDataSourceAutoConfiguration.class})
+public class MutliTenantDatasourceProviderAdapter implements DatabaseAdapter {
+  private final MultiTenantDataSourceProvider multiTenantDataSourceProvider;
+
+  public MutliTenantDatasourceProviderAdapter(MultiTenantDataSourceProvider multiTenantDataSourceProvider) {
+    this.multiTenantDataSourceProvider = multiTenantDataSourceProvider;
+  }
+
+  @Override
+  public String getDefaultSchema() {
+    return multiTenantDataSourceProvider.defaultSchema();
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TenantCatalogDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TenantCatalogDao.java
new file mode 100644
index 0000000..ce9fe0e
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TenantCatalogDao.java
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TTenantCatalog;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface TenantCatalogDao extends JpaRepository<TTenantCatalog, Integer> {
+  TTenantCatalog findTTenantCatalogByTenantid(String tenant);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java
index 3647664..c893617 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java
@@ -5,7 +5,7 @@
 import java.sql.Timestamp;
 
 @Entity
-@Table(name = "tb_tenant_catalog")
+@Table(name = "tb_tenant_catalog", schema = "public")
 @SequenceGenerator(name = "tenant_catalog_seq")
 public class TTenantCatalog {
   @Id
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
index d110ae7..51c9c3b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
@@ -1,31 +1,29 @@
 package com.supwisdom.dlpay.framework.security;
 
 import com.supwisdom.dlpay.framework.domain.*;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
-import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.system.service.FunctionService;
 import com.supwisdom.dlpay.system.service.OperatorService;
 import com.supwisdom.dlpay.system.service.RoleService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.PermissionEvaluator;
 import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
-import java.util.Collection;
 import java.util.List;
 
 @Component
 public class MyPermissionEvaluator implements PermissionEvaluator {
-  @Autowired
-  private RoleService roleService;
-  @Autowired
-  private OperatorService operatorService;
-  @Autowired
-  private FunctionService functionService;
+  private final RoleService roleService;
+  private final OperatorService operatorService;
+  private final FunctionService functionService;
+
+  public MyPermissionEvaluator(RoleService roleService, OperatorService operatorService, FunctionService functionService) {
+    this.roleService = roleService;
+    this.operatorService = operatorService;
+    this.functionService = functionService;
+  }
 
   @Override
   public boolean hasPermission(Authentication authentication, Object targetUri, Object permission) {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
index 94566fa..d38b881 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
@@ -11,11 +11,11 @@
 import com.supwisdom.dlpay.framework.domain.*;
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.MoneyUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.Subject;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -70,7 +70,7 @@
   public TSettleLog doCreateSettleLog() {
     TSettleLog log = new TSettleLog();
     log.setStarttime(systemUtilService.getSysdatetime().getHostdatetime());
-    log.setTenantId(TenantContext.getTenantSchema());
+    log.setTenantId(TenantContextHolder.getContext().getTenant().getId());
     return settleLogDao.save(log);
   }
 
@@ -82,7 +82,7 @@
   }
 
   private boolean doSwitchPeriod() throws Exception {
-    TPeriod period = periodDao.getTPeriodWithLock(periodYear, periodMonth, TenantContext.getTenantSchema());
+    TPeriod period = periodDao.getTPeriodWithLock(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId());
     if (period.getSettleflag() == 1) {
       throw new Exception("月末结转已完成");
     }
@@ -96,7 +96,7 @@
       periodMonth = periodMonth + 1; //year不变
     }
 
-    TPeriod nextPerid = periodDao.getPeriod(periodYear, periodMonth, TenantContext.getTenantSchema());
+    TPeriod nextPerid = periodDao.getPeriod(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId());
     if (null != nextPerid) {
       if (settledate != Integer.valueOf(nextPerid.getStartdate())) {
         throw new Exception("下一个会计期间的开始日期不正确");
@@ -115,27 +115,27 @@
       nextPerid.setStartdate(startdate.toString());
       nextPerid.setEnddate(enddate.toString());
       nextPerid.setSettleflag(0);
-      nextPerid.setTenantId(TenantContext.getTenantSchema());
+      nextPerid.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       periodDao.save(nextPerid); //保存下个会计期间
     }
 
-    settleCtlDao.updateSettlePeriodByTenantid(periodYear, periodMonth, TenantContext.getTenantSchema());
-    vouchernoCtlDao.updateVouchernoByTenantid(periodMonth, 0, TenantContext.getTenantSchema());
+    settleCtlDao.updateSettlePeriodByTenantid(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId());
+    vouchernoCtlDao.updateVouchernoByTenantid(periodMonth, 0, TenantContextHolder.getContext().getTenant().getId());
     return true;
   }
 
   private void saveVoucher(VoucherTemp voucherTemp) {
     TVoucher voucher = new TVoucher(periodYear, periodMonth, 0, settledate, settledate, voucherTemp.getTranscnt(), Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), "auto", hostdate);
-    voucher.setTenantId(TenantContext.getTenantSchema());
+    voucher.setTenantId(TenantContextHolder.getContext().getTenant().getId());
     voucher = voucherDao.save(voucher);
     TVoucherEntry entry1;
     TVoucherEntry entry2;
     if (voucherTemp.getTransamt() >= 0) {
-      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContext.getTenantSchema());
-      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContext.getTenantSchema());
+      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContextHolder.getContext().getTenant().getId());
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContextHolder.getContext().getTenant().getId());
     } else {
-      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContext.getTenantSchema());
-      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContext.getTenantSchema());
+      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContextHolder.getContext().getTenant().getId());
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContextHolder.getContext().getTenant().getId());
     }
     voucherEntryDao.save(entry1);
     voucherEntryDao.save(entry2);
@@ -143,7 +143,7 @@
 
   @Override
   public boolean doDayendSettle() throws Exception {
-    TSettlectl tSettlectl = settleCtlDao.findByTenantIdWithLock(TenantContext.getTenantSchema());
+    TSettlectl tSettlectl = settleCtlDao.findByTenantIdWithLock(TenantContextHolder.getContext().getTenant().getId());
     if (null == tSettlectl || null == tSettlectl.getBooksetno()) {
       throw new Exception("初始化错误，T_SETTLECTL 无初始化数据");
     }
@@ -164,7 +164,7 @@
       throw new TransactionException(-90, "有对账未完成");
     }
 
-    TPeriod period = periodDao.getPeriod(periodYear, periodMonth, TenantContext.getTenantSchema());
+    TPeriod period = periodDao.getPeriod(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId());
     if (null == period) throw new Exception("year=[" + periodYear + "],month=[" + periodMonth + "] t_period not find ");
     if (settledate > Integer.valueOf(period.getEnddate())) {
       //月切
@@ -174,25 +174,25 @@
     }
 
     //新增科目插入科目余额表（末级科目）
-    List<TSubject> newEndsubjectList = subjectDao.getNewSubjectByTenantid(TenantContext.getTenantSchema());
+    List<TSubject> newEndsubjectList = subjectDao.getNewSubjectByTenantid(TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(newEndsubjectList)) {
       for (TSubject subject : newEndsubjectList) {
         TSubjectbal subjectbal = new TSubjectbal(subject.getId(),subject.getSubjno(), subject.getTenantId());
         subjectbalDao.save(subjectbal);
       }
     }
-    if (subjectDao.checkSettleSubjectByTenantid(TenantContext.getTenantSchema()).getExisted() > 0) {
+    if (subjectDao.checkSettleSubjectByTenantid(TenantContextHolder.getContext().getTenant().getId()).getExisted() > 0) {
       throw new Exception("初始化数据错误:科目余额表数据没有包含所有的科目余额");
     }
 
     //删除未入账凭证
-    if (voucherDao.checkExistUnpostVouhcer(TenantContext.getTenantSchema()).getExisted() > 0) {
-      voucherEntryDao.deleteUnpostVoucherentry(TenantContext.getTenantSchema());
-      voucherDao.deleteUnpostVoucher(TenantContext.getTenantSchema());
+    if (voucherDao.checkExistUnpostVouhcer(TenantContextHolder.getContext().getTenant().getId()).getExisted() > 0) {
+      voucherEntryDao.deleteUnpostVoucherentry(TenantContextHolder.getContext().getTenant().getId());
+      voucherDao.deleteUnpostVoucher(TenantContextHolder.getContext().getTenant().getId());
     }
 
     //用户交易凭证
-    List<VoucherTemp> userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate), TenantContext.getTenantSchema());
+    List<VoucherTemp> userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(userList)) {
       for (VoucherTemp temp : userList) {
         saveVoucher(temp);
@@ -200,16 +200,16 @@
     }
 
     //凭证号
-    TVouchernoCtl vouchernoCtl = vouchernoCtlDao.getVouchernoByTenantid(TenantContext.getTenantSchema());
+    TVouchernoCtl vouchernoCtl = vouchernoCtlDao.getVouchernoByTenantid(TenantContextHolder.getContext().getTenant().getId());
     if (null == vouchernoCtl) {
       vouchernoCtl = new TVouchernoCtl();
       vouchernoCtl.setPeriodMonth(periodMonth);
       vouchernoCtl.setVoucherno(0);
-      vouchernoCtl.setTenantId(TenantContext.getTenantSchema());
+      vouchernoCtl.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       vouchernoCtlDao.save(vouchernoCtl);
     }
     int voucherno = vouchernoCtl.getVoucherno();
-    List<TVoucher> voucherList = voucherDao.getSettleVouchers(TenantContext.getTenantSchema());
+    List<TVoucher> voucherList = voucherDao.getSettleVouchers(TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(voucherList)) {
       for (TVoucher voucher : voucherList) {
         voucherno++;
@@ -223,7 +223,7 @@
 
     Map<String, Double> v_merchbaldict = new HashMap<String, Double>(0);
     //根据商户昨天日结表生成当天日结表（交易前余额）， 新增商户添加记录
-    List<TShopaccday> lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday), TenantContext.getTenantSchema());
+    List<TShopaccday> lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(lastShopaccdays)) {
       for (TShopaccday lastday : lastShopaccdays) {
         TShopaccday today = new TShopaccday(String.valueOf(settledate), lastday.getShopaccno(), periodYear, periodMonth, lastday.getBalance(), 0D, 0D, 0D);
@@ -232,17 +232,17 @@
         v_merchbaldict.put(lastday.getShopaccno(), lastday.getBalance());
       }
     }
-    List<String> newShopaccs = shopaccDao.getNewShopacc(String.valueOf(lastsettday), TenantContext.getTenantSchema()); //新增商户
+    List<String> newShopaccs = shopaccDao.getNewShopacc(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId()); //新增商户
     if(!StringUtil.isEmpty(newShopaccs)){
       for(String accno:newShopaccs){
         TShopaccday today = new TShopaccday(String.valueOf(settledate), accno, periodYear, periodMonth, 0D, 0D, 0D, 0D);
-        today.setTenantId(TenantContext.getTenantSchema());
+        today.setTenantId(TenantContextHolder.getContext().getTenant().getId());
         shopaccdayDao.save(today);
         v_merchbaldict.put(accno, 0D);
       }
     }
 
-    List<MerchBean> merchBeanList = voucherDao.getShopVoucherByAccdate(settledate, TenantContext.getTenantSchema());
+    List<MerchBean> merchBeanList = voucherDao.getShopVoucherByAccdate(settledate, TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(merchBeanList)) {
       for (MerchBean merch : merchBeanList) {
         TShopaccday merchday = shopaccdayDao.getTShopaccdayById(String.valueOf(settledate), merch.getShopaccno());
@@ -254,24 +254,24 @@
         shopaccdayDao.save(merchday);
       }
     }
-    shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime(), TenantContext.getTenantSchema()); //批量更新余额,商户日结表生成
+    shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime(), TenantContextHolder.getContext().getTenant().getId()); //批量更新余额,商户日结表生成
 
     //根据科目昨天日结表生成当天日结表（交易前借贷方余额），新增末级科目插入记录（交易前余额为科目贷方余额）
-    List<TSubjectday> lastSubjectDays = subjectdayDao.getAllByAccdate(String.valueOf(lastsettday), TenantContext.getTenantSchema());
+    List<TSubjectday> lastSubjectDays = subjectdayDao.getAllByAccdate(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(lastSubjectDays)) {
       for (TSubjectday lastday : lastSubjectDays) {
         TSubjectday today = new TSubjectday(lastday.getSubjid(),String.valueOf(settledate), lastday.getSubjno(), periodYear, periodMonth, lastday.getDrbal(), lastday.getCrbal(), 0D, 0D, 0D, 0D, lastday.getTenantId());
         subjectdayDao.save(today);
       }
     }
-    List<TSubjectbal> newSubjectBals = subjectbalDao.getUnsettleSubjectbal(String.valueOf(lastsettday), TenantContext.getTenantSchema());
+    List<TSubjectbal> newSubjectBals = subjectbalDao.getUnsettleSubjectbal(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(newSubjectBals)) {
       for (TSubjectbal newSubject : newSubjectBals) {
         TSubjectday today = new TSubjectday(newSubject.getSubjid(),String.valueOf(settledate), newSubject.getSubjno(), periodYear, periodMonth, newSubject.getBegindrbal(), newSubject.getBegincrbal(), 0D, 0D, 0D, 0D, newSubject.getTenantId());
         subjectdayDao.save(today);
       }
     }
-    List<TSubject> newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate), TenantContext.getTenantSchema()); //新增非末级科目
+    List<TSubject> newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); //新增非末级科目
     if (!StringUtil.isEmpty(newFSubjnos)) {
       for (TSubject subj : newFSubjnos) {
         double beginDrbal = 0;
@@ -289,22 +289,22 @@
     //初始化末级科目期初余额(包含商户科目)
     Map<String, Double> v_subjbaldict = new HashMap<String, Double>(0);
     Map<String, Integer> v_subjbalflagdict = new HashMap<String, Integer>(0);
-    List<MerchBean> subjectList = subjectdayDao.getEndSubjectbalInfos(String.valueOf(settledate), TenantContext.getTenantSchema());
+    List<MerchBean> subjectList = subjectdayDao.getEndSubjectbalInfos(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(subjectList)) {
       for (MerchBean bean : subjectList) {
         v_subjbaldict.put(bean.getShopaccno(), MoneyUtil.formatYuan(bean.getDramt() + bean.getCramt()));
       }
     }
 
-    List<SubjectInfoBean> subjInfoList = subjectbalDao.getSubjectbalAndFlag(TenantContext.getTenantSchema());
+    List<SubjectInfoBean> subjInfoList = subjectbalDao.getSubjectbalAndFlag(TenantContextHolder.getContext().getTenant().getId());
     for (SubjectInfoBean subj : subjInfoList) {
-      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subj.getSubjno(), TenantContext.getTenantSchema());
+      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subj.getSubjno(), TenantContextHolder.getContext().getTenant().getId());
       if (null == tSubjectday) {
         throw new Exception("科目日结表无此科目记录[" + subj.getSubjno() + "]");
       }
 
       v_subjbalflagdict.put(subj.getSubjno(), subj.getBalflag());
-      MerchBean suminfo = voucherDao.getSettleSuminfo(settledate, subj.getSubjno(), TenantContext.getTenantSchema());
+      MerchBean suminfo = voucherDao.getSettleSuminfo(settledate, subj.getSubjno(), TenantContextHolder.getContext().getTenant().getId());
       double sumDramt = ((null == suminfo || null == suminfo.getDramt()) ? 0 : suminfo.getDramt().doubleValue());
       double sumCramt = ((null == suminfo || null == suminfo.getCramt()) ? 0 : suminfo.getCramt().doubleValue());
       tSubjectday.setDramt(sumDramt);
@@ -318,7 +318,7 @@
       subjectdayDao.save(tSubjectday);
     }
     //根据二级更新一级科目日结
-    List<TSubjectday> parentSubject = subjectdayDao.getParentSubjectday(String.valueOf(settledate), TenantContext.getTenantSchema());
+    List<TSubjectday> parentSubject = subjectdayDao.getParentSubjectday(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId());
     for (TSubjectday fsub : parentSubject) {
       FSubjectInfoBean sumInfo = subjectdayDao.getParentSumInfo(String.valueOf(settledate), fsub.getSubjno(), fsub.getTenantId());
       fsub.setBegindrbal((null == sumInfo || null == sumInfo.getBegindrbal()) ? 0D : sumInfo.getBegindrbal());
@@ -332,7 +332,7 @@
     }
 
     //批量更新凭证明细中商户或科目账户的余额
-    List<TVoucherEntry> entryList = voucherEntryDao.getVoucherEntryByVoucherdate(settledate, TenantContext.getTenantSchema());
+    List<TVoucherEntry> entryList = voucherEntryDao.getVoucherEntryByVoucherdate(settledate, TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(entryList)) {
       for (TVoucherEntry vce : entryList) {
         if (Subject.SUBJNO_MACHANT_INCOME.equals(vce.getSubjno())) {
@@ -388,7 +388,7 @@
 
     //核算科目日结表科目余额和凭证明细余额是否一致
     for (String subjno : v_subjbaldict.keySet()) {
-      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subjno, TenantContext.getTenantSchema());
+      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subjno, TenantContextHolder.getContext().getTenant().getId());
       if (!MoneyUtil.moneyEqual(v_subjbaldict.get(subjno), tSubjectday.getDrbal() + tSubjectday.getCrbal())) {
         throw new Exception("结算后检查失败:科目日结表期末余额不等,科目号[" + subjno + "],科目余额[" + (tSubjectday.getDrbal() + tSubjectday.getCrbal()) + "],凭证科目余额[" + v_subjbaldict.get(subjno) + "]");
       }
@@ -404,8 +404,8 @@
     }
 
     //核对商户日结表余额表和科目日结表商户余额是否一致
-    TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), Subject.SUBJNO_MACHANT_INCOME, TenantContext.getTenantSchema());
-    Double merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate), TenantContext.getTenantSchema()); //
+    TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), Subject.SUBJNO_MACHANT_INCOME, TenantContextHolder.getContext().getTenant().getId());
+    Double merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); //
     double shopSubbal = (shopSubjectday == null ? 0 : shopSubjectday.getCrbal());
     double shopMerchbal = (merchbal == null ? 0 : merchbal);
     if (!MoneyUtil.moneyEqual(shopSubbal, shopMerchbal)) {
@@ -413,7 +413,7 @@
     }
 
     //核算一级科目余额是否平衡
-    FSubjectInfoBean allParentSubjbal = subjectdayDao.getAllParentSubjectSumInfo(String.valueOf(settledate), TenantContext.getTenantSchema());
+    FSubjectInfoBean allParentSubjbal = subjectdayDao.getAllParentSubjectSumInfo(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId());
     if (!MoneyUtil.moneyEqual(allParentSubjbal.getBegindrbal(), allParentSubjbal.getBegincrbal())) {
       throw new Exception("结算后检查失败:一级科目余额表期初余额不平衡,借方[" + allParentSubjbal.getBegindrbal() + "],贷方[" + allParentSubjbal.getBegincrbal() + "]");
     }
@@ -424,8 +424,8 @@
       throw new Exception("结算后检查失败:一级科目余额表期末额不平衡,借方[" + allParentSubjbal.getDrbal() + "]贷方[" + allParentSubjbal.getCrbal() + "]");
     }
     //校验科目余额表的balflag=1的总期末余额和balflag=2的总期末余额是否一致
-    Double balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1, TenantContext.getTenantSchema());
-    Double balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2, TenantContext.getTenantSchema());
+    Double balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1, TenantContextHolder.getContext().getTenant().getId());
+    Double balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2, TenantContextHolder.getContext().getTenant().getId());
     if (null == balflag_1_sumbal || null == balflag_1_sumbal) throw new Exception("结算后检查失败:科目余额表无数据");
     if (!MoneyUtil.moneyEqual(balflag_1_sumbal, balflag_2_sumbal)) {
       throw new Exception("结算后检查失败:科目余额表期末余额不平衡,借方[" + balflag_1_sumbal + "],贷方[" + balflag_2_sumbal + "]");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index a15f4de..e3eefc4 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -1,13 +1,14 @@
 package com.supwisdom.dlpay.framework.service.impl;
 
-import com.supwisdom.dlpay.exception.TransactionCheckException;
 import com.supwisdom.dlpay.exception.TransactionProcessException;
 import com.supwisdom.dlpay.framework.core.DatabaseConfig;
 import com.supwisdom.dlpay.framework.dao.*;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
-import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.domain.TBusinesspara;
+import com.supwisdom.dlpay.framework.domain.TSettlectl;
+import com.supwisdom.dlpay.framework.domain.TSyspara;
+import com.supwisdom.dlpay.framework.domain.TTranscode;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.NumberUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.TradeErrorCode;
@@ -16,10 +17,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
 @Service
 public class SystemUtilServiceImpl implements SystemUtilService {
   @Autowired
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
deleted file mode 100644
index bff7098..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.supwisdom.dlpay.framework.tenant;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.sql.DataSource;
-
-import lombok.extern.slf4j.Slf4j;
-import org.hibernate.MultiTenancyStrategy;
-import org.hibernate.cfg.Environment;
-import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
-import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
-import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
-import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.orm.jpa.JpaVendorAdapter;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
-
-
-@Configuration
-@Slf4j
-public class HibernateConfig {
-
-  private final JpaProperties jpaProperties;
-
-  private final HibernateProperties hibernateProperties;
-
-  public HibernateConfig(@Autowired JpaProperties jpaProperties,
-                         HibernateProperties hibernateProperties) {
-    this.jpaProperties = jpaProperties;
-    this.hibernateProperties = hibernateProperties;
-  }
-
-  @Bean
-  public JpaVendorAdapter getJpaVendorAdapter() {
-    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
-    adapter.setGenerateDdl(true);
-    return adapter;
-  }
-
-  @Bean("entityManagerFactory")
-  public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource,
-                                                                         MultiTenantConnectionProvider multiTenantConnectionProvider,
-                                                                         CurrentTenantIdentifierResolver currentTenantIdentifierResolver) {
-    Map<String, Object> properties = new HashMap<>();
-    properties.putAll(hibernateProperties
-        .determineHibernateProperties(jpaProperties.getProperties(),
-            new HibernateSettings()));
-    properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
-    properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider);
-    properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolver);
-
-    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
-    em.setDataSource(dataSource);
-    em.setPackagesToScan("com.supwisdom");
-    em.setJpaPropertyMap(properties);
-    em.setJpaVendorAdapter(getJpaVendorAdapter());
-    log.info("setup multi-tenant entityManagerFactor");
-    return em;
-  }
-
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
deleted file mode 100644
index 0666b65..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.supwisdom.dlpay.framework.tenant;
-
-import com.supwisdom.dlpay.framework.util.StringUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.hibernate.HibernateException;
-import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
-
-/**
- * Created by shuwei on 2018/12/4.
- */
-@Slf4j
-@Component
-public class MultiTenantConnectionProviderImpl implements MultiTenantConnectionProvider {
-  @Autowired
-  private DataSource dataSource;
-
-  @Override
-  public Connection getAnyConnection() throws SQLException {
-    return dataSource.getConnection();
-  }
-
-  @Override
-  public void releaseAnyConnection(Connection connection) throws SQLException {
-    connection.close();
-  }
-
-  @Override
-  public Connection getConnection(String ti) throws SQLException {
-    String tenantIdentifier = TenantContext.getTenantSchema();
-    final Connection connection = getAnyConnection();
-    try {
-      if (!StringUtil.isEmpty(tenantIdentifier)) {
-        log.debug("postgresql set search path to  <" + tenantIdentifier + ">");
-        connection.createStatement().execute("SET search_path = \"" + tenantIdentifier + "\", public");
-      } else {
-        log.debug("postgresql set search path to public");
-        connection.createStatement().execute("SET search_path =  public");
-      }
-    } catch (SQLException e) {
-      throw new HibernateException("Problem setting schema to " + tenantIdentifier, e);
-    }
-    return connection;
-  }
-
-  @Override
-  public void releaseConnection(String tenantIdentifier, Connection connection) throws SQLException {
-    connection.close();
-  }
-
-  @Override
-  public boolean supportsAggressiveRelease() {
-    return false;
-  }
-
-  @SuppressWarnings("rawtypes")
-  @Override
-  public boolean isUnwrappableAs(Class unwrapType) {
-    return false;
-  }
-
-  @Override
-  public <T> T unwrap(Class<T> unwrapType) {
-    return null;
-  }
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java
deleted file mode 100644
index c1dc432..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.supwisdom.dlpay.framework.tenant;
-
-import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
-import org.springframework.stereotype.Component;
-
-/**
- * Created by shuwei on 2018/12/4.
- */
-@Component
-public class MultiTenantIdentifierResolver implements CurrentTenantIdentifierResolver {
-  @Override
-  public String resolveCurrentTenantIdentifier() {
-    if (TenantContext.getTenantSchema() == null) {
-      return "default";
-    }
-    return TenantContext.getTenantSchema();
-  }
-
-  @Override
-  public boolean validateExistingCurrentSessions() {
-    return true;
-  }
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java
index 254c4e4..fa72e3e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.framework.tenant;
 
 
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.cache.interceptor.KeyGenerator;
 
@@ -14,7 +15,7 @@
     StringBuilder name = new StringBuilder();
     name.append(target.getClass().getSimpleName())
         .append(delimiter);
-    String tenant = TenantContext.getTenantSchema();
+    String tenant = TenantContextHolder.getContext().getTenant().getId();
     if (StringUtils.isEmpty(tenant)) {
       tenant = "default";
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java
deleted file mode 100644
index c1d4ca4..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.supwisdom.dlpay.framework.tenant;
-
-/**
- * Created by shuwei on 2018/11/29.
- */
-public class TenantContext {
-  private static ThreadLocal<String> currentTenant = new ThreadLocal<>();
-
-  public static void setTenantSchema(String tid) {
-    currentTenant.set(tid);
-  }
-
-  public static String getTenantSchema() {
-    return currentTenant.get();
-  }
-
-  public static void clear() {
-    currentTenant.set(null);
-  }
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java
index 585767f..21311c7 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.framework.tenant;
 
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -8,7 +9,7 @@
   private static final char delimiter = '-';
 
   public String getId() {
-    String id = TenantContext.getTenantSchema();
+    String id = TenantContextHolder.getContext().getTenant().getId();
     if (id == null || StringUtils.isEmpty(id)) {
       return "default";
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java
deleted file mode 100644
index e60b957..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.supwisdom.dlpay.framework.tenant;
-
-import com.supwisdom.dlpay.framework.domain.TOperator;
-import com.supwisdom.dlpay.framework.util.Constants;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Component
-public class TenantInterceptor extends HandlerInterceptorAdapter {
-
-  @Override
-  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
-      throws Exception {
-    String tenantId = request.getHeader(Constants.HEADER_TETANTID);
-    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
-    if (auth != null && auth.getPrincipal() instanceof TOperator) {
-      TOperator oper = (TOperator) auth.getPrincipal();
-      if (tenantId != null && !oper.getTenantId().equals(tenantId)) {
-        throw new RuntimeException("tenant ID 不匹配");
-      }
-      TenantContext.setTenantSchema(oper.getTenantId());
-    } else {
-      TenantContext.setTenantSchema(tenantId);
-    }
-    return true;
-  }
-
-  @Override
-  public void postHandle(HttpServletRequest request, HttpServletResponse response,
-                         Object handler, ModelAndView modelAndView)
-      throws Exception {
-    //
-  }
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java
index a0173a0..35c05ac 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java
@@ -1,7 +1,7 @@
 package com.supwisdom.dlpay.framework.util;
 
 import com.supwisdom.dlpay.api.util.HMACUtil;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
+import com.supwisdom.multitenant.TenantContextHolder;
 
 public class Signature {
   public static final String SPY_TAC = "DLzJi044R7QHhJCDhpjZId8d";
@@ -12,7 +12,7 @@
   }
 
   public static String generateTac(String factor, String data) {
-    String tenant = TenantContext.getTenantSchema();
+    String tenant = TenantContextHolder.getContext().getTenant().getId();
     if (tenant == null) {
       throw new IllegalArgumentException("TenantID 未定义");
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
index c2dc9d1..63e821c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
@@ -4,11 +4,11 @@
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.framework.domain.TFunction;
 import com.supwisdom.dlpay.framework.domain.TResource;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
 import com.supwisdom.dlpay.system.service.FunctionService;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
@@ -59,7 +59,7 @@
   @ResponseBody
   public JsonResult add(@RequestBody TFunction function) {
     if (function != null) {
-      function.setTenantId(TenantContext.getTenantSchema());
+      function.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       return functionService.saveFunction(function);
     } else {
       return JsonResult.error("添加失败");
@@ -124,7 +124,7 @@
   public JsonResult addres(@RequestBody TResource resource) {
     if (resource != null) {
       if(null == resource.getTenantId()){
-        resource.setTenantId(TenantContext.getTenantSchema());
+        resource.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       }
       return functionService.saveRes(resource);
     } else {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
index 22f391e..7dc43bf 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
@@ -9,12 +9,12 @@
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.service.DictionaryProxy;
 import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.util.ConstantUtil;
 import com.supwisdom.dlpay.util.WebCheckException;
+import com.supwisdom.multitenant.TenantContextHolder;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
@@ -354,7 +354,7 @@
       apiClient.setAppid(appid.trim());
       apiClient.setSecret(RandomUtils.getUUIDStr());
       apiClient.setStatus(TradeDict.STATUS_NORMAL);
-      apiClient.setTenantId(TenantContext.getTenantSchema());
+      apiClient.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       apiClient.setRoles(roles.replaceAll(",", ";"));
       if (paramService.saveOrUpdateApiClient(apiClient)) {
         return JsonResult.ok("新增成功");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
index 508361c..7a7ca11 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
@@ -6,11 +6,11 @@
 import com.supwisdom.dlpay.framework.domain.TOperLog;
 import com.supwisdom.dlpay.framework.domain.TOperRole;
 import com.supwisdom.dlpay.framework.domain.TOperator;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.LogBean;
 import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
 import com.supwisdom.dlpay.system.service.OperatorService;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -78,10 +78,10 @@
       operator.setOpendate(DateUtil.getNow("yyyyMMdd"));
       operator.setStatus(TradeDict.STATUS_NORMAL);
       operator.setOpertype(WebConstant.OPERTYPE_DEFAULT);
-      operator.setTenantId(TenantContext.getTenantSchema());
+      operator.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
       operator.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
-      operator.setTenantId(TenantContext.getTenantSchema());
+      operator.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       operator = operatorDao.save(operator);
       for (String role : roleids) {
         TOperRole operRole = new TOperRole();
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
index 88e7e1b..46c8b14 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
@@ -10,13 +10,12 @@
 import com.supwisdom.dlpay.framework.domain.TApiClient;
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
-import com.supwisdom.dlpay.framework.tenant.TenantHolder;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.util.ConstantUtil;
 import com.supwisdom.dlpay.util.WebCheckException;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
@@ -112,7 +111,7 @@
   @Override
   public boolean saveOrUpdateBusinesspara(TBusinesspara businesspara) {
     if (null != businesspara) {
-      businesspara.setTenantId(TenantContext.getTenantSchema());
+      businesspara.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       businessparaDao.save(businesspara);
       return true;
     }
@@ -182,7 +181,7 @@
   @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', #sourceType.sourceType)")
   public boolean saveOrUpdateSourceType(TSourceType sourceType) {
     if (null != sourceType) {
-      sourceType.setTenantid(TenantContext.getTenantSchema());
+      sourceType.setTenantid(TenantContextHolder.getContext().getTenant().getId());
       sourceTypeDao.save(sourceType);
       return true;
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
index ce04c41..0d908a2 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
@@ -7,13 +7,13 @@
 import com.supwisdom.dlpay.framework.domain.TResource;
 import com.supwisdom.dlpay.framework.domain.TRole;
 import com.supwisdom.dlpay.framework.domain.TRoleFunction;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import com.supwisdom.dlpay.system.service.RoleService;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -96,7 +96,7 @@
       temp.setRoleName(role.getRoleName());
       temp.setRoleDesc(role.getRoleDesc());
       temp.setLastsaved(DateUtil.getNow());
-      temp.setTenantId(TenantContext.getTenantSchema());
+      temp.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       roleDao.save(temp);
     } else {
       TRole temp = roleDao.findByRoleName(role.getRoleName());
@@ -107,7 +107,7 @@
       role.setCreatetime(DateUtil.getNow());
       role.setEditflag(1);
       role.setRoleCode("ROLE_ADMIN");
-      role.setTenantId(TenantContext.getTenantSchema());
+      role.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       roleDao.save(role);
     }
     return JsonResult.ok("成功");
@@ -134,7 +134,7 @@
     TPermission perm = new TPermission();
     perm.setRoleId(roleId);
     perm.setResid(resId);
-    perm.setTenantId(TenantContext.getTenantSchema());
+    perm.setTenantId(TenantContextHolder.getContext().getTenant().getId());
     return perm;
   }
 
@@ -147,7 +147,7 @@
     TRoleFunction func = new TRoleFunction();
     func.setFunctionId(funcId);
     func.setRoleId(roleId);
-    func.setTenantId(TenantContext.getTenantSchema());
+    func.setTenantId(TenantContextHolder.getContext().getTenant().getId());
     return func;
   }
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
index 1cccf99..d647d39 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
@@ -17,13 +17,13 @@
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.domain.*;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.*;
 import com.supwisdom.dlpay.system.service.ShopDataService;
 import com.supwisdom.dlpay.util.ConstantUtil;
 import com.supwisdom.dlpay.util.EnumCheck;
 import com.supwisdom.dlpay.util.WebCheckException;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -174,7 +174,7 @@
 
     SystemDateTime dt = systemUtilService.getSysdatetime();
     shop.setOpendate(dt.getHostdate());
-    shop.setTenantId(TenantContext.getTenantSchema());
+    shop.setTenantId(TenantContextHolder.getContext().getTenant().getId());
     shop.setAddOperid(oper == null ? null : oper.getOperid());
     if (!needCheck) {
       //不需要审核
@@ -328,7 +328,7 @@
       //新增
       SystemDateTime dt = systemUtilService.getSysdatetime();
       shop.setOpendate(dt.getHostdate());
-      shop.setTenantId(TenantContext.getTenantSchema());
+      shop.setTenantId(TenantContextHolder.getContext().getTenant().getId());
       shopDao.save(shop);
       if (enumUtil.isInEnums(shop.getShoptype(), ShopTypes.NORMAL)) {
         TShopacc shopacc = new TShopacc();
@@ -413,7 +413,7 @@
   @Override
   public boolean saveOrUpdateShopPaytype(TShopSourceType shopPaytype) {
     if (null != shopPaytype) {
-      shopPaytype.setTenantid(TenantContext.getTenantSchema());
+      shopPaytype.setTenantid(TenantContextHolder.getContext().getTenant().getId());
       shopSourceTypeDao.save(shopPaytype);
       return true;
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java
index b8790ae..a34165a 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java
@@ -8,11 +8,11 @@
 import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus;
 import com.supwisdom.dlpay.api.domain.TTransactionChkdtl;
 import com.supwisdom.dlpay.api.domain.TTransactionChkfile;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.system.service.SourcetypeCheckManagerService;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -88,7 +88,7 @@
 
   @Override
   public List<TSourceType> getNeedCheckSourcetype() {
-    List<TSourceType> list = sourceTypeDao.findNeedChecks(TenantContext.getTenantSchema());
+    List<TSourceType> list = sourceTypeDao.findNeedChecks(TenantContextHolder.getContext().getTenant().getId());
     if (!StringUtil.isEmpty(list)) {
       return list;
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index 01105f8..549412b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -7,7 +7,6 @@
 import com.supwisdom.dlpay.api.types.SexTypes;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.CitizenCardSearchBean;
 import com.supwisdom.dlpay.system.bean.CitizenCardShowBean;
@@ -15,6 +14,7 @@
 import com.supwisdom.dlpay.system.service.UserDataService;
 import com.supwisdom.dlpay.util.ConstantUtil;
 import com.supwisdom.dlpay.util.WebCheckException;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -103,7 +103,7 @@
         person.setStatus(TradeDict.STATUS_NORMAL);
       }
       person.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
-      person.setTenantid(TenantContext.getTenantSchema());
+      person.setTenantid(TenantContextHolder.getContext().getTenant().getId());
       personDao.save(person);
       return JsonResult.ok("修改成功");
     } else {
@@ -114,7 +114,7 @@
       SystemDateTime systemDateTime = systemUtilService.getSysdatetime();
       person.setStatus(TradeDict.STATUS_NORMAL);
       person.setLastsaved(systemDateTime.getHostdatetime());
-      person.setTenantid(TenantContext.getTenantSchema());
+      person.setTenantid(TenantContextHolder.getContext().getTenant().getId());
       person = personDao.save(person);
 
       TAccount account = new TAccount();
@@ -344,7 +344,7 @@
         person.setEmail(null == email ? null : email.trim());
         person.setMobile(null == mobile ? null : mobile.trim());
         person.setLastsaved(dt.getHostdatetime());
-        person.setTenantid(TenantContext.getTenantSchema());
+        person.setTenantid(TenantContextHolder.getContext().getTenant().getId());
         person = personDao.save(person);
 
         TAccount account = new TAccount();
@@ -457,7 +457,7 @@
           newPerson.setEmail(null == email ? null : email.trim());
           newPerson.setMobile(null == mobile ? null : mobile.trim());
           newPerson.setLastsaved(dt.getHostdatetime());
-          newPerson.setTenantid(TenantContext.getTenantSchema());
+          newPerson.setTenantid(TenantContextHolder.getContext().getTenant().getId());
           newPerson = personDao.save(newPerson);
 
           TAccount account = new TAccount();
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index fd908eb..746f6b2 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -1,6 +1,12 @@
 package com.supwisdom.dlpay
 
+import com.supwisdom.dlpay.framework.dao.TenantCatalogDao
 import com.supwisdom.dlpay.framework.tenant.TenantCacheKeyGen
+import com.supwisdom.dlpay.framework.util.Constants
+import com.supwisdom.multitenant.TenantDetails
+import com.supwisdom.multitenant.TenantDetailsProvider
+import com.supwisdom.multitenant.annotations.EnableHttpHeaderTenantInterceptor
+import com.supwisdom.multitenant.annotations.EnableSessionTenantInterceptor
 import io.lettuce.core.ReadFrom
 import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.LockProvider
@@ -161,10 +167,34 @@
     }
 }
 
+@Component
+class MyTenantDetailsProvider : TenantDetailsProvider {
+    @Autowired
+    private lateinit var tenantCatalogDao: TenantCatalogDao
+
+    private val defaultTenant = TenantDetails().apply {
+        id = Constants.DEFAULT_TENANTID
+        dbSchema = "public"
+        dataCenter = "defaul"
+    }
+
+    override fun createDetailsById(id: String?): TenantDetails {
+        return tenantCatalogDao.findTTenantCatalogByTenantid(id)?.let { catalog ->
+            TenantDetails().apply {
+                this.id = catalog.tenantid
+                dbSchema = catalog.tenantid
+                dataCenter = catalog.dataCenter
+            }
+        } ?: return defaultTenant
+    }
+}
+
 @SpringBootApplication
 @EnableDiscoveryClient
 @EnableScheduling
 @EnableCaching
+@EnableHttpHeaderTenantInterceptor
+@EnableSessionTenantInterceptor
 @ServletComponentScan
 class PayApiApplication : SpringBootServletInitializer() {
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
index 19f5064..29f00d5 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
@@ -2,11 +2,9 @@
 
 import com.supwisdom.dlpay.api.bean.JsonResult
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
-import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.CommonService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import mu.KotlinLogging
 import org.aspectj.lang.ProceedingJoinPoint
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
index 10541a8..b2b5ed4 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
@@ -13,10 +13,11 @@
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.service.DayendSettleService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.multitenant.TenantContextHolder
+import com.supwisdom.multitenant.TenantDetailsProvider
 import mu.KotlinLogging
 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
 import org.springframework.beans.factory.annotation.Autowired
@@ -89,9 +90,12 @@
     @Autowired
     private lateinit var shopaccService: ShopaccService
 
+    @Autowired
+    private lateinit var tenantDetailsProvider: TenantDetailsProvider
+
     @Async("shopAccBalanceUpdater")
     fun updateShopBalance(shopdtl: TShopdtl) {
-        TenantContext.setTenantSchema(shopdtl.tenantid)
+        TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(shopdtl.tenantid)
         shopaccService.recalcShopBalance(shopdtl.refno, true)
     }
 }
@@ -112,10 +116,13 @@
     @Autowired
     private lateinit var systemUtilService: SystemUtilService
 
+    @Autowired
+    private lateinit var tenantDetailsProvider: TenantDetailsProvider
+
     @Async("queryAgentPayResult")
     fun queryResult(transaction: TTransactionMain, qcnt: Int) {
         try {
-            if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(transaction.tenantid)
+            TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(transaction.tenantid)
 
             if (qcnt >= YnrccUtil.QUERY_MAX_COUNT) {
                 //查询超最大次数
@@ -185,10 +192,13 @@
 
     private val logger = KotlinLogging.logger { }
 
+    @Autowired
+    private lateinit var tenantDetailsProvider: TenantDetailsProvider
+
     @Async("handSettlementAsyncTask")
     fun doHandSettleTask() {
         logger.info("进入手动发起的异步结算：")
-        if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
+        TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(Constants.DEFAULT_TENANTID)
         val settleLog = dayendSettleService.doCreateSettleLog() //记录日志
         try {
             val ret = dayendSettleService.doDayendSettle()
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
index 32c43b6..212dae7 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
@@ -8,8 +8,6 @@
 import com.supwisdom.dlpay.api.service.DaliDatasyncService
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
-import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.framework.util.SysparaUtil
@@ -17,7 +15,7 @@
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.*
-import java.io.*
+import java.io.File
 import java.nio.charset.Charset
 
 @RequestMapping("/api/common/dlcard")
@@ -38,7 +36,6 @@
     @PostMapping("/datasync")
     fun daliDatasync(@RequestBody param: DaliDatasyncParam): ResponseEntity<Any> {
         try {
-            if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置
             param.checkParam()
             val appid = systemUtilService.getSysparaValue(SysparaUtil.DLCARDMANAGER_APPID)
             val appkey = systemUtilService.getSysparaValue(SysparaUtil.DLCARDMANAGER_SECRET)
@@ -131,7 +128,6 @@
         }
 
         try {
-            if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置
             val txtFile = File(filename)
             val batchSize = 1000
             var sumCount = 0
@@ -219,7 +215,6 @@
         }
 
         try {
-            if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置
             var totalcnt = 0
             var failcnt = 0
             var detailMsg = ""
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
index 3a133e2..e578794 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
@@ -3,7 +3,8 @@
 import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.service.AlipayService
 import com.supwisdom.dlpay.agent.service.WechatService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
+import com.supwisdom.multitenant.TenantContextHolder
+import com.supwisdom.multitenant.TenantDetailsProvider
 import org.dom4j.Element
 import org.dom4j.io.SAXReader
 import org.slf4j.LoggerFactory
@@ -27,13 +28,15 @@
     lateinit var alipayService: AlipayService
     @Autowired
     lateinit var wechatService: WechatService
+    @Autowired
+    lateinit var tenantDetailsProvider: TenantDetailsProvider
 
     @RequestMapping(value = ["/wechat/{schema}"])
     @ResponseBody
     fun index(@PathVariable schema: String, request: HttpServletRequest,
               response: HttpServletResponse): String {
         logger.error("====================== 收到微信回调通知 wechat notify: ========================")
-        TenantContext.setTenantSchema(schema)
+        tenantDetailsProvider.defaultTenant(schema)
         try {
             // 解析结果存储在HashMap
             var map: MutableMap<String, String> = HashMap()
@@ -87,7 +90,7 @@
     fun alipay(@PathVariable schema: String, request: HttpServletRequest,
                response: HttpServletResponse): String {
         logger.error("====================== 收到支付宝回调通知 alipay notify: ========================")
-        TenantContext.setTenantSchema(schema)
+        tenantDetailsProvider.defaultTenant(schema)
         // 解析结果存储在HashMap
         val map = makeMapFromParam(request)
         val resp = alipayService.doNotify(map)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
index 97f2403..b1a0a54 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
@@ -1,26 +1,23 @@
 package com.supwisdom.dlpay.api.controller
 
-import com.supwisdom.dlpay.api.bean.DownloadShopBillData
 import com.supwisdom.dlpay.api.bean.DownloadShopBillParam
 import com.supwisdom.dlpay.api.bean.OpenShopParam
 import com.supwisdom.dlpay.api.bean.QueryShopParam
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
-import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.api.service.ShopService
 import com.supwisdom.dlpay.exception.TransactionException
+import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.CommonService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import com.supwisdom.dlpay.system.service.DtlDataService
 import com.supwisdom.dlpay.util.ConstantUtil
-import org.apache.log4j.spi.ErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.*
+import java.io.OutputStream
 import java.net.URLDecoder
 import java.nio.charset.StandardCharsets
 import javax.servlet.http.HttpServletResponse
-import java.io.OutputStream as OutputStream
 
 @RestController
 @RequestMapping("/api/shop")
@@ -35,7 +32,6 @@
     @PostMapping("/open")
     fun openAccount(@RequestBody param: OpenShopParam): ResponseEntity<Any> {
         try {
-            TenantContext.setTenantSchema(param.tenantid)
             shopService.findByThirdUniqueId(param.shopUniqueId)?.let {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(TradeErrorCode.BUSINESS_SHOP_EXISTS, "该商户唯一号[${param.shopUniqueId}]已经存在"))
@@ -62,7 +58,6 @@
     @GetMapping("/query")
     fun queryShop(@RequestBody param: QueryShopParam): ResponseEntity<Any> {
         try {
-            TenantContext.setTenantSchema(param.tenantid)
             shopService.findByShopBySearch(param.shopid, param.shopaccno, param.shopUniqueId)?.let {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .data("shop", it)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index 59c4278..cf9fd8f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -9,17 +9,16 @@
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.Subject
 import com.supwisdom.dlpay.framework.util.TradeCode
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.validation.annotation.Validated
 import org.springframework.web.bind.annotation.*
 import java.net.URLDecoder
-import javax.validation.Valid
 import kotlin.math.roundToInt
 
 @RestController
@@ -303,7 +302,7 @@
         val originTrans = transactionService.findTransactionByRefno(request.originRefno)
                 ?: return ResponseBodyBuilder.failEntity(result, TradeErrorCode.TRANSACTION_NOT_EXISTS,
                         "退款原交易参考号不存在")
-        if (originTrans.tenantid != TenantContext.getTenantSchema()) {
+        if (originTrans.tenantid != TenantContextHolder.getContext().tenant.id) {
             return ResponseBodyBuilder.failEntity(result, TradeErrorCode.INPUT_DATA_ERROR,
                     "退款交易参考号租户错误")
         }
@@ -354,7 +353,7 @@
                 ?: throw TransactionCheckException(TradeErrorCode.TRANSACTION_NOT_EXISTS
                         , "交易不存在")
         val result = CardBizResponse()
-        if (transaction.tenantid != TenantContext.getTenantSchema()) {
+        if (transaction.tenantid != TenantContextHolder.getContext().tenant.id) {
             return ResponseBodyBuilder.failEntity(result, TradeErrorCode.INPUT_DATA_ERROR,
                     "非本租户交易参考号")
         }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
index eec664a..33d9a72 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
@@ -11,15 +11,14 @@
 import com.supwisdom.dlpay.api.service.TransactionReconciliationService
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.multitenant.TenantDetailsProvider
 import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.SchedulerLock
 import org.springframework.beans.BeansException
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.context.ApplicationContext
 import org.springframework.scheduling.annotation.Async
 import org.springframework.scheduling.annotation.AsyncResult
 import org.springframework.scheduling.annotation.Scheduled
@@ -81,6 +80,9 @@
     @Autowired
     private lateinit var sourceTypeCheckExecutor: SourceTypeCheckExecutor
 
+    @Autowired
+    private lateinit var tenantDetailsProvider: TenantDetailsProvider
+
     private fun newSourceTypeStatus(sourceType: TSourceType, accdate: String): TSourceTypeCheckStatus {
         return sourceTypeService.saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus().apply {
             this.sourceType = sourceType.sourceType
@@ -160,7 +162,7 @@
     @Scheduled(cron = "\${payapi.sourcetype.checker.scheduler:-}")
     @SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostForString = "PT30M")
     fun runCheck() {
-        if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
+        tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID)
 
         val allSourcetype = sourceTypeService.allEnabledSourcetype
                 ?: return
@@ -246,6 +248,9 @@
     @Autowired
     private lateinit var sourceTypeService: SourceTypeService
 
+    @Autowired
+    private lateinit var tenantDetailsProvider: TenantDetailsProvider
+
     private val logger = KotlinLogging.logger { }
 
     private fun getProvider(sourcetype: String): CheckFileProvider? {
@@ -271,7 +276,7 @@
     fun checkAndDownloadChkfile(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
         // 2. 根据对账日期下载对账文件
         try {
-            if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(checkStatus.tenantId)
+            tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID)
             if (checkStatus.settleStatus) {
                 return AsyncResult(ExecutorResult(checkStatus, FAIL, "[${checkStatus.checkAccdate}]日对账已完成"))
             }
@@ -314,7 +319,7 @@
     @Async("sourcetypeCheckTaskExecutor")
     fun reconciliation(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
         // 3. 完成对账
-        if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(checkStatus.tenantId)
+        tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID)
         if (!checkStatus.checkFileOk) {
             return AsyncResult(ExecutorResult(checkStatus, FAIL, "checkAccdate=[${checkStatus.checkAccdate}]对账单未完成下载，不能对账"))
         } else if (checkStatus.settleStatus) {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt
deleted file mode 100644
index b1bc339..0000000
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.supwisdom.dlpay.api
-
-import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
-import com.supwisdom.dlpay.agent.service.CitizencardPayService
-import com.supwisdom.dlpay.api.service.SourceTypeService
-import com.supwisdom.dlpay.api.service.TransactionReconciliationService
-import com.supwisdom.dlpay.api.service.YnrccBusinessService
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.DateUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
-import mu.KotlinLogging
-import net.javacrumbs.shedlock.core.SchedulerLock
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.scheduling.annotation.Scheduled
-import org.springframework.stereotype.Component
-import org.springframework.web.client.RestTemplate
-
-import com.sun.jersey.api.client.Client
-import com.sun.jersey.api.client.ClientResponse
-import com.supwisdom.dlpay.api.bean.YnrccChkfileBean
-import com.supwisdom.dlpay.api.domain.TTransactionChkfile
-import com.supwisdom.dlpay.framework.tenant.TenantContext
-import com.supwisdom.dlpay.framework.util.Constants
-import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.util.ConstantUtil
-import java.io.BufferedReader
-import java.io.InputStream
-import java.io.InputStreamReader
-import javax.ws.rs.core.MediaType
-
-
-/**
- * 第三方对账任务
- * */
-@Component
-class DownloadYnrccChkfileTask {
-    @Autowired
-    private lateinit var systemUtilService: SystemUtilService
-    @Autowired
-    private lateinit var ynrccBusinessService: YnrccBusinessService
-    @Autowired
-    private lateinit var citizencardPayService: CitizencardPayService
-    @Autowired
-    private lateinit var transactionReconciliationService: TransactionReconciliationService
-    @Autowired
-    private lateinit var sourceTypeService: SourceTypeService
-
-    private val logger = KotlinLogging.logger { }
-
-
-//    @Scheduled(cron = "\${download.ynrcc.chkfile.cron:-}")
-//    @SchedulerLock(name = "DownloadYnrccChkfileSchedulerTask", lockAtMostForString = "PT10M")
-    fun doDownloadYnrccChkfile() {
-        try {
-            if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
-            //下载对账单逻辑
-            val hostdate = systemUtilService.sysdatetime.hostdate
-            val downloadLastdate = ynrccBusinessService.getLastDownloadBillDate()
-            val diffDays = DateUtil.getIntervalDay(downloadLastdate, hostdate).toInt()
-            logger.info("大理农商行对账单下载：downloadLastdate=$downloadLastdate, hostdate=$hostdate, diffDays=$diffDays ")
-
-            for (i in 1 until diffDays) {
-                val billDate = DateUtil.getNewDay(downloadLastdate, i) //要取对账单的日期
-
-                val chkfile = transactionReconciliationService.doInitTransactionChkfile(billDate, TradeDict.PAYTYPE_CITIZEN_CARD)
-
-                val resp = citizencardPayService.getChkfilename(billDate, null)
-                if (YnrccUtil.CODE_SUCCESS == resp.code) {
-                    val agentConfig = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
-                    val agentUrl = agentConfig[YnrccUtil.YNRCC_ANGENT_URL] + "/download?filename=" + resp.filename
-                    //根据filename 取文件数据
-                    downloadYnrccBills(chkfile, agentUrl)
-
-                } else if (YnrccUtil.NO_RECORDS_TODAY == resp.code) {
-                    //当日无交易明细，也创建空记录
-                    transactionReconciliationService.doSuccessTransactionChkfile(chkfile, "请求银行返回：当日无交易明细")
-
-                } else {
-                    //报错，退出对账单拉取
-                    logger.error("大理农商行对账单下载[$billDate]报错:${resp.message}")
-                    chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
-                    chkfile.remark = "请求前置获取对账文件报错：${resp.message}"
-                    transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
-                    break
-                }
-            }
-
-        } catch (ex: Exception) {
-            ex.printStackTrace()
-        }
-    }
-
-    private fun downloadYnrccBills(chkfile: TTransactionChkfile, agentUrl: String) {
-        val client = Client.create()
-        client.setConnectTimeout(30000)
-        val respClient = client.resource(agentUrl).type(MediaType.APPLICATION_OCTET_STREAM_TYPE).get(ClientResponse::class.java)
-        if (200 == respClient.status) {
-            val stream = respClient.getEntity(InputStream::class.java)
-            BufferedReader(InputStreamReader(stream)).use { reader ->
-                val header = reader.readLine()
-                val fields = header.split(",").mapNotNull { if (it.isNotEmpty()) it else null }
-                val batchSize = 10000 //每次保存的数目
-                var failcnt = 0
-
-                val datalist = ArrayList<YnrccChkfileBean>()
-                while (true) {
-                    val line = reader.readLine() ?: break
-                    if (line.isEmpty()) continue
-                    val columns = line.split(",").mapNotNull { if (it.isNotEmpty()) it else null }
-                    val bean = YnrccChkfileBean()
-                    StringUtil.transforToBean(fields, columns, bean)
-                    datalist.add(bean)
-                    if (datalist.size >= batchSize) {
-                        val fcnt = doBatchSaveYnrccCheckDetails(chkfile, datalist) //保存
-                        failcnt += fcnt
-                        datalist.clear()
-                    }
-                }
-                //保存最后的不足batchSize的记录
-                if (datalist.size > 0) {
-                    val fcnt = doBatchSaveYnrccCheckDetails(chkfile, datalist) //保存
-                    failcnt += fcnt
-                }
-
-                if (failcnt > 0) {
-                    //该天对账单保存错误
-                    chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
-                    chkfile.remark = "对账单数据存在保存失败记录，请手动核对对账单数据"
-                    transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
-                    return
-                }
-
-                //成功
-                transactionReconciliationService.doSuccessTransactionChkfile(chkfile, "对账单数据下载成功")
-
-            }
-        } else {
-            logger.error("请求前置download[${chkfile.accdate}]对账单返回失败：httpStatus=[${respClient.status}]。获取对账文件数据失败")
-            chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
-            chkfile.remark = "请求前置获取对账单数据失败，download返回：httpStatus=${respClient.status}"
-            transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
-        }
-    }
-
-    private fun doBatchSaveYnrccCheckDetails(chkfile: TTransactionChkfile, list: ArrayList<YnrccChkfileBean>): Int {
-        try {
-            transactionReconciliationService.doBatchSaveYnrccTransactionChkDtl(chkfile, list)
-            return 0  //批量保存成功，无失败
-        } catch (e1: Exception) {
-        }
-
-        //批量保存有异常，逐笔保存
-        var failcnt = 0
-        for (bean in list) {
-            try {
-                transactionReconciliationService.saveYnrccTransactionChkDtl(chkfile, bean)
-            } catch (e2: Exception) {
-                failcnt++
-                e2.printStackTrace()
-                continue
-            }
-        }
-        return failcnt
-    }
-
-}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt
index 52feed2..65df6c3 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt
@@ -8,8 +8,8 @@
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.service.ChargeApiService
 import com.supwisdom.dlpay.api.service.SourceTypeService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 
@@ -41,10 +41,10 @@
     }
 
     override fun getDepositCapital(capital: String): TDepositCapitalType {
-        return depositCapitalTypeDao.findTDepositCapitalTypeByCodeAndTenantid(capital, TenantContext.getTenantSchema());
+        return depositCapitalTypeDao.findTDepositCapitalTypeByCodeAndTenantid(capital, TenantContextHolder.getContext().tenant.id);
     }
 
     override fun findDepositCapitals(): List<TDepositCapitalType> {
-        return depositCapitalTypeDao.findTDepositCapitalTypesByTenantid(TenantContext.getTenantSchema())
+        return depositCapitalTypeDao.findTDepositCapitalTypesByTenantid(TenantContextHolder.getContext().tenant.id)
     }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
index 96b13f8..b256025 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
@@ -13,9 +13,9 @@
 import com.supwisdom.dlpay.api.types.IDTypes
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 
@@ -102,7 +102,7 @@
                 mobile = bean.mobile
                 lastsaved = systime.hostdatetime
             }
-            person.tenantid = TenantContext.getTenantSchema()
+            person.tenantid = TenantContextHolder.getContext().tenant.id
             person = personDao.save(person)
 
             var account = TAccount().apply {
@@ -123,7 +123,7 @@
                 opendate = systime.hostdate
                 tac = Signature.SPY_TAC
             }
-            account.tenantid = TenantContext.getTenantSchema()
+            account.tenantid = TenantContextHolder.getContext().tenant.id
             account = accountDao.save(account)
             account.tac = account.generateTac()
             accountDao.save(account)
@@ -179,7 +179,7 @@
                 userid = person.userid
                 lastsaved = systime.hostdatetime
             }
-            cityCard.tenantid = TenantContext.getTenantSchema()
+            cityCard.tenantid = TenantContextHolder.getContext().tenant.id
             cardDao.save(cityCard)
         }
 
@@ -203,7 +203,7 @@
                 if (TradeDict.STATUS_NORMAL == bankCard.status) {
                     cardDao.closedBankcardStatusByUserid(bankCard.userid)  //注销其他银行卡
                 }
-                bankCard.tenantid = TenantContext.getTenantSchema()
+                bankCard.tenantid = TenantContextHolder.getContext().tenant.id
                 cardDao.save(bankCard) //绑定新的银行卡
             } else {
                 if (bankCard.userid != person.userid) {
@@ -239,7 +239,7 @@
             this.status = TradeDict.DTL_STATUS_FAIL
             this.remark = errmsg
             this.lastsaved = systemUtilService.sysdatetime.hostdatetime
-            this.tenantid = TenantContext.getTenantSchema()
+            this.tenantid = TenantContextHolder.getContext().tenant.id
         })
     }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt
index a42427b..25dad23 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt
@@ -3,8 +3,8 @@
 import com.supwisdom.dlpay.api.dao.DtlQueryDao
 import com.supwisdom.dlpay.api.domain.TDtlQuery
 import com.supwisdom.dlpay.api.service.DtlQueryResultService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 
@@ -15,7 +15,7 @@
 
     override fun saveOrUpdateDtlQuery(dtlQuery: TDtlQuery): TDtlQuery {
         if (null == dtlQuery.tenantId) {
-            dtlQuery.tenantId = TenantContext.getTenantSchema()
+            dtlQuery.tenantId = TenantContextHolder.getContext().tenant.id
         }
         return dtlQueryDao.save(dtlQuery)
     }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
index 1807686..f8c9295 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
@@ -11,8 +11,8 @@
 import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.multitenant.TenantContextHolder
 import org.hibernate.exception.LockTimeoutException
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.dao.CannotAcquireLockException
@@ -74,13 +74,13 @@
     }
 
     override fun readShopbyShopaccno(shopaccno: String): TShopacc {
-        return shopaccDao.getByShopaccnoAndTenantId(shopaccno, TenantContext.getTenantSchema())?.also {
+        return shopaccDao.getByShopaccnoAndTenantId(shopaccno, TenantContextHolder.getContext().tenant.id)?.also {
             shopAccCheck(it)
         } ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopaccno>不存在")
     }
 
     override fun readSubject(subjno: String): TSubject {
-        return subjectDao.findBySubjnoAndTenantId(subjno, TenantContext.getTenantSchema())
+        return subjectDao.findBySubjnoAndTenantId(subjno, TenantContextHolder.getContext().tenant.id)
                 ?: throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在")
     }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
index b0dbb6b..3d81b97 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
@@ -14,13 +14,11 @@
 import com.supwisdom.dlpay.framework.domain.TShop
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.util.EnumCheck
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
-import javax.persistence.EntityManager
-import javax.persistence.PersistenceContext
 
 /**
  * Created by shuwei on 2019/4/15.
@@ -112,8 +110,9 @@
 
     override fun checkDownloadShopBillParam(param: DownloadShopBillParam): Boolean {
         if (!StringUtil.isEmpty(param.checkdate)) {
-            val ctl = settleCtlDao.findByTenantId(TenantContext.getTenantSchema())
-                    ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "[tenantid=${TenantContext.getTenantSchema()}]未找到结算状态表")
+            val ctl = settleCtlDao.findByTenantId(TenantContextHolder.getContext().tenant.id)
+                    ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR,
+                            "[tenantid=${TenantContextHolder.getContext().tenant.id}]未找到结算状态表")
             if (DateUtil.compareDatetime(param.checkdate, "${ctl.settledate}", "yyyyMMdd") >= 0) {
                 throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "对账单未生成") //未结算，不返回对账单
             }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
index 9937a31..5585033 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
@@ -16,11 +16,11 @@
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.dao.BusinessparaDao
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.MoneyUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 
@@ -82,7 +82,7 @@
             this.chkresult = ConstantUtil.CHKDTL_CHKRESULT_UNCHECK
             this.resolved = ConstantUtil.CHKDTL_RESOLVED_NONE
             this.lastsaved = systemUtilService.sysdatetime.sysdate
-            this.tenantid = TenantContext.getTenantSchema()
+            this.tenantid = TenantContextHolder.getContext().tenant.id
         })
     }
 
@@ -119,7 +119,7 @@
             this.localcnt = 0
             this.localamt = 0.00
             this.lastsaved = systemUtilService.sysdatetime.sysdate
-            this.tenantid = TenantContext.getTenantSchema()
+            this.tenantid = TenantContextHolder.getContext().tenant.id
         })
     }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index b91c74b..77c3e01 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -10,8 +10,8 @@
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 import java.sql.SQLException
@@ -77,7 +77,7 @@
                 refundAmount = 0.0
                 checkDate = null
                 settleDate = null
-                tenantid = TenantContext.getTenantSchema()
+                tenantid = TenantContextHolder.getContext().tenant.id
                 this.sourceType = sourceType.sourceType
                 dtltype = builder.dtltype
             }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt
index 99b0566..88d6312 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt
@@ -6,9 +6,9 @@
 import com.supwisdom.dlpay.framework.dao.BusinessparaDao
 import com.supwisdom.dlpay.framework.domain.TBusinesspara
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 
@@ -36,7 +36,7 @@
             businesspara = TBusinesspara().apply {
                 this.parakey = YnrccUtil.YNRCC_BILLS_DOWNLOAD_LASTDATE
                 this.paraval = DateUtil.getNewDay(startdate, -1)
-                this.tenantId = TenantContext.getTenantSchema()
+                this.tenantId = TenantContextHolder.getContext().tenant.id
             }
         }
         businesspara = businessparaDao.save(businesspara)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt
index dc8bbe7..b9b6034 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt
@@ -1,6 +1,5 @@
 package com.supwisdom.dlpay.framework
 
-import com.supwisdom.dlpay.framework.tenant.TenantInterceptor
 import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.context.annotation.Configuration
@@ -23,20 +22,20 @@
 //    }
 //}
 
-@Configuration
-class MultiTenantDatasourceConfiguration : WebMvcConfigurer {
-
-    private val logger = KotlinLogging.logger { }
-    @Autowired
-    private lateinit var tenantInterceptor: TenantInterceptor
-
-    @PostConstruct
-    fun post() {
-        logger.info("MultiTenantDatasourceConfiguration post constructor.")
-    }
-
-    override fun addInterceptors(registry: InterceptorRegistry) {
-        logger.info("adding interceptor(s).")
-        registry.addInterceptor(tenantInterceptor)
-    }
-}
+//@Configuration
+//class MultiTenantDatasourceConfiguration : WebMvcConfigurer {
+//
+//    private val logger = KotlinLogging.logger { }
+//    @Autowired
+//    private lateinit var tenantInterceptor: TenantInterceptor
+//
+//    @PostConstruct
+//    fun post() {
+//        logger.info("MultiTenantDatasourceConfiguration post constructor.")
+//    }
+//
+//    override fun addInterceptors(registry: InterceptorRegistry) {
+//        logger.info("adding interceptor(s).")
+//        registry.addInterceptor(tenantInterceptor)
+//    }
+//}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 9cad14f..ee4a5c6 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -7,7 +7,6 @@
 import com.supwisdom.dlpay.framework.security.MyAuthenticationFailureHandler
 import com.supwisdom.dlpay.framework.security.ValidateCodeSecurityConfig
 import com.supwisdom.dlpay.framework.service.OperatorDetailService
-import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.mobile.AuthLoginFailHandler
@@ -67,9 +66,6 @@
     }
 
     override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain) {
-        if (!jwtConfig.multiTenant) {
-            TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
-        }
         request.getHeader(jwtConfig.header)?.let { authHeader ->
             try {
                 val jwt = if (authHeader.startsWith(jwtConfig.tokenHeader)) {
@@ -97,7 +93,6 @@
                         response.status = HttpStatus.UNAUTHORIZED.value()
                         return
                     }
-                    TenantContext.setTenantSchema(tenantId)
                 }
                 val auth = UsernamePasswordAuthenticationToken(claims[Constants.JWT_CLAIM_UID], null,
                         (claims[Constants.JWT_CLAIM_AUTHORITIES] as ArrayList<*>)
@@ -191,7 +186,6 @@
                         response.status = HttpStatus.UNAUTHORIZED.value()
                         return
                     }
-                    TenantContext.setTenantSchema(tenantId)
                 }
                 val auth = UsernamePasswordAuthenticationToken(claims[Constants.JWT_CLAIM_UID], null,
                         (claims[Constants.JWT_CLAIM_AUTHORITIES] as ArrayList<*>)
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index 0a2b535..8627bf0 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -39,4 +39,8 @@
 # user password
 auth.password.bcrypt.length=10
 ###################################################
-spring.redis.database=0
\ No newline at end of file
+spring.redis.database=0
+###################################################
+multi-tenant.header.key=X-TENANT-ID
+multi-tenant.session.name=multi-tenant-id
+multi-tenant.dbschema=public
