modify:类名修改,方便后续扩展

feature/comment
yang 2025-01-03 12:53:44 +08:00
parent efa88e9d7a
commit 7ce0a4fbcb
25 changed files with 453 additions and 285 deletions

View File

@ -0,0 +1,84 @@
package com.mcwl.web.controller.memberCenter;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.memberCenter.domain.MemberConsume;
import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.dto.UserMemberDto;
import com.mcwl.memberCenter.service.MemberConsumeService;
import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("member")
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
private final ISysUserService sysUserService;
private final MemberConsumeService memberConsumeService;
/**
*
*
* @param userMemberDto
* @return
*/
@PostMapping("createMember")
public AjaxResult createMemberCenter(@RequestBody UserMemberDto userMemberDto) {
Long userId = userMemberDto.getUserId();
if (userId == null) {
return AjaxResult.warn("用户未登录");
}
Long memberLevelId = userMemberDto.getMemberLevelId();
if (memberLevelId == null) {
return AjaxResult.warn("会员等级未选择");
}
String paymentMethod = userMemberDto.getPaymentMethod();
if (paymentMethod == null) {
return AjaxResult.warn("支付方式错误,请重新支付");
}
Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod);
return AjaxResult.success(member);
}
/**
*
* @param userId id
* @return
*/
@GetMapping("getPoints/{id}")
public AjaxResult getPoints(@PathVariable("id") Long userId) {
if (userId == null) {
return AjaxResult.warn("用户未登录");
}
SysUser sysUser = sysUserService.selectUserById(userId);
if (sysUser == null) {
return AjaxResult.warn("用户不存在");
}
List<Member> member = memberService.getUseUserMemberByUserId(userId);
if (member == null || member.isEmpty()) {
return AjaxResult.warn("用户未开通会员");
}
List<MemberConsume> memberConsumeList = memberConsumeService
.lambdaQuery()
.eq(MemberConsume::getUserId, userId)
.list();
return AjaxResult.success(memberConsumeList);
}
}

View File

