Kaynağa Gözat

fix 更换车票时,清除多余车票

zoujiajian 1 yıl önce
ebeveyn
işleme
7e3fefa69b

+ 36 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -216,6 +216,8 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final ClaudeUserMapper claudeUserMapper;
 
+    private final UserTicketClearedRecordMapper userTicketClearedRecordMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -759,6 +761,9 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         //清除原先车票
         relation.setNewRelationId(newRelation.getId());
         relationClearService.clearTicket(relation, source);
+        
+        //兜底处理 多余车票
+        clearOtherChangeTicket(userId, relationId, newRelation);
 
         //奈飞车票
         if (orderDon.getGoodsId() == 1) {
@@ -1544,4 +1549,35 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
         }
     }
+
+    /**
+     * 清除多余车票
+     */
+    private void clearOtherChangeTicket(Long userId, Long relationId, GroupsRelation newRelation) {
+        UserTicketClearedRecord userTicketClearedRecord = userTicketClearedRecordMapper.selectOne(Wrappers.lambdaQuery(UserTicketClearedRecord.class)
+                .eq(UserTicketClearedRecord::getUserId, userId)
+                .eq(UserTicketClearedRecord::getRelationId, relationId)
+                .eq(UserTicketClearedRecord::getSource, UserTicketClearedRecord.Source.change_ticket)
+                .orderByDesc(UserTicketClearedRecord::getId)
+                .last("limit 1"));
+        if (userTicketClearedRecord != null) {
+            Long newRelationId = userTicketClearedRecord.getNewRelationId();
+            List<GroupsRelation> others = relationMapper.selectList(Wrappers.lambdaQuery(GroupsRelation.class)
+                    .ne(GroupsRelation::getId, newRelationId)
+                    .eq(GroupsRelation::getUserId, userId)
+                    .eq(GroupsRelation::getStartTime, newRelation.getStartTime())
+                    .eq(GroupsRelation::getExpiryTime, newRelation.getExpiryTime()));
+            others.forEach(r -> {
+                Long rid = r.getId();
+                Integer selectCount = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
+                        .eq(OrderDon::getUserId, userId)
+                        .eq(OrderDon::getRelationId, rid)
+                        .notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
+                if (selectCount == 0) {
+                    log.info("清除用户:{}多余车票", userId);
+                    relationClearService.clearTicket(r, UserTicketClearedRecord.Source.manual);
+                }
+            });
+        }
+    }
 }