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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttaskplan.vo.IotProjectTaskPlanPageReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttaskplan.vo.IotProjectTaskPlanSaveReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttaskplan.vo.IotProjectTaskPlanStatisticsRespVO;
import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskplan.IotProjectTaskPlanDO;

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

/**
 * 日报任务计划(工作量) Service 接口
 *
 * @author ruqi
 */
public interface IotProjectTaskPlanService {

    /**
     * 创建日报任务计划(工作量)
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotProjectTaskPlan(@Valid IotProjectTaskPlanSaveReqVO createReqVO);

    /**
     * 更新日报任务计划(工作量)
     *
     * @param updateReqVO 更新信息
     */
    void updateIotProjectTaskPlan(@Valid IotProjectTaskPlanSaveReqVO updateReqVO);

    /**
     * 删除日报任务计划(工作量)
     *
     * @param id 编号
     */
    void deleteIotProjectTaskPlan(Long id);

    /**
     * 获得日报任务计划(工作量)
     *
     * @param id 编号
     * @return 日报任务计划(工作量)
     */
    IotProjectTaskPlanDO getIotProjectTaskPlan(Long id);

    /**
     * 获得日报任务计划(工作量)分页
     *
     * @param pageReqVO 分页查询
     * @return 日报任务计划(工作量)分页
     */
    PageResult<IotProjectTaskPlanDO> getIotProjectTaskPlanPage(IotProjectTaskPlanPageReqVO pageReqVO);

    /**
     * 专业公司工作量计划扩展属性
     *
     * @param pageReqVO 分页查询
     * @return 工作量计划扩展属性列表
     */
    List<IotTaskAttrModelProperty> planExtProperties(IotProjectTaskPlanPageReqVO pageReqVO);

    /**
     * 专业公司工作量计划 汇总统计
     *
     * @param pageReqVO 分页查询
     * @return 工作量计划汇总统计对象列表
     */
    List<IotProjectTaskPlanStatisticsRespVO> summaryStatistics(IotProjectTaskPlanPageReqVO pageReqVO);
}