package com.fs.statis.mapper;

import com.fs.statis.domain.FsStatisQwWatch;
import com.fs.statis.dto.FsStatisQwWatchWriteDataDTO;
import com.fs.statis.dto.StatsWatchLogPageListDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface FsStatisQwWatchMapper {

    /**
     * 根据主键查询
     *
     * @param id 主键ID
     * @return 实体
     */
    FsStatisQwWatch selectByPrimaryKey(Long id);

    /**
     * 根据唯一键查询
     *
     * @param deptId 部门ID
     * @param companyUserId 销售ID
     * @param qwUserId 企微号
     * @param dataDate 数据日期
     * @return 实体
     */
    FsStatisQwWatch selectByUniqueKey(@Param("deptId") Long deptId,
                                      @Param("companyUserId") Long companyUserId,
                                      @Param("qwUserId") String qwUserId,
                                      @Param("dataDate") Date dataDate);

    /**
     * 新增记录 (不包括generated columns)
     *
     * @param record 实体
     * @return 影响行数
     */
    int insert(FsStatisQwWatch record);

    /**
     * 新增记录 - 选择性插入 (不包括generated columns)
     *
     * @param record 实体
     * @return 影响行数
     */
    int insertSelective(FsStatisQwWatch record);

    /**
     * 根据主键更新 (不更新generated columns)
     *
     * @param record 实体
     * @return 影响行数
     */
    int updateByPrimaryKey(FsStatisQwWatch record);

    /**
     * 根据主键选择性更新 (不更新generated columns)
     *
     * @param record 实体
     * @return 影响行数
     */
    int updateByPrimaryKeySelective(FsStatisQwWatch record);

    /**
     * 根据主键删除
     *
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 查询列表 (可添加查询条件参数)
     *
     * @param example 查询条件 (可以是一个FsStatisQwWatch对象作为查询模板)
     * @return 列表
     */
    List<FsStatisQwWatch> selectList(FsStatisQwWatch example);

    /**
     * 批量插入
     *
     * @param list 记录列表
     * @return 影响行数
     */
    int batchInsert(@Param("list") List<FsStatisQwWatch> list);

    void generateData(FsStatisQwWatchWriteDataDTO param);

    List<FsStatisQwWatch> queryList(StatsWatchLogPageListDTO param);
    List<FsStatisQwWatch> exportList(StatsWatchLogPageListDTO param);
}
