package cn.cecep.talroad.task;

import cn.cecep.talroad.common.core.web.domain.AjaxResults;
import cn.cecep.talroad.data.analyse.task.execute.report.PollutionDischargeProcessService;
import cn.cecep.talroad.data.analyse.task.execute.report.specifications.month.AnomalyAnalysisService;
import cn.cecep.talroad.data.analyse.task.execute.report.specifications.month.ExhaustExceedingProcessService;
import cn.cecep.talroad.data.analyse.task.label.ExecuteReportTaskService;
import cn.cecep.talroad.enums.EmlTypeEnums;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: Frank
 * @createTime: 2023年07月25日 15:19:10
 * @version:
 * @Description:
 */
@Api(tags = "执行报告相关定时任务")
@RestController
@RequestMapping("/execute/report")
@Slf4j
@AllArgsConstructor
public class ExecuteReportController {

    private final PollutionDischargeProcessService pollutionDischargeProcess;

    private final ExecuteReportTaskService executeReportTaskService;

    private final AnomalyAnalysisService anomalyAnalysisService;

    private final ExhaustExceedingProcessService exhaustExceedingProcessService;



    /**
     * 定时更新 执行报告-排污单位基本信息表-审核
     */
    @GetMapping("/pollution/discharge/process")
    public AjaxResults<Void> pollutionDischargeProcess() {
        try {
            pollutionDischargeProcess.process();
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("定时执行排污执行报告审核预警任务失败. 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }

    @GetMapping("/specification")
    public AjaxResults<Void> isSpecification() {
        try {
            executeReportTaskService.isSpecification();
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("根据关联分析系统的判断结果得出-执行报告规范审核定时任务 error . 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }

    @GetMapping("/submit")
    public AjaxResults<Void> isSubmit() {
        try {
            executeReportTaskService.isSubmitTask();
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("根据关联分析系统的判断结果得出-执行报告规范审核定时任务 error . 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }

    @GetMapping("/anomaly/analysis/year")
    public AjaxResults<Void> anomalyAnalysisYear() {
        try {
            anomalyAnalysisService.execute(EmlTypeEnums.YEAR);
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("执行报告异常分析行为任务 -- 年 error . 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }

    @GetMapping("/anomaly/analysis/quarter")
    public AjaxResults<Void> anomalyAnalysisQuarter() {
        try {
            anomalyAnalysisService.execute(EmlTypeEnums.QUARTER);
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("执行报告异常分析行为任务 -- 季度 error . 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }

    @GetMapping("/anomaly/analysis/month")
    public AjaxResults<Void> anomalyAnalysisMonth() {
        try {
            anomalyAnalysisService.execute(EmlTypeEnums.MONTH);
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("执行报告异常分析行为任务 -- 月度 error . 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }
    /**
     * 定时更新 执行报告-废气超标率
     */
    @GetMapping("/exhaust/exceeded/rate/process")
    public AjaxResults<Void> exhaustExceededRateProcess() {
        try {
            exhaustExceedingProcessService.exceededRateProcess();
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("定时执行执行报告-废气超标率任务失败. 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }

    /**
     * 定时更新 执行报告-有组织废气污染物排放浓度监测数据统计表
     */
    @GetMapping("/exhaust/gas/emission/process")
    public AjaxResults<Void> exhaustGasEmissionProcess() {
        try {
            exhaustExceedingProcessService.exhaustGasEmissionProcess();
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("定时执行执行报告-有组织废气污染物排放浓度监测数据统计表任务失败. 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }
    /**
     * 定时更新 执行报告-废水污染物排放浓度监测数据统计表
     */
    @GetMapping("/exhaust/water/emission/process")
    public AjaxResults<Void> exhaustWaterEmissionProcess() {
        try {
            exhaustExceedingProcessService.exhaustWaterEmissionProcess();
            return AjaxResults.success();
        } catch (Exception e) {
            log.error("定时执行废水污染物排放浓度监测数据统计表任务失败. 原因:{}", e.getMessage(), e);
            return AjaxResults.error();
        }
    }


}
