Kaynağa Gözat

docs(omg-pay): OmgPayController 补主要注释

- createUnderLock 补方法 Javadoc(在 @Transactional + PaymentCreateGuardService 分布式锁内执行,
  锁 afterCommit 释放防重复活跃行)
- create() 加"按 ddId 串行化发起"的行内说明
- 修 2 处过时注释 payType=7 → PAY_TYPE_OMG(常量已改 "2")

Co-Authored-By: Claude <noreply@anthropic.com>
qmj 2 hafta önce
ebeveyn
işleme
d748d237da

+ 11 - 2
ruoyi-admin/src/main/java/com/ruoyi/app/pay/OmgPayController.java

@@ -123,7 +123,7 @@ public class OmgPayController extends BaseController {
 
     /**
      * 发起 OMG AIO 幕前支付。校验订单归属/未支付/金额 → 查门店启用凭证 → 生成 MerchantTradeNo →
-     * 组参 + CheckMacValue → 落流水(pay_status=0) + 更新订单 payType=7/payUrl → 返回 form 字段供前端 Form Post。
+     * 组参 + CheckMacValue → 落流水(pay_status=0) + 更新订单 payType=PAY_TYPE_OMG/payUrl → 返回 form 字段供前端 Form Post。
      */
     @Anonymous
     @Auth
@@ -135,11 +135,20 @@ public class OmgPayController extends BaseController {
         if (invalidOrderRequest(request)) {
             return error(MessageUtils.message("no.order.id.error"));
         }
+        // 按 ddId 串行化发起(T058 防堆积):同一订单并发 create 在分布式锁内排队,锁释放在事务提交后,
+        // 保证后一个请求能看到前一个已提交的活跃流水 → 命中复用而非新建(详见 PaymentCreateGuardService)。
         return paymentCreateGuardService == null ? createUnderLock(token, request)
                 : paymentCreateGuardService.withLock(request.getOrderid(),
                 () -> createUnderLock(token, request));
     }
 
+    /**
+     * 发起支付的实际业务逻辑,在 {@link #create} 的 {@code @Transactional} 与 {@link PaymentCreateGuardService}
+     * 分布式锁内执行。锁释放在事务 afterCommit,确保并发请求看不到未提交的活跃流水 INSERT,避免重复活跃行。
+     *
+     * <p>流程:校验登录/订单归属/未支付/金额/门店 → 查门店 OMG 凭证 → 复用或新建 MerchantTradeNo →
+     * 组 AIO 参 + CheckMacValue → 落流水(pay_status=0) + 更新订单 payType/payUrl → 返回 form 字段。
+     */
     private AjaxResult createUnderLock(String token, OmgOrderRequest request) {
         if (invalidOrderRequest(request)) {
             return error(MessageUtils.message("no.order.id.error"));
@@ -213,7 +222,7 @@ public class OmgPayController extends BaseController {
         // 组参 + CheckMacValue,返回含 gatewayUrl 的 form 字段
         Map<String, String> form = omgPay.createAioForm(baseUrl, cfg, params);
 
-        // 更新订单 payType=7 / payUrl=gatewayUrl(仅更这两个字段)
+        // 更新订单 payType=OMG(PAY_TYPE_OMG) / payUrl=gatewayUrl(仅更这两个字段)
         PosOrder upd = new PosOrder();
         upd.setId(order.getId());
         upd.setPayType(PAY_TYPE_OMG);