diff --git a/payapi/build.gradle b/payapi/build.gradle
index 2f1eed1..7e7d2ca 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -52,6 +52,13 @@
 
 docker.dependsOn(jar)
 
+configurations {
+    developmentOnly
+    runtimeClasspath {
+        extendsFrom developmentOnly
+    }
+}
+
 dependencies {
     implementation project(":payapi-common")
 
@@ -75,7 +82,7 @@
     implementation "org.springframework.cloud:spring-cloud-starter-netflix-hystrix"
     implementation "org.springframework.cloud:spring-cloud-starter-netflix-hystrix-dashboard"
 
-    runtime("org.springframework.boot:spring-boot-devtools")
+    developmentOnly("org.springframework.boot:spring-boot-devtools")
 
     implementation "org.thymeleaf.extras:thymeleaf-extras-springsecurity5"
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentPayServiceContext.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentPayServiceContext.java
new file mode 100644
index 0000000..a17a1fc
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentPayServiceContext.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.agent;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class AgentPayServiceContext {
+  private final ApplicationContext applicationContext;
+
+  public AgentPayServiceContext(ApplicationContext applicationContext) {
+    this.applicationContext = applicationContext;
+  }
+
+  @SuppressWarnings("UNCHECKED_CAST")
+  public <T> AgentPayService<T> findAgentPayService(String service) {
+    try {
+      Object bean = applicationContext.getBean(service + "Agent");
+      if (bean instanceof AgentPayService) {
+        return (AgentPayService<T>) bean;
+      } else {
+        return null;
+      }
+    } catch (BeansException ex) {
+      log.error("can't create bean <{}> , ex {}", service, ex.getMessage());
+      return null;
+    }
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java
new file mode 100644
index 0000000..ef92fb5
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.agent;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class CheckFileProviderContext {
+  private final ApplicationContext applicationContext;
+
+  public CheckFileProviderContext(ApplicationContext applicationContext) {
+    this.applicationContext = applicationContext;
+  }
+
+  public CheckFileProvider findProvider(String name) {
+    try {
+      return (CheckFileProvider) applicationContext.getBean(name + "CheckFileProvider");
+    } catch (BeansException ex) {
+      log.error("未定义 sourcetype <$sourcetype> 对账处理 Provider");
+      return null;
+    }
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/ApplicationUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/ApplicationUtil.java
deleted file mode 100644
index 7e51071..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/ApplicationUtil.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.supwisdom.dlpay.framework.util;
-
-import com.supwisdom.dlpay.agent.AgentPayService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.context.ApplicationContext;
-
-public class ApplicationUtil {
-  private static final Logger logger = LoggerFactory.getLogger(ApplicationUtil.class);
-
-  public static <T> AgentPayService<T> findAgentPayService(ApplicationContext context, String service) {
-    try {
-      Object bean = context.getBean(service);
-      if (bean instanceof AgentPayService) {
-        return (AgentPayService<T>) bean;
-      } else {
-        return null;
-      }
-    } catch (NoSuchBeanDefinitionException ex) {
-      logger.error("can't create bean <%s> , ex %s", service, ex.getMessage());
-      return null;
-    } catch (BeansException ex) {
-      logger.error("can't create bean <%s> , ex %s", service, ex.getMessage());
-      return null;
-    }
-  }
-}
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 6d46a45..22f391e 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
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.system.controller;
 
+import com.supwisdom.dlpay.agent.AgentPayServiceContext;
+import com.supwisdom.dlpay.agent.CheckFileProviderContext;
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.api.domain.TSourceType;
 import com.supwisdom.dlpay.api.domain.TSourceTypeConfig;
@@ -13,6 +15,7 @@
 import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.util.ConstantUtil;
 import com.supwisdom.dlpay.util.WebCheckException;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -22,18 +25,25 @@
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @Controller
 public class ParamController {
   private final ParamService paramService;
   private final SystemUtilService systemUtilService;
   private final DictionaryProxy dictionaryProxy;
+  private final CheckFileProviderContext checkFileProviderContext;
+  private final AgentPayServiceContext agentPayServiceContext;
 
   public ParamController(ParamService paramService,
                          SystemUtilService systemUtilService,
-                         DictionaryProxy dictionaryProxy) {
+                         DictionaryProxy dictionaryProxy,
+                         CheckFileProviderContext checkFileProviderContext,
+                         AgentPayServiceContext agentPayServiceContext) {
     this.paramService = paramService;
     this.systemUtilService = systemUtilService;
     this.dictionaryProxy = dictionaryProxy;
+    this.checkFileProviderContext = checkFileProviderContext;
+    this.agentPayServiceContext = agentPayServiceContext;
   }
 
   @GetMapping("/param/syspara")
@@ -410,26 +420,41 @@
         if (state.equals(tPaytype.getChargeEnable())) {
           return JsonResult.error("状态错误，请重新查询后操作");
         }
+        if (state && agentPayServiceContext.findAgentPayService(sourcetype) == null) {
+          return JsonResult.error("支付类型未实现充值");
+        }
         tPaytype.setChargeEnable(state);
       } else if ("consume".equals(optype)) {
         if (state.equals(tPaytype.getConsumeEnable())) {
           return JsonResult.error("状态错误，请重新查询后操作");
         }
+        if (state && agentPayServiceContext.findAgentPayService(sourcetype) == null) {
+          return JsonResult.error("支付类型未实现支付");
+        }
         tPaytype.setConsumeEnable(state);
       } else if ("anonymous".equals(optype)) {
         if (state.equals(tPaytype.getAnonymousEnable())) {
           return JsonResult.error("状态错误，请重新查询后操作");
         }
+        if (state && agentPayServiceContext.findAgentPayService(sourcetype) == null) {
+          return JsonResult.error("支付类型未实现支付");
+        }
         tPaytype.setAnonymousEnable(state);
       } else if ("reversable".equals(optype)) {
         if (state.equals(tPaytype.getReversable())) {
           return JsonResult.error("状态错误，请重新查询后操作");
         }
+        if (state && agentPayServiceContext.findAgentPayService(sourcetype) == null) {
+          return JsonResult.error("支付类型未实现支付");
+        }
         tPaytype.setReversable(state);
       } else if ("checkable".equals(optype)) {
         if (state.equals(tPaytype.getCheckable())) {
           return JsonResult.error("状态错误，请重新查询后操作");
         }
+        if (state && checkFileProviderContext.findProvider(sourcetype) == null) {
+          return JsonResult.error("支付类型未实现对账业务");
+        }
         tPaytype.setCheckable(state);
       } else {
         if (state.equals(tPaytype.getEnable())) {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index f16956f..fd908eb 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.framework.tenant.TenantCacheKeyGen
 import io.lettuce.core.ReadFrom
+import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.LockProvider
 import net.javacrumbs.shedlock.provider.redis.spring.RedisLockProvider
 import org.springframework.beans.factory.annotation.Autowired
@@ -19,6 +20,8 @@
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
+import org.springframework.context.event.ContextStartedEvent
+import org.springframework.context.event.EventListener
 import org.springframework.data.redis.connection.RedisConnectionFactory
 import org.springframework.data.redis.connection.RedisPassword
 import org.springframework.data.redis.connection.RedisStandaloneConfiguration
@@ -46,7 +49,7 @@
     @Bean
     fun redisConnectionFactory(): LettuceConnectionFactory {
         val clientConfig = LettuceClientConfiguration.builder()
-                .readFrom(ReadFrom.SLAVE_PREFERRED)
+                .readFrom(ReadFrom.REPLICA_PREFERRED)
                 .build()
         val serverConfig = RedisStandaloneConfiguration(redis.host, redis.port)
         if (redis.password.isNotEmpty()) {
@@ -149,6 +152,15 @@
 }
 
 
+@Component
+class TenantConfigListener {
+    private val log = KotlinLogging.logger { }
+    @EventListener
+    fun handleContextStarted(evt: ContextStartedEvent) {
+        log.info { "Service started check tenant information" }
+    }
+}
+
 @SpringBootApplication
 @EnableDiscoveryClient
 @EnableScheduling
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 e771add..10541a8 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
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.api
 
 import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.AgentPayServiceContext
 import com.supwisdom.dlpay.agent.DtlStatus
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import com.supwisdom.dlpay.api.domain.TDtlQuery
@@ -13,15 +14,12 @@
 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.ApplicationUtil
 import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.util.ConstantUtil
 import mu.KotlinLogging
 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.context.ApplicationContext
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
 import org.springframework.scheduling.annotation.Async
@@ -106,7 +104,7 @@
     lateinit var transactionService: TransactionServiceProxy
 
     @Autowired
-    private lateinit var applicationContext: ApplicationContext
+    private lateinit var agentPayServiceContext: AgentPayServiceContext
 
     @Autowired
     private lateinit var dtlQueryResultService: DtlQueryResultService
@@ -135,8 +133,7 @@
                 return
             }
 
-            val service = ApplicationUtil.findAgentPayService<Any>(applicationContext,
-                    transaction.sourceType + "Agent")
+            val service = agentPayServiceContext.findAgentPayService<Any>(transaction.sourceType)
 
             logger.info("refno=[${transaction.refno}]开始第" + (qcnt + 1) + "次查询支付结果：")
             val resp = service.query(transaction)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
index 939f27a..a4cac87 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
@@ -162,7 +162,8 @@
         }
 
         val shopacc = accountUtilServcie.readShopbyShopaccno(param.merchant)
-        if (shopacc.shop.shoptype != ShopTypes.DEPOSIT.value()) {
+        if (shopacc.shop.shoptype != ShopTypes.DEPOSIT.value()
+                || shopacc.shop.status != TradeDict.STATUS_NORMAL) {
             return ResponseBodyBuilder.failEntity(response, TradeErrorCode.INPUT_DATA_ERROR,
                     "该商户不能充值")
         }
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 f10bf3b..7cad44b 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
@@ -2,10 +2,13 @@
 
 import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.AgentPayService
+import com.supwisdom.dlpay.agent.AgentPayServiceContext
 import com.supwisdom.dlpay.agent.DtlStatus
 import com.supwisdom.dlpay.agent.domain.QrcodePayTrans
 import com.supwisdom.dlpay.agent.service.AgentServiceProxy
-import com.supwisdom.dlpay.api.*
+import com.supwisdom.dlpay.api.AccountProxy
+import com.supwisdom.dlpay.api.AgentQueryResultTask
+import com.supwisdom.dlpay.api.TransactionBuilder
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.bean.groups.ConfirmAction
 import com.supwisdom.dlpay.api.bean.groups.InitAction
@@ -14,11 +17,9 @@
 import com.supwisdom.dlpay.exception.TransactionCheckException
 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.*
 import org.apache.commons.lang3.StringUtils
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.context.ApplicationContext
 import org.springframework.data.redis.core.RedisTemplate
 import org.springframework.http.ResponseEntity
 import org.springframework.validation.annotation.Validated
@@ -42,7 +43,7 @@
     @Autowired
     lateinit var cardService: CardService
     @Autowired
-    private lateinit var applicationContext: ApplicationContext
+    private lateinit var agentPayServiceContext: AgentPayServiceContext
 
     @Autowired
     private lateinit var sourceTypeService: SourceTypeService
@@ -219,7 +220,7 @@
     }
 
     fun <T> createAgentService(sourceType: String): AgentPayService<T> {
-        return ApplicationUtil.findAgentPayService<T>(applicationContext, sourceType + "Agent")
+        return agentPayServiceContext.findAgentPayService(sourceType)
                 ?: throw TransactionCheckException(TradeErrorCode.BUSINESS_DEAL_ERROR,
                         "支付类型<$sourceType>未定义")
     }
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 7da32f1..eec664a 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
@@ -3,6 +3,7 @@
 import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.AgentResponse
 import com.supwisdom.dlpay.agent.CheckFileProvider
+import com.supwisdom.dlpay.agent.CheckFileProviderContext
 import com.supwisdom.dlpay.api.domain.TSourceType
 import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus
 import com.supwisdom.dlpay.api.domain.TTransactionChkfile
@@ -237,7 +238,7 @@
                          val code: String, val message: String);
 
     @Autowired
-    private lateinit var applicationContext: ApplicationContext
+    private lateinit var checkFileProviderContext: CheckFileProviderContext
 
     @Autowired
     private lateinit var transactionReconciliationService: TransactionReconciliationService
@@ -249,7 +250,7 @@
 
     private fun getProvider(sourcetype: String): CheckFileProvider? {
         return try {
-            applicationContext.getBean("${sourcetype}CheckFileProvider") as CheckFileProvider
+            checkFileProviderContext.findProvider(sourcetype)
         } catch (ex: BeansException) {
             logger.error { "未定义 sourcetype <$sourcetype> 对账处理 Provider" }
             null
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
index 1d8e2fc..7b477dd 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.api
 
 import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.AgentPayServiceContext
 import com.supwisdom.dlpay.agent.DtlStatus
 import com.supwisdom.dlpay.api.domain.TDtlQuery
 import com.supwisdom.dlpay.api.domain.TShopdtl
@@ -9,12 +10,10 @@
 import com.supwisdom.dlpay.api.service.DtlQueryResultService
 import com.supwisdom.dlpay.api.service.TransactionServiceProxy
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.ApplicationUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.util.ConstantUtil
 import net.javacrumbs.shedlock.core.SchedulerLock
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.context.ApplicationContext
 import org.springframework.scheduling.annotation.Scheduled
 import org.springframework.stereotype.Component
 import org.springframework.stereotype.Service
@@ -55,7 +54,7 @@
     @Autowired
     lateinit var consumePayService: ConsumePayService
     @Autowired
-    private lateinit var applicationContext: ApplicationContext
+    private lateinit var agentPayServiceContext: AgentPayServiceContext
 
     @Scheduled(cron = "\${query.third.transdtl.result.cron:-}")
     @SchedulerLock(name = "DtlQueryResultSchedulerTask", lockAtMostForString = "PT10M")
@@ -101,7 +100,7 @@
             return
         }
 
-        val service = ApplicationUtil.findAgentPayService<Any>(applicationContext, dtl.sourceType + "Agent")
+        val service = agentPayServiceContext.findAgentPayService<Any>(dtl.sourceType)
         val resp = service.query(dtl)
         when (resp.code) {
             AgentCode.SUCCESS -> {
