package com.hzs.member.achieve.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.achieve.CuMemberTree;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailSExt;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;

import java.util.List;

/**
 * 会员网体历史记录 服务类
 */
public interface ICuMemberTreeService extends IService<CuMemberTree> {

    /**
     * 判断是否存在临时表
     *
     * @param tableName 表名
     */
    Integer queryExistOracleTable(String tableName);

    /**
     * 创建会员网体推荐人索引
     *
     * @param tableName 日期
     */
    void createCuMemberTableUniqueIndex(String tableName);

    /**
     * 创建表的序列
     *
     * @param tableName    表名
     * @param tableNameSeq 序列名
     */
    void createCuMemberTableSequence(String tableName, String tableNameSeq);

    /**
     * 查询历史会员网体信息,查询某一天免考的会员
     *
     * @param tableName 结算表
     */
    List<CuMemberSettleExt> queryExemptCuMemberSettle(String tableName);

    /**
     * 查询会员结算表，查询出结算表中会员伞下左右区满足等级
     *
     * @param settleTableName 结算表
     * @param placeDept       部门
     * @param awardsValue     奖衔对应的值
     * @param pkMember        会员
     */
    Boolean queryCuMemberSettlePlaceUnderUmbrella(String settleTableName, Integer awardsValue, Integer placeDept, Long pkMember);

    /**
     * 查询会员结算表，查询出结算表中会员血缘关系满足等级
     *
     * @param settleTableName 结算表
     * @param pkMember        会员
     */
    Boolean queryCuMemberSettleBloodUnderUmbrella(String settleTableName, Integer awardsValue, Integer placeDept, Long pkMember);

    /**
     * 根据pkmember查询
     *
     * @param settleTableName
     * @param pkMember
     * @return
     */
    CuMemberSettleExt queryCuMemberTreeByPkMemberTable(String settleTableName, Long pkMember);

    /**
     * 查询推荐关系
     *
     * @param settleTableName
     * @param pkMember
     * @param vertexIdList    体系
     * @return
     */
    List<CuMemberRetailSExt> queryCuMemberTreeParentTable(String settleTableName, Long pkMember, List<Integer> vertexIdList);

    /**
     * 查询直推人数
     *
     * @param settleTableName
     * @param pkMember
     * @return
     */
    Long queryCuMemberTreeParentTableCount(String settleTableName, Long pkMember);

    /**
     * 查询秒结表是否有值
     *
     * @param settleTableName
     * @return
     */
    Long selectByTreeMemberCount(String settleTableName, Long pkMember);

    /**
     * 查询伞下安置新增业绩
     *
     * @param settleTableName
     * @param pkMember
     * @return
     */
    List<CuMemberSettleExt> brollyBelowResettle(String settleTableName, Long pkMember);

    /**
     * 根据pkmember查询 关联parent
     *
     * @param settleTableName
     * @param pkMember
     * @return
     */
    CuMemberRetailSExt queryCuMemberTreeByPlacePkMemberTable(String settleTableName, Long pkMember);

    /**
     * 删除日表数据
     *
     * @param tableName 表名
     */
    void truncateCuMemberTreeTable(String tableName);

    /**
     * 创建会员网体推荐人索引
     *
     * @param tableName 日期
     */
    void createCuMemberTreeDayOnlyIndex(String tableName);

    /**
     * 创建会员网体推荐人索引
     *
     * @param tableName 日期
     */
    void createCuMemberTreeParentIndex(String tableName);

    /**
     * 创建会员网体安置人索引
     *
     * @param tableName 日期
     */
    void createCuMemberTreePlaceIndex(String tableName);

}
