package com.hzs.member.base.service;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.member.base.param.UpdatePlaceParentPetitionParam;
import com.hzs.member.base.dto.ShowWaresDTO;
import com.hzs.member.base.dto.ZeroElementRevokeDTO;
import com.hzs.member.base.param.*;
import com.hzs.member.base.vo.*;
import com.hzs.member.census.param.CensusSummaryParam;
import com.hzs.member.census.vo.CensusSummaryVo;
import com.hzs.member.handlebusiness.dto.AnalysisBusinessAppealParam;
import com.hzs.member.handlebusiness.vo.BusinessMemberVO;
import com.hzs.member.handlebusiness.vo.HandleBusinessVO;
import com.hzs.member.marketnews.param.MarketNewsParam;
import com.hzs.member.marketnews.vo.UserInvestmentVo;
import com.hzs.system.sys.dto.ApprovalBusinessResultDTO;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 会员 服务类
 */
public interface ICuMemberService extends IService<CuMember> {

    /**
     * 保存会员信息
     *
     * @param cuMember 会员信息
     */
    Boolean saveMember(CuMember cuMember);

    /*
     * @description: 查询网体是否存在推荐人
     **/
    Integer queryCuMemberByPkMember(Long pkReference);

    /**
     * 根据会员编号获取会员信息（查库）
     *
     * @param memberCode
     * @return
     */
    CuMemberExt getMemberByCode(String memberCode);

    /**
     * 根据会员ID获取会员信息（查库）
     *
     * @param memberId
     * @return
     */
    CuMemberExt getMemberById(Long memberId);

    /**
     * 前台查询会员的方法，通过传输不同的参数，查询不同的会员
     *
     * @param cuMember 会员编号的值
     */
    List<CuMemberExt> getMemberInfoByCondition(CuMember cuMember);

    /*
     * @description: 根据条件查询会员信息，查询单表
     **/
    List<CuMemberExt> queryMemberByCondition(CuMember cuMember);

    /**
     * 获取会员缓存
     *
     * @param memberCode 会员编号的值
     * @return CuMember
     */
    CuMember getMember(String memberCode);

    /**
     * 获取会员缓存
     *
     * @param pkId 会员的主键
     * @return CuMember
     */
    CuMember getMember(Long pkId);

    /*
     * @description: 查询会员
     **/
    CuMember queryMember(String memberCode);

    /*
     * @description: 查询会员
     **/
    CuMember queryMember(Long pkMember);

    /**
     * 查询会员（无删除标记）
     *
     * @param memberCode 会员编号
     * @param pkMember   会员主键
     * @return
     */
    CuMember queryMemberNotFlag(String memberCode, Long pkMember);

    /**
     * 校验会员下的安置人、推荐人是否存在
     *
     * @param pkMember 会员ID
     * @return 存在返回 true
     */
    boolean checkLowerMember(Long pkMember);

    /**
     * 查找安置人伞上
     *
     * @param memberId 安置人，编号
     */
    List<CuMemberExt> queryPlaceSponsorOnUmbrella(Long memberId);

    /**
     * 查找安置人伞上
     *
     * @param memberId 安置人，编号
     */
    List<CuMemberExt> queryPlaceSponsorOnUmbrella(Long memberId, String memberCode, String phone);

    /**
     * 查找安置人伞上会员信息
     *
     * @param memberId 编号、安置人
     */
    List<CuMemberExt> querySponsorOnUmbrella(Long memberId, List<String> memberCodeList);

    /**
     * 查找安置人伞下
     *
     * @param memberId 会员编号
     */
    List<CuMemberExt> selectPlaceSponsorUnderUmbrellaByCondition(Long memberId, List<CuMemberExt> cuMemberExtList);

    /**
     * 查找安置人伞下
     *
     * @param memberId 安置人，编号
     */
    List<CuMemberExt> queryPlaceSponsorUnderUmbrella(Long memberId, String... placeParent);

    /**
     * 查询最末安置人
     * 根据会员编号，查找该会员编号极左极下的那个人
     *
     * @param memberId  会员编号
     * @param placeDept 1代表左区极左极下，2代表右区极左极下
     */
    CuMemberExt queryPlaceSponsorLastLeft(Long memberId, Integer placeDept);

    /**
     * 查找血缘伞上，推荐人
     *
     * @param memberId 推荐人编号
     */
    List<CuMemberExt> queryBloodKinshipOnUmbrella(Long memberId);

