package com.kiisoo.ic.store.mapper;

import com.kiisoo.ic.store.entity.StaffDO;
import com.kiisoo.ic.store.entity.StorePromotionDataDO;
import com.kiisoo.ic.store.entity.WxCusInfoRespDO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

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


/**
 * 店铺-企业微信账号-关联表  Mapper
 * @author yechenhao
 * @since 2020-04-09
 */
@Repository
public interface StorePromotionDataDOMapper {

    /**
     * 查询门店推广数据列表 区域
     * @param storeIds
     * @param regionId
     * @param startDate
     * @param endDate
     * @return
     */
    List<StorePromotionDataDO> selectPromotionDataGroupByRegion(@Param("storeIds") List<Long> storeIds,
                                                           @Param("regionId") Long regionId,
                                                           @Param("startDate") Date startDate,
                                                           @Param("endDate") Date endDate,
                                                                @Param("type") Integer type);

    /**
     * 查询总客户数量 区域
     * @param storeIds
     * @param regionId
     * @param type
     * @return
     */
    List<StorePromotionDataDO> selectSumCusNumGroupByRegion(@Param("storeIds") List<Long> storeIds,
                                                           @Param("regionId") Long regionId,
                                                            @Param("type") Integer type);

    /**
     * 查询门店推广数据列表 店铺
     * @param storeIds
     * @param storeId
     * @param regionId
     * @param startDate
     * @param endDate
     * @return
     */
    List<StorePromotionDataDO> selectPromotionDataGroupByStore(@Param("storeIds") List<Long> storeIds,
                                                           @Param("storeId") Long storeId,
                                                           @Param("regionId") Long regionId,
                                                           @Param("startDate") Date startDate,
                                                           @Param("endDate") Date endDate,
                                                               @Param("type") Integer type);

    /**
     * 查询总客户数量 店铺
     * @param storeIds
     * @param storeId
     * @param regionId
     * @return
     */
    List<StorePromotionDataDO> selectSumCusNumGroupByStore(@Param("storeIds") List<Long> storeIds,
                                                           @Param("storeId") Long storeId,
                                                           @Param("regionId") Long regionId,
                                                           @Param("type") Integer type);

    /**
     * 查询门店推广数据列表 导购
     * @param storeIds
     * @param storeId
     * @param regionId
     * @param sellerId
     * @param startDate
     * @param endDate
     * @return
     */
    List<StorePromotionDataDO> selectPromotionDataGroupBySeller(@Param("storeIds") List<Long> storeIds,
                                                           @Param("storeId") Long storeId,
                                                           @Param("regionId") Long regionId,
                                                           @Param("sellerId") Long sellerId,
                                                           @Param("startDate") Date startDate,
                                                           @Param("endDate") Date endDate,
                                                                @Param("type") Integer type);

    /**
     * 查询总客户数量 导购
     * @param storeIds
     * @param storeId
     * @param regionId
     * @param sellerId
     * @return
     */
    List<StorePromotionDataDO> selectSumCusNumGroupBySeller(@Param("storeIds") List<Long> storeIds,
                                                           @Param("storeId") Long storeId,
                                                           @Param("regionId") Long regionId,
                                                           @Param("sellerId") Long sellerId,
                                                            @Param("type") Integer type);

    /**
     * 查询所有导购的客户
     * @return storePromotionDataDO
     */
    List<StorePromotionDataDO> selectCustomer();

    /**
     * 新增门店企业微信的联系人数据到数据库
     * @param wxCusInfoRespDO
     * @return
     */
    int insertStorePromotionData(WxCusInfoRespDO wxCusInfoRespDO);

    /**
     * 查询门店企业微信的联系人数据 按区域
     * @param startDate
     * @param endDate
     * @return
     */
    List<StorePromotionDataDO> selectWxCusInfoByRegionId(@Param("startDate") Date startDate,
                                         @Param("endDate") Date endDate);

    /**
     * 查询门店企业微信的联系人数据 按店铺
     * @param startDate
     * @param endDate
     * @return
     */
    List<StorePromotionDataDO> selectWxCusInfoByStoreId(@Param("startDate") Date startDate,
                                         @Param("endDate") Date endDate);

    /**
     * 条件查询新增好友数 或总客户数
     * @param userId
     * @param storeId
     * @param startDate
     * @param endDate
     * @param type 门店导购客户关系表Type 1.有效(去重)、2.无效
     * @return
     */
    Integer selectWxSumCusNumByCondition(@Param("userId") Long userId,
                                         @Param("storeId") Long storeId,
                                         @Param("startDate") Date startDate,
                                         @Param("endDate") Date endDate,
                                         @Param("type") Integer type);

    /**
     * 查询店长的店铺id
     * @param userId
     * @return
     */
    Long selectStoreIdByUserId(@Param("userId") Long userId);

    /**
     * 店铺下所有导购好友信息
     * @param storeId
     * @param startDate
     * @param endDate
     * @return
     */
    List<StaffDO> selectWxStaffDOList(@Param("storeId") Long storeId,
                                    @Param("startDate") Date startDate,
                                    @Param("endDate") Date endDate);

    /**
     * 查询有效导购名称列表
     * @param storeId
     * @return
     */
    List<StaffDO> selectWxValidStaffNameList(@Param("storeId") Long storeId);

    /**
     * 查询店铺排名
     * @param startDate
     * @param endDate
     * @return
     */
    List<StorePromotionDataDO> selectStoreRankNo(@Param("startDate") Date startDate,
                                                 @Param("endDate") Date endDate);

    /**
     * 查询店铺排名
     * @param startDate
     * @param endDate
     * @return
     */
    List<StorePromotionDataDO> selectStaffRankNo(@Param("startDate") Date startDate,
                                                 @Param("endDate") Date endDate);
}
