package cc.mrbird.febs.mall.quartz; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.mall.entity.MallGoods; import cc.mrbird.febs.mall.entity.MallGoodsSku; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.mall.entity.MallOrderItem; import cc.mrbird.febs.mall.mapper.*; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; /** * @author wzy * @date 2021-09-25 **/ @Slf4j @Component @ConditionalOnProperty(prefix = "system", name = "job", havingValue = "true") public class OrderOvertimeJob { @Autowired private MallOrderInfoMapper orderInfoMapper; @Autowired private MallMemberMapper mallMemberMapper; @Autowired private MallOrderItemMapper mallOrderItemMapper; @Autowired private MallGoodsMapper mallGoodsMapper; @Autowired private MallGoodsSkuMapper mallGoodsSkuMapper; @Scheduled(cron = "0 0/5 * * * ? ") public void overtimeJob() { log.info("订单超时任务执行"); List orderList = orderInfoMapper.selectOrderInfoByStatus(OrderStatusEnum.WAIT_PAY.getValue()); if (CollUtil.isNotEmpty(orderList)) { for (MallOrderInfo orderInfo : orderList) { long subTime = DateUtil.between(orderInfo.getOrderTime(), new Date(), DateUnit.MINUTE, false); if (subTime > 15) { orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY); orderInfoMapper.updateById(orderInfo); List mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId()); if (CollUtil.isNotEmpty(mallOrderItemList)) { for (MallOrderItem mallOrderItem : mallOrderItemList) { Long goodsId = mallOrderItem.getGoodsId(); Long skuId = mallOrderItem.getSkuId(); Integer cnt = mallOrderItem.getCnt(); MallGoods mallGoods = mallGoodsMapper.selectById(goodsId); mallGoods.setVolume(mallGoods.getVolume() - cnt); mallGoods.setStock(mallGoods.getStock() + cnt); mallGoodsMapper.updateById(mallGoods); MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId); mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - cnt); mallGoodsSku.setStock(mallGoodsSku.getStock() + cnt); mallGoodsSkuMapper.updateById(mallGoodsSku); } } } } } } // @Scheduled(cron = "0/5 * * * * ? ") // public void wakeup() { // log.info("本地保持唤醒状态"); // Long id = 5L; // mallMemberMapper.selectById(id); // } }