package com.xinelu.manage.mapper.patientcouponreceive;

import com.xinelu.manage.domain.patientcouponreceive.PatientCouponReceive;
import com.xinelu.manage.vo.patientcouponreceive.PatientCouponReceiveInfoVO;
import com.xinelu.manage.vo.patientcouponreceive.PatientCouponReceiveVO;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;


/**
 * 会员用户优惠券领取记录Mapper接口
 *
 * @author xinyilu
 * @date 2023-02-24
 */
public interface PatientCouponReceiveMapper {
    /**
     * 查询会员用户优惠券领取记录
     *
     * @param id 会员用户优惠券领取记录主键
     * @return 会员用户优惠券领取记录
     */
    PatientCouponReceive selectPatientCouponReceiveById(Long id);

    /**
     * 查询会员用户优惠券领取记录列表
     *
     * @param patientCouponReceive 会员用户优惠券领取记录
     * @return 会员用户优惠券领取记录集合
     */
    List<PatientCouponReceive> selectPatientCouponReceiveList(PatientCouponReceive patientCouponReceive);

    /**
     * 新增会员用户优惠券领取记录
     *
     * @param patientCouponReceive 会员用户优惠券领取记录
     * @return 结果
     */
    int insertPatientCouponReceive(PatientCouponReceive patientCouponReceive);

    /**
     * 修改会员用户优惠券领取记录
     *
     * @param patientCouponReceive 会员用户优惠券领取记录
     * @return 结果
     */
    int updatePatientCouponReceive(PatientCouponReceive patientCouponReceive);

    /**
     * 删除会员用户优惠券领取记录
     *
     * @param id 会员用户优惠券领取记录主键
     * @return 结果
     */
    int deletePatientCouponReceiveById(Long id);

    /**
     * 批量删除会员用户优惠券领取记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deletePatientCouponReceiveByIds(Long[] ids);

    /**
     * 批量新增用户优惠券信息
     *
     * @param couponReceiveList 优惠券信息集合
     * @return 新增数量
     */
    int insertBatchPatientReceive(@Param("couponReceiveList") List<PatientCouponReceive> couponReceiveList);

    /**
     * 查询会员用户过期的优惠券领取记录列表
     *
     * @param expirationEndTime 过期的优惠券时间
     * @param couponUseStatus   优惠券状态
     * @return 会员用户优惠券领取记录集合
     */
    List<PatientCouponReceive> getPatientCouponExpirationEndTime(@Param("expirationEndTime") LocalDateTime expirationEndTime, @Param("couponUseStatus") String couponUseStatus);

    /**
     * 批量更新优惠券状态
     *
     * @param couponUseStatus 状态
     * @param idList          id集合
     * @return 更新数量
     */
    int updateCouponReceiveStatus(@Param("couponUseStatus") String couponUseStatus, @Param("idList") List<Long> idList);


    /**
     * 批量更新优惠券状态集合
     *
     * @param couponUseStatus 状态
     * @param idList          优惠券id集合
     * @return int
     **/
    int updateCouponReceiveStatusList(@Param("couponUseStatus") String couponUseStatus, @Param("idList") List<Long> idList);

    /**
     * 查询用户所属的优惠券券信息
     *
     * @param patientId 会员id
     * @param couponId  优惠券id
     * @return 用户优惠券信息
     */
    PatientCouponReceiveVO getPatientCouponInfo(@Param("patientId") Long patientId, @Param("couponId") Long couponId);

    /**
     * 优惠用户优惠表中的优惠券状态
     *
     * @param patientId 会员id
     * @param couponId  优惠券id
     * @param useStatus 优惠券状态
     * @return 数量
     */
    int updatePatientCouponUseStatus(@Param("patientId") Long patientId, @Param("couponId") Long couponId, @Param("useStatus") String useStatus);

    /**
     * 查询会员用户优惠券领取记录
     *
     * @param patientId 会员用户主键
     * @param couponId  优惠券领取主键
     * @return 会员用户优惠券领取记录
     */
    PatientCouponReceiveInfoVO selectPatientCouponReceive(@Param("patientId") Long patientId, @Param("couponId") Long couponId);

    /**
     *
     * @param patientId 用户id
     * @param receiveSource 优惠券状态
     * @return int
     */
    int getCouponReceiveByReceiveSource(@Param("patientId") Long patientId, @Param("receiveSource") String receiveSource);
}