@ -1,12 +1,12 @@
package com.mcwl.memberCenter;
import com.mcwl.McWlApplication;
import com.mcwl.common.utils.ShareCodeUtils;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.memberCenter.consumer.EmptyPointsRemindConsumer;
import com.mcwl.memberCenter.domain.UserMember;
import com.mcwl.memberCenter.service.MemberLevelService;
import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.memberCenter.service.UserMemberService;
import com.mcwl.memberCenter.task.UserMemberTask;
import com.mcwl.web.controller.memberCenter.MemberController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -15,15 +15,18 @@ import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = McWlApplication.class)
public class MemberTest {
public class MemberLevelTest {
@Autowired
private MemberLevelService memberLevelService;
@Autowired
private MemberController memberController;
@Autowired
private MemberService memberService;
@Autowired
private UserMemberService userMemberService;
@Autowired
private UserMemberTask userMemberTask;
@ -31,7 +34,7 @@ public class MemberTest {
private EmptyPointsRemindConsumer emptyPointsRemindConsumer;
@Test
public void createUserMember() {
System.out.println(userMemberService.createUserMember(1L, 1013L, "wechat"));
System.out.println(memberService.createUserMember(1L, 1013L, "wechat"));
}
@Test
@ -52,7 +55,13 @@ public class MemberTest {
@Test
public void memberServiceTest() {
System.out.println(memberService.list());
System.out.println(memberLevelService.list());
}
@Test
public void getPointsTest() {
AjaxResult points = memberController.getPoints(1L);
System.out.println("points = " + points);
}
}

View File

@ -101,6 +101,18 @@ public class BaseEntity implements Serializable
this.updateTime = updateTime;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getRemark()
{
return remark;

View File

@ -1,19 +1,16 @@
package com.mcwl.memberCenter.consumer;
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.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.service.MemberService;
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;
@Slf4j
@ -21,13 +18,13 @@ import java.util.List;
@RequiredArgsConstructor
public class EmptyPointsRemindConsumer {
private final UserMemberService userMemberService;
private final MemberService memberService;
@RabbitListener(queues = QueueConstants.EMPTY_POINTS_REMIND_QUEUE, ackMode = "MANUAL")
public void emptyPointsRemind(UserMember UserMember, Channel channel, Message message) {
public void emptyPointsRemind(Member Member, Channel channel, Message message) {
try {
// TODO 发送短信提醒用户积分即将清零
log.info("获取到积分清零提醒的数据:{}", UserMember);
log.info("获取到积分清零提醒的数据:{}", Member);
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (Exception e) {
log.error("处理积分清零提醒消息时出错: {}", e.getMessage(), e);
@ -41,10 +38,10 @@ public class EmptyPointsRemindConsumer {
@RabbitListener(queues = QueueConstants.MEMBER_BILLING_QUEUE, ackMode = "MANUAL")
public void memberBillingQueue(UserMember userMember, Channel channel, Message message) {
public void memberBillingQueue(Member member, Channel channel, Message message) {
try {
// TODO 发送短信提醒用户会员账单如果支付成功更新last_payment_date并重新计算end_datestart_date + 1个月
log.info("获取到会员账单的数据:{}", userMember);
log.info("获取到会员账单的数据:{}", member);
} catch (Exception e) {
log.error("处理会员账单消息时出错: {}", e.getMessage(), e);
try {

View File

@ -1,12 +1,14 @@
package com.mcwl.memberCenter.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity;
import com.mcwl.memberCenter.enums.MemberMenu;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Objects;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@ -16,24 +18,37 @@ public class Member extends BaseEntity {
@TableId
private Long id;
// 会员类型
private String memberType;
// 用户ID
private Long userId;
// 会员名称
private String memberName;
// 会员等级ID
private Long memberLevelId;
// 会员价格
private Double unitPrice;
// 会员开始时间
private Date startDate;
// 会员原价
private Double originalPrice;
// 会员结束时间
private Date endDate;
// 会员积分
private Integer points;
// 订阅周期(天)
private Integer subscriptionPeriod;
// 订阅状态 active活跃连续包月、inactive非活跃不连续包月、pending待支付和expired过期
private MemberMenu subscriptionStatus;
// 支付方式
private String paymentMethod;
// 上次支付时间
private Date lastPaymentDate;
// 下次计费时间
private Date nextBillingDate;
// 上次登录时间
private Date lastLoginDate;
// 状态(0:正常 1:禁用)
private String status;
// 备注
private String remark;
}

View File

@ -0,0 +1,33 @@
package com.mcwl.memberCenter.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("mem_member_consume")
public class MemberConsume extends BaseEntity {
@TableId
private Long id;
// 用户id
private Long userId;
// 消费积分
private Integer consumePoints;
// 剩余积分
private Integer remainingPoints;
// 消费时间
private Date consumeTime;
}

View File

@ -0,0 +1,31 @@
package com.mcwl.memberCenter.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("mem_member_level")
public class MemberLevel extends BaseEntity {
@TableId
private Long id;
// 会员名称
private String memberName;
// 会员价格
private Double unitPrice;
// 会员原价
private Double originalPrice;
// 会员积分
private Integer points;
// 订阅周期(天)
private Integer subscriptionPeriod;
}

View File

@ -1,59 +0,0 @@
package com.mcwl.memberCenter.domain;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity;
import com.mcwl.memberCenter.enums.MemberMenu;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("mem_user_member")
public class UserMember extends BaseEntity {
@TableId
private Long id;
// 用户ID
private Long userId;
// 会员ID
private Long memberId;
// 会员开始时间
private Date startDate;
// 会员结束时间
private Date endDate;
// 会员积分
private Integer points;
// 订阅状态 active活跃连续包月、inactive非活跃不连续包月、pending待支付和expired过期
private MemberMenu subscriptionStatus;
// 支付方式
private String paymentMethod;
// 上次支付时间
private Date lastPaymentDate;
// 下次计费时间
private Date nextBillingDate;
// 上次登录时间
private Date lastLoginDate;
// 状态(0:正常 1:禁用)
private String status;
// 备注
private String remark;
}

View File

@ -0,0 +1,17 @@
package com.mcwl.memberCenter.dto;
import lombok.Data;
@Data
public class UserMemberDto {
// 用户ID
private Long userId;
// 会员ID
private Long memberLevelId;
// 支付方式
private String paymentMethod;
}

View File

@ -0,0 +1,9 @@
package com.mcwl.memberCenter.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mcwl.memberCenter.domain.MemberConsume;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MemberConsumeMapper extends BaseMapper<MemberConsume> {
}

View File

@ -1,9 +1,11 @@
package com.mcwl.memberCenter.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mcwl.memberCenter.domain.UserMember;
import com.mcwl.memberCenter.domain.MemberLevel;
import org.apache.ibatis.annotations.Mapper;
//@Mapper
public interface UserMemberMapper extends BaseMapper<UserMember> {
@Mapper
public interface MemberLevelMapper extends BaseMapper<MemberLevel> {
}

View File

@ -4,8 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mcwl.memberCenter.domain.Member;
import org.apache.ibatis.annotations.Mapper;
//@Mapper
@Mapper
public interface MemberMapper extends BaseMapper<Member> {
}

View File

@ -0,0 +1,10 @@
package com.mcwl.memberCenter.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.memberCenter.domain.MemberConsume;
public interface MemberConsumeService extends IService<MemberConsume> {
}

View File

@ -0,0 +1,9 @@
package com.mcwl.memberCenter.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.memberCenter.domain.MemberLevel;
public interface MemberLevelService extends IService<MemberLevel> {
}

View File

@ -7,5 +7,27 @@ import java.util.List;
public interface MemberService extends IService<Member> {
/**
*
*
* @param userId id
* @param memberLevelId id
* @return
*/
Member createUserMember(Long userId, Long memberLevelId, String paymentMethod);
/**
*
* @return 使
*/
List<Member> getUseUserMember();
/**
* id使
* @param userId id
* @return
*/
List<Member> getUseUserMemberByUserId(Long userId);
}

View File

@ -1,17 +0,0 @@
package com.mcwl.memberCenter.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.memberCenter.domain.UserMember;
public interface UserMemberService extends IService<UserMember> {
/**
*
* @param userId id
* @param memberId id
* @return
*/
UserMember createUserMember(Long userId, Long memberId, String paymentMethod);
}

View File

@ -0,0 +1,16 @@
package com.mcwl.memberCenter.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.memberCenter.domain.MemberConsume;
import com.mcwl.memberCenter.mapper.MemberConsumeMapper;
import com.mcwl.memberCenter.service.MemberConsumeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class MemberConsumeServiceImpl extends ServiceImpl<MemberConsumeMapper, MemberConsume> implements MemberConsumeService {
}

View File

@ -0,0 +1,12 @@
package com.mcwl.memberCenter.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.memberCenter.domain.MemberLevel;
import com.mcwl.memberCenter.mapper.MemberLevelMapper;
import com.mcwl.memberCenter.service.MemberLevelService;
import org.springframework.stereotype.Service;
@Service
public class MemberLevelServiceImpl extends ServiceImpl<MemberLevelMapper, MemberLevel> implements MemberLevelService {
}

View File

@ -1,14 +1,121 @@
package com.mcwl.memberCenter.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.exception.ServiceException;
import com.mcwl.memberCenter.domain.MemberLevel;
import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.enums.MemberMenu;
import com.mcwl.memberCenter.mapper.MemberMapper;
import com.mcwl.memberCenter.service.MemberLevelService;
import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
@Service
@RequiredArgsConstructor
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
private final MemberLevelService memberLevelService;
private final ISysUserService sysUserService;
@Override
public Member createUserMember(Long userId, Long memberLevelId, String paymentMethod) {
if (userId == null) {
throw new ServiceException("用户不能为空");
}
SysUser user = sysUserService.selectUserById(userId);
if (user == null) {
throw new ServiceException("用户不存在");
}
if (memberLevelId == null) {
throw new ServiceException("会员等级不能为空");
}
MemberLevel memberLevel = memberLevelService.getById(memberLevelId);
if (memberLevel == null) {
throw new ServiceException("会员等级不存在");
}
// 查询用户是否已经存在会员
LambdaQueryWrapper<Member> lqw = new LambdaQueryWrapper<>();
lqw.eq(Member::getUserId, userId)
// subscriptionStatus不为expired
.ne(Member::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED)
.orderBy(true, false, Member::getEndDate);
List<Member> memberList = baseMapper.selectList(lqw);
Member member = new Member();
// 设置用户id
member.setUserId(userId);
// 设置会员id
member.setMemberLevelId(memberLevelId);
if (memberList != null && !memberList.isEmpty()) {
Member lastMember = memberList.get(0);
Date endDate = lastMember.getEndDate();
// 设置会员开始时间和结束时间
Date startDate = new Date(endDate.getTime() + 1000L * 60L * 60L * 24L);
member.setStartDate(startDate);
member.setEndDate(new Date(startDate.getTime() + memberLevel.getSubscriptionPeriod() * 1000L * 60L * 60L * 24L));
} else {
// 用户不存在会员
// 设置会员开始时间和结束时间
Date startDate = new Date();
member.setStartDate(startDate);
member.setEndDate(new Date(startDate.getTime() + memberLevel.getSubscriptionPeriod() * 1000L * 60L * 60L * 24L));
}
// 设置积分
member.setPoints(memberLevel.getPoints());
// 设置订阅状态
if (memberLevel.getSubscriptionPeriod() == null) {
// 连续包月,会员状态为活跃
member.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_ACTIVE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(member.getEndDate());
calendar.add(Calendar.MONTH, 1);
member.setNextBillingDate(calendar.getTime());
} else {
member.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_INACTIVE);
}
// 设置支付时间
member.setLastPaymentDate(new Date());
// 设置支付方式
member.setPaymentMethod(paymentMethod);
// 设置创建者
SysUser sysUser = sysUserService.selectUserById(userId);
member.setCreateBy(sysUser.getUserName());
member.setCreateTime(new Date());
member.setUpdateBy(sysUser.getUserName());
member.setUpdateTime(new Date());
baseMapper.insert(member);
return member;
}
@Override
public List<Member> getUseUserMember() {
return this.getUseUserMemberByUserId(null);
}
@Override
public List<Member> getUseUserMemberByUserId(Long userId) {
// startDate 小于等于当前时间、endDate 大于等于当前时间
// subscriptionStatus 不为 "过期" 或 "待支付"
// status 为 0 的
LambdaQueryWrapper<Member> qw = new LambdaQueryWrapper<>();
qw.le(Member::getStartDate, new Date())
.ge(Member::getEndDate, new Date())
.ne(Member::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED)
.ne(Member::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_PENDING)
.eq(Member::getStatus, "0")
.eq(userId != null, Member::getUserId, userId);
return baseMapper.selectList(qw);
}
}

View File

@ -1,110 +0,0 @@
package com.mcwl.memberCenter.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.exception.ServiceException;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.domain.UserMember;
import com.mcwl.memberCenter.enums.MemberMenu;
import com.mcwl.memberCenter.mapper.UserMemberMapper;
import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.memberCenter.service.UserMemberService;
import com.mcwl.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
@RequiredArgsConstructor
public class UserMemberServiceImpl extends ServiceImpl<UserMemberMapper, UserMember> implements UserMemberService {
private final MemberService memberService;
private final ISysUserService sysUserService;
public void aaa() {
LambdaQueryWrapper<Member> lqw = new LambdaQueryWrapper<>();
Member member = new Member();
memberService.update(lqw);
}
@Override
public UserMember createUserMember(Long userId, Long memberId, String paymentMethod) {
if (userId == null) {
throw new ServiceException("用户不能为空");
}
SysUser user = sysUserService.selectUserById(userId);
if (user == null) {
throw new ServiceException("用户不存在");
}
if (memberId == null) {
throw new ServiceException("会员不能为空");
}
Member member = memberService.getById(memberId);
if (member == null) {
throw new ServiceException("会员不存在");
}
// 查询用户是否已经存在会员
LambdaQueryWrapper<UserMember> lqw = new LambdaQueryWrapper<>();
lqw.eq(UserMember::getUserId, userId)
// subscriptionStatus不为expired
.ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED)
.orderBy(true, false, UserMember::getEndDate);
List<UserMember> userMemberList = baseMapper.selectList(lqw);
UserMember userMember = new UserMember();
// 设置用户id
userMember.setUserId(userId);
// 设置会员id
userMember.setMemberId(memberId);
if (userMemberList != null && !userMemberList.isEmpty()) {
UserMember lastUserMember = userMemberList.get(0);
Date endDate = lastUserMember.getEndDate();
// 设置会员开始时间和结束时间
Date startDate = new Date(endDate.getTime() + 1000L * 60L * 60L * 24L);
userMember.setStartDate(startDate);
userMember.setEndDate(new Date(startDate.getTime() + member.getSubscriptionPeriod() * 1000L * 60L * 60L * 24L));
} else {
// 用户不存在会员
// 设置会员开始时间和结束时间
Date startDate = new Date();
userMember.setStartDate(startDate);
userMember.setEndDate(new Date(startDate.getTime() + member.getSubscriptionPeriod() * 1000L * 60L * 60L * 24L));
}
// 设置积分
userMember.setPoints(member.getPoints());
// 设置订阅状态
if (member.getSubscriptionPeriod() == null) {
// 连续包月,会员状态为活跃
userMember.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_ACTIVE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(userMember.getEndDate());
calendar.add(Calendar.MONTH, 1);
userMember.setNextBillingDate(calendar.getTime());
} else {
userMember.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_INACTIVE);
}
// 设置支付时间
userMember.setLastPaymentDate(new Date());
// 设置支付方式
userMember.setPaymentMethod(paymentMethod);
// 设置创建者
SysUser sysUser = sysUserService.selectUserById(userId);
userMember.setCreateBy(sysUser.getUserName());
userMember.setCreateTime(new Date());
userMember.setUpdateBy(sysUser.getUserName());
userMember.setUpdateTime(new Date());
baseMapper.insert(userMember);
return userMember;
}
}

View File

@ -1,17 +1,13 @@
package com.mcwl.memberCenter.task;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mcwl.common.constant.QueueConstants;
import com.mcwl.memberCenter.domain.UserMember;
import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.enums.MemberMenu;
import com.mcwl.memberCenter.service.UserMemberService;
import com.mcwl.memberCenter.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
import java.util.Date;
@ -21,7 +17,7 @@ import java.util.List;
@RequiredArgsConstructor
public class UserMemberTask {
private final UserMemberService userMemberService;
private final MemberService memberService;
private final RabbitTemplate rabbitTemplate;
@ -30,13 +26,13 @@ public class UserMemberTask {
*
*/
public void emptyPointsRemindTask() {
List<UserMember> userMemberList = this.getUseUserMember();
if (userMemberList == null || userMemberList.isEmpty()) {
List<Member> memberList = memberService.getUseUserMember();
if (memberList == null || memberList.isEmpty()) {
return;
}
// 发送积分清零消息
for (UserMember userMember : userMemberList) {
rabbitTemplate.convertAndSend(QueueConstants.EMPTY_POINTS_REMIND_QUEUE, userMember);
for (Member member : memberList) {
rabbitTemplate.convertAndSend(QueueConstants.EMPTY_POINTS_REMIND_QUEUE, member);
}
}
@ -46,71 +42,54 @@ public class UserMemberTask {
*
*/
public void emptyPointsTsk() {
List<UserMember> userMemberList = this.getUseUserMember();
if (userMemberList == null || userMemberList.isEmpty()) {
List<Member> memberList = memberService.getUseUserMember();
if (memberList == null || memberList.isEmpty()) {
return;
}
for (UserMember userMember : userMemberList) {
userMember.setPoints(0);
userMember.setUpdateTime(new Date());
for (Member member : memberList) {
member.setPoints(0);
member.setUpdateTime(new Date());
}
userMemberService.updateBatchById(userMemberList);
memberService.updateBatchById(memberList);
}
/**
* 1h
*/
public void updateSubscriptionStatusTask() {
LambdaQueryWrapper<UserMember> qw = new LambdaQueryWrapper<>();
LambdaQueryWrapper<Member> qw = new LambdaQueryWrapper<>();
// endDate大于当前时间, subscriptionStatus不为过期
qw.gt(UserMember::getEndDate, System.currentTimeMillis())
.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()) {
qw.gt(Member::getEndDate, System.currentTimeMillis())
.ne(Member::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED)
.ne(Member::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_PENDING);
List<Member> memberList = memberService.list(qw);
if (memberList == null || memberList.isEmpty()) {
return;
}
System.out.println("userMemberList = " + userMemberList);
System.out.println("userMemberList = " + memberList);
for (UserMember userMember : userMemberList) {
MemberMenu subscriptionStatus = userMember.getSubscriptionStatus();
for (Member member : memberList) {
MemberMenu subscriptionStatus = member.getSubscriptionStatus();
if (subscriptionStatus == MemberMenu.MEMBER_CENTER_ACTIVE) {
// 如果subscriptionStatus是活跃的表示连续包月。订阅状态改为"待支付"
userMember.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_PENDING);
member.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_PENDING);
// nextBillingDate设置为当前会员结束日期的下个月的同一天,发送账单通知
Calendar calendar = Calendar.getInstance();
calendar.setTime(userMember.getEndDate());
calendar.setTime(member.getEndDate());
calendar.add(Calendar.MONTH, 1);
userMember.setNextBillingDate(calendar.getTime());
userMemberService.updateById(userMember);
member.setNextBillingDate(calendar.getTime());
memberService.updateById(member);
// 发送会员账单消息如果支付成功更新last_payment_date并重新计算end_datestart_date + 1个月
rabbitTemplate.convertAndSend(QueueConstants.MEMBER_BILLING_QUEUE, userMember);
rabbitTemplate.convertAndSend(QueueConstants.MEMBER_BILLING_QUEUE, member);
} else if (subscriptionStatus == MemberMenu.MEMBER_CENTER_INACTIVE) {
// 不是连续包月,会员状态改为过期,状态改为"1"
userMember.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_EXPIRED);
userMember.setStatus("1");
userMember.setUpdateTime(new Date());
member.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_EXPIRED);
member.setStatus("1");
member.setUpdateTime(new Date());
}
}
}
// 获取正常使用的会员
private List<UserMember> getUseUserMember() {
// startDate 小于等于当前时间、endDate 大于等于当前时间
// subscriptionStatus 不为 "过期" 或 "待支付"
// status 为 0 的
LambdaQueryWrapper<UserMember> qw = new LambdaQueryWrapper<>();
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(qw);
}
}

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mcwl.memberCenter.mapper.MemberMapper">
<mapper namespace="com.mcwl.memberCenter.mapper.MemberLevelMapper">

View File

@ -27,9 +27,6 @@ public class Commission extends BaseEntity {
// 支付状态
private Integer payStatus;
// 备注
private String remark;
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;

View File

@ -25,9 +25,6 @@ public class Consume extends BaseEntity {
// 消费时间
private Date consumeDate;
// 备注
private String remark;
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;

View File

@ -25,8 +25,6 @@ public class Invitation extends BaseEntity {
// 邀请码
private String invitationCode;
// 备注
private String remark;
@Override
public boolean equals(Object o) {