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 73f8ba6..9448f3d 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,12 +1,15 @@
 package com.supwisdom.dlpay.api
 
+import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
+import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.repositories.ShopaccService
 import com.supwisdom.dlpay.api.service.TransactionServiceProxy
-import com.supwisdom.dlpay.agent.service.CitizencardPayService
-import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
+import com.supwisdom.dlpay.framework.util.ApplicationUtil
 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
@@ -20,7 +23,7 @@
 @Configuration
 @EnableAsync
 class SpringAsyncConfig : AsyncConfigurer {
-    @Bean(value = ["shopAccBalanceUpdater", "queryCitizencardPayResult"])
+    @Bean(value = ["shopAccBalanceUpdater", "queryAgentPayResult"])
     fun threadPoolExecutor(): Executor {
         return ThreadPoolTaskExecutor().apply {
             corePoolSize = 5
@@ -56,52 +59,53 @@
 }
 
 @Component
-class CitizencardQueryResultTask {
+class AgentQueryResultTask {
     private val logger = KotlinLogging.logger { }
 
     @Autowired
-    private lateinit var citizencardPayService: CitizencardPayService
-    @Autowired
     lateinit var transactionService: TransactionServiceProxy
 
-    @Async("queryCitizencardPayResult")
-    fun queryResult(refno: String, qcnt: Int) {
+    @Autowired
+    private lateinit var applicationContext: ApplicationContext
+
+    @Async("queryAgentPayResult")
+    fun queryResult(transaction: TTransactionMain, qcnt: Int) {
         try {
-            if(qcnt >= YnrccUtil.QUERY_MAX_COUNT){
+            if (qcnt >= YnrccUtil.QUERY_MAX_COUNT) {
                 //查询超最大次数
-                logger.error("查询refno=[$refno]流水结果超最大查询次数[${YnrccUtil.QUERY_MAX_COUNT}]")
+                logger.error("查询refno=[${transaction.refno}]流水结果超最大查询次数[${YnrccUtil.QUERY_MAX_COUNT}]")
                 return
             }
 
-            logger.info("refno=[$refno]开始第" + (qcnt + 1) + "次查询支付结果：")
-            val resp = citizencardPayService.queryResult(refno)
-            when {
-                YnrccUtil.CODE_SUCCESS == resp.code -> {
+            val service = ApplicationUtil.findAgentPayService(applicationContext,
+                    transaction.sourceType)
+            logger.info("refno=[${transaction.refno}]开始第" + (qcnt + 1) + "次查询支付结果：")
+            val resp = service.query(transaction)
+            when (resp.code) {
+                AgentCode.SUCCESS -> {
                     //查询成功
-                    when {
-                        YnrccUtil.DTL_STATUS_SUCCESS == resp.status ->
-                            transactionService.success(refno, resp.bankjourno, false) //流水成功
-                        YnrccUtil.DTL_STATUS_REFUND == resp.status -> {
-                            //流水已退款 TODO:流水成功后才退款，无查询原成功流水逻辑
-                            return
-                        }
-                        YnrccUtil.DTL_STATUS_PART_REFUND == resp.status -> {
-                            //流水已部分退款 TODO:暂无逻辑
-                            return
-                        }
-                        else -> {
-                            //流水失败
-                            transactionService.fail(refno, "查询流水状态为交易失败")
-                        }
-                    }
+//                    when {
+//                        YnrccUtil.DTL_STATUS_SUCCESS == resp.status ->
+//                            transactionService.success(refno, resp.bankjourno, false) //流水成功
+//                        YnrccUtil.DTL_STATUS_REFUND == resp.status -> {
+//                            //流水已退款 TODO:流水成功后才退款，无查询原成功流水逻辑
+//                            return
+//                        }
+//                        YnrccUtil.DTL_STATUS_PART_REFUND == resp.status -> {
+//                            //流水已部分退款 TODO:暂无逻辑
+//                            return
+//                        }
+//                        else -> {
+//                            //流水失败
+//                            transactionService.fail(refno, "查询流水状态为交易失败")
+//                        }
+//                    }
+                    transactionService.success(transaction.refno, resp.agentRefno, false)
                 }
-                YnrccUtil.CODE_NOT_EXISTS == resp.code ->
-                    transactionService.fail(refno, "银行流水不存在") //银行返回流水不存在
-                YnrccUtil.CODE_EXCEPTION == resp.code ->
-                    queryResult(refno, qcnt + 1) //查询次数加1
+                AgentCode.REFNO_NOT_EXISTS -> transactionService.fail(transaction.refno, "银行流水不存在")
+                AgentCode.COMMON_ERROR -> queryResult(transaction, qcnt + 1)
                 else -> {
-                    //其他明确错误，查询失败
-                    logger.error("查询refno=[$refno]流水结果返回失败：code=[${resp.code}],message=[${resp.message}]")
+                    transactionService.fail(transaction.refno, resp.agentMsg)
                 }
             }
         } catch (ex: Exception) {
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 b0be489..1e7cca9 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
@@ -35,9 +35,8 @@
     lateinit var cardService: CardService
     @Autowired
     private lateinit var applicationContext: ApplicationContext
-
     @Autowired
-    lateinit var citizencardQueryResultTask: CitizencardQueryResultTask
+    lateinit var agentQueryResultTask: AgentQueryResultTask
 
     /**
      * ============================================================================
@@ -226,7 +225,7 @@
                 }
             AgentCode.REQUIRE_QUERY -> {
                 //去查询
-                citizencardQueryResultTask.queryResult(dtl.refno, 0)
+                agentQueryResultTask.queryResult(dtl, 0)
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(CitizenPayResponse(dtl.refno,
                                 dtl.outTradeNo,
@@ -276,7 +275,7 @@
                 }
                 AgentCode.REQUIRE_QUERY -> {
                     //待查询
-                    citizencardQueryResultTask.queryResult(cancelTrans.refno, 0)
+                    agentQueryResultTask.queryResult(cancelTrans, 0)
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(PayReverseResponse(cancelTrans.refno),
                                     TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
@@ -331,7 +330,7 @@
                 }
                 AgentCode.REQUIRE_QUERY -> {
                     //待查询
-                    citizencardQueryResultTask.queryResult(refundTrans.refno, 0)
+                    agentQueryResultTask.queryResult(refundTrans, 0)
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(PayReverseResponse(refundTrans.refno),
                                     TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
