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


import cn.com.countrygarden.bi.main.dto.wcx.WcxInnovationDto;
import cn.com.countrygarden.bi.main.model.wcx.WcxInnovation;
import org.apache.ibatis.annotations.Param;

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

public interface WcxInnovationMapper {

    List<WcxInnovationDto> selectPageData(WcxInnovationDto dto);

    Long selectPageCount(WcxInnovationDto dto);

    WcxInnovationDto selectOneDto(WcxInnovationDto condition);

    /**
     * 查询在开始时间结束时间之间创建的创新数量
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    int selectInnCountBetweenDate(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询在开始时间结束时间之间创建的创新数量
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    int findInnCountBetweenDate(@Param("startDate") Date startDate, @Param("endDate") Date endDate);


    /**
     * 查询通过点赞量排序后的创新
     *
     * @param startDate
     * @param endDate
     * @param pageSize
     * @return
     */
    List<WcxInnovationDto> selectInnOrderByThumbNum(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("pageSize") int pageSize);

    /**
     * 查询各基础业务线前三的创新
     *
     * @param startDate
     * @param endDate
     * @param baseline
     */
    List<WcxInnovationDto> selectInnTop3Number(@Param("startDate") Date startDate, @Param("endDate") Date endDate,
                                               @Param("baseline") String baseline, @Param("thumbNum") List<Integer> thumbNum);

    /**
     * 查询各基础业务线前三的点赞量(已排除获奖的创意)
     *
     * @param startDate
     * @param endDate
     * @param baseline
     * @return
     */
    List<Integer> selectInnTop3NumberThumbNum(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("baseline") String baseline);

    /**
     * 查询领导点赞的创新
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<String> findBestLeaderLikeInnIds(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询项目明细
     *
     * @param innIds
     * @return
     */
    List<WcxInnovationDto> findList(@Param("innIds") List<String> innIds);

    /**
     * 查询已抽取过的创意id
     *
     * @return
     */
    List<String> selectInnIdInPrizeItem();

    /**
     * 查询已抽取过的创意id
     *
     * @return
     */
    List<String> selectInnIdInPrizeItemOfItemStatus(String itemStatus);

