From 7e72a847b80edbb1854ea339da36449ef3d12ed7 Mon Sep 17 00:00:00 2001 From: "JSOWELL-PC\\autum" Date: Tue, 7 Mar 2023 16:55:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/SpringBootTestController.java | 63 ++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index f12eda1a2..b80a1adba 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -9,7 +9,12 @@ import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.exception.BusinessException; -import com.jsowell.common.util.*; +import com.jsowell.common.util.BytesUtil; +import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.DictUtils; +import com.jsowell.common.util.JWTUtils; +import com.jsowell.common.util.StringUtils; +import com.jsowell.common.util.YKCUtils; import com.jsowell.common.util.id.SnUtils; import com.jsowell.common.util.id.SnowflakeIdWorker; import com.jsowell.common.util.ip.AddressUtils; @@ -29,6 +34,7 @@ import com.jsowell.pile.dto.ImportBillingTemplateDTO; import com.jsowell.pile.dto.QueryOrderDTO; import com.jsowell.pile.dto.QueryPileDTO; import com.jsowell.pile.dto.QueryStationDTO; +import com.jsowell.pile.dto.RefundableWxPayOrderData; import com.jsowell.pile.dto.WeixinPayDTO; import com.jsowell.pile.mapper.MemberBasicInfoMapper; import com.jsowell.pile.mapper.PileBillingTemplateMapper; @@ -40,7 +46,9 @@ import com.jsowell.pile.service.IPileStationInfoService; import com.jsowell.pile.service.SimCardService; import com.jsowell.pile.service.WechatPayService; import com.jsowell.pile.service.WxpayCallbackRecordService; -import com.jsowell.pile.vo.web.*; +import com.jsowell.pile.vo.web.BillingTemplateVO; +import com.jsowell.pile.vo.web.OrderListVO; +import com.jsowell.pile.vo.web.PileDetailVO; import com.jsowell.service.MemberService; import com.jsowell.service.OrderService; import com.jsowell.service.PileRemoteService; @@ -141,6 +149,57 @@ public class SpringBootTestController { @Autowired private RedisCache redisCache; + @Test + public void testRefundForBalance() { + BigDecimal refundAmount = new BigDecimal("2"); + // 退款金额 元转分 123 + int refundTotalCents = refundAmount.multiply(new BigDecimal(100)).intValue(); + + // 查询用户充值余额订单 过滤掉已经退款的充值订单 refundableOrder + List recordList = Lists.newArrayList(); + // recordList.add(RefundableWxPayOrderData.builder().outTradeNo("1").transactionId("1").payerAmount(new BigDecimal("1000")).refundableAmount(new BigDecimal("0")).build()); + // recordList.add(RefundableWxPayOrderData.builder().outTradeNo("2").transactionId("2").payerAmount(new BigDecimal("1000")).refundableAmount(new BigDecimal("0")).build()); + recordList.add(RefundableWxPayOrderData.builder().outTradeNo("3").transactionId("3").payerAmount(new BigDecimal("500")).refundableAmount(new BigDecimal("300")).build()); + + // 也许需要多笔支付订单才够退款 + List requestList = com.google.common.collect.Lists.newArrayList(); + WechatPayRefundRequest request; + for (RefundableWxPayOrderData record : recordList) { + int refundableTotal = record.getRefundableAmount().intValue(); // 该笔支付订单的可退金额,单位分 + int payerTotal = record.getPayerAmount().intValue(); // 该笔支付订单的支付金额,单位分 + // 用户申请退款金额-可退金额 + refundTotalCents = refundTotalCents - refundableTotal; // 123 - 100 + request = new WechatPayRefundRequest(); + request.setTransaction_id(record.getTransactionId()); // 微信支付单号 + request.setOut_trade_no(record.getOutTradeNo()); // 商户订单号 + request.setOut_refund_no(SnowflakeIdWorker.getSnowflakeId()); // 商户退款单号 + request.setNotify_url(WeChatPayParameter.refundNotifyUrl); // 回调接口 + request.setReason("用户余额退款"); + request.setFunds_account("AVAILABLE"); + if (refundTotalCents > 0) { + // 如果大于0说明,这笔单退完也不够 + WechatPayRefundRequest.Amount amount = new WechatPayRefundRequest.Amount(); + amount.setRefund(refundableTotal); // 退款金额 + amount.setTotal(payerTotal); // 原订单金额 + request.setAmount(amount); + requestList.add(request); + } else { + // 如果小于0,这笔单退一部分 + // 生成退款单号 + WechatPayRefundRequest.Amount amount = new WechatPayRefundRequest.Amount(); + // 部分退 + int i = refundableTotal + refundTotalCents; + amount.setRefund(i); // 退款金额 + amount.setTotal(payerTotal); // 原订单金额 + request.setAmount(amount); + requestList.add(request); + break; + } + } + + System.out.println(requestList); + } + @Test public void testCloseStartFailedOrder() { String startTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.addDays(new Date(), -2));