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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.*;
import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreportdetail.vo.IotRyDailyReportDetailRespVO;
import cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreport.IotRyDailyReportDO;

import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 瑞鹰日报 Service 接口
 *
 * @author ruiqi
 */
public interface IotRyDailyReportService {

    /**
     * 创建瑞鹰日报
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotRyDailyReport(@Valid IotRyDailyReportSaveReqVO createReqVO);

    /**
     * 更新瑞鹰日报
     *
     * @param updateReqVO 更新信息
     */
    void updateIotRyDailyReport(@Valid IotRyDailyReportSaveReqVO updateReqVO);

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

    /**
     * 获得瑞鹰日报
     *
     * @param id 编号
     * @return 瑞鹰日报
     */
    IotRyDailyReportDO getIotRyDailyReport(Long id);

    /**
     * 查询瑞鹰日报 生产动态明细
     *
     * @param currentDate 当日日期
     * @param deptId 部门id
     */
    List<IotRyDailyReportDetailRespVO> ryDailyReportDetails(LocalDateTime currentDate, Long deptId, Long reportId);

    /**
     * 获得瑞鹰日报分页
     *
     * @param pageReqVO 分页查询
     * @return 瑞鹰日报分页
     */
    PageResult<IotRyDailyReportDO> getIotRyDailyReportPage(IotRyDailyReportPageReqVO pageReqVO);

    /**
     * 查询 施工队伍下 的 井架 类别 设备型号 编号
     *
     * @param deptIds
     * @return 增压机 产能 集合
     */
    Map<Long, String> queryEquipmentType(List<Long> deptIds);

    /**
     * 查询每个任务的搬迁安装天数
     *
     * @param reqVO taskId
     * @return 每个任务的搬迁安装天数
     */
    List<IotRyDailyReportDO> latestWellDoneTimes(IotRyDailyReportPageReqVO reqVO);

    /**
     * 按部门统计 钻井 任务数量
     *
     * @return 按部门统计任务数量
     */
    List<IotRyDailyReportTaskCountVO> countTasksByDept();

    /**
     * 按部门统计 修井 任务数量
     *
     * @return 按部门统计任务数量
     */
    List<IotRyDailyReportTaskCountVO> countRepairTasksByDept(IotRyDailyReportPageReqVO pageReqVO);

    /**
     * 按部门统计 修井 月累计 年累计 任务数量
     *
     * @return 按部门统计任务数量
     */
    List<IotRyDailyReportTaskCountVO> countDateRepairTasksByDept();

    /**
     * 按部门统计 修井 月累计 年累计 任务数量
     *
     * @return 按部门统计任务数量
     */
    List<IotRyDailyReportTaskCountVO> countDateRigTasksByDept();

    /**
     * 统计钻井 日进尺 月累计进尺 年累计进尺
     *
     * @return 按部门统计任务数量
     */
    List<IotRyDailyReportTaskCountVO> countDateDrillTasksByDept();

    /**
     * 按部门/任务 统计 钻井 完工任务数量 当前日期所属的 日 月 年
     *
     * @return 按部门统计任务数量
     */
    List<IotRyDailyReportTaskCountVO> countDateRigTasksByDepartment();

    /**
     * 瑞鹰日报汇总统计
     *
     * @param pageReqVO 列表查询
     * @return 瑞恒日报汇总统计
     */
    List<IotRyDailyReportStatisticsRespVO> statistics(IotRyDailyReportPageReqVO pageReqVO);

    /**
     * 按照日期查询瑞恒日报统计数据 已填报 未填报 数量
     *
     * @param pageReqVO 查询参数
     * @return 统计数据
     */
    List<IotRyDailyReportStatisticsVO> ryDailyReportStatistics(IotRyDailyReportPageReqVO pageReqVO);

    /**
     * 按照日期查询瑞鹰日报统计数据 未填报队伍明细
     *
     * @param pageReqVO 查询参数
     * @return 未填报队伍明细
     */
    List<IotRyDailyReportStatisticsVO> ryUnReportedDetails(IotRyDailyReportPageReqVO pageReqVO);

    /**
     * 瑞鹰日报汇总 折线图
     *
     * @param
     * @return
     */
    List<IotRyDailyReportPolylineVO> polylineStatistics(IotRyDailyReportPageReqVO pageReqVO);

    /**
     * 审批瑞鹰日报
     *
     * @param updateReqVO 更新信息
     */
    void approvalRyDailyReport(IotRyDailyReportSaveReqVO updateReqVO);

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

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

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

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

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

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

    /**
     * 瑞鹰看板 组合钻井修井日报生产动态简报
     *
     * @param pageReqVO 无分页查询
     * @return 组合钻井修井日报生产动态简报 列表
     */
    List<IotRyDailyReportDO> productionBriefs(IotRyDailyReportPageReqVO pageReqVO);
}