Merge branch 'feature/my-invitation' into preview
commit
9014190840
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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_date(start_date + 1个月)
|
||||
log.info("获取到会员账单的数据:{}", userMember);
|
||||
log.info("获取到会员账单的数据:{}", member);
|
||||
} catch (Exception e) {
|
||||
log.error("处理会员账单消息时出错: {}", e.getMessage(), e);
|
||||
try {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -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> {
|
||||
}
|
|
@ -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> {
|
||||
|
||||
|
||||
}
|
|
@ -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> {
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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> {
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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> {
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
|
@ -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 {
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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 {
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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_date(start_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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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">
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -25,8 +25,6 @@ public class Invitation extends BaseEntity {
|
|||
// 邀请码
|
||||
private String invitationCode;
|
||||
|
||||
// 备注
|
||||
private String remark;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
|
|
Loading…
Reference in New Issue