package com.mcwl.memberCenter.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mcwl.common.constant.QueueConstants; import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.memberCenter.domain.Member; import com.mcwl.memberCenter.enums.MemberEnum; import com.mcwl.memberCenter.service.MemberService; import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @Component("userMemberTask") @RequiredArgsConstructor public class UserMemberTask { private final MemberService memberService; private final ISysUserService sysUserService; private final RabbitTemplate rabbitTemplate; /** * 积分清零提醒 月底前五天 */ public void emptyPointsRemindTask() { List memberList = memberService.getUseUserMember(); if (memberList == null || memberList.isEmpty()) { return; } // 发送积分清零消息 for (Member member : memberList) { rabbitTemplate.convertAndSend(QueueConstants.EMPTY_POINTS_REMIND_QUEUE, member); } } /** * 清空积分 每月月底前两天 */ @Transactional public void emptyPointsTsk() { List memberList = memberService.getUseUserMember(); List userIdList = new ArrayList<>(); List sysUserList = new ArrayList<>(); if (memberList == null || memberList.isEmpty()) { return; } for (Member member : memberList) { member.setPoints(0.0); member.setUpdateTime(new Date()); userIdList.add(member.getUserId()); } sysUserList = sysUserService.listByIds(userIdList); for (SysUser sysUser : sysUserList) { sysUser.setFreePoints(0.0); sysUserService.updateUser(sysUser); } memberService.updateBatchById(memberList); } /** * 更新会员状态 间隔1h检查 */ public void updateSubscriptionStatusTask() { LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); // endDate大于当前时间, subscriptionStatus不为过期 qw.gt(Member::getEndDate, System.currentTimeMillis()) .ne(Member::getSubscriptionStatus, MemberEnum.MEMBER_CENTER_EXPIRED) .ne(Member::getSubscriptionStatus, MemberEnum.MEMBER_CENTER_PENDING); List memberList = memberService.list(qw); if (memberList == null || memberList.isEmpty()) { return; } System.out.println("userMemberList = " + memberList); for (Member member : memberList) { MemberEnum subscriptionStatus = member.getSubscriptionStatus(); if (subscriptionStatus == MemberEnum.MEMBER_CENTER_ACTIVE) { // 如果subscriptionStatus是活跃的,表示连续包月。订阅状态改为"待支付" member.setSubscriptionStatus(MemberEnum.MEMBER_CENTER_PENDING); // nextBillingDate设置为当前会员结束日期的下个月的同一天,发送账单通知 Calendar calendar = Calendar.getInstance(); calendar.setTime(member.getEndDate()); calendar.add(Calendar.MONTH, 1); member.setNextBillingDate(calendar.getTime()); memberService.updateById(member); // 发送会员账单消息,如果支付成功,更新last_payment_date,并重新计算end_date(start_date + 1个月) rabbitTemplate.convertAndSend(QueueConstants.MEMBER_BILLING_QUEUE, member); } else if (subscriptionStatus == MemberEnum.MEMBER_CENTER_INACTIVE) { // 不是连续包月,会员状态改为过期,状态改为"1" member.setSubscriptionStatus(MemberEnum.MEMBER_CENTER_EXPIRED); member.setStatus("1"); member.setUpdateTime(new Date()); } } } }