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.TJs; import com.ylx.massage.domain.TOrder; import com.ylx.massage.enums.OrderStatusEnum; import com.ylx.massage.service.TJsService; 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; import java.util.List; /** * @author jianlong * @date 2024-04-19 14:11 */ @Slf4j @Component("massageTask") public class massageTask { @Resource private TOrderService orderService; private TJsService jsService; 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::getDtCreateTime); 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(); } public void cancelNewJs() { Date nowDate = new Date(); log.info("开始执行取消新技师标识任务当前时间,{}", nowDate); long total = 1L; while (total > 0L) { LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); Date date = DateTimeUtils.addDays(nowDate, -7); log.info("开始执行取新技师当前时间减7天,{}", date); objectLambdaQueryWrapper.eq(TJs::getnB2, MassageConstants.INTEGER_ONE).le(TJs::getcTime, date).orderByAsc(TJs::getcTime); Page page = new Page<>(); page.setSize(MassageConstants.TWO_HUNDRED); Page page1 = jsService.page(page, objectLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(page1.getRecords())) { page1.getRecords().forEach(tjs -> { TJs js = new TJs(); js.setId(tjs.getId()); js.setnB2(MassageConstants.INTEGER_ZERO); jsService.updateById(js); log.info("取消新技师标识,{}", js.getcOpenId() + js.getcName()); }); } total = page1.getTotal(); } } public void cancelHotJs() { Date nowDate = new Date(); log.info("开始执行取消技师热度标识任务当前时间,{}", nowDate); Date date = DateTimeUtils.addDays(nowDate, -3); long total = 1L; while (total > 0L) { LambdaQueryWrapper objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); objectLambdaQueryWrapper.eq(TJs::getnB3, MassageConstants.INTEGER_ONE); Page page = new Page<>(); page.setSize(MassageConstants.TWO_HUNDRED); Page page1 = jsService.page(page, objectLambdaQueryWrapper); if (CollectionUtil.isNotEmpty(page1.getRecords())) { page1.getRecords().forEach(tjs -> { List list = orderService.list(new LambdaQueryWrapper().eq(TOrder::getcJsId, tjs.getId()).ge(TOrder::getDtCreateTime, date)); if(CollectionUtil.isEmpty(list) || list.size() < 3){ TJs js = new TJs(); js.setId(tjs.getId()); js.setnB3(MassageConstants.INTEGER_ZERO); jsService.updateById(js); log.info("取消热度技师标识,{}", js.getcOpenId() + js.getcName()); } }); } total = page1.getTotal(); } } }