    /**
     * 查找血缘伞下，推荐人
     *
     * @param memberId 推荐人编号
     */
    List<CuMemberExt> queryBloodKinshipUnderUmbrella(Long memberId);

    /**
     * 生成会员编号（根据结算地区前缀）
     *
     * @param cuMember 会员
     * @param isHaiFun 是否嗨粉
     */
    CuMember createMemberIdAndCode(CuMember cuMember, Boolean isHaiFun);

    /**
     * 创建注册会员编号（放入会员编号批次占用）
     *
     * @param cuMember 会员信息
     * @return
     */
    CuMember createRegisterMemberCode(CuMember cuMember);

    /**
     * 查询会员信息，根据条件
     *
     * @param memberParam 参数
     */
    List<CuMemberVO> queryCuMemberByCondition(CuMemberVO memberParam);

    /*
     * @description: 查询会员信息，根据条件
     **/
    List<CuMemberVO> queryCuMemberByMemberList(List<CuMemberVO> cuMemberVOList, CuMemberVO memberParam);

    List<CuMemberVO> queryCuMemberByMemberListExcel(CuMemberVO memberParam);

    /**
     * @description: 查询真实信息
     **/
    List<CuMemberVO> realCuMemberByCondition(CuMemberVO memberParam);

    /**
     * 生成会员编号
     *
     * @param pkCountry 所属国家
     * @param isHaiFun
     * @param digit     编号数字位数
     * @return
     */
    String createUserNameByPremix(Integer pkCountry, Boolean isHaiFun, Integer digit);

    /**
     * 批量生成会员编号
     *
     * @param pkCountry 所属国家
     * @param isHaiFun  是否嗨粉
     * @param quantity  生成数量
     * @return
     */
    List<String> createUserCodeBatch(Integer pkCountry, Boolean isHaiFun, Integer quantity);

    /**
     * 根据国家、会员编号查询会员信息
     *
     * @param memberCodes 会员编号
     * @param pkCountry   国家ID
     * @return List<CuMember>
     */
    List<CuMember> findMemberByMembercodesAndPkcountry(List<String> memberCodes, Integer pkCountry);


    /**
     * 根据会员编号查询会员信息（数量超过1000）
     *
     * @param memberCodeList 会员编号
     * @param pkCountry      国家ID
     * @return List<CuMember>
     */
    List<CuMember> findMemberByMemberCodeList(List<String> memberCodeList, Integer pkCountry);

    /**
     * 根据会员ID列表查询会员
     *
     * @param pkMemberList 会员ID列表 -- 必传
     * @param pkCountry    国家ID -- 非必传
     * @return
     */
    List<CuMemberExt> findMemberByMemberId(List<Long> pkMemberList, Integer pkCountry);

    /**
     * 创建空单注册会员
     *
     * @param member
     * @return
     */
    CuMember createEmptyOrderMember(CuMemberExt member);

    /**
     * @description: 特殊业务-修改会员编号列表
     **/
    List<UpdateCodeVO> puCodeList(UpdateCodeVO updateCodeVO);

    /**
     * @description: 查询会员有效期休止期
     **/
    List<UpdateExpireStopVO> getMemberExpireStopList(UpdateExpireStopVO updateExpireStopVO);

    /**
     * @description: 零元撤单签呈列表
     **/
    List<ZeroElementRevokeDTO> zeroByBusinessList(AnalysisBusinessAppealParam analysisBusinessAppealParam);

    /**
     * @description: 查询会员变更前信息
     **/
    UpdateCodeVO specialBusinessQuery(UpdateCodeVO updateCodeVO);

    /**
     * 修改安置信息
     *
     * @param placeParentParam
     */
    String updatePlaceParent(PlaceParentParam placeParentParam);

    /**
     * 修改直推
     *
     * @param parentParam
     */
    String updateParent(ParentParam parentParam);

    /**
     * @description: 批量修改会员编号
     **/
    UpdateCodeVO updateCode(UpdateCodeVO updateCodeVO);

    /**
     * @description: 修改会员续约发起签呈
     **/
    UpdateExpireStopVO upExpireStop(UpdateExpireStopVO upESVO);

