mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-09-03 11:06:46 +00:00
fix 同步通知接收路径, 对账差错状态, 订单号生成工具类重命名, 一些注释相关的微调
This commit is contained in:
@@ -18,7 +18,7 @@ import cn.daxpay.single.service.core.payment.close.service.PayCloseService;
|
||||
import cn.daxpay.single.service.core.payment.sync.service.PaySyncService;
|
||||
import cn.daxpay.single.service.dto.order.pay.PayOrderDto;
|
||||
import cn.daxpay.single.service.param.order.PayOrderQuery;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -91,7 +91,7 @@ public class PayOrderController {
|
||||
public ResResult<Void> allocation(String orderNo){
|
||||
AllocationParam param = new AllocationParam();
|
||||
param.setOrderNo(orderNo);
|
||||
param.setBizAllocNo(OrderNoGenerateUtil.allocation());
|
||||
param.setBizAllocNo(TradeNoGenerateUtil.allocation());
|
||||
allocationService.allocation(param);
|
||||
return Res.ok();
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 支付宝支付参数
|
||||
* @author xxm
|
||||
* @since 2021/2/27
|
||||
*/
|
||||
|
@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "统一下单响应参数")
|
||||
@Schema(title = "统一支付响应参数")
|
||||
public class PayResult extends PaymentCommonResult {
|
||||
|
||||
/** 商户订单号 */
|
||||
|
@@ -1,19 +1,19 @@
|
||||
package cn.daxpay.single.core.util;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
/**
|
||||
* 各类型订单号审查工具类
|
||||
* 各类型订单号生成工具类
|
||||
* @author yxc
|
||||
* @since 2024/4/15
|
||||
*/
|
||||
@Slf4j
|
||||
public class OrderNoGenerateUtil {
|
||||
public class TradeNoGenerateUtil {
|
||||
|
||||
private static final AtomicLong ATOMIC_LONG = new AtomicLong();
|
||||
private final static long ORDER_MAX_LIMIT = 999999L;
|
||||
@@ -29,7 +29,7 @@ public class OrderNoGenerateUtil {
|
||||
*/
|
||||
public static String pay() {
|
||||
StringBuilder orderNo = new StringBuilder();
|
||||
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss"));
|
||||
String dateStr = LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER);
|
||||
long id = ATOMIC_LONG.incrementAndGet();
|
||||
orderNo.append(env).append("P").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT));
|
||||
return orderNo.toString();
|
||||
@@ -40,7 +40,7 @@ public class OrderNoGenerateUtil {
|
||||
*/
|
||||
public static String refund() {
|
||||
StringBuilder orderNo = new StringBuilder();
|
||||
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss"));
|
||||
String dateStr = LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER);
|
||||
long id = ATOMIC_LONG.incrementAndGet();
|
||||
orderNo.append(env).append("R").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT));
|
||||
return orderNo.toString();
|
||||
@@ -51,7 +51,7 @@ public class OrderNoGenerateUtil {
|
||||
*/
|
||||
public static String transfer() {
|
||||
StringBuilder orderNo = new StringBuilder();
|
||||
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss"));
|
||||
String dateStr = LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER);
|
||||
long id = ATOMIC_LONG.incrementAndGet();
|
||||
orderNo.append(env).append("T").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT));
|
||||
return orderNo.toString();
|
||||
@@ -62,7 +62,7 @@ public class OrderNoGenerateUtil {
|
||||
*/
|
||||
public static String allocation() {
|
||||
StringBuilder orderNo = new StringBuilder();
|
||||
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss"));
|
||||
String dateStr = LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER);
|
||||
long id = ATOMIC_LONG.incrementAndGet();
|
||||
orderNo.append(env).append("A").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT));
|
||||
return orderNo.toString();
|
||||
@@ -73,7 +73,7 @@ public class OrderNoGenerateUtil {
|
||||
*/
|
||||
public static String reconciliation() {
|
||||
StringBuilder orderNo = new StringBuilder();
|
||||
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss"));
|
||||
String dateStr = LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER);
|
||||
long id = ATOMIC_LONG.incrementAndGet();
|
||||
orderNo.append(env).append("C").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT));
|
||||
return orderNo.toString();
|
||||
@@ -84,7 +84,7 @@ public class OrderNoGenerateUtil {
|
||||
*/
|
||||
public static String repair() {
|
||||
StringBuilder orderNo = new StringBuilder();
|
||||
String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss"));
|
||||
String dateStr = LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER);
|
||||
long id = ATOMIC_LONG.incrementAndGet();
|
||||
orderNo.append(env).append("X").append(dateStr).append(machineNo).append(String.format("%06d", Math.abs(id) % ORDER_MAX_LIMIT));
|
||||
return orderNo.toString();
|
@@ -27,20 +27,20 @@ public class PayReturnController {
|
||||
private final PayReturnService payReturnService;
|
||||
|
||||
@Operation(summary = "支付宝同步跳转通知")
|
||||
@GetMapping("/pay/alipay")
|
||||
@GetMapping("/alipay")
|
||||
public ModelAndView alipay(AliPayReturnParam param){
|
||||
String url = payReturnService.alipay(param);
|
||||
return new ModelAndView("redirect:" + url);
|
||||
}
|
||||
|
||||
@Operation(summary = "微信同步跳转通知")
|
||||
@GetMapping("/pay/wechat")
|
||||
@GetMapping("/wechat")
|
||||
public ModelAndView wechat(){
|
||||
return null;
|
||||
}
|
||||
|
||||
@Operation(summary = "云闪付同步跳转通知")
|
||||
@PostMapping("/pay/union")
|
||||
@PostMapping("/union")
|
||||
public ModelAndView union(UnionPayReturnParam param){
|
||||
String url = payReturnService.union(param);
|
||||
return new ModelAndView("redirect:" + url);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
package cn.daxpay.single.service.configuration;
|
||||
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -27,12 +27,12 @@ public class DaxPayProperties {
|
||||
|
||||
public void setMachineNo(String machineNo) {
|
||||
this.machineNo = machineNo;
|
||||
OrderNoGenerateUtil.setMachineNo(machineNo);
|
||||
TradeNoGenerateUtil.setMachineNo(machineNo);
|
||||
}
|
||||
|
||||
public void setEnv(String env) {
|
||||
this.env = env;
|
||||
OrderNoGenerateUtil.setEnv(env);
|
||||
TradeNoGenerateUtil.setEnv(env);
|
||||
}
|
||||
|
||||
public String getFrontH5Url() {
|
||||
|
@@ -7,7 +7,7 @@ import cn.daxpay.single.core.code.AllocOrderStatusEnum;
|
||||
import cn.daxpay.single.core.code.PayOrderAllocStatusEnum;
|
||||
import cn.daxpay.single.core.param.payment.allocation.AllocReceiverParam;
|
||||
import cn.daxpay.single.core.param.payment.allocation.AllocationParam;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import cn.daxpay.single.service.core.order.allocation.dao.AllocOrderDetailManager;
|
||||
import cn.daxpay.single.service.core.order.allocation.dao.AllocationOrderManager;
|
||||
import cn.daxpay.single.service.core.order.allocation.entity.AllocOrder;
|
||||
@@ -159,7 +159,7 @@ public class AllocOrderService {
|
||||
.setBizOrderNo(payOrder.getBizOrderNo())
|
||||
.setOutOrderNo(payOrder.getOutOrderNo())
|
||||
.setTitle(payOrder.getTitle())
|
||||
.setAllocNo(OrderNoGenerateUtil.allocation())
|
||||
.setAllocNo(TradeNoGenerateUtil.allocation())
|
||||
.setBizAllocNo(param.getBizAllocNo())
|
||||
.setChannel(payOrder.getChannel())
|
||||
.setDescription(param.getDescription())
|
||||
|
@@ -8,7 +8,7 @@ import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
|
||||
import cn.daxpay.single.service.core.payment.common.service.PaymentAssistService;
|
||||
import cn.daxpay.single.service.core.payment.refund.service.RefundService;
|
||||
import cn.daxpay.single.service.param.order.PayOrderRefundParam;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import cn.hutool.extra.servlet.ServletUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -45,7 +45,7 @@ public class RefundOrderService {
|
||||
|
||||
RefundParam refundParam = new RefundParam();
|
||||
refundParam.setOrderNo(param.getOrderNo());
|
||||
refundParam.setBizRefundNo(OrderNoGenerateUtil.refund());
|
||||
refundParam.setBizRefundNo(TradeNoGenerateUtil.refund());
|
||||
refundParam.setAmount(param.getAmount());
|
||||
refundParam.setReason(param.getReason());
|
||||
refundParam.setReqTime(LocalDateTime.now());
|
||||
|
@@ -10,7 +10,7 @@ import cn.daxpay.single.core.exception.AmountExceedLimitException;
|
||||
import cn.daxpay.single.core.exception.TradeStatusErrorException;
|
||||
import cn.daxpay.single.core.param.payment.pay.PayParam;
|
||||
import cn.daxpay.single.core.result.pay.PayResult;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.PayUtil;
|
||||
import cn.daxpay.single.service.common.context.PayLocal;
|
||||
import cn.daxpay.single.service.common.context.PlatformLocal;
|
||||
@@ -60,7 +60,7 @@ public class PayAssistService {
|
||||
// 构建支付订单对象
|
||||
PayOrder order = new PayOrder()
|
||||
.setBizOrderNo(payParam.getBizOrderNo())
|
||||
.setOrderNo(OrderNoGenerateUtil.pay())
|
||||
.setOrderNo(TradeNoGenerateUtil.pay())
|
||||
.setTitle(payParam.getTitle())
|
||||
.setDescription(payParam.getDescription())
|
||||
.setStatus(PayStatusEnum.PROGRESS.getCode())
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package cn.daxpay.single.service.core.payment.pay.service;
|
||||
|
||||
import cn.daxpay.single.core.exception.TradeProcessingException;
|
||||
import cn.daxpay.single.core.param.payment.pay.PayParam;
|
||||
import cn.daxpay.single.core.result.pay.PayResult;
|
||||
import cn.daxpay.single.service.common.context.PayLocal;
|
||||
@@ -57,8 +58,8 @@ public class PayService {
|
||||
// 加锁
|
||||
LockInfo lock = lockTemplate.lock("payment:pay:" + bizOrderNo,10000,200);
|
||||
if (Objects.isNull(lock)){
|
||||
payResult.setMsg("正在支付中,请勿重复支付");
|
||||
return payResult;
|
||||
log.warn("正在支付中,请勿重复支付");
|
||||
throw new TradeProcessingException("正在支付中,请勿重复支付");
|
||||
}
|
||||
try {
|
||||
// 查询并检查订单
|
||||
|
@@ -20,7 +20,6 @@ import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROT
|
||||
|
||||
/**
|
||||
* 支付宝支付
|
||||
* 注意: channelOrder对象需要单独处理, 直接获取会空指针
|
||||
* @author xxm
|
||||
* @since 2021/2/27
|
||||
*/
|
||||
|
@@ -147,7 +147,7 @@ public class ReconcileAssistService {
|
||||
ReconcileOutTrade outDetail = outDetailMap.get(localTrade.getTradeNo());
|
||||
if (Objects.isNull(outDetail)){
|
||||
ReconcileDiff diffRecord = new ReconcileDiff()
|
||||
.setDiffType(ReconcileDiffTypeEnum.LOCAL_NOT_EXISTS.getCode())
|
||||
.setDiffType(ReconcileDiffTypeEnum.REMOTE_NOT_EXISTS.getCode())
|
||||
.setTradeNo(localTrade.getTradeNo())
|
||||
.setReconcileId(reconcileOrder.getId())
|
||||
.setReconcileNo(reconcileOrder.getReconcileNo())
|
||||
|
@@ -5,7 +5,7 @@ import cn.bootx.platform.common.core.util.CollUtil;
|
||||
import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
|
||||
import cn.daxpay.single.core.code.PayChannelEnum;
|
||||
import cn.daxpay.single.core.exception.OperationFailException;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import cn.daxpay.single.service.code.ReconcileFileTypeEnum;
|
||||
import cn.daxpay.single.service.code.ReconcileResultEnum;
|
||||
import cn.daxpay.single.service.common.local.PaymentContextLocal;
|
||||
@@ -79,7 +79,7 @@ public class ReconcileService {
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
|
||||
public ReconcileOrder create(LocalDate date, String channel) {
|
||||
ReconcileOrder order = new ReconcileOrder()
|
||||
.setReconcileNo(OrderNoGenerateUtil.reconciliation())
|
||||
.setReconcileNo(TradeNoGenerateUtil.reconciliation())
|
||||
.setChannel(channel)
|
||||
.setDate(date);
|
||||
reconcileOrderManager.save(order);
|
||||
|
@@ -8,7 +8,7 @@ import cn.bootx.platform.common.core.exception.ValidationFailedException;
|
||||
import cn.daxpay.single.core.exception.TradeStatusErrorException;
|
||||
import cn.daxpay.single.core.param.payment.refund.RefundParam;
|
||||
import cn.daxpay.single.core.result.pay.RefundResult;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.PaySignUtil;
|
||||
import cn.daxpay.single.service.common.context.ErrorInfoLocal;
|
||||
import cn.daxpay.single.service.common.context.PlatformLocal;
|
||||
@@ -81,7 +81,7 @@ public class RefundAssistService {
|
||||
.setOrderNo(payOrder.getOrderNo())
|
||||
.setBizOrderNo(payOrder.getBizOrderNo())
|
||||
.setOutOrderNo(payOrder.getOutOrderNo())
|
||||
.setRefundNo(OrderNoGenerateUtil.refund())
|
||||
.setRefundNo(TradeNoGenerateUtil.refund())
|
||||
.setBizRefundNo(refundParam.getBizRefundNo())
|
||||
.setChannel(payOrder.getChannel())
|
||||
.setStatus(RefundStatusEnum.PROGRESS.getCode())
|
||||
|
@@ -17,7 +17,7 @@ import cn.daxpay.single.service.core.payment.repair.result.RefundRepairResult;
|
||||
import cn.daxpay.single.service.core.record.flow.service.TradeFlowRecordService;
|
||||
import cn.daxpay.single.service.core.record.repair.entity.PayRepairRecord;
|
||||
import cn.daxpay.single.service.core.record.repair.service.PayRepairRecordService;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import com.baomidou.lock.LockInfo;
|
||||
import com.baomidou.lock.LockTemplate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -80,7 +80,7 @@ public class RefundRepairService {
|
||||
}
|
||||
|
||||
// 设置修复ID并保存修复记录
|
||||
repairResult.setRepairNo(OrderNoGenerateUtil.repair());
|
||||
repairResult.setRepairNo(TradeNoGenerateUtil.repair());
|
||||
// 支付修复记录
|
||||
PayRepairRecord payRepairRecord = this.payRepairRecord(payOrder, repairType, repairResult);
|
||||
// 退款修复记录
|
||||
|
@@ -7,7 +7,7 @@ import cn.daxpay.single.service.common.context.ErrorInfoLocal;
|
||||
import cn.daxpay.single.service.common.local.PaymentContextLocal;
|
||||
import cn.daxpay.single.service.core.order.transfer.dao.TransferOrderManager;
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -32,7 +32,7 @@ public class TransferAssistService {
|
||||
public TransferOrder createOrder(TransferParam param) {
|
||||
// 创建转账订单
|
||||
TransferOrder transferOrder = new TransferOrder()
|
||||
.setTransferNo(OrderNoGenerateUtil.transfer())
|
||||
.setTransferNo(TradeNoGenerateUtil.transfer())
|
||||
.setAmount(param.getAmount())
|
||||
.setBizTransferNo(param.getBizTransferNo())
|
||||
.setChannel(param.getChannel())
|
||||
|
@@ -1,6 +1,6 @@
|
||||
package cn.daxpay.single.service.func;
|
||||
|
||||
import cn.daxpay.single.core.param.payment.pay.PayCancelParam;
|
||||
import cn.daxpay.single.core.code.PayChannelEnum;
|
||||
|
||||
/**
|
||||
* 支付相关策略标识接口
|
||||
@@ -11,7 +11,7 @@ public interface PayStrategy {
|
||||
|
||||
/**
|
||||
* 策略标识
|
||||
* @see PayCancelParam
|
||||
* @see PayChannelEnum
|
||||
*/
|
||||
String getChannel();
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@ import cn.daxpay.single.core.param.payment.allocation.AllocationParam;
|
||||
import cn.daxpay.single.service.core.order.pay.dao.PayOrderManager;
|
||||
import cn.daxpay.single.service.core.order.pay.entity.PayOrder;
|
||||
import cn.daxpay.single.service.core.payment.allocation.service.AllocationService;
|
||||
import cn.daxpay.single.core.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.core.util.TradeNoGenerateUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.quartz.*;
|
||||
@@ -28,7 +28,7 @@ public class AllocationAutoStartTask implements Job {
|
||||
public void execute(JobExecutionContext jobExecutionContext) {
|
||||
for (PayOrder payOrder : payOrderManager.findAutoAllocation()) {
|
||||
AllocationParam param = new AllocationParam();
|
||||
param.setBizAllocNo(OrderNoGenerateUtil.allocation());
|
||||
param.setBizAllocNo(TradeNoGenerateUtil.allocation());
|
||||
try {
|
||||
allocationService.allocation(param, payOrder);
|
||||
} catch (Exception e) {
|
||||
|
Reference in New Issue
Block a user