package com.hzs.member.empty.service;

import com.baomidou.mybatisplus.extension.service.IService;
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.EmptyMemberDetailDTO;
import com.hzs.member.empty.dto.MemberEmptyDetailDTO;
import com.hzs.member.empty.param.MemberEmptyAddParam;

import java.util.List;
import java.util.Map;

/**
 * 空单批次明细 服务类
 *
 * @author hzs
 * @since 2023-06-16
 */
public interface ICuMemberEmptyDetailService extends IService<CuMemberEmptyDetail> {

    /**
     * 添加数据
     *
     * @param param     空单添加数据
     * @param userId    当前用户
     * @param pkCountry 所属国家
     * @return
     */
    CuMemberEmptyDetailExt addData(MemberEmptyAddParam param, Long userId, Integer pkCountry);

    /**
     * 删除数据
     *
     * @param emptyDetailList 空单明细数据列表
     * @param userId          当前用户
     * @param pkCountry       所属国家
     * @return
     */
    void delData(List<CuMemberEmptyDetail> emptyDetailList, Long userId, Integer pkCountry);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * 查询空单明细数据
     *
     * @param pkMemberEmpty 空单批次ID
     * @return
     */
    List<CuMemberEmptyDetailExt> queryEmptyDetailList(Long pkMemberEmpty);

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

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

}
