package com.hzs.member.base.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.ext.CuMemberRegionExt;
import com.hzs.common.domain.member.region.CuMemberRegion;
import com.hzs.common.domain.system.base.BdArea;
import com.hzs.member.base.param.MemberRegionParam;
import com.hzs.member.base.vo.UnboundAreaVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 新零售会员区域配置 Mapper 接口
 */
public interface CuMemberRegionMapper extends BaseMapper<CuMemberRegion> {

    /**
     * 查询会员收益区域
     *
     * @param pkMember   会员ID
     * @param gradeValue 等级值
     * @param systemType 系统类型
     * @return
     */
    CuMemberRegionExt getRegionByMember(@Param("pkMember") Long pkMember,
                                        @Param("type") Integer type);

    /**
     * 可选择的收益区域
     *
     * @param systemType 系统类型
     * @return
     */
    List<BdArea> listChooseRegion(@Param("systemType") Integer systemType, @Param("userId") Long userId);

    /**
     * 插入收益区域
     *
     * @param retailRegion 收益区域数据
     * @return
     */
    int insertData(@Param("retailRegion") CuMemberRegion retailRegion);

    /**
     * 未绑定收益区域
     **/
    List<UnboundAreaVO> unboundAreaList(@Param("pkCountry") Integer pkCountry, @Param("systemType") Integer systemType);


    /**
     * 查询会员收益区域
     **/
    List<CuMemberRegionExt> memberretailRegList(CuMemberRegionExt mrrExt);

    /**
     * 批量修改已到期的会员收益区域
     **/
    void batchUpdateRetailRegion();

    /**
     * 重新判断收益区域数据
     *
     * @return
     */
    List<CuMemberRegionExt> listCheckRegionMember();

    /**
     * 会员购买订单数量
     *
     * @param pkMember      会员ID
     * @param systemType    系统类型
     * @param waresCodeList 商品列表
     * @return
     */
    int getOrderCount(@Param("pkMember") Long pkMember,
                      @Param("systemType") Integer systemType,
                      @Param("waresCodeList") List<String> waresCodeList);

    /**
     * 获取重复数据
     *
     * @param systemType 系统类型
     * @return
     */
    List<CuMemberRegion> listRepeatData(@Param("systemType") Integer systemType);

    /**
     * 更新非最新区域其它数据
     *
     * @param province   省
     * @param city       市
     * @param county     区
     * @param systemType 系统类型
     * @return
     */
    int updateRepeatDate(@Param("province") Integer province,
                         @Param("city") Integer city,
                         @Param("county") Integer county,
                         @Param("systemType") Integer systemType);

    int validateBindCountA(@Param("mrrExt") CuMemberRegionExt mrrExt, @Param("yesOrNoValue") Integer yesOrNoValue, @Param("systemType") Integer systemType, @Param("pkId") Long pkId);

    int validateBindCountB(@Param("mrrExt") MemberRegionParam mrrExt, @Param("yesOrNoValue") Integer yesOrNoValue, @Param("systemType") Integer systemType, @Param("pkId") Long pkId);

    Long getRegionVertexPkIdByPkMember(@Param("pkMember") Long pkMember);
}
