InviteRewardMapper.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package com.haha.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.haha.entity.InviteReward;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.Param;
  6. import org.apache.ibatis.annotations.Select;
  7. import org.apache.ibatis.annotations.Update;
  8. import java.time.LocalDateTime;
  9. import java.util.List;
  10. import java.util.Map;
  11. @Mapper
  12. public interface InviteRewardMapper extends BaseMapper<InviteReward> {
  13. // 根据邀请记录ID查询奖励记录
  14. @Select("SELECT * FROM t_invite_reward WHERE record_id = #{recordId} AND deleted = 0 LIMIT 1")
  15. InviteReward selectByRecordId(@Param("recordId") Long recordId);
  16. // 根据邀请记录ID和奖励类型查询奖励记录(用于检查是否已发放过被邀请人奖励)
  17. @Select("SELECT * FROM t_invite_reward WHERE record_id = #{recordId} AND reward_type = #{rewardType} AND deleted = 0 LIMIT 1")
  18. InviteReward selectByRecordIdAndRewardType(@Param("recordId") Long recordId, @Param("rewardType") Integer rewardType);
  19. // 更新奖励状态为已发放
  20. @Update("UPDATE t_invite_reward SET status = 1, user_coupon_id = #{userCouponId}, coupon_code = #{couponCode}, " +
  21. "distribute_time = NOW(), update_time = NOW() WHERE id = #{id}")
  22. int updateToDistributed(@Param("id") Long id, @Param("userCouponId") Long userCouponId, @Param("couponCode") String couponCode);
  23. // 更新奖励状态为发放失败
  24. @Update("UPDATE t_invite_reward SET status = 2, fail_reason = #{failReason}, retry_count = retry_count + 1, update_time = NOW() WHERE id = #{id}")
  25. int updateToFailed(@Param("id") Long id, @Param("failReason") String failReason);
  26. // 更新奖励状态为已补发
  27. @Update("UPDATE t_invite_reward SET status = 3, user_coupon_id = #{userCouponId}, coupon_code = #{couponCode}, " +
  28. "operator_id = #{operatorId}, operator_name = #{operatorName}, distribute_time = NOW(), update_time = NOW() WHERE id = #{id}")
  29. int updateToRetried(@Param("id") Long id, @Param("userCouponId") Long userCouponId,
  30. @Param("couponCode") String couponCode, @Param("operatorId") Long operatorId,
  31. @Param("operatorName") String operatorName);
  32. // 查询待重试的失败奖励记录
  33. @Select("SELECT * FROM t_invite_reward WHERE status = 2 AND retry_count < #{maxRetry} AND deleted = 0 ORDER BY create_time ASC LIMIT #{limit}")
  34. List<InviteReward> selectFailedRewardsForRetry(@Param("maxRetry") Integer maxRetry, @Param("limit") Integer limit);
  35. // 统计某活动的奖励发放情况
  36. @Select("SELECT COUNT(*) as totalCount, " +
  37. "SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) as distributedCount, " +
  38. "SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) as failedCount " +
  39. "FROM t_invite_reward WHERE activity_id = #{activityId} AND deleted = 0")
  40. Map<String, Object> selectRewardStatistics(@Param("activityId") Long activityId);
  41. }