| 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.*; | 
| 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 cn.hutool.core.util.ObjectUtil; | 
| 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; | 
|   | 
|     @Autowired | 
|     private MallMemberCouponMapper mallMemberCouponMapper; | 
|   | 
|     @Scheduled(cron = "0 0/5 * * * ? ") | 
|     public void overtimeJob() { | 
|         log.info("订单超时任务执行"); | 
|         List<MallOrderInfo> 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<MallOrderItem> 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() + "库存不足"); | 
|                         } | 
|                         Long memberCouponId = mallOrderItem.getMemberCouponId(); | 
|                         MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId); | 
|                         if(ObjectUtil.isNotEmpty(mallMemberCoupon)){ | 
|                             mallMemberCoupon.setState(1); | 
|                             mallMemberCouponMapper.updateById(mallMemberCoupon); | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|   | 
|     } | 
|   | 
| //    @Scheduled(cron = "0/5 * * * * ? ") | 
| //    public void wakeup() { | 
| //        log.info("本地保持唤醒状态"); | 
| //        Long id = 5L; | 
| //        mallMemberMapper.selectById(id); | 
| //    } | 
| } |