Bläddra i källkod

添加 secondTradeTimeoutFail() 方法

qrs 3 månader sedan
förälder
incheckning
d7f055ca54
1 ändrade filer med 55 tillägg och 8 borttagningar
  1. 55 8
      alien-second/src/main/java/shop/alien/second/task/Task.java

+ 55 - 8
alien-second/src/main/java/shop/alien/second/task/Task.java

@@ -11,6 +11,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import shop.alien.config.redis.BaseRedisService;
 import shop.alien.entity.second.SecondGoods;
+import shop.alien.entity.second.SecondTradeOperation;
 import shop.alien.entity.second.SecondTradeRecord;
 import shop.alien.entity.store.LifeMessage;
 import shop.alien.entity.store.LifeNotice;
@@ -20,6 +21,7 @@ import shop.alien.mapper.LifeMessageMapper;
 import shop.alien.mapper.LifeNoticeMapper;
 import shop.alien.mapper.LifeUserMapper;
 import shop.alien.mapper.second.SecondGoodsMapper;
+import shop.alien.mapper.second.SecondTradeOperationMapper;
 import shop.alien.mapper.second.SecondTradeRecordMapper;
 import shop.alien.second.feign.AlienStoreFeign;
 
@@ -28,6 +30,7 @@ import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Component
@@ -48,6 +51,8 @@ public class Task {
 
     private final SecondGoodsMapper secondGoodsMapper;
 
+    private final SecondTradeOperationMapper secondTradeOperationMapper;
+
     @Value("${ScheduledTask.enabled}")
     private boolean isEnable;
 
@@ -284,24 +289,27 @@ public class Task {
 
         log.info("开始执行定时任务: 二手交易平台 - 交易超时未确认则自动取消 - secondTradeTimeoutCancel");
         try {
-            LocalDateTime now = LocalDateTime.now().withSecond(0).withNano(0);
+            Date now = Date.from(LocalDateTime.now().withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant());
 
             // 查询所有待确认
             LambdaQueryWrapper<SecondTradeRecord> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(SecondTradeRecord::getTradeStatus, 1);
+            queryWrapper.eq(SecondTradeRecord::getTransactionTime, now);
             List<SecondTradeRecord> tradeRecordList = secondTradeRecordMapper.selectList(queryWrapper);
-            List<Integer> tradeIdList = new ArrayList<>();
-            for (SecondTradeRecord tradeRecord : tradeRecordList) {
-                LocalDateTime tenMinutesAgo = tradeRecord.getTransactionTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().withSecond(0).withNano(0);
-                if (now.isEqual(tenMinutesAgo)) {
-                    tradeIdList.add(tradeRecord.getId());
-                }
-            }
+            List<Integer> tradeIdList = tradeRecordList.stream().map(SecondTradeRecord::getId).collect(Collectors.toList());
             if (CollectionUtil.isNotEmpty(tradeIdList)) {
                 LambdaUpdateWrapper<SecondTradeRecord> updateWrapper = new LambdaUpdateWrapper<>();
                 updateWrapper.in(SecondTradeRecord::getId, tradeIdList)
                         .set(SecondTradeRecord::getTradeStatus, 6);
                 secondTradeRecordMapper.update(null, updateWrapper);
+
+                for (Integer id : tradeIdList) {
+                    SecondTradeOperation operation = new SecondTradeOperation();
+                    operation.setTradeId(id);
+                    operation.setUserId(0);
+                    operation.setType(7);
+                    secondTradeOperationMapper.insert(operation);
+                }
             }
         } catch (Exception e) {
             log.error("SecondGoodsTradeXxlJob.secondTradeTimeoutCancel Error Mgs={}", e.getMessage());
@@ -309,6 +317,45 @@ public class Task {
     }
 
     /**
+     * 二手交易平台 - 到达交易时间12个小时后,自动交易失败
+     */
+    @Scheduled(cron = "0 * * * * ?")
+    private void secondTradeTimeoutFail() {
+        if (!isEnable) {
+            return;
+        }
+
+        log.info("开始执行定时任务: 二手交易平台 - 到达交易时间12个小时后,自动交易失败 - secondTradeTimeoutFail");
+        try {
+            Date twelveBefore = Date.from(LocalDateTime.now().plusHours(12).withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant());
+
+            // 查询所有待确认
+            LambdaQueryWrapper<SecondTradeRecord> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(SecondTradeRecord::getTradeStatus, 3);
+            queryWrapper.eq(SecondTradeRecord::getTransactionTime, twelveBefore);
+            List<SecondTradeRecord> tradeRecordList = secondTradeRecordMapper.selectList(queryWrapper);
+            List<Integer> tradeIdList = tradeRecordList.stream().map(SecondTradeRecord::getId).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(tradeIdList)) {
+                LambdaUpdateWrapper<SecondTradeRecord> updateWrapper = new LambdaUpdateWrapper<>();
+                updateWrapper.in(SecondTradeRecord::getId, tradeIdList)
+                        .set(SecondTradeRecord::getTradeStatus, 5);
+                secondTradeRecordMapper.update(null, updateWrapper);
+
+                for (Integer id : tradeIdList) {
+                    SecondTradeOperation operation = new SecondTradeOperation();
+                    operation.setTradeId(id);
+                    operation.setUserId(0);
+                    operation.setType(6);
+                    operation.setCreatedTime(new Date());
+                    secondTradeOperationMapper.insert(operation);
+                }
+            }
+        } catch (Exception e) {
+            log.error("SecondGoodsTradeXxlJob.secondTradeTimeoutFail Error Mgs={}", e.getMessage());
+        }
+    }
+
+    /**
      * 二手交易平台 - 每分钟从redis中读取已读的消息id 并将数据库设为已读
      */
     @Scheduled(cron = "0 * * * * ?")