    /**
     * @description: 修改会员续约-审核通过驳回
     **/
    boolean upExpireStopProcess(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * @description: 发起签呈-修改会员编号
     **/
    UpdateCodeVO petition(UpdateCodeVO updateCodeVO);

    /**
     * @description: 审核通过根据业务单号，业务类型批量修改业务数据
     **/
    boolean updateCodeByBusinessNo(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * @description: 政策币签呈审核
     **/
    boolean upPolicyCurrencyProcess(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * @description:删除政策币业务审核
     **/
    boolean delPolicyCurrencyProcess(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * @description: 审核驳回 根据业务单号，业务类型批量修改业务数据
     **/
    boolean updateCodeReject(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * @description: 真实奖衔控制-通过或驳回
     **/
    boolean awardsControlPetition(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * 查询会员个人资料
     *
     * @param memberId
     * @return
     */
    MemberDataVO queryMemberData(Long memberId);

    /**
     * 批理更新会员姓名、手机号
     *
     * @param businessMemberList 会员办理业务
     * @param businessType       业务类型
     * @param updatePkMember     更新人
     * @return Boolean
     */
    Boolean batchUpdateMemberNameAndMobileByPkmember(List<BusinessMemberVO> businessMemberList, int businessType, Long updatePkMember);

    /**
     * 根据业务类型批量理新
     *
     * @param handleBusinessVO 业务办理信息
     * @return Integer
     */
    Integer batchUpdateMemberByBusinessType(HandleBusinessVO handleBusinessVO);

    /**
     * @description: 招商列表
     **/
    List<UserInvestmentVo> selectBiddingList(MarketNewsParam marketNewsParam);

    /**
     * @description:
     **/
    List<UpdateSettleCountryVO> upsettleCountryList(UpdateSettleCountryVO upseCountryVO);

    /**
     * @description:查询修改政策币列表
     **/
    List<UpPolicyCurrencyVO> upPolicyCurrencyList(UpPolicyCurrencyVO upVO);

    /**
     * @description: 特殊业务-修改结算国
     **/
    UpdateSettleCountryVO updateSettleCountry(UpdateSettleCountryVO upseCountryVO);

    /**
     * @description: 特殊业务-修改政策币
     **/
    UpPolicyCurrencyVO upPolicyCurrency(UpPolicyCurrencyVO policyCurrencyVO);

    /**
     * @description: 特殊业务-删除政策币业务
     **/
    UpPolicyCurrencyVO delPolicyCurrency(UpPolicyCurrencyVO policyCurrencyVO);

    /**
     * @description: 发起签呈-修改结算国
     **/
    UpdateSettleCountryVO petition(UpdateSettleCountryVO upseCountryVO);

    /**
     * @description: 发起签呈-修改政策币发起签呈
     **/
    UpPolicyCurrencyVO petition(UpPolicyCurrencyVO policyCurrencyVO);

    /**
     * @description: 零元撤单审核-审核通过、驳回
     **/
    boolean zeroByBusinessNo(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * 后台设置推荐上下级
     *
     * @param memberSettleExtList 列表
     * @param memberSettleExt     顶点
     * @param settleTableName     查询表名
     * @param isMemberSecord      是否是当天秒结表
     * @return
     */
    List<Tree<String>> systemTjSetListTree(List<CuMemberSettleExt> memberSettleExtList, CuMemberSettleExt memberSettleExt, String settleTableName, Boolean isMemberSecord);

    /**
     * @description: 特殊业务-修改结算国-审核通过
     **/
    boolean updateSettleCountryAdopt(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * @description: 特殊业务-修改结算国-审核驳回
     **/
    boolean updateSettleCountryReject(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * @description: 校验会员是否有充值审核
     **/
    Integer checkCecharge(Long pkMember);

    /**
     * @description: 校验会员是否有提现审核
     **/
    Integer checkWithdraw(Long pkMember);

    /**
     * @description: 校验会员所有账户是否有余额
     **/
    Integer checkAccount(Long pkMember);

    /**
     * @description: 查询会员是否存在未完成基础业务办理
     **/
    Integer checkmsLogCount(Long pkMember, Integer editType);

    /**
     * @description: 查询会员是否存在未完成注水业绩业务
     **/
    Integer checkMemberAchieveCount(Long pkMember);

    /**
     * 查询汇总
     *
     * @param censusSummaryParam 表格名称
     * @return
     */
    List<CensusSummaryVo> selectCensusSummary(CensusSummaryParam censusSummaryParam, List<String> days);

    /**
     * 后台安置列表
     *
     * @param list
     * @param memberSettleExt
     * @return
     */
    List<Tree<String>> systemAzSetListTree(List<CuMemberSettleExt> list, CuMemberSettleExt memberSettleExt);

    /**
     * 安置架构五
     *
     * @param list
     * @param memberSettleExt
     * @return
     */
    List<Tree<String>> systemAzSetListTreeFive(List<CuMemberSettleExt> list, CuMemberSettleExt memberSettleExt);

    /**
     * @description: 获取等级的翻译KEY值
     **/
    Integer getGradeTranslateValue(Integer pkId);

    /**
     * @description: 获取奖衔的翻译KEY值
     **/
    Integer getAwardsTranslateValue(Integer pkCountry, Integer pkId);

    /**
     * 取消用户（取消注册相关订单，同步取消用户）
     *
     * @param pkMember
     * @return
     */
    boolean cancelMember(Long pkMember);

    /**
     * 查询选择会员列表
     *
     * @param param     查询参数
     * @param pkCountry 会员结算国
     * @return
     */
    List<CuMemberExt> queryMemberSelect(MemberSelectParam param, Integer pkCountry);

    /**
     * 删除会员信息
     *
     * @param pkMember        会员主键
     * @param pkApprove       审核人
     * @param currentDateTime 时间
     */
    void deleteCuMemberByPkMember(Long pkMember, Long pkApprove, Date currentDateTime);

    /**
     * 户籍变更
     *
     * @param pkMember   会员主键
     * @param memberName 会员姓名
     * @param phone      联系方式
     * @param pkModified 修改人
     * @return boolean
     */
    boolean updateMemberNameAndPhone(Long pkMember, String memberName, String phone, Long pkModified);

    /*
     * description: 查询历史网体的最末安置人，左右区一起查出来
     **/
    List<CuMemberExt> queryCuMemberLastPlaceParent(Long pkMember);

    /**
     * 查询会员真实信息
     *
     * @return
     */
    List<MemberRealInfoVO> selectByMemberRealInfo(MemberRealInfoParam memberRealInfoParam);

    /**
     * 查询注册列表
     *
     * @param marketNewsParam
     * @return
     */
    List<UserInvestmentVo> selectRegList(MarketNewsParam marketNewsParam);


    /**
     * 根据国家、会员编号查询未支付的会员信息
     *
     * @param memberCodes 会员编号
     * @param pkCountry   国家ID
     * @return List<CuMember>
     */
    List<String> findNoPayMember(List<String> memberCodes, Integer pkCountry);

    /**
     * 查询推荐列表
     *
     * @param pkParent        会员推荐主键
     * @param memberCode      会员编号
     * @param memberName      会员名称
     * @param startCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @param memberInfo      会员信息
     * @return
     */
    List<ParentMemberVo> parentList(Long pkParent, String memberCode, String memberName, Date startCreateTime, Date endCreateTime, String memberInfo);

    /**
     * 校验是否血缘关系
     *
     * @param topCode  顶点编号
     * @param pkMember 当前会员
     * @return
     */
    int checkParent(String topCode, Long pkMember);

    /**
     * 查询会员是否在血缘下
     *
     * @param topCodeList 顶点编号列表
     * @param userId      当前会员
     * @return
     */
    CuMemberExt checkMemberByParentList(List<String> topCodeList, Long userId);

    /**
     * 校验会员编号是否存在
     *
     * @param codeList           会员编号列表
     * @param checkEmpty         是否需要校验批量空单数据
     * @param excludeMemberEmpty 排除的批次
     * @return
     */
    Map<String, Integer> checkMemberCodeExist(Collection<String> codeList, Boolean checkEmpty, Long excludeMemberEmpty);

    /**
     * 查询全部用户
     *
     * @return
     */
    List<CuMemberExt> findAll();

    /**
     * 根据用户编号、用户用户名查询用户信息
     *
     * @param memberCode 用户编号
     * @param memberName 用户名
     * @param pkCountry  国家ID
     * @return List<CuMemberExt>
     */
    List<CuMemberExt> selectMemberByMemberCode(String memberCode, String memberName, Integer pkCountry);

    /**
     * 查询左右区人数统计 安置
     *
     * @param pkMember
     * @param placeDept
     * @return
     */
    Long selectByDeptNumberCount(Long pkMember, Integer placeDept);

    /**
     * 校验商品团队信息是否可见
     *
     * @param showWaresDTOS
     * @return
     */
    Map<Integer, Boolean> checkIsShowWares(List<ShowWaresDTO> showWaresDTOS);

    /**
     * 查询编号是否在登录用户伞下
     *
     * @param pkMember
     * @param memberCode
     * @return
     */
    Long checkPlaceSponsorUnderUmbrella(Long pkMember, String memberCode);

    /**
     * 校验是否安置关系（从下往上找）
     *
     * @param topCode  顶点编号
     * @param pkMember 当前会员
     * @return
     */
    int checkPlaceParent(String topCode, Long pkMember);

    /**
     * 查询最末安置人（根据会员编号）
     *
     * @param memberCode 会员编号
     * @param placeDept  安置部门
     * @return
     */
    CuMemberExt queryLastPlaceByMemberCode(String memberCode, Integer placeDept);

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

    /**
     * 根据会员编号批量查询会员信息
     *
     * @param memberCodeList 需要查询的会员编号
     * @return
     */
    List<CuMember> queryMemberListByCode(Collection<String> memberCodeList);

    /**
     * 批量保存会员信息
     *
     * @param memberList 会员列表
     * @return
     */
    int insertBatchCuMember(List<CuMember> memberList);

    /**
     * 修改直推审批
     *
     * @param updateParentPetitionParam
     */
    UpdateParentPetitionParam petitionUpdateParent(UpdateParentPetitionParam updateParentPetitionParam);

    /**
     * 修改安置审批
     *
     * @param updatePlaceParentPetitionParam
     */
    UpdatePlaceParentPetitionParam petitionUpdatePlaceParent(UpdatePlaceParentPetitionParam updatePlaceParentPetitionParam);

    /**
     * 修改直推 通过
     *
     * @param approvalBusinessResultDTO
     */
    void updateParentByBusinessNo(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * 修改直推驳回
     *
     * @param approvalBusinessResultDTO
     */
    void updateParentByBusinessNoReject(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /*
     * @description: 查询会员左右区人数
     **/
    List<CuMember> queryMemberLeftRightCount(Long pkMember);

    /**
     * 修改安置通过
     *
     * @param approvalBusinessResultDTO
     */
    void updatePlaceParentByBusinessNo(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * 修改安置驳回
     *
     * @param approvalBusinessResultDTO
     */
    void updatePlaceParentByBusinessNoReject(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * 查询海粉订单
     *
     * @param orderCode 订单编号
     * @return
     */
    CuMemberExt queryFansOrder(String orderCode);

    /**
     * 查询注册订单信息
     *
     * @param orderCode 订单编号
     * @param pkMember  会员编号
     * @return
     */
    CuMemberExt queryRegisterOrder(String orderCode, Long pkMember);

    /**
     * 更新会员的认证状态
     *
     * @param pkMembers      会员IDs
     * @param updatePkMember 更新人
     * @param type           类型
     * @return Boolean
     */
    Boolean updateMemberStatusByPkIds(List<Long> pkMembers, Long updatePkMember, Integer type);

    /**
     * 查询安置位置错误
     *
     * @return List<CuMemberExt>
     */
    List<CuMemberExt> selectPlaceErrorCode();

    /*
     * @description: 查询伞下会员
     **/
    Boolean queryCuMemberUnderUmbrella(Long pkMember);

    /**
     * 校验新安置部门和安置编号下是否已存在节点
     *
     * @param placeDeptMemberCode
     * @param placeDept
     * @return
     */
    Long checkPlaceDeptAndMemberCode(String placeDeptMemberCode, Integer placeDept);

    /**
     * 校验会员体系伞下
     *
     * @param vertexIdList
     * @param memberCode
     * @return
     */
    List<CuMemberExt> checkMemberVertex(List<Integer> vertexIdList, String memberCode);

    /**
     * 校验修改直推 推荐编号不能是自己本身
     *
     * @param pkMember
     * @param memberCode
     * @return
     */
    Long checkMemberParent(Long pkMember, String memberCode);

    /**
     * 更新会员的修改次数
     *
     * @param pkMemberList ID列表
     * @return Integer
     */
    Integer updateMemberEditNumber(List<Long> pkMemberList, Long updatePkMember);

    /**
     * 查询会员安置伞上
     *
     * @param pkMember
     * @param editNewPlaceMemberCode
     * @return
     */
    List<CuMember> checkMemberPlaceParent(Long pkMember, String editNewPlaceMemberCode);

    /**
     * @param pkMember               推荐人
     * @param editNewPlaceMemberCode 安置后会员编号
     * @return
     */
    Long checkPlaceMemberList(Long pkMember, String editNewPlaceMemberCode);

    /**
     * 查询安置会员列表
     *
     * @param memberCode 会员编号
     * @param pkCountry  所属国家
     * @return
     */
    List<CuMemberExt> queryPlaceMemberList(String memberCode, Integer pkCountry);

    /**
     * 查询血缘上所属体系
     *
     * @param pkMember 会员ID
     * @return
     */
    CuMemberExt queryParentVertex(Long pkMember);

    /**
     * 提前三个月 把服务协议有效期续期一年
     */
    Integer updateMemberExpireDate();

    /**
     * 用户消费统计
     *
     * @return
     */
    List<MemberConsumptionStatVo> getMemberConsumptionStat(MemberConsumptionStatParam memberConsumptionStatParam);

    /**
     * @description: 查询表是否存在
     **/
    Integer selectExistTable(String tableName);

    /**
     * 查询同姓名、同手机号，奖衔最高的人
     *
     * @param memberName 会员姓名
     * @param phone      手机号
     * @param pkCountry  所属国家
     * @return
     */
    CuMemberExt querySameMemberByAwards(String memberName, String phone, Integer pkCountry);

    /**
     * 重置【有效期】【休止期】
     *
     * @param memberName 会员姓名
     * @param phone      联系方式
     * @param expireDate 有效期
     * @param stopDate   休止期
     * @param pkCountry  所属国家
     * @return
     */
    int resetExpireAndStopDate(String memberName, String phone, Date expireDate, Date stopDate, Integer pkCountry);

    /**
     * 批量更新【有效期】【休止期】
     * 同姓名、同手机号只更新比自己有效期早的
     *
     * @param pkMember   会员ID
     * @param memberName 会员姓名
     * @param phone      联系方式
     * @param expireDate 有效期
     * @param stopMonth  休止月份（6或12）
     * @param pkCountry  所属国家
     * @return
     */
    int updateExpireAndStopDate(Long pkMember, String memberName, String phone, Date expireDate, Integer stopMonth, Integer pkCountry);

    /**
     * 批量更新【休止期】
     *
     * @param pkMember   会员ID
     * @param memberName 会员姓名
     * @param phone      联系方式
     * @param stopMonth  休止月份（6或12）
     * @param pkCountry  所属国家
     * @return
     */
    int updateStopDate(Long pkMember, String memberName, String phone, Integer stopMonth, Integer pkCountry);

    /**
     * 变更户籍更新【有效期】【休止期】
     *
     * @param pkMember   会员ID
     * @param memberName 会员姓名
     * @param phone      联系方式
     * @param stopMonth  休止月份（6或12）
     * @param pkCountry  所属国家
     * @return
     */
    int updateExpireAndStopDateByChange(Long pkMember, String memberName, String phone, Integer stopMonth, Integer pkCountry);

    /**
     * 更新有效状态
     *
     * @param pkMember   会员ID
     * @param memberName 会员姓名
     * @param phone      联系方式
     * @param pkCountry  所属国家
     * @return
     */
    int updateExpireStatus(Long pkMember, String memberName, String phone, Integer pkCountry);

    /**
     * 批量更新会员休止期时间
     *
     * @param pkCountry 所属国家
     * @return
     */
    int flushStopDateBatch(Integer pkCountry);

    /**
     * 批量刷新会员【休止期】状态
     *
     * @param pkCountry 所属国家
     * @return
     */
    int flushExpireStatusBatch(Integer pkCountry);

    /**
     * 批量刷新会员【已终止】状态
     *
     * @param pkCountry
     * @return
     */
    int flushStopStatusBatch(Integer pkCountry);

    /**
     * 查询菜单用户
     *
     * @param pkMember
     * @return
     */
    CuMemberExt getMenuMember(Long pkMember);

    /**
     * 查询会员服务编号列表
     *
     * @param memberServiceCodeParam
     * @return
     */
    List<MemberServiceCodeVo> queryMemberServiceCodeList(MemberServiceCodeParam memberServiceCodeParam);

    /**
     * 根据会员编号置空服务编号
     *
     * @param memberCode
     */
    void updateMemberCodeByServiceCodeBlack(String memberCode);

    /**
     * 查询最大服务编码
     *
     * @param pkCountry
     * @return
     */
    String getMaxServiceCode(Integer pkCountry);

    /**
     * 根据会员编号获取推荐人信息
     *
     * @param memberCode 会员编号
     * @return
     */
    CuMember getParentMember(String memberCode);

    /**
     * 查询同姓名同手机号指定等级会员数量
     *
     * @param memberName 会员姓名
     * @param phone      手机号码
     * @param pkGrade    结算等级
     * @param pkCountry  所属国家
     * @return
     */
    int countGradeMemberPoint(String memberName, String phone, Integer pkGrade, Integer pkCountry);

}
