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


import cn.com.countrygarden.bi.main.dto.wcx.WcxInnovationDto;
import cn.com.countrygarden.bi.main.dto.wcx.WcxPrizeDto;
import cn.com.countrygarden.bi.main.model.PageData;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/6/19.
 */
public interface WcxPrizeService {

    PageData selectPageList(WcxPrizeDto conditionWcxPrize);

    PageData selectPageListItem(WcxPrizeDto conditionWcxPrize);

    List<WcxPrizeDto> selectPageDataItem(WcxPrizeDto condtionWcxPrize);

    /**
     * 查询奖单明细
     * @param prizeId
     * @return
     */
    List<WcxPrizeDto> selectPageDataItem(String prizeId);

    /**
     * 获取点赞量前20% bestGetPoint20
     * @param condition
     * @return
     */
    PageData selectWillAwardPrizePageList(WcxPrizeDto condition);

    /**
     * (创意)点赞量前20% bestGetPoint20
     * @param condition
     * @return
     */
    PageData selectBestGetPoint20PageList(WcxPrizeDto condition);

    /**
     * (创意)点赞量前20% bestGetPoint20
     *
     * 通过终审最多的区域 bestPassRegion
     * 通过终审最多的项目 bestPassProject
     * 最佳点赞手(人) bestPutPoint
     * 领导跟赞(创新) bestLeaderLike
     * 最多创新奖(人) bestNumberInnovation
     **/
    int savePrizeTypeBestGetPoint20(Date startDate, Date endDate, String prizeTitle, Integer batchCode);


    /**
     * 各基础业务线点赞前三(创新) bestPutPointBaselineTop3
     * @param condition
     * @return
     */
    PageData selectBestPointBaselineTop3PageList(WcxPrizeDto condition);

    /**
     * 各基础业务线点赞前三(创新) bestPutPointBaselineTop3
     * @param startDate
     * @param endDate
     * @param prizeTitle
     * @param batchCode
     * @return
     */
    int savePrizeTypeBestPointBaselineTop3(Date startDate, Date endDate, String prizeTitle, Integer batchCode);

    /**
     * 通过终审最多的区域 bestPassRegion
     * @param condition
     * @return
     */
    PageData selectBestPassRegionPageList(WcxPrizeDto condition);

    /**
     * 通过终审最多的区域 bestPassRegion
     *
     * 最佳点赞手(人) bestPutPoint
     * 领导跟赞(创新) bestLeaderLike
     * 最多创新奖(人) bestNumberInnovation
     **/
    int savePrizeTypeBestPassProject(Date startDate, Date endDate, String prizeTitle, Integer batchCode);

    /**
     * 通过终审最多的项目 bestPassProject
     * @param condition
     * @return
     */
    PageData selectBestPassProjectPageList(WcxPrizeDto condition);

    /**
     * 通过终审最多的项目 bestPassProject
     *
     *
     * 领导跟赞(创新) bestLeaderLike
     * 最多创新奖(人) bestNumberInnovation
     **/
    int savePrizeTypeBestPassRegion(Date startDate, Date endDate, String prizeTitle, Integer batchCode);

    /**
     * 最佳点赞手(人) bestPutPoint
     * @param condition
     * @return
     */
    PageData selectBestPutPointPageList(WcxPrizeDto condition);

    /**
     * 最佳点赞手(人) bestPutPoint
     *
     *
     * 领导跟赞(创新) bestLeaderLike
     * 最多创新奖(人) bestNumberInnovation
     **/
    int savePrizeTypeBestPutPoint(Date startDate, Date endDate, String prizeTitle, Integer batchCode);

    /**
     * 领导跟赞(创新) bestLeaderLike
     * @param condition
     * @return
     */
    PageData selectBestLeaderLikePageList(WcxPrizeDto condition);

    /**
     * 领导跟赞(创新) bestLeaderLike
     *
     **/
    int savePrizeTypeBestLeaderLike(Date startDate, Date endDate, String prizeTitle, Integer batchCode);

    /**
     * 最多创新奖(人) bestNumberInnovation
     * @param condition
     * @return
     */
    PageData selectBestNumberInnovationPageList(WcxPrizeDto condition);

    /**
     * 最多创新奖(人) bestNumberInnovation
     *
     **/
    int savePrizeTypeBestNumberInnovation(Date startDate, Date endDate, String prizeTitle, Integer batchCode);

    /**
     * 导出明细
     */
    void exportItem(WcxPrizeDto condition, HttpServletRequest request, HttpServletResponse response);

    /**
     * 不同查询规则,查询待生成的奖单
     * @param condition
     * @return
     */
    PageData selectPrizeTypePageList(WcxPrizeDto condition);

    /**
     * 审核明细
     * @param prizeItemId
     * @param itemStatus
     */
    void updateItemStatus(String prizeItemId, String itemStatus);

    /**
     * 公布奖单
     * @param prizeId
     * @return
     */
    Map<String, String> openPrize(String prizeId);

    /**
     * 该条件内容是否被抽取过
     * @param startDate
     * @param endDate
     * @param prizeType
     * @return true 抽取过 false 未被抽取
     */
    String haveGet(Date startDate, Date endDate, String prizeType);

    /**
     * 通过奖单主键查询对应明细
     * @param prizeId
     * @return
     */
    PageData selectPageListItem(String prizeId, int pageIndex, int pageSize);

    /**
     * 删除抽取的明细
     * @param prizeItemId
     */
    void removeGetItem(String prizeItemId);

    /**
     * 获取最大批次号
     * @return
     */
    Integer findBatchCodeMax();

    /**
     * 导出时更新
     * @param batchCode
     * @param prizeTitle
     * @param prizeId
     */
    void updateForExport(Integer batchCode, String prizeTitle, String prizeId);

    /**
     * 批量处理明细状态
     * @param prizeItemIdsList
     */
    void updatePrizeItemStatusBatch(List<String> prizeItemIdsList, String statusType);

    /**
     * 添加额外的创新
     * @param innoDto
     */
    void saveExtraInno(WcxInnovationDto innoDto, String prizeId);

    /**
     * 移除拟定的获奖创新
     * @return
     */
    int remove();

    /**
     * 更新排名
     * @param prizeItemId
     * @param orderNo
     */
    void updateOrderNo(String prizeItemId, Integer orderNo);

    WcxPrizeDto findFirst(String prizeId);
}
