package cn.iocoder.yudao.module.system.service.worklog;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListDTO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.MyManageModelDTO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.NeedWriteHistoryDTO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.*;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO;

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

public interface LogStatisticsService {
    /**
     * 创建工作日志统计
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createLogStatistics(@Valid LogStatisticsSaveReqVO createReqVO);

    /**
     * 更新工作日志统计
     *
     * @param updateReqVO 更新信息
     */
    void updateLogStatistics(@Valid LogStatisticsSaveReqVO updateReqVO);

    /**
     * 删除工作日志统计
     *
     * @param id 编号
     */
    void deleteLogStatistics(Long id);

    /**
     * 获得工作日志统计
     *
     * @param id 编号
     * @return 工作日志统计
     */
    LogStatisticsDO getLogStatistics(Long id);

    /**
     * 获得工作日志统计分页
     *
     * @param pageReqVO 分页查询
     * @return 工作日志统计分页
     */
    PageResult<LogStatisticsDO> getLogStatisticsPage(LogStatisticsPageReqVO pageReqVO);

    /**
     * 我管理的工作日志统计模版
     *
     * @return
     */
    List<LogStatisticsModelVO> myManageModel();

    /**
     * 获取未提交用户
     *
     * @param formId
     * @param thisTime
     * @return
     */
    List<AdminUserDO> getUnSubmittedUser(Long formId, String thisTime);

    /**
     * 获取统计信息
     *
     * @param dto
     * @return
     */
    LogStatisticsDetailsListVO getStatistics(LogStatisticsDetailsListDTO dto);

    /**
     * 获取我填写的
     *
     * @return
     */
    List<LogStatisticsModelVO> getNeedWrite();

    /**
     * 导出
     *
     * @param dto
     * @return
     */
    List<LogStatisticsDetailsVO> exportLogRuleExcel(LogStatisticsDetailsListDTO dto);

    /**
     * 新增或者修改统计表
     *
     * @param logStatisticsDO
     */
    void saveOrUpdate(LogStatisticsDO logStatisticsDO);

    String getCommitTimeRange(LogRuleDO logRuleDO);

    /**
     * 获取我填写的历史
     *
     * @param dto
     * @return
     */
    List<LogStatisticsModelVO> getNeedWriteHistory(NeedWriteHistoryDTO dto);

    /**
     * 获取我管理的模版的统计
     *
     * @param dto
     * @return
     */
    List<LogStatisticsModelVO> getMyManageModelStatistics(MyManageModelDTO dto);
}
