Merge branch 'feature/my-invitation' into preview

feature/comment
yang 2025-01-02 17:16:16 +08:00
commit efa88e9d7a
3 changed files with 42 additions and 18 deletions

View File

@ -10,7 +10,7 @@ spring:
listener:
simple:
prefetch: 1 # 每次之能获取一条
acknowledge-mode: auto # 设置消费端手动ack确认
acknowledge-mode: manual # 设置消费端手动ack确认
retry:
enabled: true # 是否支持重试
# 生产者配置

View File

@ -4,12 +4,15 @@ import com.mcwl.common.constant.QueueConstants;
import com.mcwl.memberCenter.domain.UserMember;
import com.mcwl.memberCenter.service.UserMemberService;
import com.mcwl.memberCenter.task.UserMemberTask;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.List;
@ -20,21 +23,37 @@ public class EmptyPointsRemindConsumer {
private final UserMemberService userMemberService;
@RabbitListener(queues = QueueConstants.EMPTY_POINTS_REMIND_QUEUE)
public void emptyPointsRemind(List<UserMember> userMemberList) {
@RabbitListener(queues = QueueConstants.EMPTY_POINTS_REMIND_QUEUE, ackMode = "MANUAL")
public void emptyPointsRemind(UserMember UserMember, Channel channel, Message message) {
try {
// TODO 发送短信提醒用户积分即将清零
log.info("消费者获取到积分清零提醒的数据:{}", userMemberList);
log.info("获取到积分清零提醒的数据:{}", UserMember);
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (Exception e) {
log.error("处理积分清零提醒消息时出错: {}", e.getMessage(), e);
try {
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
} catch (IOException ex) {
log.error("消息确认失败: {}", ex.getMessage(), ex);
}
}
}
@RabbitListener(queues = QueueConstants.MEMBER_BILLING_QUEUE)
public void memberBillingQueue(UserMember userMember) {
@RabbitListener(queues = QueueConstants.MEMBER_BILLING_QUEUE, ackMode = "MANUAL")
public void memberBillingQueue(UserMember userMember, Channel channel, Message message) {
try {
// TODO 发送短信提醒用户会员账单如果支付成功更新last_payment_date并重新计算end_datestart_date + 1个月
log.info("消费者获取到会员账单的数据:{}", userMember);
log.info("获取到会员账单的数据:{}", userMember);
} catch (Exception e) {
log.error("处理会员账单消息时出错: {}", e.getMessage(), e);
try {
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
} catch (IOException ex) {
log.error("消息确认失败: {}", ex.getMessage(), ex);
}
}
}
}

View File

@ -31,9 +31,13 @@ public class UserMemberTask {
*/
public void emptyPointsRemindTask() {
List<UserMember> userMemberList = this.getUseUserMember();
if (userMemberList == null || userMemberList.isEmpty()) {
return;
}
// 发送积分清零消息
rabbitTemplate.convertAndSend(QueueConstants.EMPTY_POINTS_REMIND_QUEUE, userMemberList);
for (UserMember userMember : userMemberList) {
rabbitTemplate.convertAndSend(QueueConstants.EMPTY_POINTS_REMIND_QUEUE, userMember);
}
}
@ -60,7 +64,8 @@ public class UserMemberTask {
LambdaQueryWrapper<UserMember> qw = new LambdaQueryWrapper<>();
// endDate大于当前时间, subscriptionStatus不为过期
qw.gt(UserMember::getEndDate, System.currentTimeMillis())
.ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED);
.ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED)
.ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_PENDING);
List<UserMember> userMemberList = userMemberService.list(qw);
if (userMemberList == null || userMemberList.isEmpty()) {
return;
@ -97,14 +102,14 @@ public class UserMemberTask {
// subscriptionStatus 不为 "过期" 或 "待支付"
// status 为 0 的
LambdaQueryWrapper<UserMember> qw = new LambdaQueryWrapper<>();
qw.le(UserMember::getStartDate, System.currentTimeMillis())
.ge(UserMember::getEndDate, System.currentTimeMillis())
qw.le(UserMember::getStartDate, new Date())
.ge(UserMember::getEndDate, new Date())
.ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED)
.ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_PENDING)
.eq(UserMember::getStatus, "0");
// 对应的sql为
System.out.println("sql = " + qw.getSqlSegment());
return userMemberService.list();
return userMemberService.list(qw);
}