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.MemberEmptyDetailDTO;
import com.hzs.member.empty.param.MemberEmptyAddParam;

import java.util.List;

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

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

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

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

}
