package com.ruoyi.doubledefense.service;

import java.util.Date;
import java.util.List;

import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.doubledefense.domain.Danger;
import com.ruoyi.doubledefense.dto.DangerDTO;
import com.ruoyi.doubledefense.dto.DangerStatisticsDTO;
import com.ruoyi.doubledefense.dto.DangerStatisticsPCDTO;
import com.ruoyi.doubledefense.dto.res.DangerResultDTO;
import com.ruoyi.doubledefense.dtoGov.DangerDTOGov;
import org.springframework.transaction.annotation.Transactional;

/**
 * 隐患信息Service接口
 *
 * @author ruoyi
 * @date 2023-08-03
 */
public interface IDangerService {
    /**
     * 重预防汇聚计算节点
     * 查询隐患列表
     *
     * @param dangerDTOGov
     * @return
     */
    PageInfo<DangerDTOGov> govSelectDangerList(DangerDTOGov dangerDTOGov);

    /**
     * 查询隐患信息
     *
     * @param id 隐患信息主键
     * @return 隐患信息
     */
    public DangerResultDTO selectDangerById(String id);

    /**
     * 查询隐患信息列表
     *
     * @param danger 隐患信息
     * @return 隐患信息集合
     */
    public List<DangerResultDTO> selectDangerList(DangerDTO danger);

    /**
     * PC首页统计-双重防御机制：查询隐患列表
     *
     * @param danger 隐患信息
     * @return 隐患信息集合
     */
    public List<DangerResultDTO> pcHomePageDangerList(DangerDTO danger);

    /**
     * 新增隐患信息
     *
     * @param danger 隐患信息
     * @return 结果
     */
    public int insertDanger(DangerDTO danger);

    /**
     * 修改隐患信息
     *
     * @param danger 隐患信息
     * @return 结果
     */
    public int updateDanger(DangerDTO danger);

    /**
     * 批量删除隐患信息
     *
     * @param ids 需要删除的隐患信息主键集合
     * @return 结果
     */
    public int deleteDangerByIds(String[] ids);

    /**
     * 上报隐患
     *
     * @param dangerDTO
     * @return
     */
    int insertDangerForApp(DangerDTO dangerDTO);

    /**
     * 修改隐患
     *
     * @param dangerDTO
     * @return
     */
    int updateDangerForApp(DangerDTO dangerDTO, boolean isStatusUpdate);

    /**
     * 审核隐患
     *
     * @param dangerDTO
     * @return
     */
    AjaxResult dangerReview(DangerDTO dangerDTO);

    /**
     * 认领隐患
     *
     * @param dangerId
     * @return
     */
    AjaxResult receiveDanger(String dangerId);

    /**
     * 提交整改信息（完成整改）
     *
     * @param dangerDTO
     * @return
     */
    AjaxResult submitDangerManage(DangerDTO dangerDTO);

    /**
     * 整改验收
     *
     * @param dangerDTO
     * @return
     */
    AjaxResult checkDangerManage(DangerDTO dangerDTO);

    /**
     * APP首页统计-隐患排查
     *
     * @return
     */
    DangerStatisticsDTO dangerStatistics();

    /**
     * PC首页统计-双重预防机制
     *
     * @param endDate 今天的0点0分的时间
     * @return
     */
    DangerStatisticsPCDTO dangerStatisticsPC(Date endDate);


}
