Jelajahi Sumber

fix: backfillUnattributedRecharges 增加 DB 回退,防止 Redis 丢失导致分账静默跳过

IoT 回调路径无用户 Session,纯依赖 Redis 缓存获取归属站点,
Redis 重启或 key 丢失时会直接 return 而不补建分账。
现在 Redis 未命中时从 t_user 表回退查询。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 1 hari lalu
induk
melakukan
628d772170

+ 8 - 1
car-wash-service/src/main/java/com/kym/service/impl/OrderSettlementServiceImpl.java

@@ -34,16 +34,19 @@ public class OrderSettlementServiceImpl implements OrderSettlementService {
     private final AccountService accountService;
     private final SplitRecordService splitRecordService;
     private final PayLogService payLogService;
+    private final UserService userService;
     private final MpMsgTemplateService mpMsgTemplateService;
 
     public OrderSettlementServiceImpl(WashOrderService washOrderService, WalletDetailService walletDetailService,
                                       AccountService accountService, SplitRecordService splitRecordService,
-                                      PayLogService payLogService, MpMsgTemplateService mpMsgTemplateService) {
+                                      PayLogService payLogService, UserService userService,
+                                      MpMsgTemplateService mpMsgTemplateService) {
         this.washOrderService = washOrderService;
         this.walletDetailService = walletDetailService;
         this.accountService = accountService;
         this.splitRecordService = splitRecordService;
         this.payLogService = payLogService;
+        this.userService = userService;
         this.mpMsgTemplateService = mpMsgTemplateService;
     }
 
@@ -177,6 +180,10 @@ public class OrderSettlementServiceImpl implements OrderSettlementService {
 
     private void backfillUnattributedRecharges(Long userId) {
         var userStationId = KymCache.INSTANCE.getUserStationId(userId);
+        if (userStationId == null) {
+            var user = userService.getById(userId);
+            userStationId = user != null ? user.getStationId() : null;
+        }
         if (userStationId == null) {
             return;
         }