package com.sqx.scheduler.reconciliation;

import com.sqx.modules.reconciliation.service.PlatformBillService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDate;

/**
 * 对账定时任务
 *
 * @author : codingliang
 * @date : 2024-09-09 12:22
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class BillsScheduler {

    private final PlatformBillService platformBillService;

    /**
     * 将所有超过失效时间的优惠券改为失效状态
     * 每填0点2分30秒执行一次
     */
//     @Async
//     @Scheduled(cron = "30 2 0 * * ?", zone = "Asia/Shanghai")
// //    @Scheduled(cron = "30 * * * * ?", zone = "Asia/Shanghai")
//     public void insertPlatformBill(){
//         int errorCount = 0 ;
//         log.info("开始统计对账数据");
//         while (errorCount<3){
//             try {
//                 int count =platformBillService.insertPlatformBill();
//                 if(count!=0){
//                     break;
//                 }
//             } catch (Exception e) {
//                 log.error("统计对账数据异常：{}", e.getMessage());
//                 errorCount++;
//                 try {
//                     Thread.sleep(10000);
//                 } catch (InterruptedException ex) {
//                     throw new RuntimeException(ex);
//                 }
//             }
//         }
//         log.info("统计对账数据结束");
//     }

    /**
     * 定时生成对账单
     *    每天的2点30分、40分、50分执行一次
     */
    @Async
    @Scheduled(cron = "0 30,40,50 2 * * ?")
    public void generatePlatformBill(){
        log.info("开始统计对账数据...");
        LocalDate date = LocalDate.now().minusDays(1);

        // 统计对账数据，不覆盖已有数据
        platformBillService.generatePlatformBill(date, false);

        log.info("对账数据统计完成...");
    }
}
