Selaa lähdekoodia

fix: 模板消息发送改为真异步,退款成功模板注册修正

- sendTemplateMessage 标有 @Async 但被同类方法自调用,代理失效,
  微信 HTTP 调用同步执行在结算/充值事务内,消息失败会回滚已完成的
  结算;改为注入自身代理(@Lazy)调用,真正异步且不再阻塞事务
- REFUND_SUCCESS 原来错误注册 RefundApplyParamBuilder(退款成功消息
  按'退款申请'模板渲染),改为 RefundSuccessParamBuilder

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 3 viikkoa sitten
vanhempi
säilyke
3d2db49f3e

+ 14 - 4
car-wash-service/src/main/java/com/kym/service/impl/MpMsgTemplateServiceImpl.java

@@ -11,6 +11,7 @@ import com.kym.mapper.MpMsgTemplateMapper;
 import com.kym.service.MpMsgTemplateService;
 import com.kym.service.MpRelationService;
 import com.kym.service.wechat.TemplateParamBuilder;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
@@ -30,9 +31,18 @@ public class MpMsgTemplateServiceImpl extends ServiceImpl<MpMsgTemplateMapper, M
 
     private final MpRelationService mpRelationService;
 
-    public MpMsgTemplateServiceImpl(Map<MsgTemplateType, TemplateParamBuilder> paramBuilders, MpRelationService mpRelationService) {
+    /**
+     * 自身代理:sendTemplateMessage 标有 @Async,同类自调用会使代理失效
+     * (微信 HTTP 调用将同步执行在调用方事务内),必须通过代理调用
+     */
+    private final MpMsgTemplateService self;
+
+    public MpMsgTemplateServiceImpl(Map<MsgTemplateType, TemplateParamBuilder> paramBuilders,
+                                    MpRelationService mpRelationService,
+                                    @Lazy MpMsgTemplateService self) {
         this.paramBuilders = paramBuilders;
         this.mpRelationService = mpRelationService;
+        this.self = self;
     }
 
 
@@ -44,7 +54,7 @@ public class MpMsgTemplateServiceImpl extends ServiceImpl<MpMsgTemplateMapper, M
      */
     @Override
     public void sendPaymentSuccessMsg(PayLog payLog, Integer balance) {
-        sendTemplateMessage(MsgTemplateType.PAYMENT_SUCCESS, payLog.getUserId(), payLog, balance);
+        self.sendTemplateMessage(MsgTemplateType.PAYMENT_SUCCESS, payLog.getUserId(), payLog, balance);
     }
 
     /**
@@ -55,7 +65,7 @@ public class MpMsgTemplateServiceImpl extends ServiceImpl<MpMsgTemplateMapper, M
      */
     @Override
     public void sendOrderCompletedMsg(WashOrder washOrder, Integer balance) {
-        sendTemplateMessage(MsgTemplateType.ORDER_COMPLETED, washOrder.getUserId(), washOrder, balance);
+        self.sendTemplateMessage(MsgTemplateType.ORDER_COMPLETED, washOrder.getUserId(), washOrder, balance);
     }
 
     /**
@@ -65,7 +75,7 @@ public class MpMsgTemplateServiceImpl extends ServiceImpl<MpMsgTemplateMapper, M
      */
     @Override
     public void sendParkingCouponMsg(WashOrder washOrder, String parkingCouponUrl) {
-        sendTemplateMessage(MsgTemplateType.PARKING_COUPON, washOrder.getUserId(), washOrder, parkingCouponUrl);
+        self.sendTemplateMessage(MsgTemplateType.PARKING_COUPON, washOrder.getUserId(), washOrder, parkingCouponUrl);
     }
 
 

+ 2 - 1
car-wash-service/src/main/java/com/kym/service/wechat/TemplateParamBuilderConfig.java

@@ -5,6 +5,7 @@ import com.kym.service.wechat.impl.OrderCompletedParamBuilder;
 import com.kym.service.wechat.impl.ParkingCouponParamBuilder;
 import com.kym.service.wechat.impl.PaymentSuccessParamBuilder;
 import com.kym.service.wechat.impl.RefundApplyParamBuilder;
+import com.kym.service.wechat.impl.RefundSuccessParamBuilder;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -21,7 +22,7 @@ public class TemplateParamBuilderConfig {
         builders.put(MsgTemplateType.ORDER_COMPLETED, new OrderCompletedParamBuilder());
         builders.put(MsgTemplateType.PARKING_COUPON, new ParkingCouponParamBuilder());
         builders.put(MsgTemplateType.REFUND_APPLY, new RefundApplyParamBuilder());
-        builders.put(MsgTemplateType.REFUND_SUCCESS, new RefundApplyParamBuilder());
+        builders.put(MsgTemplateType.REFUND_SUCCESS, new RefundSuccessParamBuilder());
         return builders;
     }
 }