package com.ylx.massage.task; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ylx.common.constant.MassageConstants; import com.ylx.massage.domain.TOrder; import com.ylx.massage.enums.OrderStatusEnum; import com.ylx.massage.service.TOrderService; import com.ylx.massage.utils.DateTimeUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; /** * @author jianlong * @date 2024-04-19 14:11 * */ @Slf4j @Component("massageTask") public class massageTask { @Resource private TOrderService orderService; public void cancelOrder() { Date nowDate = new Date(); log.info("开始执行取消订单任务当前时间,{}", nowDate); Date date = DateTimeUtils.addMinute(nowDate, -5); log.info("开始执行取消订单任务当前时间减5分钟,{}", date); long total = 1L; while(total > 0L){ total = extracted(date); } } private Long extracted(Date nowDate) { log.info("extracted 开始执行取消订单任务时间,{}", nowDate); LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); objectLambdaQueryWrapper.eq(TOrder::getnStatus, OrderStatusEnum.WAIT_PAY.getCode()). le(TOrder::getDtCreateTime, nowDate). orderByAsc(TOrder::getcTime); Page page = new Page<>(); page.setSize(MassageConstants.TWO_HUNDRED); Page resPage = orderService.page(page, objectLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(resPage.getRecords())) { resPage.getRecords().forEach(order->{ TOrder newOrder = new TOrder(); //todo 订单锁 newOrder.setcId(order.getcId()); newOrder.setnStatus(OrderStatusEnum.CANCEL.getCode()); orderService.updateById(newOrder); log.info("取消超时未支付订单orderNo,{}", order.getOrderNo()); }); } return resPage.getTotal(); } }