    /**
     * 创意提出的最大的数量
     *
     * @param startDate
     * @param endDate
     * @return
     */
    int findBestNumberInnNumMax(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 删除创意
     *
     * @param innovationId
     */
    void deleteByPrimateKey(String innovationId);

    /**
     * 创意下是否有评论
     *
     * @param innovationId
     * @return
     */
    String haveReview(String innovationId);

    /**
     * 获取创意简易信息
     *
     * @param param
     * @return
     */
    List<WcxInnovationDto> findSimplePageData(WcxInnovationDto param);

    /**
     * 人员一段时间的创意数
     *
     * @param userId
     * @param startDate
     * @param endDate
     * @return
     */
    Integer findInnNum(@Param("userId") String userId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 大领导点赞过的创意
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<String> findInnIdsBigLeaderThumb(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 大领导点赞过的创意 排除掉 baseline =7
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<String> findInnIdsBigLeaderThumbExclude(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询通过点赞量排序后的创新,且必然包含有大领导点过赞的内容,不包含已获奖的创新
     *
     * @param startDate
     * @param endDate
     * @param pageSize
     * @return
     */
    List<WcxInnovationDto> findInnOrderByThumbNumIncludeBigLeaderThumb(@Param("startDate") Date startDate,
                                                                       @Param("endDate") Date endDate,
                                                                       @Param("pageSize") int pageSize,
                                                                       @Param("bigLeaderThumbInnIds") List<String> bigLeaderThumbInnIds);

    /**
     * 获取指定创意id的内容
     *
     * @param innIds
     * @return
     */
    List<WcxInnovationDto> findInn(@Param("startDate") Date startDate,
                                   @Param("endDate") Date endDate,
                                   @Param("innIds") List<String> innIds);

    /**
     * 获取指定创意id的内容 排除掉 baseline=7
     *
     * @param innIds
     * @return
     */
    List<WcxInnovationDto> findInnExclude(@Param("startDate") Date startDate,
                                          @Param("endDate") Date endDate,
                                          @Param("innIds") List<String> innIds);

    /**
     * 查询前百分之20
     *
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param bigLeaderThumbInnIds
     * @return
     */
    List<String> findInnIdsPercent20(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("pageSize") int pageSize, @Param("bigLeaderThumbInnIds") List<String> bigLeaderThumbInnIds);

    /**
     * 查询前百分之20  排除掉 baseline =7
     *
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param bigLeaderThumbInnIds
     * @return
     */
    List<String> findInnIdsPercent20Exclude(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("pageSize") int pageSize, @Param("bigLeaderThumbInnIds") List<String> bigLeaderThumbInnIds);

    List<String> findInnIdsByThumbNumber(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("thumbNumber") Integer thumbNumber);

    // 排除掉 baseline =7
    List<String> findInnIdsByThumbNumberExclude(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("thumbNumber") Integer thumbNumber);

    /**
     * 更新创新表id对应的基础业务线
     *
     * @param innovationId
     * @param baseline
     * @return null
     */
    void updateBaseLineById(@Param("innovationId") String innovationId, @Param("baseline") String baseline);

    /**
     * 判断创新表id是否存在
     *
     * @param innovationId
     * @param innovationId
     * @return Integer
     */
    Integer findById(@Param("innovationId") String innovationId);

    /**
     * 大于对应领导点赞次数的创意
     *
     * @param startDate     开始时间
     * @param endDate       结束时间
     * @param thumbCountMin 最少点赞次数
     * @return
     */
    List<WcxInnovationDto> findInnByThumbCountMin(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("thumbCountMin") Integer thumbCountMin);

    /**
     * 大于对应领导点赞次数的创意 排除掉 baseline 7
     *
     * @param startDate     开始时间
     * @param endDate       结束时间
     * @param thumbCountMin 最少点赞次数
     * @return
     */
    List<WcxInnovationDto> findInnByThumbCountMinExclude(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("thumbCountMin") Integer thumbCountMin);

    /**
     * 查询
     *
     * @param innoId
     * @return
     */
    WcxInnovationDto findFirstDto(String innoId);

    int insertOne(WcxInnovation wcxInnovation);

    /**
     * 审核
     * @param wcxInnovationDto
     * @return
     */
    int examine(WcxInnovationDto wcxInnovationDto);

    /**
     * 审核状态
     * @param innovationId
     * @return
     */
    int examineStatus(@Param("innovationId") String innovationId);

    /**
     * 获取用户code
     * @param roleCode
     * @return
     */
    List<String> getUserCode(@Param("roleCode") String roleCode);

    /**
     * 获取用户名list
     * @param userCodeList
     * @return
     */
    List<String> getUserName(@Param("userCodeList") List<String> userCodeList);

    /**
     * 跟新状态
     * @param name
     * @param innovationId
     */
    void updateExamine(@Param("name")String name,@Param("innovationId") String innovationId);

    //是否置顶
    int updateTop(@Param("wcxIonDto")WcxInnovationDto wcxIonDto);

    //是否推荐
    int updateRecomm(@Param("wcxIonDto")WcxInnovationDto wcxIonDto);

    List<WcxInnovationDto> selectPageDataNot(WcxInnovationDto param);

    int addExcellent(@Param("wcxIonDto") WcxInnovationDto wcxIonDto);

    List<String> selectIdList(WcxInnovationDto dto);

    List<String> selectIdListAudit(WcxInnovationDto dto);

    WcxInnovationDto selectgetOne(WcxInnovationDto condition);

    List<WcxInnovationDto> selectPageDataNofen(WcxInnovationDto dto);

    List<WcxInnovationDto> selectPageDataNofenShenhe(WcxInnovationDto dto);
}
