package com.hzs.member.empty.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.empty.CuMemberEmptyDetail;
import com.hzs.common.domain.member.empty.ext.CuMemberEmptyDetailExt;
import com.hzs.member.empty.dto.EmptyMemberDTO;
import com.hzs.member.empty.dto.MemberEmptyDetailDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 空单批次明细 Mapper 接口
 *
 * @author hzs
 * @since 2023-06-16
 */
public interface CuMemberEmptyDetailMapper extends BaseMapper<CuMemberEmptyDetail> {

    /**
     * 批量删除非范围内数据
     *
     * @param pkMemberEmpty 空单批量ID
     * @param pkIdList      空单明细ID列表
     * @param userId        当前用户
     * @return
     */
    int deleteNotInData(@Param("pkMemberEmpty") Long pkMemberEmpty,
                        @Param("pkIdList") List<Long> pkIdList,
                        @Param("userId") Long userId);

    /**
     * 查询指定数量SEQ
     *
     * @param param 数量
     * @return
     */
    List<Long> querySeqList(@Param("param") Integer param);

    /**
     * 批量插入数据
     *
     * @param detailList 空单明细列表
     * @param userId     当前用户
     * @return
     */
    int insertBatch(@Param("detailList") List<CuMemberEmptyDetail> detailList,
                    @Param("userId") Long userId);

    /**
     * 批量更新数据
     *
     * @param detailList 空单明细列表
     * @param userId     当前用户
     * @return
     */
    int updateBatch(@Param("detailList") List<CuMemberEmptyDetail> detailList,
                    @Param("userId") Long userId);

    /**
     * 批量更新异常点位状态
     *
     * @param paramList 空单数据DTO
     * @param userId    当前用户
     * @return
     */
    int updateAbnormalBatch(@Param("paramList") List<MemberEmptyDetailDTO> paramList,
                            @Param("userId") Long userId);

    /**
     * 校验安置是否在推荐之下
     *
     * @param memberCode    用户编码
     * @param parentCode    推荐人编码
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    String checkPlaceParent(@Param("memberCode") String memberCode, @Param("parentCode") String parentCode, @Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 查询安置部门数据
     *
     * @param placeParentCode 安置编号
     * @return
     */
    List<CuMemberEmptyDetail> checkPlaceDeptRepeat(@Param("placeParentCode") String placeParentCode);

    /**
     * 手机号查询次数以及对应会员列表
     *
     * @param paramList 手机号+结算国查询列表
     * @return
     */
    List<EmptyMemberDTO> queryMemberByPhone(@Param("paramList") List<EmptyMemberDTO> paramList);

    /**
     * 校验手机号是否在安置树上存在
     *
     * @param memberCode    用户编码
     * @param phone         联系方式
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    String checkPhoneInPlaceParent(@Param("memberCode") String memberCode, @Param("phone") String phone, @Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 安置架构顶点
     *
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryPlaceParentTop(@Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 推荐架构顶点
     *
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryParentTop(@Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 安置架构顶点以及产品信息
     *
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryPlaceParentTopAndProduct(@Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 安置架构树
     *
     * @param pkId          空单批次明细ID
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryPlaceParentTree(@Param("pkId") Long pkId, @Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 推荐架构树
     *
     * @param pkId          空单批次明细ID
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryParentTree(@Param("pkId") Long pkId, @Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 安置架构树以及产品信息
     *
     * @param pkId          空单批次明细ID
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryPlaceParentTreeAndProduct(@Param("pkId") Long pkId, @Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 查询空单明细数据（带关联表名称等）
     *
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryEmptyDetailList(@Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 查询空单明细以及产品列表
     *
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryDetailAndProductList(@Param("pkMemberEmpty") Long pkMemberEmpty);

    /**
     * 查询空单明细数据
     *
     * @param detailIdList 空单明细ID列表
     * @return
     */
    List<CuMemberEmptyDetailExt> queryEmptyDetail(@Param("detailIdList") List<Long> detailIdList);

}
