package cn.iocoder.yudao.module.member.service.user;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberCardChangeRecordDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberCardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberCardIssuanceRecordDO;

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

/**
 * 会员卡 Service 接口
 *
 * @author 系统管理员
 */
public interface MemberCardService {


    List<MemberCardDO> getMemberCardByMemberUserId(Long memberUserId);

    void update(MemberCardDO memberCardDO);

    void recharge(MemberCardRechargeSaveVO saveVO);

    void issuanceCard(MemberCardDO memberCardDO);

    void reissueCard(MemberCardIssuanceRecordDO reissueRecordDO);

    void freezeOrThawCard(MemberCardDO updateVo);

    void refund(MemberCardChangeRecordDO memberCardChangeRecordDO);

    PageResult<MemberCardChangeRecordDO> getMemberCardConsumptionRecordPage(MemberCardChangePageReqVO pageReqVO);

    PageResult<MemberCardIssuanceRecordDO> getMemberCardChangeRecordPage(MemberCardIssuancePageReqVO pageReqVO);

    Long selectMemberCardCount(Long memberUserId);

    List<MemberCardDO> getEmployeeMemberCardList();


    void batchRecharge(MemberCardBatchRechargeSaveVO batchRechargeSaveVO);

    PageResult<MemberCardPageRespVO> getCardPage(MemberCardPageReqVO pageReqVO);

    MemberCardRespVO getCardDetail(Long memberCardId);

    PageResult<MemberCardIssuanceRecordDO> statisticsMemberCardIssuanceRecordPage(MemberCardIssuancePageReqVO pageReqVO);

    PageResult<MemberCardChangeRecordDO> statisticsMemberCardConsumptionRecordPage(MemberCardChangePageReqVO pageReqVO);

    Map<String, Object> statisticsRechargeAmount(MemberCardChangePageReqVO pageReqVO);

    PageResult<MemberCardStatisticReportVO> getMemberCardStatisticalReportPage(MemberCardPageReqVO pageReqVO);

    List<MemberCardDO> getAllMemberCardByMemberUserId(Long memberUserId);

    List<MemberCardDO> getMemberCardListByIdCard(String idCard);
}