package cn.com.countrygarden.bi.main.dao.wcx;

import cn.com.countrygarden.bi.main.dto.wcx.WcxPrizeDto;
import cn.com.countrygarden.bi.main.model.wcx.WcxPrize;
import cn.com.countrygarden.bi.main.model.wcx.WcxPrizeItem;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;

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

/**
 * Created by Administrator on 2018/6/13.
 */
public interface WcxPrizeMapper extends Mapper<WcxPrize> {

    List<WcxPrizeDto> selectPageData(WcxPrizeDto dto);

    Long selectPageCount(WcxPrizeDto dto);

    List<WcxPrizeDto> selectPageDataItem(WcxPrizeDto dto);

    Integer selectPageCountItem(WcxPrizeDto dto);

    /**
     * 最佳点赞手
     * @param dto
     * @return
     */
    List<WcxPrizeDto> selectBestPutPointPageData(WcxPrizeDto dto);

    Integer selectBestPutPointPageCount(WcxPrizeDto dto);

    /**
     * 获取将获奖的
     * @param dto
     * @return
     */
    List<WcxPrizeDto> selectWillAwardPageData(WcxPrizeDto dto);

    /**
     *
     * @param dto
     * @return
     */
    Integer selectWillAwardPageCount(WcxPrizeDto dto);


    /**
     * 点赞量前20% bestGetPoint20
     * 各基础业务线点赞前三(创新) bestPutPointBaselineTop3
     * 通过终审最多的区域 bestPassRegion
     * 通过终审最多的项目 bestPassProject
     * 最佳点赞手(人) bestPutPoint
     * 领导跟赞(创新) bestLeaderLike
     * 最多创新奖(人) bestNumberInnovation
     **/
    // WcxPrizeDto selectBestGetPoint20(@Param("startDate") Date startDate, @Param("endDate") Date endDate);


    void insertPrize(WcxPrize wcxPrize);

    void batchInsertPrizeItems(List<WcxPrizeItem> wcxPrizeItems);

    Integer findBatchCodeMax();

    void updateItemStatus(@Param("prizeItemId") String prizeItemId, @Param("itemStatus") String itemStatus);

    long findItemNumberOfStatus(@Param("prizeId")String prizeId, @Param("status")String status);

    /**
     * 更新明细所有指定状态的为新状态
     * @param prizeId
     * @param newStatus
     */
    void updatePrizeItemStatusOfSpecifyStatus(@Param("prizeId")String prizeId, @Param("specifyStatus")String specifyStatus, @Param("newStatus")String newStatus);

    //void updatePrizeStatusAndOpenPrizeDate(@Param("prizeId")String prizeId, @Param("newStatus")String newStatus, @Param("prizeOpenDate")Date prizeOpenDate);

    /**
     * 更新总奖单为指定状态及发布时间...
     * @param wcxPrizeDto
     */
    void updatePrize(WcxPrizeDto wcxPrizeDto);

    void updatePrizeBatchCodeAndTitle(@Param("batchCode")int batchCode, @Param("prizeTitle")String prizeTitle, @Param("prizeId")String prizeId);

    /**
     * 删除抽取状态奖单
     */
    void deleteGetStatusPrize();

    /**
     * 删除抽取状态奖单明细
     */
    void deleteGetStatusPrizeItem();

    /**
     * 某时间段内奖单类型处于抽取状态
     * @param startDate
     * @param endDate
     * @param prizeType
     * @return
     */
    List<String> haveGet(@Param("startDate")Date startDate,@Param("endDate") Date endDate, @Param("prizeType")String prizeType);

    /**
     * 删除明细
     * @param prizeItemId
     */
    void deleteGetItem(String prizeItemId);

    /**
     * 将一种状态更新为新状态
     * @param prizeId
     * @param specifyStatus
     * @param newStatus
     */
    void updatePrizeStatusOfSpecifyStatus(@Param("prizeId")String prizeId, @Param("specifyStatus")String specifyStatus, @Param("newStatus")String newStatus);

    /**
     * 批量更新
     * @param prizeItemIds
     */
    void updateItemStatusBatch(@Param("prizeItemIds")List<String> prizeItemIds, @Param("status")String status);

    /**
     * 更新对应的排序号
     * @param prizeItemId
     */
    void updateOrderNo(@Param("prizeItemId")String prizeItemId, @Param("orderNo")Integer orderNo);

    WcxPrizeDto findFirstByPrimaryKey(@Param("prizeId")String prizeId);
}