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

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

import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 瑞恒日报 Service 接口
 *
 * @author ruiqi
 */
public interface IotRhDailyReportService {

    /**
     * 创建瑞恒日报
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotRhDailyReport(@Valid IotRhDailyReportSaveReqVO createReqVO);

    /**
     * 更新瑞恒日报
     *
     * @param updateReqVO 更新信息
     */
    void updateIotRhDailyReport(@Valid IotRhDailyReportSaveReqVO updateReqVO);

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

    /**
     * 获得瑞恒日报
     *
     * @param id 编号
     * @return 瑞恒日报
     */
    IotRhDailyReportDO getIotRhDailyReport(Long id);

    /**
     * 获得瑞恒日报分页
     *
     * @param pageReqVO 分页查询
     * @return 瑞恒日报分页
     */
    PageResult<IotRhDailyReportDO> getIotRhDailyReportPage(IotRhDailyReportPageReqVO pageReqVO);

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

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

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

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

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

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

    /**
     * 按照日期查询瑞恒日报统计数据 未填报队伍明细
     *
     * @param pageReqVO 查询参数
     * @return 未填报队伍明细
     */
    List<IotRhDailyReportStatisticsVO> rhUnReportedDetails(IotRhDailyReportPageReqVO pageReqVO);

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

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

    /**
     * 查询指定队伍下包含的增压机的产能
     *
     * @param deptId
     * @return 增压机 产能
     */
    BigDecimal queryCapacity(Long deptId);

    /**
     * 查询指定队伍集合下包含的增压机的产能 集合
     *
     * @param deptIds
     * @return 增压机 产能 集合
     */
    Map<Long, BigDecimal> queryCapacities(List<Long> deptIds);

    /**
     * 瑞恒日报汇总
     *
     * @param
     * @return 增压机 产能
     */
    PageResult<IotRhDailyReportDO> dailyReportSummary(IotRhDailyReportPageReqVO pageReqVO);

    /**
     * 瑞恒日报汇总 折线图
     *
     * @param
     * @return
     */
    List<IotRhDailyReportPolylineVO> polylineStatistics(IotRhDailyReportPageReqVO pageReqVO);

    /**
     * 审批瑞恒日报
     *
     * @param updateReqVO 更新信息
     */
    void approvalRhDailyReport(IotRdDailyReportSaveReqVO updateReqVO);

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