优化cache
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>
     }
 }