package com.gyee.generation.task;


import com.gyee.generation.service.AnalysisNewService;
import com.gyee.generation.service.Irradiationinput.IrradiationinputService;
import com.gyee.generation.service.PVSystemEfficiencyCalculator;
import com.gyee.generation.service.StationPower.StationPowerService;
import com.gyee.generation.service.realtimelibrary.*;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @ClassName : SaticScheduleTask
 * @Description : 调度
 */


@Component
public class SaticScheduleCALTask {

    private static Logger logger = LoggerFactory.getLogger(SaticScheduleCALTask.class);

    @Resource
    private AccessStatusService accessStatusService;
    @Resource
    private CalculationService calculationService;
    @Resource
    private CycleCalculationService cycleCalculationService;
    @Resource
    private ElectricityMeteringService electricityMeteringService;
    @Resource
    private RealtimeService realtimeService;
    @Resource
    private StatusService statusService;
    @Resource
    private TheoreticalPowerService theoreticalPowerService;
    @Resource
    private RegionCalreService regionCalreService;
    @Resource
    private RegionCalService regionCalService;
    @Resource
    private SafetyDayService safetyDayService;
    @Resource
    private StationPowerService powerService;

    @Resource
    private AnalysisNewService analysisNewService;
    @Resource
    private PVSystemEfficiencyCalculator calculator;
    @Resource
    private IrradiationinputService irradiationinputService;


