package cc.mrbird.febs.mall.quartz; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; 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.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; /** * @author wzy * @date 2021-09-25 **/ @Slf4j @Component 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.selectOrderInfoUpTime(OrderStatusEnum.WAIT_PAY.getValue()); if (CollUtil.isNotEmpty(orderList)) { for (MallOrderInfo orderInfo : orderList) { //更新订单状态 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){ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId()); if (sku == null) { throw new FebsException("购买商品或sku不存在"); } // if (sku.getStock() < mallOrderItem.getCnt()) { // throw new FebsException(sku.getSkuName() + "库存不足"); // } MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt()); if(1 != goodsResult){ throw new FebsException(mallGoods.getGoodsName() + "库存不足"); } Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt()); if(1 != skuResult){ throw new FebsException(sku.getSkuName() + "库存不足"); } } } } } } // @Scheduled(cron = "0/5 * * * * ? ") // public void wakeup() { // log.info("本地保持唤醒状态"); // Long id = 5L; // mallMemberMapper.selectById(id); // } }