package cn.iocoder.yudao.module.pms.service.iotrddailyreport;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.*;
import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 瑞都日报 Service 接口
 *
 * @author ruiqi
 */
public interface IotRdDailyReportService {

    /**
     * 创建瑞都日报
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotRdDailyReport(@Valid IotRdDailyReportSaveReqVO createReqVO);

    /**
     * 更新瑞都日报
     *
     * @param updateReqVO 更新信息
     */
    IotRdDailyReportDO updateIotRdDailyReport(@Valid IotRdDailyReportSaveReqVO updateReqVO);

    /**
     * 审批瑞都日报
     *
     * @param updateReqVO 更新信息
     */
    void approvalRdDailyReport(@Valid IotRdDailyReportSaveReqVO updateReqVO);

    /**
     * 删除瑞都日报
     *
     * @param id 编号
     */
    void deleteIotRdDailyReport(Long id);

    /**
     * 获得瑞都日报
     *
     * @param id 编号
     * @return 瑞都日报
     */
    IotRdDailyReportDO getIotRdDailyReport(Long id);

    /**
     * 获得瑞都日报分页
     *
     * @param pageReqVO 分页查询
     * @return 瑞都日报分页
     */
    PageResult<IotRdDailyReportDO> getIotRdDailyReportPage(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 获得瑞都日报列表
     *
     * @param pageReqVO 列表查询
     * @return 瑞都日报列表
     */
    List<IotRdDailyReportDO> dailyReports(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 批量 新增日报工单
     *
     * @param
     */
    void batchAddDailyReports(List<IotRdDailyReportDO> reports);

    /**
     * 瑞都 日报 按项目部统计
     *
     * @param
     */
    List<IotRdDailyReportStatisticsRespVO> statistics(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 瑞都 日报 汇总统计
     *
     * @param pageReqVO 列表查询
     * @return 瑞都日报汇总统计
     */
    List<IotRdDailyReportStatisticsRespVO> summaryStatistics(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 瑞都 日报 汇总统计 卡片
     *
     * @param pageReqVO 列表查询
     * @return 瑞都日报汇总统计
     */
    List<IotRdDailyReportStatisticsRespVO> totalWorkload(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 瑞都 日报 按项目部统计 工作量折线图
     *
     * @param
     */
    List<IotRdDailyReportPolylineVO> polylineStatistics(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 瑞都 看板 日报统计折线图 以公司为维度 不区分 项目部 队伍
     *
     * @param
     */
    List<IotRdDailyReportPolylineVO> workloadKanban(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 批量更新瑞都日报 平台井
     *
     * @param
     */
    void saveBatch(List<IotRdDailyReportSaveReqVO> reports);

    /**
     * 查询任务的实际进度
     *
     * @param reqVO taskId
     * @return 从日报中提取任务的实际进度
     */
    List<IotRdDailyReportDO> taskActualProgress(IotRdDailyReportPageReqVO reqVO);

    /**
     * 获得瑞都日报分页 以井为维度统计工作量
     *
     * @param pageReqVO 分页查询
     * @return 瑞都日报分页
     */
    PageResult<IotRdDailyReportDO> teamReports(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 根据 队伍 查询 瑞都日报 按照任务井分组 小计 查询小组内最后1条记录id
     *
     * @param pageReqVO 列表查询
     * @return 瑞都日报 列表 小组内最后 的记录
     */
    List<IotRdDailyReportDO> rdDeptDailyReportsGroupIds(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 根据 井号 查询 瑞都日报 按照队伍分组 小计 查询小组内最后1条记录id
     *
     * @param pageReqVO 列表查询
     * @return 瑞都日报 列表 小组内最后 的记录
     */
    List<IotRdDailyReportDO> rdWellNameDailyReportsGroupIds(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 获得瑞都日报分页 以队伍为维度统计工作量
     *
     * @param pageReqVO 分页查询
     * @return 瑞都日报分页
     */
    PageResult<IotRdDailyReportDO> wellReports(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 瑞都日报 看板 施工简报
     *
     * @param pageReqVO 无分页查询
     * @return 瑞都日报施工简报 列表
     */
    List<IotRdDailyReportBriefRespVO> constructionBriefing(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 瑞都日报 看板 异常警示
     *
     * @param pageReqVO 无分页查询
     * @return 瑞都日报施工简报 列表
     */
    List<IotRdDailyReportAbnormalRespVO> abnormalAlert(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 修复历史生产动态数据
     *
     * @return
     */
    void repairHistoryProdStatus();

    /**
     * 瑞都日报 非生产时效 分析
     *
     * @param pageReqVO 无分页查询
     * @return 瑞都日报 非生产时效分析 列表
     */
    List<IotRdDailyReportNptStatisticsRespVO> nptStatistics(IotRdDailyReportPageReqVO pageReqVO);

    /**
     * 瑞都日报 按照 年 月 日 汇总
     *
     * @param pageReqVO 无分页查询
     * @return 瑞都日报 按照年 月 日 列表
     */
    List<IotRdDailyReportSummaryYearRespVO> reportSummary(IotRdDailyReportPageReqVO pageReqVO);
}