    /**
     * 全场状态，接入状态，总预测功率
     * 每秒执行一次
     */
    @XxlJob("accessStatus_CAL")
    public void accessStatus_CAL() {


        XxlJobHelper.log("全场状态调度程序执行开始!........");
        try {
            //场站接入状态，总预测功率
//            accessStatusService.accessStatus();
            //全场状态
            accessStatusService.fullFieldState();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("全场状态调度任务处理完成!........");
    }

    /**
     * 后新增计算指标  节约煤，水，二氧化碳，二氧化硫，月利用小时，年利用小时，设备可利用率，等效可用系数，风能利用率
     * 每15分钟执行一次
     */
    @XxlJob("calculation_CAL")
    public void calculation_CAL() {

        XxlJobHelper.log("计算指标调度程序执行开始!........");
        try {
            calculationService.calWp();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("计算指标调度任务处理完成!........");
    }

    /**
     * 日，月，年，15分钟计算指标
     * 每15分钟执行一次
     */
    @XxlJob("cycleCalculation_CAL")
    public void cycleCalculation_CAL() {

        XxlJobHelper.log("日月年计算指标调度程序执行开始!........");
        try {
            cycleCalculationService.saveCyle();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("日月年计算指标调度任务处理完成!........");
    }


    /**
     * 日，月，年，15分钟计算指标
     * 每15分钟执行一次
     */
    @XxlJob("cycleCalculation_All_CAL")
    public void cycleCalculation_All_CAL() {

        XxlJobHelper.log("日月年计算指标调度程序执行开始!........");
        try {

            while (true) {
                cycleCalculationService.saveCyle();
                Thread.sleep(200);
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("日月年计算指标调度任务处理完成!........");
    }

    /**
     * 电计量计算指标
     * 每15分钟执行一次
     */
    @XxlJob("electricityMetering_CAL")
    public void electricityMetering_CAL() {

        XxlJobHelper.log("电计量指标调度程序执行开始!........");
        try {
            electricityMeteringService.saveGenerationDatas();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("电计量计算指标调度任务处理完成!........");
    }


    /**
     * 实时计算指标
     * 每秒执行一次
     */
    @XxlJob("realtime_CAL")
    public void realtime_CAL() {

        XxlJobHelper.log("实时指标调度程序执行开始!........");
        try {

            while (true) {
                realtimeService.savaRealtimeTarget();
                Thread.sleep(200);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("实时指标调度任务处理完成!........");
    }


    /**
     * 实时场站计算指标合计
     * 每秒执行一次
     */
    @XxlJob("realtime_Wp_CAL")
    public void realtime_Wp_CAL() {

        XxlJobHelper.log("实时指标调度程序执行开始!........");
        try {
            while (true) {
                realtimeService.savaRealtimeTargetWp();

                Thread.sleep(200);
            }

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
        XxlJobHelper.log("实时指标调度任务处理完成!........");
    }


    /**
     * 中间状态计算
     * 执行一次
     */
    @XxlJob("status_middleStatusReal")
    public void status_powerRationing() {

        XxlJobHelper.log("中间状态计算调度程序执行开始!........");
        try {

            statusService.startMiddleStatusReal();

        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("中间状态计算调度任务处理完成!........");
    }

    @XxlJob("status_statusReal")
    public void status_statusReal() {

        XxlJobHelper.log("状态调度程序执行开始!........");
        try {
            statusService.startStatusReal();

        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("状态调度任务处理完成!........");
    }
    /**
     * 场站状态计算
     * 执行一次
     */
    /**
     * 状态计算
     * 执行一次
     */

    @XxlJob("calculate_powerRationing")
    public void calculate_powerRationing() {

        XxlJobHelper.log("场站状态计算调度程序执行开始!........");
        try {
            statusService.startPowerRationing();

        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("场站状态计算调度任务处理完成!........");
    }


    /**
     * 状态数量计算
     * 执行一次
     */
    @XxlJob("calculate_StatusNumber")
    public void calculateStatusNumber() {

        XxlJobHelper.log("状态数量调度程序执行开始!........");
        try {
            statusService.startStatusNumber();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("状态数量调度任务处理完成!........");
    }

    /**
     * 自算功率，最优功率更新缓存
     * 每月执行一次
     */
    @XxlJob("theoreticalPower_CAL")
    public void theoreticalPower_CAL() {

        XxlJobHelper.log("自算功率更新程序执行开始!........");
        try {
            theoreticalPowerService.updateCachePower();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("自算功率更新调度任务处理完成!........");
    }


    /**
     * 安全天数
     * 每天执行一次
     */
    @XxlJob("safetyday_CAL")
    public void safetyday_CAL() {

        XxlJobHelper.log("安全天数程序执行开始!........");
        try {
            safetyDayService.saveSafetyday();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("安全天数调度任务处理完成!........");
    }

    /**
     * 区域公司实时指标
     * 每秒执行一次
     */
    @XxlJob("regionCalre_CAL")
    public void regionCalre_CAL() {

        XxlJobHelper.log("区域公司实时程序执行开始!........");
        try {
            while (true) {
                regionCalreService.companyCal();
                regionCalreService.RegionCal();
                regionCalreService.groupCal();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("区域公司实时程序处理完成!........");
    }

    /**
     * 区域公司历史指标
     * 每5分钟执行一次
     * 59 14/15 * * * ?
     */
    @XxlJob("regionCal_CAL")
    public void regionCal_CAL() {

        XxlJobHelper.log("区域公司历史程序执行开始!........");
        try {
            while (true) {
                regionCalService.companyCal();
                regionCalService.RegionCal();
                regionCalService.groupCal();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("区域公司历史程序处理完成!........");
    }

    /**
     * 区域公司安全天数
     * 每天0点执行
     * 59 14/15 * * * ?
     */

    @XxlJob(value = "yourJobHandler")
    public void regionCal_aqts() {

        XxlJobHelper.log("区域公司安全天数程序执行开始!........");
        try {
            regionCalreService.aqts();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("区域公司安全天数程序处理完成!........");
    }


    @XxlJob("PredictedPowerccuracy")
    public void Powerccuracy() {


        XxlJobHelper.log("预测功率准确率计算执行开始!........");
        try {
            powerService.predictedPower();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("预测功率准确率计算执行开始!........");
    }


    @XxlJob("planvaluejs")
    public void planvalue() {

        XxlJobHelper.log("系统效率计算执行开始!........");
        try {
            calculator.planvalue();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("系统效率计算执行开始!........");
    }

    @XxlJob("companysjs")
    public void companysjs() {


        XxlJobHelper.log("底码计算执行开始!........");
        try {
            analysisNewService.companys();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("底码计算计算执行开始!........");
    }

    @XxlJob("saveWindProjectjs")
    public void saveWindProjectjs() {


        XxlJobHelper.log("底码电量计算执行开始!........");
        try {
            analysisNewService.saveWindProject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("底码电量计算执行开始!........");
    }

    @XxlJob("irradiationjs")
    public void irradiation() {


        XxlJobHelper.log("日照强度替换计算执行开始!........");
        try {
            irradiationinputService.getcockpit();
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobHelper.log("日照强度替换计算执行开始!........");
    }


}
