From 650505a6d478dde65d1808be5db19bc308b366cb Mon Sep 17 00:00:00 2001 From: re-aoharu Date: Mon, 15 Apr 2024 15:58:20 +0800 Subject: [PATCH] =?UTF-8?q?:feat:=20=E4=BF=AE=E6=94=B9=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BC=96=E5=8F=B7=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/daxpay/sdk/net/DaxPayKit.java | 3 +- .../daxpay/util/OrderNoGenerateUtil.java | 38 ++++++++++++++++ daxpay-single/daxpay-single-service/pom.xml | 5 +++ .../configuration/DaxPayProperties.java | 8 ++++ .../alipay/service/AliPayCloseService.java | 2 +- .../alipay/service/AliPayRefundService.java | 2 +- .../channel/alipay/service/AliPayService.java | 10 ++--- .../alipay/service/AliPaySyncService.java | 4 +- .../union/service/UnionPayRefundService.java | 2 +- .../union/service/UnionPayService.java | 10 ++--- .../wechat/service/WeChatPayCloseService.java | 2 +- .../wechat/service/WeChatPayService.java | 2 +- .../service/WechatPayRefundService.java | 2 +- .../core/order/pay/builder/PayBuilder.java | 2 + .../core/order/pay/dao/PayOrderMapper.java | 5 +++ .../order/pay/entity/PayChannelOrder.java | 2 +- .../core/order/pay/entity/PayOrder.java | 3 ++ .../pay/service/PayChannelOrderService.java | 2 +- .../core/order/refund/entity/RefundOrder.java | 7 ++- .../refund/service/RefundAssistService.java | 10 ++--- .../payment/refund/service/RefundService.java | 2 +- .../repair/service/RefundRepairService.java | 4 +- .../daxpay/service/func/AbsPayStrategy.java | 2 +- .../main/resources/mapper/PayOrderMapper.xml | 15 +++++++ daxpay-single/daxpay-single-start/pom.xml | 10 ++++- .../src/test/java/SprintBootAppTest.java | 43 +++++++++++++++++++ 26 files changed, 163 insertions(+), 34 deletions(-) create mode 100644 daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/util/OrderNoGenerateUtil.java create mode 100644 daxpay-single/daxpay-single-service/src/main/resources/mapper/PayOrderMapper.xml create mode 100644 daxpay-single/daxpay-single-start/src/test/java/SprintBootAppTest.java diff --git a/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/net/DaxPayKit.java b/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/net/DaxPayKit.java index 142dfa69e..86c017783 100644 --- a/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/net/DaxPayKit.java +++ b/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/net/DaxPayKit.java @@ -63,7 +63,8 @@ public class DaxPayKit { .execute(); // 响应码只有200 才可以进行支付 if (execute.getStatus() != HttpStatus.HTTP_OK){ - throw new HttpException("请求失败,请排查配置的支付网关地址是否正常"); + log.error("请求第三方支付平台失败,请排查配置的支付网关地址是否正常"); + throw new HttpException("请求失败,内部异常"); } String body = execute.body(); diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/util/OrderNoGenerateUtil.java b/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/util/OrderNoGenerateUtil.java new file mode 100644 index 000000000..ce7c226d1 --- /dev/null +++ b/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/util/OrderNoGenerateUtil.java @@ -0,0 +1,38 @@ +package cn.bootx.platform.daxpay.util; + +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.atomic.AtomicLong; + +@Slf4j +public class OrderNoGenerateUtil { + + private static final AtomicLong ATOMIC_LONG = new AtomicLong(); + private final static long ORDER_MAX_LIMIT = 999999L; + + private static String machineNo; + + public static String trade() { + StringBuilder orderNo = new StringBuilder(); + String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")); + long id = ATOMIC_LONG.incrementAndGet(); + log.info("dataStr:{},id:{}", dateStr, id); + orderNo.append("T").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT)); + return orderNo.toString(); + } + + public static String refund() { + StringBuilder orderNo = new StringBuilder(); + String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")); + long id = ATOMIC_LONG.incrementAndGet(); + log.info("dataStr:{},id:{}", dateStr, id); + orderNo.append("R").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT)); + return orderNo.toString(); + } + + public static void setMachineNo(String machineNo) { + OrderNoGenerateUtil.machineNo = machineNo; + } +} diff --git a/daxpay-single/daxpay-single-service/pom.xml b/daxpay-single/daxpay-single-service/pom.xml index 4c477fa96..b56b23694 100644 --- a/daxpay-single/daxpay-single-service/pom.xml +++ b/daxpay-single/daxpay-single-service/pom.xml @@ -133,5 +133,10 @@ lock4j-redis-template-spring-boot-starter ${lock4j.version} + + org.postgresql + postgresql + runtime + diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/configuration/DaxPayProperties.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/configuration/DaxPayProperties.java index 472055cda..429a8f748 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/configuration/DaxPayProperties.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/configuration/DaxPayProperties.java @@ -1,5 +1,6 @@ package cn.bootx.platform.daxpay.service.configuration; +import cn.bootx.platform.daxpay.util.OrderNoGenerateUtil; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -21,4 +22,11 @@ public class DaxPayProperties { /** 前端地址(web) */ private String frontWebUrl; + + private String machineNo; + + public void setMachineNo(String machineNo) { + this.machineNo = machineNo; + OrderNoGenerateUtil.setMachineNo(machineNo); + } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayCloseService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayCloseService.java index 53b5803e0..0aabd7c5b 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayCloseService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayCloseService.java @@ -41,7 +41,7 @@ public class AliPayCloseService { @Retryable(value = RetryableException.class) public void close(PayOrder payOrder) { AlipayTradeCloseModel model = new AlipayTradeCloseModel(); - model.setOutTradeNo(String.valueOf(payOrder.getId())); + model.setOutTradeNo(payOrder.getOrderNo()); try { AlipayTradeCloseResponse response = AliPayApi.tradeCloseToResponse(model); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayRefundService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayRefundService.java index 84c8e7cf5..a919ee75b 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayRefundService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayRefundService.java @@ -32,7 +32,7 @@ public class AliPayRefundService { public void refund(RefundOrder refundOrder, int amount) { RefundLocal refundInfo = PaymentContextLocal.get().getRefundInfo(); AlipayTradeRefundModel refundModel = new AlipayTradeRefundModel(); - refundModel.setOutTradeNo(String.valueOf(refundOrder.getPaymentId())); + refundModel.setOutTradeNo(String.valueOf(refundOrder.getRefundNo())); refundModel.setOutRequestNo(String.valueOf(refundOrder.getId())); // 金额转换 String refundAmount = String.valueOf(amount*0.01); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayService.java index 78b716de3..3156b9805 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPayService.java @@ -102,7 +102,7 @@ public class AliPayService { NoticeLocal noticeInfo = PaymentContextLocal.get().getNoticeInfo(); AlipayTradeWapPayModel model = new AlipayTradeWapPayModel(); model.setSubject(payOrder.getTitle()); - model.setOutTradeNo(String.valueOf(payOrder.getId())); + model.setOutTradeNo(payOrder.getOrderNo()); model.setTotalAmount(String.valueOf(amount*0.01)); // 过期时间 model.setTimeExpire(PayUtil.getAliTimeExpire(payOrder.getExpiredTime())); @@ -136,7 +136,7 @@ public class AliPayService { model.setSubject(payOrder.getTitle()); model.setProductCode(QUICK_MSECURITY_PAY); - model.setOutTradeNo(String.valueOf(payOrder.getId())); + model.setOutTradeNo(payOrder.getOrderNo()); // 过期时间 model.setTimeExpire(PayUtil.getAliTimeExpire(payOrder.getExpiredTime())); model.setTotalAmount(String.valueOf(amount*0.01)); @@ -160,7 +160,7 @@ public class AliPayService { AlipayTradePagePayModel model = new AlipayTradePagePayModel(); model.setSubject(payOrder.getTitle()); - model.setOutTradeNo(String.valueOf(payOrder.getId())); + model.setOutTradeNo(payOrder.getOrderNo()); // 过期时间 model.setTimeExpire(PayUtil.getAliTimeExpire(payOrder.getExpiredTime())); model.setTotalAmount(String.valueOf(amount*0.01)); @@ -190,7 +190,7 @@ public class AliPayService { public String qrCodePay(int amount, PayOrder payOrder, AliPayConfig alipayConfig) { AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); model.setSubject(payOrder.getTitle()); - model.setOutTradeNo(String.valueOf(payOrder.getId())); + model.setOutTradeNo(payOrder.getOrderNo()); model.setTotalAmount(String.valueOf(amount*0.01)); // 过期时间 @@ -215,7 +215,7 @@ public class AliPayService { AlipayTradePayModel model = new AlipayTradePayModel(); model.setSubject(payOrder.getTitle()); - model.setOutTradeNo(String.valueOf(payOrder.getId())); + model.setOutTradeNo(payOrder.getOrderNo()); model.setScene(AliPayCode.BAR_CODE); model.setAuthCode(aliPayParam.getAuthCode()); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java index 01c3f78b8..d9884e214 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/alipay/service/AliPaySyncService.java @@ -48,7 +48,7 @@ public class AliPaySyncService { // 查询 try { AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel(); - queryModel.setOutTradeNo(String.valueOf(payOrder.getId())); + queryModel.setOutTradeNo(payOrder.getOrderNo()); AlipayTradeQueryResponse response = AliPayApi.tradeQueryToResponse(queryModel); String tradeStatus = response.getTradeStatus(); syncResult.setSyncInfo(JSONUtil.toJsonStr(response)); @@ -103,7 +103,7 @@ public class AliPaySyncService { // 退款请求号 queryModel.setOutRequestNo(String.valueOf(refundOrder.getId())); // 商户订单号 - queryModel.setOutTradeNo(String.valueOf(refundOrder.getPaymentId())); + queryModel.setOutTradeNo(String.valueOf(refundOrder.getRefundNo())); // 设置返回退款完成时间 queryModel.setQueryOptions(Collections.singletonList(GMT_REFUND_PAY)); AlipayTradeFastpayRefundQueryResponse response = AliPayApi.tradeRefundQueryToResponse(queryModel); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayRefundService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayRefundService.java index c0956ef7a..d3e2de664 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayRefundService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayRefundService.java @@ -36,7 +36,7 @@ public class UnionPayRefundService { BigDecimal orderAmount = BigDecimal.valueOf(channelOrder.getAmount() * 0.01); UnionRefundOrder unionRefundOrder = new UnionRefundOrder(); - unionRefundOrder.setRefundNo(String.valueOf(refundOrder.getId())); + unionRefundOrder.setRefundNo(refundOrder.getRefundNo()); unionRefundOrder.setTradeNo(String.valueOf(payOrder.getGatewayOrderNo())); unionRefundOrder.setRefundAmount(refundAmount); unionRefundOrder.setTotalAmount(orderAmount); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayService.java index 685fbbbd2..090b433a0 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/union/service/UnionPayService.java @@ -103,7 +103,7 @@ public class UnionPayService { Date expiredTime = DateUtil.date(payOrder.getExpiredTime()); UnionPayOrder unionPayOrder = new UnionPayOrder(); - unionPayOrder.setOutTradeNo(String.valueOf(payOrder.getId())); + unionPayOrder.setOutTradeNo(payOrder.getOrderNo()); unionPayOrder.setSubject(payOrder.getTitle()); unionPayOrder.setPrice(amount); unionPayOrder.setExpirationTime(expiredTime); @@ -118,7 +118,7 @@ public class UnionPayService { Date expiredTime = DateUtil.date(payOrder.getExpiredTime()); UnionPayOrder unionPayOrder = new UnionPayOrder(); - unionPayOrder.setOutTradeNo(String.valueOf(payOrder.getId())); + unionPayOrder.setOutTradeNo(payOrder.getOrderNo()); unionPayOrder.setSubject(payOrder.getTitle()); unionPayOrder.setPrice(amount); unionPayOrder.setExpirationTime(expiredTime); @@ -135,7 +135,7 @@ public class UnionPayService { UnionPayOrder unionPayOrder = new UnionPayOrder(); - unionPayOrder.setOutTradeNo(String.valueOf(payOrder.getId())); + unionPayOrder.setOutTradeNo(payOrder.getOrderNo()); unionPayOrder.setSubject(payOrder.getTitle()); unionPayOrder.setPrice(amount); unionPayOrder.setExpirationTime(expiredTime); @@ -160,7 +160,7 @@ public class UnionPayService { Date expiredTime = DateUtil.date(payOrder.getExpiredTime()); UnionPayOrder unionPayOrder = new UnionPayOrder(); - unionPayOrder.setOutTradeNo(String.valueOf(payOrder.getId())); + unionPayOrder.setOutTradeNo(payOrder.getOrderNo()); unionPayOrder.setSubject(payOrder.getTitle()); unionPayOrder.setPrice(amount); unionPayOrder.setExpirationTime(expiredTime); @@ -175,7 +175,7 @@ public class UnionPayService { UnionPayOrder unionPayOrder = new UnionPayOrder(); unionPayOrder.setAuthCode(authCode); - unionPayOrder.setOutTradeNo(String.valueOf(payOrder.getId())); + unionPayOrder.setOutTradeNo(payOrder.getOrderNo()); unionPayOrder.setSubject(payOrder.getTitle()); unionPayOrder.setPrice(amount); unionPayOrder.setExpirationTime(expiredTime); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayCloseService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayCloseService.java index 6508ceab2..ea2ff11ff 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayCloseService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayCloseService.java @@ -37,7 +37,7 @@ public class WeChatPayCloseService { Map params = CloseOrderModel.builder() .appid(weChatPayConfig.getWxAppId()) .mch_id(weChatPayConfig.getWxMchId()) - .out_trade_no(String.valueOf(payOrder.getId())) + .out_trade_no(payOrder.getOrderNo()) .nonce_str(WxPayKit.generateStr()) .build() .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java index fe6a773a9..16c6a58ad 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java @@ -240,7 +240,7 @@ public class WeChatPayService { // 反正v2版本的超时时间无效 .time_expire(PayUtil.getWxExpiredTime(payOrder.getExpiredTime())) .body(payOrder.getTitle()) - .out_trade_no(String.valueOf(payOrder.getId())) + .out_trade_no(payOrder.getOrderNo()) .total_fee(amount) .spbill_create_ip(NetUtil.getLocalhostStr()) .notify_url(weChatPayConfig.getNotifyUrl()) diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WechatPayRefundService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WechatPayRefundService.java index 6bef8033c..666050e42 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WechatPayRefundService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WechatPayRefundService.java @@ -46,7 +46,7 @@ public class WechatPayRefundService { .appid(weChatPayConfig.getWxAppId()) .mch_id(weChatPayConfig.getWxMchId()) .notify_url(weChatPayConfig.getNotifyUrl()) - .out_trade_no(String.valueOf(refundOrder.getPaymentId())) + .out_trade_no(String.valueOf(refundOrder.getRefundNo())) .out_refund_no(String.valueOf(refundOrder.getId())) .total_fee(totalFee) .refund_fee(refundFee) diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/builder/PayBuilder.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/builder/PayBuilder.java index 421ec8354..e03ce874c 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/builder/PayBuilder.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/builder/PayBuilder.java @@ -13,6 +13,7 @@ import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal; import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayChannelOrder; import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder; import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrderExtra; +import cn.bootx.platform.daxpay.util.OrderNoGenerateUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; @@ -54,6 +55,7 @@ public class PayBuilder { // 构建支付订单对象 return new PayOrder() .setBusinessNo(payParam.getBusinessNo()) + .setOrderNo(OrderNoGenerateUtil.trade()) .setTitle(payParam.getTitle()) .setStatus(PayStatusEnum.PROGRESS.getCode()) .setAmount(sumAmount) diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderMapper.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderMapper.java index 96f19fff6..f6bfc6897 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderMapper.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/dao/PayOrderMapper.java @@ -3,6 +3,9 @@ package cn.bootx.platform.daxpay.service.core.order.pay.dao; import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 支付订单 @@ -11,4 +14,6 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface PayOrderMapper extends BaseMapper { + + int insertList(@Param("list")List list); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayChannelOrder.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayChannelOrder.java index fb1838f5b..d38619781 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayChannelOrder.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayChannelOrder.java @@ -33,7 +33,7 @@ import java.time.LocalDateTime; public class PayChannelOrder extends MpCreateEntity implements EntityBaseFunction { @DbColumn(comment = "支付id") - private Long paymentId; + private String paymentId; @DbColumn(comment = "异步支付方式") private boolean async; diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayOrder.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayOrder.java index dcbfe8b8b..8455b5d25 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayOrder.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/pay/entity/PayOrder.java @@ -36,6 +36,9 @@ public class PayOrder extends MpBaseEntity implements EntityBaseFunction { /** 原支付id */ - @DbColumn(comment = "原支付id") - private Long paymentId; + @DbColumn(comment = "原支付订单号") + private String orderNo; + /** 原支付业务号 */ @DbColumn(comment = "原支付业务号") @@ -49,6 +50,8 @@ public class RefundOrder extends MpBaseEntity implements EntityBaseFunctionr.setRefundId(refundOrder.getId())); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/refund/service/RefundService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/refund/service/RefundService.java index 1a819f5d8..5ea3e7d2f 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/refund/service/RefundService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/refund/service/RefundService.java @@ -247,7 +247,7 @@ public class RefundService { // 构建策略 List refundChannels = refundChannelOrderManager .findAllByRefundId(refundOrder.getId()); - PayOrder payOrder = payOrderService.findById(refundOrder.getPaymentId()) + PayOrder payOrder = payOrderService.findById(refundOrder.getId()) .orElseThrow(() -> new DataNotExistException("未查找到支付订单")); List payChannelOrders = payChannelOrderManager.findAllByPaymentId(payOrder.getId()); Map orderChannelMap = payChannelOrders.stream() diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java index 7e5fce7e7..f9f91aff0 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/repair/service/RefundRepairService.java @@ -73,10 +73,10 @@ public class RefundRepairService { } try { // 获取关联支付单 - PayOrder payOrder = payOrderQueryService.findById(refundOrder.getPaymentId()) + PayOrder payOrder = payOrderQueryService.findById(refundOrder.getId()) .orElseThrow(() -> new RuntimeException("支付单不存在")); // 关联支付通道支付单 - Map payChannelOrderMap = payChannelOrderManager.findAllByPaymentId(refundOrder.getPaymentId()) + Map payChannelOrderMap = payChannelOrderManager.findAllByPaymentId(refundOrder.getId()) .stream() .collect(Collectors.toMap(PayChannelOrder::getChannel, Function.identity(), CollectorsFunction::retainLatest)); // 异步通道退款单 diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPayStrategy.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPayStrategy.java index 4e457f5ad..3bc60eb3a 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPayStrategy.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/func/AbsPayStrategy.java @@ -55,7 +55,7 @@ public abstract class AbsPayStrategy implements PayStrategy{ */ public void generateChannelOrder() { PayChannelOrder payChannelOrder = PayBuilder.buildPayChannelOrder(this.getPayChannelParam()); - payChannelOrder.setPaymentId(this.getOrder().getId()); + payChannelOrder.setPaymentId(this.getOrder().getOrderNo()); this.channelOrder = payChannelOrder; } diff --git a/daxpay-single/daxpay-single-service/src/main/resources/mapper/PayOrderMapper.xml b/daxpay-single/daxpay-single-service/src/main/resources/mapper/PayOrderMapper.xml new file mode 100644 index 000000000..7b254595a --- /dev/null +++ b/daxpay-single/daxpay-single-service/src/main/resources/mapper/PayOrderMapper.xml @@ -0,0 +1,15 @@ + + + + + insert into pay_order (id,`status`,`version`,`deleted`) + values + + (#{item.id,jdbcType=BIGINT}, + #{item.status,jdbcType=VARCHAR}, + #{item.version,jdbcType=INTEGER}, + #{item.deleted,jdbcType=BIT}) + + + + \ No newline at end of file diff --git a/daxpay-single/daxpay-single-start/pom.xml b/daxpay-single/daxpay-single-start/pom.xml index e38bd3e5b..16637edac 100644 --- a/daxpay-single/daxpay-single-start/pom.xml +++ b/daxpay-single/daxpay-single-start/pom.xml @@ -40,7 +40,15 @@ daxpay-single-demo ${daxpay.version} - + + junit + junit + test + + + org.springframework.boot + spring-boot-starter-test + daxpay-start diff --git a/daxpay-single/daxpay-single-start/src/test/java/SprintBootAppTest.java b/daxpay-single/daxpay-single-start/src/test/java/SprintBootAppTest.java new file mode 100644 index 000000000..1792ac530 --- /dev/null +++ b/daxpay-single/daxpay-single-start/src/test/java/SprintBootAppTest.java @@ -0,0 +1,43 @@ +import cn.bootx.platform.daxpay.service.core.order.pay.dao.PayOrderMapper; +import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder; +import cn.bootx.platform.daxpay.start.DaxpaySingleStart; +import cn.hutool.core.util.IdUtil; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest(classes = DaxpaySingleStart.class) +@WebAppConfiguration +public class SprintBootAppTest { + + @Resource + private PayOrderMapper payOrderMapper; + + @Test + public void test2() { + long time = System.currentTimeMillis(); + for (int a = 0; a < 10; a++) { + List list = new ArrayList<>(); + for (int i = 0; i <= 5000; i++) { + PayOrder payOrder = new PayOrder(); + payOrder.setVersion(1); + payOrder.setDeleted(false); + payOrder.setStatus("fail"); + payOrder.setId(IdUtil.getSnowflakeNextId()); + list.add(payOrder); + } + payOrderMapper.insertList(list); + } + log.info("耗时:{}秒", (double) (System.currentTimeMillis() - time) / 1000); + + } +}