第三方接口返回流水状态
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
index 0906293..e776671 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
@@ -6,6 +6,7 @@
   private String agentMsg;
 
   private String agentRefno;
+  private DtlStatus dtlStatus;
 
   public AgentCode getCode() {
     return code;
@@ -38,4 +39,12 @@
   public void setAgentRefno(String agentRefno) {
     this.agentRefno = agentRefno;
   }
+
+  public DtlStatus getDtlStatus() {
+    return dtlStatus;
+  }
+
+  public void setDtlStatus(DtlStatus dtlStatus) {
+    this.dtlStatus = dtlStatus;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/DtlStatus.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/DtlStatus.java
new file mode 100644
index 0000000..d80d503
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/DtlStatus.java
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.agent;
+
+public enum DtlStatus {
+  SUCCESS, //成功
+  FAIL,  //失败
+  REFUND, //已退款
+  PARTIAL_REFUND //部分退款
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
index 7aa5e95..cafbb40 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
@@ -63,7 +63,7 @@
     errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("0302", "余额不足")));
     errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("0303", "MD5校验失败")));
     errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0304", "该卡号已经解约,不允许重复解约")));
-    errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0401", "原始流水不存在")));
+    errcode.add(Pair.of(AgentCode.REFNO_NOT_EXISTS, new YnrccRespCode("0401", "原始流水不存在")));
     errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0402", "原始流水未成功")));
     errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0403", "原始流水已退款")));
     errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("0404", "商户账户余额不足")));
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
index 93ec750..7497567 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
@@ -3,6 +3,7 @@
 import com.supwisdom.dlpay.agent.AgentCode
 import com.supwisdom.dlpay.agent.AgentPayService
 import com.supwisdom.dlpay.agent.AgentResponse
+import com.supwisdom.dlpay.agent.DtlStatus
 import com.supwisdom.dlpay.agent.citizencard.DlpayResp
 import com.supwisdom.dlpay.agent.citizencard.YnrccRespCode
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
@@ -81,6 +82,12 @@
             it.agentCode = code.second.code
             it.agentMsg = code.first.message() + "-" + code.second.msg
             it.agentRefno = resp.bankjourno
+            it.dtlStatus = when (resp.status) {
+                YnrccUtil.DTL_STATUS_SUCCESS -> DtlStatus.SUCCESS
+                YnrccUtil.DTL_STATUS_REFUND -> DtlStatus.REFUND
+                YnrccUtil.DTL_STATUS_PART_REFUND -> DtlStatus.PARTIAL_REFUND
+                else -> DtlStatus.FAIL
+            }
         }
     }
 }
\ No newline at end of file
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 9448f3d..133427f 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,8 @@
 package com.supwisdom.dlpay.api
 
 import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.DtlStatus
+
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import com.supwisdom.dlpay.api.repositories.ShopaccService
@@ -78,34 +80,39 @@
             }
 
             val service = ApplicationUtil.findAgentPayService(applicationContext,
-                    transaction.sourceType)
+                    transaction.sourceType+ "Agent")
+
             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, "查询流水状态为交易失败")
-//                        }
-//                    }
-                    transactionService.success(transaction.refno, resp.agentRefno, false)
+                    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.COMMON_ERROR -> queryResult(transaction, qcnt + 1)
+                AgentCode.REFNO_NOT_EXISTS ->
+                    transactionService.fail(transaction.refno, "银行流水不存在") //银行返回流水不存在
+                AgentCode.REQUIRE_QUERY ->
+                    queryResult(transaction, qcnt + 1)  //查询次数加1
                 else -> {
-                    transactionService.fail(transaction.refno, resp.agentMsg)
+                    //其他明确错误,查询失败
+                    logger.error("查询refno=[${transaction.refno}]流水结果返回失败:code=[${resp.agentCode}],message=[${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 1e7cca9..1f32d89 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
@@ -255,6 +255,9 @@
                 } else {
                     consumePayService.checkCanReverse(mainDtl.sourceType)
                 }
+            } else {
+                throw TransactionCheckException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+                        "该笔交易未定义sourcetype, 不支持撤销")
             }
 
             val builder = TransactionBuilder().apply {
@@ -265,7 +268,7 @@
             val cancelTrans = builder.cancelInit(mainDtl.refno, transactionService)
             transactionService.wip(cancelTrans.refno)
             val service = createAgentService(mainDtl.sourceType)
-            val resp = service.pay(cancelTrans)
+            val resp = service.cancel(cancelTrans)
             when (resp.code) {
                 AgentCode.SUCCESS -> {
                     transactionService.success(cancelTrans.refno, resp.agentRefno, false)
@@ -284,12 +287,12 @@
                         "${resp.agentCode}-${resp.agentMsg}").let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(PayReverseResponse(cancelTrans.refno),
-                                    TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+                                    TradeErrorCode.BUSINESS_DEAL_ERROR, "交易撤销失败!${resp.agentMsg}"))
                 }
             }
 
         } ?: return ResponseEntity.ok(ResponseBodyBuilder.create().fail(PayReverseResponse(),
-                TradeErrorCode.BUSINESS_DEAL_ERROR, "流水不存在"))
+                TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
     }
 
     /**
@@ -326,20 +329,20 @@
                     transactionService.success(refundTrans.refno, resp.agentRefno, false)
 
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .success(PayReverseResponse(refundTrans.refno), "交易撤销成功"))
+                            .success(PayReverseResponse(refundTrans.refno), "交易退款成功"))
                 }
                 AgentCode.REQUIRE_QUERY -> {
                     //待查询
                     agentQueryResultTask.queryResult(refundTrans, 0)
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(PayReverseResponse(refundTrans.refno),
-                                    TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+                                    TradeErrorCode.WAIT_QUERY_RESULT, "请查询退款结果"))
                 }
                 else -> transactionService.fail(refundTrans.refno,
                         "${resp.agentCode}-${resp.agentMsg}").let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(PayReverseResponse(refundTrans.refno),
-                                    TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+                                    TradeErrorCode.BUSINESS_DEAL_ERROR, "退款失败!${resp.agentMsg}"))
                 }
             }