diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/task/TaskExecuteTimes.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/task/TaskExecuteTimes.java
new file mode 100644
index 0000000..3cea384
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/task/TaskExecuteTimes.java
@@ -0,0 +1,24 @@
+package com.supwisdom.dlpay.framework.task;
+
+public class TaskExecuteTimes {
+  private Integer times = 0;
+
+  public Integer getTimes() {
+    return times;
+  }
+
+  public void setTimes(Integer times) {
+    this.times = times;
+  }
+
+  public void incr() {
+    this.times += 1;
+  }
+
+  public void decr() {
+    this.times -= 1;
+    if (this.times < 0) {
+      this.times = 0;
+    }
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/task/TaskRetryException.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/task/TaskRetryException.java
new file mode 100644
index 0000000..0a5b2e8
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/task/TaskRetryException.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.framework.task;
+
+public class TaskRetryException extends Throwable {
+  public TaskRetryException() {
+  }
+
+  public TaskRetryException(String message) {
+    super(message);
+  }
+
+  public TaskRetryException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  public TaskRetryException(Throwable cause) {
+    super(cause);
+  }
+
+  public TaskRetryException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+    super(message, cause, enableSuppression, writableStackTrace);
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java
index e94a27f..a53ad90 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java
@@ -7,6 +7,7 @@
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.system.bean.SettleLogSearchBean;
 import com.supwisdom.dlpay.system.service.SettlementLogService;
+import com.supwisdom.multitenant.TenantContextHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
@@ -14,7 +15,7 @@
 
 /**
  * 结算日志
- * */
+ */
 @Controller
 public class SettlementLogController {
   @Autowired
@@ -36,7 +37,7 @@
       Integer pageSize = searchBean.getLimit();
       if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
       if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
-      return settlementLogService.getSettleLogPage(searchBean,pageNo,pageSize);
+      return settlementLogService.getSettleLogPage(searchBean, pageNo, pageSize);
     } catch (Exception e) {
       e.printStackTrace();
       return new PageResult<>(99, "系统查询错误");
@@ -48,7 +49,7 @@
   @ResponseBody
   public JsonResult doSettlement() {
     try {
-      settlementAsyncTask.doHandSettleTask();
+      settlementAsyncTask.doHandSettleTask(TenantContextHolder.getContext().getTenant());
       return JsonResult.ok("异步结算中，请查询日志查看结算结果");
     } catch (Exception e) {
       e.printStackTrace();
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index 4cd2abe..6118efb 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -46,6 +46,8 @@
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
 import org.springframework.data.redis.serializer.StringRedisSerializer
 import org.springframework.http.client.SimpleClientHttpRequestFactory
+import org.springframework.retry.annotation.EnableRetry
+import org.springframework.scheduling.annotation.EnableAsync
 import org.springframework.scheduling.annotation.EnableScheduling
 import org.springframework.stereotype.Component
 import org.springframework.web.client.RestTemplate
@@ -243,6 +245,8 @@
 @EnableSessionTenantInterceptor
 @EnableJwtTenantInterceptor
 @ServletComponentScan
+@EnableRetry
+@EnableAsync
 class PayApiApplication : SpringBootServletInitializer() {
 
     override fun configure(builder: SpringApplicationBuilder): SpringApplicationBuilder {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
index 8f08241..683d186 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/wechat_service.kt
@@ -4,7 +4,6 @@
 import com.supwisdom.dlpay.agent.AgentPayService
 import com.supwisdom.dlpay.agent.AgentResponse
 import com.supwisdom.dlpay.agent.domain.QrcodePayTrans
-import com.supwisdom.dlpay.api.bean.BaseResp
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.service.ConsumePayService
 import com.supwisdom.dlpay.framework.util.TradeCode
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 b2b5ed4..d9c159e 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,26 +13,27 @@
 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.util.Constants
+import com.supwisdom.dlpay.framework.task.TaskRetryException
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.multitenant.TenantContextHolder
-import com.supwisdom.multitenant.TenantDetailsProvider
+import com.supwisdom.multitenant.TenantDetails
 import mu.KotlinLogging
 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
+import org.springframework.retry.annotation.Backoff
+import org.springframework.retry.annotation.Recover
+import org.springframework.retry.annotation.Retryable
 import org.springframework.scheduling.annotation.Async
 import org.springframework.scheduling.annotation.AsyncConfigurer
-import org.springframework.scheduling.annotation.EnableAsync
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
 import org.springframework.stereotype.Component
 import java.lang.reflect.Method
 import java.util.concurrent.Executor
 
 @Configuration
-@EnableAsync
 class SpringAsyncConfig : AsyncConfigurer {
     @Bean(value = ["shopAccBalanceUpdater"])
     fun threadPoolExecutor(): Executor {
@@ -90,16 +91,14 @@
     @Autowired
     private lateinit var shopaccService: ShopaccService
 
-    @Autowired
-    private lateinit var tenantDetailsProvider: TenantDetailsProvider
-
     @Async("shopAccBalanceUpdater")
-    fun updateShopBalance(shopdtl: TShopdtl) {
-        TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(shopdtl.tenantid)
+    fun updateShopBalance(details: TenantDetails, shopdtl: TShopdtl) {
+        TenantContextHolder.getContext().tenant = details
         shopaccService.recalcShopBalance(shopdtl.refno, true)
     }
 }
 
+
 @Component
 class AgentQueryResultTask {
     private val logger = KotlinLogging.logger { }
@@ -116,68 +115,66 @@
     @Autowired
     private lateinit var systemUtilService: SystemUtilService
 
-    @Autowired
-    private lateinit var tenantDetailsProvider: TenantDetailsProvider
+    @Recover
+    fun quertRecover(ex: TaskRetryException, details: TenantDetails,
+                     transaction: TTransactionMain) {
+        TenantContextHolder.getContext().tenant = details
+        logger.error("查询refno=[${transaction.refno}]流水结果超最大查询次数[${YnrccUtil.QUERY_MAX_COUNT}]")
+        dtlQueryResultService.saveOrUpdateDtlQuery(TDtlQuery().apply {
+            this.accdate = transaction.accdate
+            this.refno = transaction.refno
+            this.status = ConstantUtil.QUERYTYPE_NEED_QUERY
+            this.remark = null
+            this.qcnt = 0
+            this.lastsaved = systemUtilService.sysdatetime.sysdate
+        })
+    }
 
     @Async("queryAgentPayResult")
-    fun queryResult(transaction: TTransactionMain, qcnt: Int) {
-        try {
-            TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(transaction.tenantid)
+    @Retryable(value = [TaskRetryException::class], maxAttempts = YnrccUtil.QUERY_MAX_COUNT, backoff = Backoff(value = 3000))
+    fun queryResult(details: TenantDetails, transaction: TTransactionMain) {
+        TenantContextHolder.getContext().tenant = details
 
-            if (qcnt >= YnrccUtil.QUERY_MAX_COUNT) {
-                //查询超最大次数
-                logger.error("查询refno=[${transaction.refno}]流水结果超最大查询次数[${YnrccUtil.QUERY_MAX_COUNT}]")
-
-                //保存进查询表，定时扫描任务去查询
-                dtlQueryResultService.saveOrUpdateDtlQuery(TDtlQuery().apply {
-                    this.accdate = transaction.accdate
-                    this.refno = transaction.refno
-                    this.status = ConstantUtil.QUERYTYPE_NEED_QUERY
-                    this.remark = null
-                    this.qcnt = 0
-                    this.lastsaved = systemUtilService.sysdatetime.sysdate
-                })
-                return
-            }
-
+        val resp = try {
             val service = agentPayServiceContext.findAgentPayService<Any>(transaction.sourceType)
-
-            logger.info("refno=[${transaction.refno}]开始第" + (qcnt + 1) + "次查询支付结果：")
-            val resp = service.query(transaction)
-            when (resp.code) {
-                AgentCode.SUCCESS -> {
-                    //查询成功
-                    when (resp.dtlStatus) {
-                        DtlStatus.SUCCESS ->
-                            transactionService.success(transaction.refno, resp.agentRefno, false) //流水成功
-                        DtlStatus.REFUND -> {
-                            //流水已退款 TODO:流水成功后才退款，无查询原成功流水逻辑
-                            logger.error("refno=[${transaction.refno}]查询结果为:已退款！！！")
-                            return
-                        }
-                        DtlStatus.PARTIAL_REFUND -> {
-                            //流水已部分退款 TODO:暂无逻辑
-                            logger.error("refno=[${transaction.refno}]查询结果为:已部分退款！！！")
-                            return
-                        }
-                        else -> {
-                            //流水失败
-                            transactionService.fail(transaction.refno, "查询流水状态为交易失败")
-                        }
-                    }
-                }
-                AgentCode.REFNO_NOT_EXISTS ->
-                    transactionService.fail(transaction.refno, "银行流水不存在") //银行返回流水不存在
-                AgentCode.REQUIRE_QUERY -> {
-                    queryResult(transaction, qcnt + 1)  //查询次数加1
-                }
-                else -> {
-                    //其他明确错误，查询失败
-                    logger.error("查询refno=[${transaction.refno}]流水结果返回失败：code=[${resp.agentCode}],message=[${resp.agentMsg}]")
-                }
-            }
+            logger.info("refno=[${transaction.refno}]开始查询支付结果：")
+            service.query(transaction)
         } catch (ex: Exception) {
             ex.printStackTrace()
+            throw ex
+        }
+
+        when (resp.code) {
+            AgentCode.SUCCESS -> {
+                //查询成功
+                when (resp.dtlStatus) {
+                    DtlStatus.SUCCESS ->
+                        transactionService.success(transaction.refno, resp.agentRefno, false) //流水成功
+                    DtlStatus.REFUND -> {
+                        //流水已退款 TODO:流水成功后才退款，无查询原成功流水逻辑
+                        logger.error("refno=[${transaction.refno}]查询结果为:已退款！！！")
+                        return
+                    }
+                    DtlStatus.PARTIAL_REFUND -> {
+                        //流水已部分退款 TODO:暂无逻辑
+                        logger.error("refno=[${transaction.refno}]查询结果为:已部分退款！！！")
+                        return
+                    }
+                    else -> {
+                        //流水失败
+                        transactionService.fail(transaction.refno, "查询流水状态为交易失败")
+                    }
+                }
+            }
+            AgentCode.REFNO_NOT_EXISTS ->
+                transactionService.fail(transaction.refno, "银行流水不存在") //银行返回流水不存在
+            AgentCode.REQUIRE_QUERY -> {
+                throw TaskRetryException()
+            }
+            else -> {
+                //其他明确错误，查询失败
+                logger.error("查询refno=[${transaction.refno}]流水结果返回失败：code=[${resp.agentCode}],message=[${resp.agentMsg}]")
+            }
         }
     }
 }
@@ -192,13 +189,10 @@
 
     private val logger = KotlinLogging.logger { }
 
-    @Autowired
-    private lateinit var tenantDetailsProvider: TenantDetailsProvider
-
     @Async("handSettlementAsyncTask")
-    fun doHandSettleTask() {
+    fun doHandSettleTask(details: TenantDetails) {
         logger.info("进入手动发起的异步结算：")
-        TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(Constants.DEFAULT_TENANTID)
+        TenantContextHolder.getContext().tenant = details
         val settleLog = dayendSettleService.doCreateSettleLog() //记录日志
         try {
             val ret = dayendSettleService.doDayendSettle()
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 7cad44b..ac73959 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
@@ -17,7 +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.task.TaskExecuteTimes
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.multitenant.TenantContextHolder
 import org.apache.commons.lang3.StringUtils
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.redis.core.RedisTemplate
@@ -71,7 +73,7 @@
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .success(QueryTransDtlResponse(it.refno, it.outTradeNo, it.shopDtl.amount,
                             it.status, it.sourceType, it.personDtl.payinfo, it.reverseFlag,
-                            it.shopDtl.transdesc,it.personDtl.remark), "查询成功"))
+                            it.shopDtl.transdesc, it.personDtl.remark), "查询成功"))
         } ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                 .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
     }
@@ -247,7 +249,7 @@
                 }
             AgentCode.REQUIRE_QUERY -> {
                 //去查询
-                agentQueryResultTask.queryResult(dtl, 0)
+                agentQueryResultTask.queryResult(TenantContextHolder.getContext().tenant, dtl)
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(CitizenPayResponse(dtl.refno,
                                 dtl.outTradeNo,
@@ -300,7 +302,7 @@
                 }
                 AgentCode.REQUIRE_QUERY -> {
                     //待查询
-                    agentQueryResultTask.queryResult(cancelTrans, 0)
+                    agentQueryResultTask.queryResult(TenantContextHolder.getContext().tenant, cancelTrans)
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(PayReverseResponse(cancelTrans.refno),
                                     TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
@@ -341,7 +343,8 @@
                 setTransInfo(param.transdate, param.transtime, mainDtl.transCode, mainDtl.sourceType)
                 setOutTransInfo(mainDtl.outId, param.requestbillno)
             }
-            val refundTrans = builder.refundInit(mainDtl.refno, param.refundAmount / 100.0, transactionService)
+            val refundTrans = builder.refundInit(mainDtl.refno,
+                    param.refundAmount / 100.0, transactionService)
             transactionService.wip(refundTrans.refno)
             val service = createAgentService<Any>(mainDtl.sourceType)
             val resp = service.refund(refundTrans)
@@ -355,7 +358,7 @@
                 }
                 AgentCode.REQUIRE_QUERY -> {
                     //待查询
-                    agentQueryResultTask.queryResult(refundTrans, 0)
+                    agentQueryResultTask.queryResult(TenantContextHolder.getContext().tenant, refundTrans)
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(PayReverseResponse(refundTrans.refno),
                                     TradeErrorCode.WAIT_QUERY_RESULT, "请查询退款结果"))
@@ -457,7 +460,8 @@
     }
 
     @RequestMapping("/qrcode/init", method = [RequestMethod.POST, RequestMethod.GET])
-    fun qrcodePayInit(@Validated(InitAction::class) @RequestBody param: QrcodePayParam): ResponseEntity<ApiResponse> {
+    fun qrcodePayInit(@Validated(InitAction::class) @RequestBody param: QrcodePayParam)
+            : ResponseEntity<ApiResponse> {
         val apiResp = QrcodePayResponse()
         // 1. 检查 qrcode
         val qrcode = agentServiceProxy.qrcodeMatch(param.qrcode)
@@ -538,7 +542,8 @@
     private fun qrcodeSummary(st: TSourceType): String = st.paydesc + "扫码付"
 
     @PostMapping("/qrcode/confirm")
-    fun qrcodePayConfirm(@Validated(ConfirmAction::class) @RequestBody param: QrcodePayParam): ResponseEntity<ApiResponse> {
+    fun qrcodePayConfirm(@Validated(ConfirmAction::class) @RequestBody param: QrcodePayParam)
+            : ResponseEntity<ApiResponse> {
         //1. 交易检查
         val apiResponse = QrcodePayResponse()
         val qrcodeTrans = agentServiceProxy.qrcodePayTransFindByMerchIdAndBillno(param.shopaccno,
@@ -764,12 +769,14 @@
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(ThirdPayResponse(dtl.refno,
                                 dtl.outTradeNo,
-                                dtl.shopDtl.amount, resp.agentBody), TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果"))
+                                dtl.shopDtl.amount, resp.agentBody),
+                                TradeErrorCode.WAIT_QUERY_RESULT, "请查询支付结果"))
             }
             else -> //失败
                 transactionService.fail(param.refno, resp.agentMsg).let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(ThirdPayResponse(dtl.refno, dtl.outTradeNo, dtl.shopDtl.amount, resp.agentBody),
+                            .fail(ThirdPayResponse(dtl.refno, dtl.outTradeNo,
+                                    dtl.shopDtl.amount, resp.agentBody),
                                     TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${resp.agentMsg}"))
                 }
         }
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 e3ab9e4..c57ddb1 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
@@ -15,6 +15,7 @@
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.multitenant.TenantContextHolder
+import com.supwisdom.multitenant.TenantDetails
 import com.supwisdom.multitenant.TenantDetailsProvider
 import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.SchedulerLock
@@ -176,10 +177,10 @@
             // 对账文件是否下载完成
             if (it.checkFileOk && !it.forceRecheck) {
                 // 开始对账
-                sourceTypeCheckExecutor.reconciliation(it)
+                sourceTypeCheckExecutor.reconciliation(TenantContextHolder.getContext().tenant, it)
             } else {
                 // 开始下载对账文件
-                sourceTypeCheckExecutor.checkAndDownloadChkfile(it)
+                sourceTypeCheckExecutor.checkAndDownloadChkfile(TenantContextHolder.getContext().tenant, it)
             }
         }.toMutableList()
 
@@ -192,7 +193,8 @@
                     if (result.code == SourceTypeCheckExecutor.SUCCESS) {
                         // 完成对账文件下载 但 还未对账
                         if (result.status.checkFileOk && !result.status.settleStatus) {
-                            newPrcResult.add(sourceTypeCheckExecutor.reconciliation(result.status))
+                            newPrcResult.add(sourceTypeCheckExecutor.reconciliation(
+                                    TenantContextHolder.getContext().tenant, result.status))
                         } else if (!result.status.checkFileOk) {
                             logger.error {
                                 "sourcetype <${result.status.sourceType}> get checkfile error," +
@@ -205,7 +207,8 @@
                             }
                         }
                     } else if (result.code == SourceTypeCheckExecutor.WAIT) {
-                        newPrcResult.add(sourceTypeCheckExecutor.checkAndDownloadChkfile(result.status))
+                        newPrcResult.add(sourceTypeCheckExecutor.checkAndDownloadChkfile(
+                                TenantContextHolder.getContext().tenant, result.status))
                     } else {
                         logger.error {
                             "sourcetype <${result.status.sourceType}> 对账状任务错误, error=" +
@@ -249,9 +252,6 @@
     @Autowired
     private lateinit var sourceTypeService: SourceTypeService
 
-    @Autowired
-    private lateinit var tenantDetailsProvider: TenantDetailsProvider
-
     private val logger = KotlinLogging.logger { }
 
     private fun getProvider(sourcetype: String): CheckFileProvider? {
@@ -274,10 +274,10 @@
     }
 
     @Async("sourcetypeCheckTaskExecutor")
-    fun checkAndDownloadChkfile(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
+    fun checkAndDownloadChkfile(tenantDetails: TenantDetails, checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
         // 2. 根据对账日期下载对账文件
         try {
-            TenantContextHolder.getContext().tenant = tenantDetailsProvider.defaultTenant()
+            TenantContextHolder.getContext().tenant = tenantDetails
             if (checkStatus.settleStatus) {
                 return AsyncResult(ExecutorResult(checkStatus, FAIL, "[${checkStatus.checkAccdate}]日对账已完成"))
             }
@@ -318,9 +318,9 @@
     }
 
     @Async("sourcetypeCheckTaskExecutor")
-    fun reconciliation(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
+    fun reconciliation(tenantDetails: TenantDetails, checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
         // 3. 完成对账
-        TenantContextHolder.getContext().tenant = tenantDetailsProvider.defaultTenant()
+        TenantContextHolder.getContext().tenant = tenantDetails
         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_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
index 7b477dd..ba4b5e9 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
@@ -78,75 +78,85 @@
         if (ConstantUtil.QUERYTYPE_NEED_QUERY != dtlQuery.status) {
             return //已结束
         }
-        val dtl = consumePayService.getTransactionMainDtl(dtlQuery.refno, null, null)
-        if (null == dtl) {
-            dtlQuery.qcnt = dtlQuery.qcnt + 1
-            dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
-            dtlQuery.remark = "refno未找到流水"
-            dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
-            return
-        } else if (TradeDict.DTL_STATUS_WIP != dtl.status) {
-            dtlQuery.qcnt = dtlQuery.qcnt + 1
-            dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
-            dtlQuery.remark = "原始流水非wip状态"
-            dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
-            return
-        } else if (TradeDict.PAYTYPE_CITIZEN_CARD != dtl.sourceType) {
-            //fixme: 现仅供大理农商卡对接查询
-            dtlQuery.qcnt = dtlQuery.qcnt + 1
-            dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
-            dtlQuery.remark = "非大理市民卡支付流水"
-            dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
-            return
-        }
-
-        val service = agentPayServiceContext.findAgentPayService<Any>(dtl.sourceType)
-        val resp = service.query(dtl)
-        when (resp.code) {
-            AgentCode.SUCCESS -> {
-                //查询成功
-                when (resp.dtlStatus) {
-                    DtlStatus.SUCCESS -> {
-                        transactionService.success(dtl.refno, resp.agentRefno, false) //流水成功
-                        dtlQuery.qcnt = dtlQuery.qcnt + 1
-                        dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
-                        dtlQuery.remark = "查询成功，流水为付款成功状态"
-                        dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
-                        return
+        val dtl = consumePayService.getTransactionMainDtl(dtlQuery.refno, null, null)//其他明确错误，后续再查询
+        //银行返回流水不存在
+        //流水失败
+        //流水成功
+        //查询成功
+        when {
+            null == dtl -> {
+                dtlQuery.qcnt = dtlQuery.qcnt + 1
+                dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
+                dtlQuery.remark = "refno未找到流水"
+                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
+                return
+            }
+            TradeDict.DTL_STATUS_WIP != dtl.status -> {
+                dtlQuery.qcnt = dtlQuery.qcnt + 1
+                dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
+                dtlQuery.remark = "原始流水非wip状态"
+                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
+                return
+            }
+            TradeDict.PAYTYPE_CITIZEN_CARD != dtl.sourceType -> {
+                //fixme: 现仅供大理农商卡对接查询
+                dtlQuery.qcnt = dtlQuery.qcnt + 1
+                dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
+                dtlQuery.remark = "非大理市民卡支付流水"
+                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
+                return
+            }
+            else -> {
+                val service = agentPayServiceContext.findAgentPayService<Any>(dtl.sourceType)
+                val resp = service.query(dtl)
+                when (resp.code) {
+                    AgentCode.SUCCESS -> {
+                        //查询成功
+                        when (resp.dtlStatus) {
+                            DtlStatus.SUCCESS -> {
+                                transactionService.success(dtl.refno, resp.agentRefno, false) //流水成功
+                                dtlQuery.qcnt = dtlQuery.qcnt + 1
+                                dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
+                                dtlQuery.remark = "查询成功，流水为付款成功状态"
+                                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
+                                return
+                            }
+                            DtlStatus.REFUND, DtlStatus.PARTIAL_REFUND -> {
+                                dtlQuery.qcnt = dtlQuery.qcnt + 1
+                                dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
+                                dtlQuery.remark = "查询成功，流水为已退款或部分退款状态"
+                                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
+                                return
+                            }
+                            else -> {
+                                //流水失败
+                                transactionService.fail(dtl.refno, "查询流水状态为交易失败")
+                                dtlQuery.qcnt = dtlQuery.qcnt + 1
+                                dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
+                                dtlQuery.remark = "查询成功，流水为失败状态"
+                                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
+                                return
+                            }
+                        }
                     }
-                    DtlStatus.REFUND, DtlStatus.PARTIAL_REFUND -> {
+                    AgentCode.REFNO_NOT_EXISTS -> {
+                        transactionService.fail(dtl.refno, "银行流水不存在") //银行返回流水不存在
                         dtlQuery.qcnt = dtlQuery.qcnt + 1
                         dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
-                        dtlQuery.remark = "查询成功，流水为已退款或部分退款状态"
+                        dtlQuery.remark = "查询成功，返回流水不存在"
                         dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
                         return
                     }
                     else -> {
-                        //流水失败
-                        transactionService.fail(dtl.refno, "查询流水状态为交易失败")
+                        //其他明确错误，后续再查询
                         dtlQuery.qcnt = dtlQuery.qcnt + 1
-                        dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
-                        dtlQuery.remark = "查询成功，流水为失败状态"
+                        dtlQuery.remark = "查询失败！${resp.agentMsg}"
                         dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
                         return
                     }
                 }
             }
-            AgentCode.REFNO_NOT_EXISTS -> {
-                transactionService.fail(dtl.refno, "银行流水不存在") //银行返回流水不存在
-                dtlQuery.qcnt = dtlQuery.qcnt + 1
-                dtlQuery.status = ConstantUtil.QUERYTYPE_QUERY_FINISH
-                dtlQuery.remark = "查询成功，返回流水不存在"
-                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
-                return
-            }
-            else -> {
-                //其他明确错误，后续再查询
-                dtlQuery.qcnt = dtlQuery.qcnt + 1
-                dtlQuery.remark = "查询失败！${resp.agentMsg}"
-                dtlQueryResultService.saveOrUpdateDtlQuery(dtlQuery)
-                return
-            }
         }
+
     }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index 2e0ff91..ad2402d 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -6,6 +6,7 @@
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.multitenant.TenantContextHolder
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.dao.DataAccessException
 import org.springframework.stereotype.Service
@@ -100,7 +101,7 @@
     fun success(refno: String, sourcetypeRefno: String, accdateUpdate: Boolean? = true): TTransactionMain {
         return transactionService.success(refno, sourcetypeRefno, accdateUpdate).also {
             if (it.shop) {
-                shopAccBalanceAsyncTask.updateShopBalance(it.shopDtl)
+                shopAccBalanceAsyncTask.updateShopBalance(TenantContextHolder.getContext().tenant, it.shopDtl)
             }
 
             if (it.person && !it.personDtl.userid.isNullOrEmpty()) {
@@ -139,7 +140,7 @@
     fun repair(refno: String, agentAccdate: String, sourcetypeRefno: String, remark: String): TTransactionMain {
         return transactionService.repair(refno, agentAccdate, sourcetypeRefno, remark).also {
             if (it.shop) {
-                shopAccBalanceAsyncTask.updateShopBalance(it.shopDtl)
+                shopAccBalanceAsyncTask.updateShopBalance(TenantContextHolder.getContext().tenant, it.shopDtl)
             }
         }
     }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
index 93ad8e6..363e617 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
@@ -30,7 +30,7 @@
     }
 
     override fun getRequestAppid(request: HttpServletRequest): String {
-        jwtTokenContext.jwt.get()?.also {
+        jwtTokenContext.jwt.orElseGet(null)?.let {
             val uid = it.uid
             if (!StringUtil.isEmpty(uid)) {
                 return uid as String
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 7f12778..da40c22 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -8,13 +8,10 @@
 import com.supwisdom.dlpay.mobile.AuthLoginSuccessHandler
 import com.supwisdom.dlpay.mobile.service.MobileUserService
 import com.supwisdom.multitenant.jwt.JwtTokenContext
-import org.jose4j.jwt.consumer.InvalidJwtException
-import org.jose4j.lang.JoseException
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
 import org.springframework.core.annotation.Order
-import org.springframework.http.HttpStatus
 import org.springframework.security.authentication.AuthenticationManager
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
 import org.springframework.security.authentication.dao.DaoAuthenticationProvider
@@ -50,27 +47,16 @@
     private lateinit var jwtTokenContext: JwtTokenContext
 
     override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain) {
-        jwtTokenContext.jwt.ifPresent { jwt ->
-            try {
+        try {
+            jwtTokenContext.jwt.ifPresent { jwt ->
                 val auth = UsernamePasswordAuthenticationToken(jwt.uid, null,
                         (jwt.authorities as ArrayList<*>)
                                 .map { SimpleGrantedAuthority(it as String) })
                 SecurityContextHolder.getContext().authentication = auth
-                filterChain.doFilter(request, response)
-            } catch (e: InvalidJwtException) {
-                SecurityContextHolder.clearContext()
-                response.status = HttpStatus.UNAUTHORIZED.value()
-            } catch (e: JoseException) {
-                SecurityContextHolder.clearContext()
-                // jwt 失效后返回 401
-                response.status = HttpStatus.UNAUTHORIZED.value()
-                response.contentType = "application/json;charset=UTF-8"
-            } catch (e: Exception) {
-                SecurityContextHolder.clearContext()
-                // jwt 失效后返回 401
-                response.status = HttpStatus.UNAUTHORIZED.value()
-                response.contentType = "application/json;charset=UTF-8"
             }
+            filterChain.doFilter(request, response)
+        } finally {
+            SecurityContextHolder.clearContext()
         }
     }
 }
@@ -99,8 +85,8 @@
             filterChain.doFilter(request, response)
             return
         }
-        jwtTokenContext.jwt.ifPresent { jwt ->
-            try {
+        try {
+            jwtTokenContext.jwt.ifPresent { jwt ->
                 val auth = UsernamePasswordAuthenticationToken(jwt.uid, null,
                         (jwt.authorities as ArrayList<*>)
                                 .map { SimpleGrantedAuthority(it as String) })
@@ -109,21 +95,10 @@
                 response.setHeader("Access-Control-Allow-Methods", "GET,POST,DELETE,PUT,OPTIONS");
                 response.setHeader("Access-Control-Allow-Headers", "*");
                 response.setHeader("Access-Control-Allow-Credentials", "true")
-                filterChain.doFilter(request, response)
-            } catch (e: InvalidJwtException) {
-                SecurityContextHolder.clearContext()
-                response.status = HttpStatus.UNAUTHORIZED.value()
-            } catch (e: JoseException) {
-                SecurityContextHolder.clearContext()
-                // jwt 失效后返回 401
-                response.status = HttpStatus.UNAUTHORIZED.value()
-                response.contentType = "application/json;charset=UTF-8"
-            } catch (e: Exception) {
-                SecurityContextHolder.clearContext()
-                // jwt 失效后返回 401
-                response.status = HttpStatus.UNAUTHORIZED.value()
-                response.contentType = "application/json;charset=UTF-8"
             }
+            filterChain.doFilter(request, response)
+        } finally {
+            SecurityContextHolder.clearContext()
         }
     }
 }
