From 98790c7d6c69e55fb85268399adce9a3756b8595 Mon Sep 17 00:00:00 2001 From: Xia Kaixiang Date: Thu, 18 Jul 2019 09:58:17 +0800 Subject: [PATCH] =?utf8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E6=8E=A5=E5=8F=A3?= =?utf8?q?=E8=BF=94=E5=9B=9E=E6=B5=81=E6=B0=B4=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../supwisdom/dlpay/agent/AgentResponse.java | 9 ++++ .../com/supwisdom/dlpay/agent/DtlStatus.java | 8 +++ .../dlpay/agent/citizencard/YnrccUtil.java | 2 +- .../agent/service/citizencard_service.kt | 7 +++ .../com/supwisdom/dlpay/api/async_tasks.kt | 49 +++++++++++-------- .../api/controller/consume_api_controller.kt | 15 +++--- 6 files changed, 62 insertions(+), 28 deletions(-) create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/agent/DtlStatus.java 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 09062939..e7766713 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 @@ public class AgentResponse { private String agentMsg; private String agentRefno; + private DtlStatus dtlStatus; public AgentCode getCode() { return code; @@ -38,4 +39,12 @@ public class AgentResponse { 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 00000000..d80d5036 --- /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 7aa5e958..cafbb40e 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 @@ public class YnrccUtil { 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 93ec7507..74975676 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 @@ package com.supwisdom.dlpay.agent.service 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 @@ class CitizenCardPayAgent : AgentPayService { 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 9448f3d7..133427f5 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 @@ class AgentQueryResultTask { } 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 1e7cca95..1f32d89f 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 @@ class ConsumeAPIController { } else { consumePayService.checkCanReverse(mainDtl.sourceType) } + } else { + throw TransactionCheckException(TradeErrorCode.TRANSDTL_STATUS_ERROR, + "该笔交易未定义sourcetype, 不支持撤销") } val builder = TransactionBuilder().apply { @@ -265,7 +268,7 @@ class ConsumeAPIController { 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 @@ class ConsumeAPIController { "${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 @@ class ConsumeAPIController { 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}")) } } -- 2.17.1