package com.aircraft.modules.quartz.task;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.aircraft.modules.order.domain.OrderMain;
import com.aircraft.modules.order.domain.enums.MainOrderStatusEnum;
import com.aircraft.modules.order.service.IOrderMainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 订单自动完成定时任务
 *
 * @author chenxiky
 * @version 1.0.0
 * @since 2025/7/27
 */

@Slf4j
@Service("orderTask")
public class OrderTask {

    @Resource
    private IOrderMainService orderMainService;

    /**
     * 订单自动完成定时任务
     *
     * @param hour 小时
     */
    public void orderAutoFinishTask(Integer hour) {
        log.info("订单自动完成定时任务开始执行，参数：{}", hour);
        // 订单状态为飞行中，且确认状态为飞行员确认,距离时间是超过xx小时，就会自动完成
        Date currentTime = new Date();
        Date finishTime = DateUtil.offsetHour(currentTime, -hour);

        List<OrderMain>  orderMainList = orderMainService.obtainOrderNotFinish(finishTime);

        if (CollectionUtil.isEmpty(orderMainList)) {
            log.info("订单自动完成定时任务无订单");
        }
        List<Long> orderIds = orderMainList.stream().map(OrderMain::getId).toList();
        // 更新订单状态
        orderMainService.updateAutoFinishOrder(orderIds, MainOrderStatusEnum.COMPLETED.getCode());
        log.info("订单自动完成定时任务执行完毕");
    }
}
