package com.microservices.zone.member.mapper;

import com.microservices.zone.member.domain.ZoneMember;
import com.microservices.zone.member.domain.vo.ZoneMemberSearchVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 特色专区会员Mapper接口
 *
 * @author otto
 * @date 2023-05-16
 */
@Mapper
public interface ZoneMemberMapper {
    /**
     * 查询特色专区会员
     *
     * @param id 特色专区会员主键
     * @return 特色专区会员
     */
    public ZoneMember selectZoneMemberById(Long id);

    /**
     * 查询特色专区会员列表
     *
     * @param zoneMemberSearchVo 特色专区会员
     * @return 特色专区会员集合
     */
    public List<ZoneMember> selectZoneMemberList(ZoneMemberSearchVo zoneMemberSearchVo);

    /**
     * 新增特色专区会员
     *
     * @param zoneMember 特色专区会员
     * @return 结果
     */
    public int insertZoneMember(ZoneMember zoneMember);

    /**
     * 修改特色专区会员
     *
     * @param zoneMember 特色专区会员
     * @return 结果
     */
    public int updateZoneMember(ZoneMember zoneMember);

    /**
     * 删除特色专区会员
     *
     * @param id 特色专区会员主键
     * @return 结果
     */
    public int deleteZoneMemberById(Long id);

    /**
     * 批量删除特色专区会员
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteZoneMemberByIds(Long[] ids);

    /**
     * 根据用户Id查询专区会员,状态不为审核未通过
     *
     * @param zoneId
     * @param userId
     * @return
     */
    ZoneMember selectZoneMemberByZoneIdAndUserId(@Param("zoneId") Long zoneId, @Param("userId") Long userId);

    Integer selectZoneMemberListCount(ZoneMemberSearchVo zoneMemberSearchVo);

    int updateZoneMemberHomePageShow(@Param("id") Long id, @Param("isHomepage") String isHomepage);

    /**
     * 查询审核会员列表
     *
     * @param toZoneMemberSearchVo
     * @return
     */
    List<ZoneMember> selectAuditZoneMemberList(ZoneMemberSearchVo toZoneMemberSearchVo);

    Integer selectAuditZoneMemberCount(ZoneMemberSearchVo zoneMemberSearchVo);

    /**
     * 查询专区下最大序号
     *
     * @param zoneMember
     * @return
     */
    Integer selectMaxSortByZoneId(ZoneMember zoneMember);

    /**
     * 查询合作伙伴在专区下总数量
     *
     * @param zoneMember
     * @return
     */
    Integer selectCountByZoneId(ZoneMember zoneMember);

    /**
     * 获取指定序号的会员
     *
     * @param zoneMember
     * @param order
     * @param isContainsSelf
     * @return
     */
    ZoneMember selectZoneMemberByOrderAndZoneId(@Param("zoneMember") ZoneMember zoneMember, @Param("order") Integer order, @Param("isContainsSelf") boolean isContainsSelf);

    /**
     * 查询专区下最小排序值
     *
     * @param zoneMember
     * @return
     */
    int selectMinSortByZoneId(ZoneMember zoneMember);

    /**
     * 批量增加大于指定排序的排序值
     *
     * @param zoneMember
     * @param setSort
     * @return
     */
    Integer batchUpdateSortIncreased(@Param("zoneMember") ZoneMember zoneMember, @Param("setSort") Integer setSort);

    /**
     * 通过专区id删除专区会员
     *
     * @param zoneId
     * @return
     */
    int deleteZoneMemberByZoneId(Long zoneId);

    /**
     * 检查并获取组织下的会员列表
     *
     * @param deptId  组织Id
     * @param userIds 用户列表
     * @return 会员用户Id列表
     */
    List<Long> checkUsersIsMemberInDept(@Param("deptId") Long deptId, @Param("userIds") Long[] userIds);

    /**
     * 检查并获取用户所在组织的会员列表
     *
     * @param userId  用户Id
     * @param deptIds 组织Id列表
     * @return 会员组织Id列表
     */
    List<Long> checkUserIsMemberInDepts(@Param("userId") Long userId, @Param("deptIds") Long[] deptIds);
}
