mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-09-06 12:39:38 +00:00
:feat: 修改生成订单编号策略
This commit is contained in:
@@ -133,5 +133,10 @@
|
||||
<artifactId>lock4j-redis-template-spring-boot-starter</artifactId>
|
||||
<version>${lock4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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());
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -37,7 +37,7 @@ public class WeChatPayCloseService {
|
||||
Map<String, String> 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);
|
||||
|
@@ -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())
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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<PayOrder> {
|
||||
|
||||
int insertList(@Param("list")List<PayOrder> list);
|
||||
}
|
||||
|
@@ -33,7 +33,7 @@ import java.time.LocalDateTime;
|
||||
public class PayChannelOrder extends MpCreateEntity implements EntityBaseFunction<PayChannelOrderDto> {
|
||||
|
||||
@DbColumn(comment = "支付id")
|
||||
private Long paymentId;
|
||||
private String paymentId;
|
||||
|
||||
@DbColumn(comment = "异步支付方式")
|
||||
private boolean async;
|
||||
|
@@ -36,6 +36,9 @@ public class PayOrder extends MpBaseEntity implements EntityBaseFunction<PayOrde
|
||||
@DbColumn(comment = "关联的业务号")
|
||||
private String businessNo;
|
||||
|
||||
@DbColumn(comment = "支付订单编号")
|
||||
private String orderNo;
|
||||
|
||||
/** 标题 */
|
||||
@DbColumn(comment = "标题")
|
||||
private String title;
|
||||
|
@@ -73,7 +73,7 @@ public class PayChannelOrderService {
|
||||
payChannelOrder = new PayChannelOrder();
|
||||
// 替换原有的的支付通道信息
|
||||
payChannelOrder.setPayWay(payChannelParam.getWay())
|
||||
.setPaymentId(payOrder.getId())
|
||||
.setPaymentId(payOrder.getOrderNo())
|
||||
.setAsync(true)
|
||||
.setChannel(payChannelParam.getChannel())
|
||||
.setPayWay(payChannelParam.getWay())
|
||||
|
@@ -32,8 +32,9 @@ import java.time.LocalDateTime;
|
||||
public class RefundOrder extends MpBaseEntity implements EntityBaseFunction<RefundOrderDto> {
|
||||
|
||||
/** 原支付id */
|
||||
@DbColumn(comment = "原支付id")
|
||||
private Long paymentId;
|
||||
@DbColumn(comment = "原支付订单号")
|
||||
private String orderNo;
|
||||
|
||||
|
||||
/** 原支付业务号 */
|
||||
@DbColumn(comment = "原支付业务号")
|
||||
@@ -49,6 +50,8 @@ public class RefundOrder extends MpBaseEntity implements EntityBaseFunction<Refu
|
||||
@DbColumn(comment = "退款号")
|
||||
private String refundNo;
|
||||
|
||||
private String refundBusinessNo;
|
||||
|
||||
/** 退款时是否是含有异步通道 */
|
||||
@DbColumn(comment = "是否含有异步通道")
|
||||
private boolean asyncPay;
|
||||
|
@@ -21,6 +21,7 @@ import cn.bootx.platform.daxpay.service.core.order.refund.dao.RefundOrderManager
|
||||
import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundChannelOrder;
|
||||
import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundOrder;
|
||||
import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundOrderExtra;
|
||||
import cn.bootx.platform.daxpay.util.OrderNoGenerateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -159,10 +160,11 @@ public class RefundAssistService {
|
||||
|
||||
// 生成退款订单
|
||||
RefundOrder refundOrder = new RefundOrder()
|
||||
.setPaymentId(payOrder.getId())
|
||||
.setOrderNo(payOrder.getOrderNo())
|
||||
.setStatus(RefundStatusEnum.PROGRESS.getCode())
|
||||
.setBusinessNo(payOrder.getBusinessNo())
|
||||
.setRefundNo(refundParam.getRefundNo())
|
||||
.setRefundNo(OrderNoGenerateUtil.refund())
|
||||
.setRefundBusinessNo(refundParam.getRefundNo())
|
||||
.setOrderAmount(payOrder.getAmount())
|
||||
.setAmount(amount)
|
||||
.setRefundableBalance(refundableBalance)
|
||||
@@ -183,10 +185,6 @@ public class RefundAssistService {
|
||||
// 主键使用预先生成的ID, 如果有异步通道, 关联的退款号就是这个ID
|
||||
refundOrder.setId(IdUtil.getSnowflakeNextId());
|
||||
|
||||
// 退款号, 如不传输, 使用ID作为退款号
|
||||
if(StrUtil.isBlank(refundOrder.getRefundNo())){
|
||||
refundOrder.setRefundNo(String.valueOf(refundOrder.getId()));
|
||||
}
|
||||
|
||||
RefundOrderExtra refundOrderExtra = this.createRefundOrderExtra(refundParam, refundOrder.getId());
|
||||
refundChannelOrders.forEach(r->r.setRefundId(refundOrder.getId()));
|
||||
|
@@ -247,7 +247,7 @@ public class RefundService {
|
||||
// 构建策略
|
||||
List<RefundChannelOrder> refundChannels = refundChannelOrderManager
|
||||
.findAllByRefundId(refundOrder.getId());
|
||||
PayOrder payOrder = payOrderService.findById(refundOrder.getPaymentId())
|
||||
PayOrder payOrder = payOrderService.findById(refundOrder.getId())
|
||||
.orElseThrow(() -> new DataNotExistException("未查找到支付订单"));
|
||||
List<PayChannelOrder> payChannelOrders = payChannelOrderManager.findAllByPaymentId(payOrder.getId());
|
||||
Map<String, PayChannelOrder> orderChannelMap = payChannelOrders.stream()
|
||||
|
@@ -73,10 +73,10 @@ public class RefundRepairService {
|
||||
}
|
||||
try {
|
||||
// 获取关联支付单
|
||||
PayOrder payOrder = payOrderQueryService.findById(refundOrder.getPaymentId())
|
||||
PayOrder payOrder = payOrderQueryService.findById(refundOrder.getId())
|
||||
.orElseThrow(() -> new RuntimeException("支付单不存在"));
|
||||
// 关联支付通道支付单
|
||||
Map<String, PayChannelOrder> payChannelOrderMap = payChannelOrderManager.findAllByPaymentId(refundOrder.getPaymentId())
|
||||
Map<String, PayChannelOrder> payChannelOrderMap = payChannelOrderManager.findAllByPaymentId(refundOrder.getId())
|
||||
.stream()
|
||||
.collect(Collectors.toMap(PayChannelOrder::getChannel, Function.identity(), CollectorsFunction::retainLatest));
|
||||
// 异步通道退款单
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.bootx.platform.daxpay.service.core.order.pay.dao.PayOrderMapper">
|
||||
<insert id="insertList">
|
||||
insert into pay_order (id,`status`,`version`,`deleted`)
|
||||
values
|
||||
<foreach collection="list" separator="," item="item" index="index">
|
||||
(#{item.id,jdbcType=BIGINT},
|
||||
#{item.status,jdbcType=VARCHAR},
|
||||
#{item.version,jdbcType=INTEGER},
|
||||
#{item.deleted,jdbcType=BIT})
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
Reference in New Issue
Block a user