From c3a4123a633fbe66f237250c11f226643e46f268 Mon Sep 17 00:00:00 2001 From: wb2476 Date: Fri, 13 Dec 2024 14:09:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E230909-=E7=BA=BF?= =?UTF-8?q?=E4=B8=8B=E6=9D=A5=E8=B4=A6=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/model/OrderDetailAddResponse.java | 1 - .../scfs/api/service/v2/pay/PayService.java | 14 +++ .../model/OfflineRechargeRefundRequest.java | 98 +++++++++++++++++++ .../model/OfflineRechargeRefundResponse.java | 46 +++++++++ .../api/service/v2/pay/PayServiceTest.java | 76 ++++++++++++++ 5 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundRequest.java create mode 100644 scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundResponse.java diff --git a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/order/model/OrderDetailAddResponse.java b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/order/model/OrderDetailAddResponse.java index abb219d..2ffc1bd 100644 --- a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/order/model/OrderDetailAddResponse.java +++ b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/order/model/OrderDetailAddResponse.java @@ -14,7 +14,6 @@ import lombok.experimental.Accessors; */ @Data @Accessors(chain = true) - public class OrderDetailAddResponse implements ApiResponse { /** * 000000:表示成功 diff --git a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/PayService.java b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/PayService.java index f803cd4..f203174 100644 --- a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/PayService.java +++ b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/PayService.java @@ -180,4 +180,18 @@ public class PayService { HttpResponse httpResponse = apiClient.post(url, headers, request.toJsonRequest(), OfflineRechargeDetailUnmatchedQueryResponse.class); return httpResponse.getServiceResponse(); } + + /** + * 230909-线下来账退款 + * + * @author H.T + * @since 2024/12/13 + */ + public OfflineRechargeRefundResponse refund(OfflineRechargeRefundRequest request) { + String url = "/offline-recharge/refund"; + HttpHeaders headers = new HttpHeaders(); + headers.addHeader(API_VERSION, V_2); + HttpResponse httpResponse = apiClient.post(url, headers, request.toJsonRequest(), OfflineRechargeRefundResponse.class); + return httpResponse.getServiceResponse(); + } } diff --git a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundRequest.java b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundRequest.java new file mode 100644 index 0000000..a8c565e --- /dev/null +++ b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundRequest.java @@ -0,0 +1,98 @@ +package com.czcb.scfs.api.service.v2.pay.model; + +import com.czcb.scfs.api.core.ApiRequest; +import com.czcb.scfs.api.core.agrs.TransType; +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * 230909-线下来账退款 + * + * @author H.T + * @since 2024-12-05 + */ +@Data +@Accessors(chain = true) +@TransType("230909") +public class OfflineRechargeRefundRequest implements ApiRequest { + /** + * 渠道编号 + */ + @SerializedName("channel_no") + private String channelNo; + + /** + * 应用编号 + */ + @SerializedName("app_no") + private String appNo; + + /** + * 流水号 + */ + @SerializedName("serial_no") + private String serialNo; + + /** + * 操作日期 + */ + @SerializedName("trans_date") + private String transDate; + + /** + * 操作时间 + */ + @SerializedName("trans_tradetime") + private String transTradeTime; + + /** + * 原交易流水号 + */ + @SerializedName("original_serialno") + private String originalSerialNo; + + /** + * 对方账号 + */ + @SerializedName("opp_account_no") + private String oppAccountNo; + + /** + * 对方户名 + */ + @SerializedName("opp_account_name") + private String oppAccountName; + + /** + * 对方行号 + */ + @SerializedName("opp_bank_no") + private String oppBankNo; + + /** + * 对方行名 + */ + @SerializedName("opp_bank_name") + private String oppBankName; + + /** + * 交易金额 + */ + @SerializedName("trans_amount") + private BigDecimal transAmount; + + /** + * 汇划路径 + */ + @SerializedName("pay_path") + private String payPath; + + /** + * 摘要 + */ + @SerializedName("remark") + private String remark; +} diff --git a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundResponse.java b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundResponse.java new file mode 100644 index 0000000..2e5ecd0 --- /dev/null +++ b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/v2/pay/model/OfflineRechargeRefundResponse.java @@ -0,0 +1,46 @@ +package com.czcb.scfs.api.service.v2.pay.model; + +import com.czcb.scfs.api.core.ApiResponse; +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 230909-线下来账退款 + * + * @author H.T + * @since 2024-12-05 + */ +@Data +@Accessors(chain = true) +public class OfflineRechargeRefundResponse implements ApiResponse { + /** + * 000000:表示成功 + */ + @SerializedName("recode") + private String recode; + + /** + * 结果信息 + */ + @SerializedName("recode_info") + private String recodeInfo; + + /** + * 系统流水号 + */ + @SerializedName("sys_serial_no") + private String sysSerialNo; + + /** + * 系统日期(YYYY-MM-DD) + */ + @SerializedName("sys_date") + private String sysDate; + + /** + * 系统时间(YYYY-MM-DD hh:mm:ss) + */ + @SerializedName("sys_time") + private String sysTime; +} diff --git a/scfs-api-service/src/test/java/com/czcb/scfs/api/service/v2/pay/PayServiceTest.java b/scfs-api-service/src/test/java/com/czcb/scfs/api/service/v2/pay/PayServiceTest.java index c05c340..6c06be1 100644 --- a/scfs-api-service/src/test/java/com/czcb/scfs/api/service/v2/pay/PayServiceTest.java +++ b/scfs-api-service/src/test/java/com/czcb/scfs/api/service/v2/pay/PayServiceTest.java @@ -1110,5 +1110,81 @@ class PayServiceTest { Assertions.assertEquals("setSysSerialNo", response.getSysSerialNo()); } + @Test + void refundTest() { + OfflineRechargeRefundRequest request = new OfflineRechargeRefundRequest(); + extractedOfflineRechargeRefundRequestParams(request); + extractedOfflineRechargeRefundRequestAssertions(request); + + System.out.println(Json.toJson(request)); + String requestJson = Json.toJson(request); + Assertions.assertEquals("{\"channel_no\":\"setChannelNo\",\"app_no\":\"setAppNo\",\"serial_no\":\"setSerialNo\",\"trans_date\":\"setTransDate\",\"trans_tradetime\":\"setTransTradeTime\",\"original_serialno\":\"setOriginalSerialNo\",\"opp_account_no\":\"setOppAccountNo\",\"opp_account_name\":\"setOppAccountName\",\"opp_bank_no\":\"setOppBankNo\",\"opp_bank_name\":\"setOppBankName\",\"trans_amount\":100.0,\"pay_path\":\"setPayPath\",\"remark\":\"setRemark\"}", requestJson); + + OfflineRechargeRefundResponse response = new OfflineRechargeRefundResponse(); + extractedOfflineRechargeRefundResponseParams(response); + extractedOfflineRechargeRefundResponseAssertions(response); + + System.out.println(Json.toJson(response)); + String responseJson = Json.toJson(response); + Assertions.assertEquals("{\"recode\":\"setRecode\",\"recode_info\":\"setRecodeInfo\",\"sys_serial_no\":\"setSysSerialNo\",\"sys_date\":\"setSysDate\",\"sys_time\":\"setSysTime\"}", responseJson); + + HttpResponse httpResponse = MockHttpResponse.create("/offline-recharge/refund", response, OfflineRechargeRefundResponse.class); + Mockito.when(apiClient.post( + Mockito.eq("/offline-recharge/refund"), + Mockito.any(HttpHeaders.class), + Mockito.any(RequestBody.class), + Mockito.eq(OfflineRechargeRefundResponse.class))) + .thenReturn(httpResponse); + + OfflineRechargeRefundResponse result = service.refund(request); + + System.out.println(Json.toJson(result)); + String resultJson = Json.toJson(result); + Assertions.assertEquals("{\"recode\":\"setRecode\",\"recode_info\":\"setRecodeInfo\",\"sys_serial_no\":\"setSysSerialNo\",\"sys_date\":\"setSysDate\",\"sys_time\":\"setSysTime\"}", resultJson); + } + void extractedOfflineRechargeRefundRequestParams(OfflineRechargeRefundRequest request) { + request.setPayPath("setPayPath"); + request.setRemark("setRemark"); + request.setOppAccountName("setOppAccountName"); + request.setOriginalSerialNo("setOriginalSerialNo"); + request.setTransTradeTime("setTransTradeTime"); + request.setChannelNo("setChannelNo"); + request.setAppNo("setAppNo"); + request.setTransDate("setTransDate"); + request.setOppAccountNo("setOppAccountNo"); + request.setOppBankNo("setOppBankNo"); + request.setOppBankName("setOppBankName"); + request.setTransAmount(BigDecimal.valueOf(100.00)); + request.setSerialNo("setSerialNo"); + } + void extractedOfflineRechargeRefundRequestAssertions(OfflineRechargeRefundRequest request) { + Assertions.assertEquals("setPayPath", request.getPayPath()); + Assertions.assertEquals("setRemark", request.getRemark()); + Assertions.assertEquals("setOppAccountName", request.getOppAccountName()); + Assertions.assertEquals("setOriginalSerialNo", request.getOriginalSerialNo()); + Assertions.assertEquals("setTransTradeTime", request.getTransTradeTime()); + Assertions.assertEquals("setChannelNo", request.getChannelNo()); + Assertions.assertEquals("setAppNo", request.getAppNo()); + Assertions.assertEquals("setTransDate", request.getTransDate()); + Assertions.assertEquals("setOppAccountNo", request.getOppAccountNo()); + Assertions.assertEquals("setOppBankNo", request.getOppBankNo()); + Assertions.assertEquals("setOppBankName", request.getOppBankName()); + Assertions.assertEquals(BigDecimal.valueOf(100.00), request.getTransAmount()); + Assertions.assertEquals("setSerialNo", request.getSerialNo()); + } + void extractedOfflineRechargeRefundResponseParams(OfflineRechargeRefundResponse response) { + response.setRecode("setRecode"); + response.setSysSerialNo("setSysSerialNo"); + response.setSysDate("setSysDate"); + response.setSysTime("setSysTime"); + response.setRecodeInfo("setRecodeInfo"); + } + void extractedOfflineRechargeRefundResponseAssertions(OfflineRechargeRefundResponse response) { + Assertions.assertEquals("setRecode", response.getRecode()); + Assertions.assertEquals("setSysSerialNo", response.getSysSerialNo()); + Assertions.assertEquals("setSysDate", response.getSysDate()); + Assertions.assertEquals("setSysTime", response.getSysTime()); + Assertions.assertEquals("setRecodeInfo", response.getRecodeInfo()); + } } \ No newline at end of file