package com.starry.admin.modules.clerk.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.clerk.module.entity.IPlayClerkRankingInfoQueryVo;
import com.starry.admin.modules.clerk.module.entity.IPlayClerkRankingInfoReturnVo;
import com.starry.admin.modules.clerk.module.entity.PlayClerkRankingInfoEntity;
import com.starry.admin.modules.weichat.entity.order.PlayOrderHistoryRankingReturnVo;
import com.starry.admin.modules.weichat.entity.order.PlayOrderRankingReturnVo;
import java.time.LocalDate;
import java.util.List;

/**
 * 店员排行Service接口
 *
 * @author admin
 * @since 2024-05-25
 */
public interface IPlayClerkRankingInfoService extends IService<PlayClerkRankingInfoEntity> {

    /**
     * 分页查询店员排行
     *
     * @param vo
     *            店员排行查询对象
     * @return 店员排查询对象
     */
    IPage<IPlayClerkRankingInfoReturnVo> selectByPage(IPlayClerkRankingInfoQueryVo vo);

    /**
     * 查询店员排行
     *
     * @param id
     *            店员排行主键
     * @return 店员排行
     */
    PlayClerkRankingInfoEntity selectPlayClerkRankingInfoById(String id);

    /**
     * 查询店员排行列表
     *
     * @param playClerkRankingInfo
     *            店员排行
     * @return 店员排行集合
     */
    IPage<PlayClerkRankingInfoEntity> selectPlayClerkRankingInfoByPage(PlayClerkRankingInfoEntity playClerkRankingInfo);

    /**
     * 根据统计批次更新排名数据
     *
     * @param weeklyRanking
     *            日排名还是周排名（0:每日排名;1:每周排名）
     * @param serialNumber
     *            统计批次
     * @author admin
     * @since 2024/6/12 15:47
     **/
    void updateClerkRankingInfo(String weeklyRanking, Integer serialNumber);

    /**
     * 查询当前排行榜最后一个批次值
     *
     * @param weeklyRanking
     *            日排名还是周排名（0:每日排名;1:每周排名）
     * @return Integer 当前排行榜最后一个批次值
     * @author admin
     * @since 2024/6/7 11:53
     **/
    Integer selectSerialNumber(String weeklyRanking);

    /**
     * 查询当前排行榜最大批次
     *
     * @param weeklyRanking
     *            日排名还是周排名（0:每日排名;1:每周排名）
     * @return List<com.starry.admin.modules.clerk.module.entity.PlayClerkRankingInfoEntity>
     * @author admin
     * @since 2024/6/7 11:55
     **/
    List<PlayClerkRankingInfoEntity> selectMaxSerialNumber(String weeklyRanking);

    /**
     * 根据时间查询店员排行
     *
     * @param clerkId
     *            店员ID
     * @param startTime
     *            开始时间
     * @param endTime
     *            结束时间
     * @return 店员排行集合
     */
    PlayClerkRankingInfoEntity selectByTime(String clerkId, LocalDate startTime, LocalDate endTime);

    /**
     * 店员分页查询本期排行信息
     *
     * @param clerkId
     *            店员ID
     * @return 店员排行集合
     */
    PlayOrderRankingReturnVo selectCurrentRanking(String clerkId);

    /**
     * 店员分页查询本期历史排行
     *
     * @param clerkId
     *            店员ID
     * @return 店员排行集合
     */
    List<PlayOrderHistoryRankingReturnVo> selectHistoryRanking(String clerkId);

    /**
     * 新增店员排行
     *
     * @param playClerkRankingInfo
     *            店员排行
     * @return 结果
     */
    boolean create(PlayClerkRankingInfoEntity playClerkRankingInfo);

    /**
     * 修改店员排行
     *
     * @param playClerkRankingInfo
     *            店员排行
     * @return 结果
     */
    boolean update(PlayClerkRankingInfoEntity playClerkRankingInfo);

    /**
     * 批量删除店员排行
     *
     * @param ids
     *            需要删除的店员排行主键集合
     * @return 结果
     */
    int deletePlayClerkRankingInfoByIds(String[] ids);

    /**
     * 删除店员排行信息
     *
     * @param id
     *            店员排行主键
     * @return 结果
     */
    int deletePlayClerkRankingInfoById(String id);
}
