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.MemberEmptyDetailDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

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

    /**
     * 查询指定数量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 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);

}
