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 b71b2cb..585767f 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
@@ -17,8 +17,8 @@
 
   public String genKey(String prefix, String... args) {
     StringBuilder builder = new StringBuilder();
-    builder.append(prefix).append(delimiter)
-        .append(getId());
+    builder.append(getId()).append(delimiter)
+        .append(prefix);
     for (String item : args) {
       builder.append(delimiter).append(item);
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
index 0f93d76..7496452 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
@@ -24,7 +24,7 @@
   }
 
   @Override
-  @Cacheable(cacheNames = "dictionary_cache", key = "#p0")
+  @Cacheable(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey(#dicttype)")
   public List<TDictionary> getDictionaryByDictType(String dicttype) {
     List<TDictionary> list = dictionaryDao.findAllByDicttype(dicttype);
     if (!list.isEmpty()) {
@@ -35,7 +35,7 @@
 
 
   @Override
-  @CacheEvict(cacheNames = "dictionary_cache", key = "#p0")
+  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey(#dicttype)")
   public void updateDictionaryByDictType(String dicttype, List<TDictionary> list) {
     for (TDictionary item : list) {
       if (!dicttype.equals(item.getDicttype())) {
@@ -49,18 +49,18 @@
   }
 
   @Override
-  @CacheEvict(cacheNames = "dictionary_cache", key = "#p0")
+  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey(#dicttype)")
   public void refreshCache(String dicttype) {
   }
 
   @Override
-  @CacheEvict(cacheNames = "dictionary_cache", key = "'.*'", allEntries = true)
+  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.getId() + '.*'", allEntries = true)
   public void refreshCache() {
 
   }
 
   @Override
-  @Cacheable(cacheNames = "trans_code_cache")
+  @Cacheable(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('transcode')")
   public List<TTranscode> getTransCode() {
     List<TTranscode> list = transcodeDao.findAll();
     if (!list.isEmpty()) {
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 9319434..3d239c6 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
@@ -164,7 +164,7 @@
   }
 
   @Override
-  @Cacheable(cacheNames = "dictionary_cache", key = "#{@tenantHolder.genKey('sourcetype', sourceType)}")
+  @Cacheable(cacheNames = "dictionary_cache", key = "#{@tenantHolder.genKey('sourcetype', #sourceType)}")
   public TSourceType getSourceType(String sourceType) {
     if (!StringUtil.isEmpty(sourceType)) {
       return sourceTypeDao.getBySourceType(sourceType.trim());
@@ -179,7 +179,7 @@
   }
 
   @Override
-  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', sourceType.sourceType)")
+  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', #sourceType.sourceType)")
   public boolean saveOrUpdateSourceType(TSourceType sourceType) {
     if (null != sourceType) {
       sourceType.setTenantid(TenantContext.getTenantSchema());
@@ -190,7 +190,7 @@
   }
 
   @Override
-  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', sourceType.sourceType)")
+  @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', #sourceType.sourceType)")
   public boolean deleteSourceType(TSourceType sourceType) {
     if (null != sourceType) {
       sourceTypeDao.delete(sourceType);
@@ -200,7 +200,7 @@
   }
 
   @Override
-  @Cacheable(cacheNames = "source_type_config_cache", key = "@tenantHolder.genKey('sourcetype_config', sourceType)")
+  @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());
@@ -211,7 +211,7 @@
   }
 
   @Override
-  @CacheEvict(cacheNames = "source_type_config_cache", key = "@tenantHolder.genKey('sourcetype_config', sourceType)")
+  @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 + "]不存在");
