mcwl-ai/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java

111 lines
4.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<Member> 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<Member> memberList = memberService.getUseUserMember();
List<Long> userIdList = new ArrayList<>();
List<SysUser> 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<Member> 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<Member> 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_datestart_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());
}
}
}
}