package cn.iocoder.yudao.module.order.service.targetLog;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.framework.mybatis.core.service.IService;
import cn.iocoder.yudao.module.order.enums.TargetLogEnum;
import cn.iocoder.yudao.module.order.vo.targetLog.*;
import cn.iocoder.yudao.module.order.dal.dataobject.targetLog.TargetLogDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 部门业绩日志 Service 接口
 *
 * @author 系统管理员
 */
public interface TargetLogService extends IService<TargetLogDO> {

    /**
     * 创建部门业绩日志
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createTargetLog(@Valid TargetLogCreateReqVO createReqVO);

    /**
     * 更新部门业绩日志
     * @param updateReqVO 更新信息
     */
    void updateTargetLog(@Valid TargetLogUpdateReqVO updateReqVO);

    /**
     * 删除部门业绩日志
     * @param id 编号
     */
    void deleteTargetLog(Long id);

    /**
     * 获得部门业绩日志
     * @param id 编号
     * @return 部门业绩日志
     */
    TargetLogDO getTargetLog(Long id);

    /**
     * 获得部门业绩日志列表
     * @param ids 编号
     * @return 部门业绩日志列表
     */
    List<TargetLogDO> getTargetLogList(Collection<Long> ids);

    /**
     * 获得部门业绩日志分页
     * @param page 分页查询
     * @param query 查询
     * @return 部门业绩日志分页
     */
    PageResult<TargetLogDO> getTargetLogPage(TargetLogQueryVO query, PageVO page);

    /**
     * 获得部门业绩日志列表, 用于 Excel 导出
     * @param query 查询
     * @return 部门业绩日志列表
     */
    List<TargetLogDO> getTargetLogList(TargetLogQueryVO query);

    /**
     * 添加部门业绩日志（后端）
     * @param orderId 订单ID
     * @param achievementTime 产生业绩的时间
     * @param targetLogEnum 产生业绩的操作
     * @return 部门业绩日志列表
     */
    void addTargetLog(Long orderId, Date achievementTime, TargetLogEnum targetLogEnum);

    /**
     * 添加部门业绩日志（后端）
     * @param orderIds 订单ID
     * @param achievementTime 产生业绩的时间
     * @param targetLogEnum 产生业绩的操作
     * @return 部门业绩日志列表
     */
    void addTargetLogs(List<Long> orderIds, Date achievementTime, TargetLogEnum targetLogEnum);

    List<TargetLogDO> getTargetLogListByUserIds(List<Long> collect, Date beginTime,Date endTime);

    void compensateTargetLog(List<String> list);
}
