package com.hzs.system.base.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.system.base.BdNotice;
import com.hzs.common.domain.system.ext.BdNoticeExt;
import com.hzs.system.base.vo.BdNoticeVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 公告表 Mapper 接口
 * </p>
 *
 * @author hzs
 * @since 2022-08-09
 */
public interface BdNoticeMapper extends BaseMapper<BdNotice> {

    /**
     * 查询前台公告列表信息
     *
     * @param noticeVO 入参
     * @return List<BdNotice>
     */
    List<BdNotice> getMemberNotice(BdNoticeVO noticeVO);


    /**
     * 查询后台公告列表信息
     *
     * @param noticeVO 入参
     * @return List<BdNotice>
     */
    List<BdNotice> getAdminNotice(BdNoticeVO noticeVO);


    /**
     * 后台首页显示
     *
     * @param noticeVO 参数
     * @return List<BdNotice>
     */
    List<BdNotice> getAdminIndexNotice(BdNoticeVO noticeVO);

    /**
     * 根据 ID删除公告信息
     *
     * @param notice 参数
     * @return Boolean
     */
    Integer deleteNoticeById(BdNotice notice);


    /**
     * 会员首页显示公告
     *
     * @param noticeVO 参数
     * @return List<BdNoticeVO>
     */
    List<BdNoticeExt> showIndexNotice(BdNoticeVO noticeVO);

    /**
     * 会员首页站内信
     *
     * @param noticeVO 参数
     * @return List<BdNoticeVO>
     */
    List<BdNoticeExt> showIndexMailNotice(BdNoticeVO noticeVO);


    /**
     * 会员端弹窗显示
     *
     * @param noticeVO 参数
     * @return List<BdNoticeVO>
     */
    List<BdNotice> showIndexPopScreen(BdNoticeVO noticeVO);


    /**
     * 会员首页公告、站内信总条数
     *
     * @param noticeVO 参数
     * @return Integer
     */
    Integer showIndexNoticeCount(BdNoticeVO noticeVO);


    /**
     * 会员首页站内信的未读条数
     *
     * @param noticeVO 参数
     * @return Integer
     */
    Integer showIndexMailCount(BdNoticeVO noticeVO);

    /**
     * 根据批次更新公告信息
     *
     * @param notice 公告信息
     * @return Integer
     */
    Integer updateNoticeByBatch(BdNotice notice);

    /**
     * 后台公告显示
     *
     * @param pkCountry 国家ID
     * @return List<BdNoticeExt>
     */
    List<BdNoticeExt> selectAdminNotice(@Param("pkCountry") Integer pkCountry);


    /**
     * 后台根据角色弹窗显示
     *
     * @param noticeVO 参数
     * @return List<BdNoticeVO>
     */
    List<BdNotice> selectAdminNoticeByRole(BdNoticeVO noticeVO);

    /**
     * 根据ID查询上条记录ID
     *
     * @param pkId 主键ID
     * @return Long
     */
    BdNotice selectUpRecordId(@Param("pkId") Long pkId, @Param("pkCountry") Integer pkCountry);

    /**
     * 根据ID查询下条记录ID
     *
     * @param pkId 主键ID
     * @return Long
     */
    BdNotice selectDownRecordId(@Param("pkId") Long pkId, @Param("pkCountry") Integer pkCountry);

    /**
     * 更新排序
     *
     * @param notice 参数
     * @return Integer
     */
    Integer updateNoticeSortById(BdNotice notice);


    /**
     * 更新置顶
     *
     * @param notice 参数
     * @return Integer
     */
    Integer updateNoticeTopById(BdNotice notice);

    /**
     * 查询最大置顶ID
     *
     * @return Long
     */
    Long selectMaxId();

    /**
     * 查询未置顶前台公告的最大排序值
     *
     * @param pkCountry 国家ID
     * @return Long
     */
    Long selectMaxSort(Integer pkCountry);

    /**
     * 查询会员站内信
     *
     * @param pkMember
     * @param pkCountry
     * @return
     */
    List<BdNoticeExt> selectMemberMail(@Param("pkMember") Long pkMember, @Param("pkCountry") Integer pkCountry);

    /**
     * 新零售首页列表
     *
     * @param pkAwards  会员奖衔
     * @param pkCountry 所属国家
     * @return
     */
    List<BdNotice> listRetailData(@Param("pkAwards") Integer pkAwards,
                                  @Param("pkCountry") Integer pkCountry,
                                  @Param("systemType") Integer systemType
    );

    /**
     * 新零售首页弹窗
     *
     * @param pkAwards  会员奖衔
     * @param pkCountry 所属国家
     * @return
     */
    BdNotice getRetailLast(@Param("pkAwards") Integer pkAwards,
                           @Param("pkCountry") Integer pkCountry,
                           @Param("systemType") Integer systemType
    );

}
