|
|
@@ -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 * * * * ?")
|