diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
index d5a00d7..7b6194f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.api.service;
 
 import com.supwisdom.dlpay.api.domain.TSourceType;
-import org.springframework.cache.annotation.Cacheable;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -13,16 +12,16 @@
 public interface SourceTypeService {
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-  TSourceType getByPaytype(String paytype);
+  TSourceType getBySourceType(String paytype);
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-  Map<String, String> getPaytypeConfigByPaytype(String pattype);
+  Map<String, String> getSourceTypeConfigBySourceType(String pattype);
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   boolean checkRechargeSourcetype(String sourcetype) throws Exception;
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-  boolean checkShopPaytype(String shopaccno, String sourceType, boolean anonymousflag) throws Exception;
+  boolean checkShopSourceType(String shopaccno, String sourceType, boolean anonymousflag) throws Exception;
 
   /**
    * 获取支付能力充值参数全局配置
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 b6ed3f1..c646730 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
@@ -40,14 +40,14 @@
 
 
   @Override
-  @Cacheable(cacheNames = "source_type_cache", keyGenerator = "tenantCacheKey")
-  public TSourceType getByPaytype(String paytype) {
+  @Cacheable(cacheNames = "dictionary_cache", keyGenerator = "tenantCacheKey")
+  public TSourceType getBySourceType(String paytype) {
     return paytypeDao.getOne(paytype);
   }
 
   @Override
-  @Cacheable(cacheNames = "source_type_config_cache", keyGenerator = "tenantCacheKey")
-  public Map<String, String> getPaytypeConfigByPaytype(String pattype) {
+  @Cacheable(cacheNames = "dictionary_cache", keyGenerator = "tenantCacheKey")
+  public Map<String, String> getSourceTypeConfigBySourceType(String pattype) {
     List<TSourceTypeConfig> list = paytypeConfigDao.getBySourceType(pattype);
     Map<String, String> map = new HashMap<>(list.size());
     for (TSourceTypeConfig paytypeConfig : list) {
@@ -68,7 +68,7 @@
   }
 
   @Override
-  public boolean checkShopPaytype(String shopaccno, String sourceType, boolean anonymousflag) throws Exception {
+  public boolean checkShopSourceType(String shopaccno, String sourceType, boolean anonymousflag) throws Exception {
     //step1: 判断系统支付能力是否启用
     TSourceType tSourceType = paytypeDao.getBySourceType(sourceType);
     if (null == tSourceType) {
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 bbf9486..254c4e4 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
@@ -12,11 +12,13 @@
   @Override
   public Object generate(Object target, Method method, Object... params) {
     StringBuilder name = new StringBuilder();
+    name.append(target.getClass().getSimpleName())
+        .append(delimiter);
     String tenant = TenantContext.getTenantSchema();
     if (StringUtils.isEmpty(tenant)) {
       tenant = "default";
     }
-    name.append(tenant);
+    name.append(tenant).append(delimiter);
     for (Object item : params) {
       name.append(delimiter).append(item.toString());
     }
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
new file mode 100644
index 0000000..b71b2cb
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java
@@ -0,0 +1,27 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+@Component("tenantHolder")
+public class TenantHolder {
+  private static final char delimiter = '-';
+
+  public String getId() {
+    String id = TenantContext.getTenantSchema();
+    if (id == null || StringUtils.isEmpty(id)) {
+      return "default";
+    }
+    return id;
+  }
+
+  public String genKey(String prefix, String... args) {
+    StringBuilder builder = new StringBuilder();
+    builder.append(prefix).append(delimiter)
+        .append(getId());
+    for (String item : args) {
+      builder.append(delimiter).append(item);
+    }
+    return builder.toString();
+  }
+}
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 7336a7d..9319434 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
@@ -11,6 +11,7 @@
 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;
@@ -163,46 +164,46 @@
   }
 
   @Override
-  @Cacheable(cacheNames = "source_type_cache", key = "#p0")
-  public TSourceType getSourceType(String paytype) {
-    if (!StringUtil.isEmpty(paytype)) {
-      return sourceTypeDao.getBySourceType(paytype.trim());
+  @Cacheable(cacheNames = "dictionary_cache", key = "#{@tenantHolder.genKey('sourcetype', sourceType)}")
+  public TSourceType getSourceType(String sourceType) {
+    if (!StringUtil.isEmpty(sourceType)) {
+      return sourceTypeDao.getBySourceType(sourceType.trim());
     }
     return null;
   }
 
   @Override
-  @Cacheable(cacheNames = "source_type_cache")
+  @Cacheable(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype')")
   public List<TSourceType> getAllSourceType() {
     return sourceTypeDao.findAll();
   }
 
   @Override
-  @CacheEvict(cacheNames = "source_type_cache", key = "#paytype.sourceType")
-  public boolean saveOrUpdateSourceType(TSourceType paytype) {
-    if (null != paytype) {
-      paytype.setTenantid(TenantContext.getTenantSchema());
-      sourceTypeDao.save(paytype);
+  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', sourceType.sourceType)")
+  public boolean saveOrUpdateSourceType(TSourceType sourceType) {
+    if (null != sourceType) {
+      sourceType.setTenantid(TenantContext.getTenantSchema());
+      sourceTypeDao.save(sourceType);
       return true;
     }
     return false;
   }
 
   @Override
-  @CacheEvict(cacheNames = "source_type_cache", key = "#paytype.sourceType")
-  public boolean deleteSourceType(TSourceType paytype) {
-    if (null != paytype) {
-      sourceTypeDao.delete(paytype);
+  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', sourceType.sourceType)")
+  public boolean deleteSourceType(TSourceType sourceType) {
+    if (null != sourceType) {
+      sourceTypeDao.delete(sourceType);
       return true;
     }
     return false;
   }
 
   @Override
-  @Cacheable(cacheNames = "source_type_config_cache", key = "#p0")
-  public List<TSourceTypeConfig> getSourceTypeConfigList(String paytype) {
-    if (!StringUtil.isEmpty(paytype)) {
-      List<TSourceTypeConfig> list = paytypeConfigDao.getBySourceTypeOrderByConfigid(paytype.trim());
+  @Cacheable(cacheNames = "source_type_config_cache", key = "@tenantHolder.genKey('sourcetype_config', sourceType)")
+  public List<TSourceTypeConfig> getSourceTypeConfigList(String sourceType) {
+    if (!StringUtil.isEmpty(sourceType)) {
+      List<TSourceTypeConfig> list = paytypeConfigDao.getBySourceTypeOrderByConfigid(sourceType.trim());
       if (!StringUtil.isEmpty(list))
         return list;
     }
@@ -210,10 +211,10 @@
   }
 
   @Override
-  @CacheEvict(cacheNames = "source_type_config_cache", key = "#p0")
-  public boolean saveSourceTypeConfig(String paytype, Map<String, String> param) throws WebCheckException {
-    TSourceType tPaytype = getSourceType(paytype);
-    if (null == tPaytype) throw new WebCheckException("支付能力[" + paytype + "]不存在");
+  @CacheEvict(cacheNames = "source_type_config_cache", key = "@tenantHolder.genKey('sourcetype_config', sourceType)")
+  public boolean saveSourceTypeConfig(String sourceType, Map<String, String> param) throws WebCheckException {
+    TSourceType tPaytype = getSourceType(sourceType);
+    if (null == tPaytype) throw new WebCheckException("支付能力[" + sourceType + "]不存在");
     for (String key : param.keySet()) {
       String value = param.get(key);
       TSourceTypeConfig config = paytypeConfigDao.getBySourceTypeAndConfigid(tPaytype.getSourceType(), key);
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 0b726b7..24efe80 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -277,7 +277,7 @@
     @PostMapping("/ykt/payinit")
     fun yktPayInit(@RequestBody param: YktCardPayinitParam): ResponseEntity<Any> {
 //            val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } //没注册，可能匿名?
-//            if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) {
+//            if (consumePayService.checkShopSourceType(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) {
 //                val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
 //                        .chooseTradetype(Tradetype.CONSUME) //消费
 //                        .also {
@@ -434,7 +434,7 @@
 //                            }
 //                        }
 //                    }.done(personBalancePayService, false)
-//            val code = CallService.callWechatPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT),
+//            val code = CallService.callWechatPay(paytypeService.getSourceTypeConfigBySourceType(PaytypeUtil.WECHAT),
 //                    dtl, DateUtil.getNow(), wechattype, realip, qrcode, openid)
 //            if (code.retcode == "0") {
 //                ResponseEntity.ok(ResponseBodyBuilder.create()
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 d57c96d..51ed2ef 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
@@ -64,7 +64,7 @@
             map = StringUtil.paraFilter(map)
             //TODO 校验签名
             var signStr = StringUtil.createLinkString(map)
-            val config = paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT)
+            val config = paytypeService.getSourceTypeConfigBySourceType(PaytypeUtil.WECHAT)
             if (config["appkey"].isNullOrEmpty()) {
                 logger.error("签名错误")
                 return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml>"
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt
index e0fd9ab..6ab347e 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt
@@ -16,7 +16,7 @@
     lateinit var transactionMainDao: TransactionMainDao
 
     override fun checkShopPaytype(shopaccno: String, sourceType: String, anonymousflag: Boolean?): Boolean {
-        return sourceTypeService.checkShopPaytype(shopaccno, sourceType, true == anonymousflag)
+        return sourceTypeService.checkShopSourceType(shopaccno, sourceType, true == anonymousflag)
     }
 
     override fun getPaytypeConfig(paytype: String, shopaccno: String,
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 15869a6..d51f97a 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
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.api.service.impl
 
 import com.supwisdom.dlpay.api.TransactionBuilder
-import com.supwisdom.dlpay.api.dao.AccountDao
 import com.supwisdom.dlpay.api.dao.TransactionMainDao
 import com.supwisdom.dlpay.api.domain.*
 import com.supwisdom.dlpay.api.repositories.AccountService
@@ -10,8 +9,6 @@
 import com.supwisdom.dlpay.api.service.TransactionService
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.dao.ShopaccDao
-import com.supwisdom.dlpay.framework.dao.SubjectDao
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.Subject
@@ -61,7 +58,7 @@
     private fun builderRecords(builder: TransactionBuilder, status: String): TTransactionMain {
         try {
             preCheck(builder)
-            val sourceType = sourceTypeService.getByPaytype(builder.sourceType)
+            val sourceType = sourceTypeService.getBySourceType(builder.sourceType)
                     ?: throw TransactionCheckException(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT,
                             "交易源未定义,sourctype <${builder.sourceType}>")
             // 记录三方的交易流水（个人，商户，科目)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index e4a7088..8ca8d92 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -144,7 +144,7 @@
         }
         val jwt = JwtTokenUtil(jwtConfig).verifyToken(auth.substring(jwtConfig.tokenHeader.length))
         val appid = jwt["uid"] as String
-        return apiClientDao.findByAppid(appid)?.let {
+        val result = apiClientDao.findByAppid(appid)?.let {
             if (it.status == TradeDict.STATUS_NORMAL) {
                 // 新证书
                 val token = JwtTokenUtil(jwtConfig).generateToken(
@@ -165,9 +165,10 @@
                         .success(ApiLoginResponse(token.jwtToken,
                                 appid, DateUtil.getUTCTime(token.expiration.valueInMillis))))
             } else {
-                ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
+                ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(mapOf("msg" to "appid error"))
             }
-        } ?: ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
+        } ?: ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(mapOf("msg" to "appid error"))
+        return result as ResponseEntity<Any>
     }
 }
 
