package com.gic.haoban.manage.service.dao.mapper.contact;

import com.gic.haoban.manage.api.qdto.chat.GroupChatActivitySearchQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import com.gic.haoban.manage.service.entity.contact.TabContactFollow;
import com.gic.haoban.manage.service.pojo.bo.contact.listFollowCheckBO;
import org.apache.ibatis.annotations.Param;

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

/**
 * 跟进日志表(TabContactFollow)表数据库访问层
 *
 * @author TONGYI Lingma
 * @since 2024-09-27 16:09:38
 */
public interface TabContactFollowMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param followId 主键
     * @return 实例对象
     */
    TabContactFollow queryById(Long followId);

    /**
     * 通过实体作为筛选条件查询
     *
     * @return 对象列表
     */
    List<TabContactFollow> pageFollow(@Param("enterpriseId") String enterpriseId,
                                    @Param("search") ContactFollowSearchQDTO searchQDTO);

    List<String> listFollowCheck(@Param("enterpriseId") String enterpriseId,
                               @Param("list")List<listFollowCheckBO> list);
    /**
     * 通过memberId查询最后一次跟进记录
     * @param enterpriseId
     * @param clerkId
     * @param memberIdList
     * @return
     */
    List<TabContactFollow> lastFollowByMemberId(@Param("enterpriseId") String enterpriseId,
                         @Param("clerkId") String clerkId,
                         @Param("memberIdList")List<String> memberIdList);

    /**
     * 通过ID列表查询多条数据
     * @param followIds
     * @return
     */
    List<TabContactFollow> queryByIds(@Param("followIds") List<Long> followIds);

    /**
     * 获取时间段内跟进类型
     * @param enterpriseId
     * @param clerkId
     * @param memberId
     * @param beginTime
     * @param endTime
     * @return
     */
    String getFollowTypes(@Param("enterpriseId") String enterpriseId,
                          @Param("clerkId") String clerkId,
                          @Param("memberId") String memberId,
                          @Param("beginTime") Date beginTime,
                          @Param("endTime") Date endTime);

    /**
     * 统计总行数
     *
     * @param tabContactFollow 查询条件
     * @return 总行数
     */
    long count(TabContactFollow tabContactFollow);

    /**
     * 新增数据
     *
     * @param tabContactFollow 实例对象
     * @return 影响行数
     */
    int insert(TabContactFollow tabContactFollow);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     * @param tabContactFollowList
     * @return
     */
    int insertBatch(List<TabContactFollow> tabContactFollowList);

    /**
     * 修改数据
     *
     * @param tabContactFollow 实例对象
     * @return 影响行数
     */
    int update(TabContactFollow tabContactFollow);

    /**
     * 通过主键删除数据
     *
     * @param followId 主键
     * @return 影响行数
     */
    int deleteById(@Param("followId") Long followId);
}