package com.mzl.flower.service.coupon;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzl.flower.dto.request.coupon.*;
import com.mzl.flower.dto.response.coupon.CouponRecordVO;
import com.mzl.flower.entity.coupon.CouponRecordDO;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
*
* 服务类
*
*
* @author @TaoJie
* @since 2024-08-27
*/
public interface CouponRecordService extends IService {
List getList(QueryCouponRecordDTO dto) ;
boolean createCouponRecord(CreateCouponRecordDTO dto);
boolean updateCouponRecord(CreateCouponRecordDTO dto);
boolean deleteCouponRecord(String id);
CouponRecordVO getCouponRecordById(String id);
Page getPage(Page page, QueryCouponRecordDTO dto);
/**
* 会员定时任务
* 根据会员等级定时下发刷优惠券
* @return
*/
boolean grantVipCouponRecordList();
/**
* 根据当月日期设置上个月的日期的优惠券过期
* @return
*/
boolean expiredCouponRecordLastMon();
Integer statisCouponTemplateCount(QueryCouponStatisticsBO queryCouponStatisticsBO);
Integer statisCouponTemplateCurMonCount(QueryCouponStatisticsBO queryCouponStatisticsBO);
Integer statisCouponPointCurMonPontAmonut(QueryCouponStatisticsBO queryCouponStatisticsBO);
/**
* 根据优惠券种类,优惠券ID,用户的ID查找优惠券的记录数量
* @param queryExistCouponDTO
* @return
*/
Integer getExistCouponAmount(QueryExistCouponDTO queryExistCouponDTO);
/**
* 根据优惠券的ID来查找已经领取的优惠券的数量
* @param couponId
* @return
*/
Integer getExistGainCouponRecordAmountById(String couponId);
Integer getUserGainCouponRecordAmountById(String couponId,Long customerId);
/**
*
* @param couponId
* @param userId
* @return
*/
Integer getUserGainCouponRecordAmountByUserId(String couponId,String userId);
List getMineCouponRecordList(QueryMineCouponRecordDTO dto);
/**
* 检查优惠券是否到期
* @param dto
*/
void checkCouponExpired(QueryMineCouponRecordDTO dto);
boolean checkCurMonVipCouponExists(String couponId, Long customId, LocalDateTime startDateTime,LocalDateTime endDateTime);
/**
* 优惠券的使用
* @param couponId 优惠券ID
* @param orderId 订单的ID
* @param orderMount 订单的金额
* @return
*/
boolean useCoupon(String couponId, String orderId, BigDecimal orderMount);
/**
* 优惠券退单
* @param orderId
* @return
*/
boolean cancelCouponUsage(String orderId);
/**
* 根据订单号查找优惠券信息
* @param orderId
* @return
*/
List getCouponListByOrderId(String orderId) ;
CouponRecordDO getCouponByOrderId(String orderId) ;
/**
* 查看当前人员是否已经重复发过此优惠券
* @param couponId
* @param customId
* @return
*/
boolean checkUserCouponExists(String couponId, Long customId);
}