diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberController.java new file mode 100644 index 0000000..f10f65f --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberController.java @@ -0,0 +1,137 @@ +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.domain.MemberLevel; +import com.mcwl.memberCenter.service.MemberBenefitService; +import com.mcwl.memberCenter.service.MemberLevelService; +import com.mcwl.web.controller.memberCenter.pojo.dto.RechargePointsDto; +import com.mcwl.web.controller.memberCenter.pojo.dto.UserMemberDto; +import com.mcwl.memberCenter.service.MemberConsumeService; +import com.mcwl.memberCenter.service.MemberService; +import com.mcwl.system.service.ISysUserService; +import com.mcwl.web.controller.memberCenter.pojo.vo.PointsVO; +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; + + private final MemberBenefitService memberBenefitService; + + + /** + * 创建用户会员 + * + * @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); + if (member == null) { + return AjaxResult.warn("创建会员失败"); + } + 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("用户不存在"); + } + + Member member = memberService.getUseUserMemberByUserId(userId); + if (member == null) { + return AjaxResult.warn("用户未开通会员"); + } + + PointsVO pointsVO = new PointsVO(); + + // 会员消费记录 + List memberConsumeList = memberConsumeService + .lambdaQuery() + .eq(MemberConsume::getUserId, userId) + .list(); + + pointsVO.setPoints(member.getPoints()); + pointsVO.setMemberConsumeList(memberConsumeList); + + return AjaxResult.success(pointsVO); + } + + + /** + * 会员积分充值 + */ + @PostMapping("rechargePoints") + public AjaxResult rechargePoints(@RequestBody RechargePointsDto rechargePointsDto) { + Long userId = rechargePointsDto.getUserId(); + Double points = rechargePointsDto.getPoints(); + + if (userId == null) { + return AjaxResult.warn("用户未登录"); + } + + SysUser sysUser = sysUserService.selectUserById(userId); + if (sysUser == null) { + return AjaxResult.warn("用户不存在"); + } + + if (points == null) { + return AjaxResult.warn("充值积分为空"); + } + + if (points <= 0) { + return AjaxResult.warn("充值积分必须大于0"); + } + + Member member = memberService.rechargePoints(userId, points); + + // 返回充值积分 + if (member == null) { + return AjaxResult.warn("充值积分失败"); + } + + rechargePointsDto.setPoints(member.getPoints()); + + return AjaxResult.success(rechargePointsDto); + } + + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberLevelController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberLevelController.java new file mode 100644 index 0000000..9ac70f2 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/MemberLevelController.java @@ -0,0 +1,63 @@ +package com.mcwl.web.controller.memberCenter; + +import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.memberCenter.domain.MemberBenefit; +import com.mcwl.memberCenter.domain.MemberLevel; +import com.mcwl.memberCenter.service.MemberBenefitService; +import com.mcwl.memberCenter.service.MemberLevelService; +import com.mcwl.web.controller.memberCenter.pojo.vo.MemberBenefitVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("memberLevel") +@RequiredArgsConstructor +public class MemberLevelController { + + private final MemberLevelService memberLevelService; + + private final MemberBenefitService memberBenefitService; + + /** + * 获取会员等级列表 + * + * @return 会员等级列表 + */ + @GetMapping("list") + public AjaxResult list() { + + List memberLevelList = memberLevelService.list(); + + return AjaxResult.success(memberLevelList); + } + + + /** + * 获取会员等级及权益列表 + */ + @GetMapping("getMemberBenefitList") + public AjaxResult getMemberBenefitList() { + + List memberBenefitVOList = new ArrayList<>(); + + List memberLevelList = memberLevelService.list(); + for (MemberLevel memberLevel : memberLevelList) { + MemberBenefitVO memberBenefitVO = new MemberBenefitVO(); + memberBenefitVO.setMemberLevel(memberLevel); + // 获取会员等级对应的权益 + List memberBenefitList = memberBenefitService.lambdaQuery() + .eq(MemberBenefit::getMemberLevelId, memberLevel.getId()) + .list(); + memberBenefitVO.setMemberBenefitList(memberBenefitList); + memberBenefitVOList.add(memberBenefitVO); + } + + return AjaxResult.success(memberBenefitVOList); + } + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/RechargePointsDto.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/RechargePointsDto.java new file mode 100644 index 0000000..f3e9d81 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/RechargePointsDto.java @@ -0,0 +1,14 @@ +package com.mcwl.web.controller.memberCenter.pojo.dto; + +import lombok.Data; + +@Data +public class RechargePointsDto { + + // 用户ID + private Long userId; + + // 充值积分 + private Double points; + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/UserMemberDto.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/UserMemberDto.java new file mode 100644 index 0000000..c5c517d --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/UserMemberDto.java @@ -0,0 +1,17 @@ +package com.mcwl.web.controller.memberCenter.pojo.dto; + +import lombok.Data; + +@Data +public class UserMemberDto { + + // 用户ID + private Long userId; + + // 会员ID + private Long memberLevelId; + + // 支付方式 + private String paymentMethod; + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/MemberBenefitVO.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/MemberBenefitVO.java new file mode 100644 index 0000000..d9a6a66 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/MemberBenefitVO.java @@ -0,0 +1,20 @@ +package com.mcwl.web.controller.memberCenter.pojo.vo; + +import com.mcwl.memberCenter.domain.MemberBenefit; +import com.mcwl.memberCenter.domain.MemberLevel; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class MemberBenefitVO { + + // 会员等级 + private MemberLevel memberLevel; + + // 会员权益 + private List memberBenefitList = new ArrayList<>(); + + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/PointsVO.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/PointsVO.java new file mode 100644 index 0000000..3c902cd --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/PointsVO.java @@ -0,0 +1,20 @@ +package com.mcwl.web.controller.memberCenter.pojo.vo; + +import com.mcwl.memberCenter.domain.MemberConsume; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 积分余额和历史记录 + */ +@Data +public class PointsVO { + // 积分余额 + private Double points; + + // 积分消费记录 + private List memberConsumeList = new ArrayList<>(); + +} diff --git a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberTest.java b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java similarity index 56% rename from mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberTest.java rename to mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java index 8b12b1d..bf2a1d8 100644 --- a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberTest.java +++ b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java @@ -1,12 +1,13 @@ 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 com.mcwl.web.controller.memberCenter.MemberLevelController; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -15,23 +16,29 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = McWlApplication.class) -public class MemberTest { +public class MemberCenterTest { + @Autowired + private MemberLevelService memberLevelService; + + @Autowired + private MemberController memberController; + @Autowired private MemberService memberService; @Autowired - private UserMemberService userMemberService; + private UserMemberTask userMemberTask; @Autowired - private UserMemberTask userMemberTask; + private MemberLevelController memberLevelController; @Autowired 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 +59,18 @@ 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); + } + + @Test + public void getMemberLevelListTest() { + System.out.println("memberLevelController.getMemberBenefitList() = " + memberLevelController.getMemberBenefitList()); } } diff --git a/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java b/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java index 9a637aa..73d7409 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java +++ b/mcwl-common/src/main/java/com/mcwl/common/core/domain/BaseEntity.java @@ -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; diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java index c8ee908..98b261d 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java @@ -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 { diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Member.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Member.java index bbe83db..8443633 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Member.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Member.java @@ -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.MemberEnum; 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 Double points; - // 订阅周期(天) - private Integer subscriptionPeriod; + // 订阅状态 active(活跃,连续包月)、inactive(非活跃,不连续包月)、pending(待支付)和expired(过期) + private MemberEnum subscriptionStatus; + + // 支付方式 + private String paymentMethod; + + // 上次支付时间 + private Date lastPaymentDate; + + // 下次计费时间 + private Date nextBillingDate; + + // 上次登录时间 + private Date lastLoginDate; + + // 状态(0:正常 1:禁用) + private String status; - // 备注 - private String remark; } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberBenefit.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberBenefit.java new file mode 100644 index 0000000..4458531 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberBenefit.java @@ -0,0 +1,34 @@ +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.MemberBenefitTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("mem_member_benefit") +public class MemberBenefit extends BaseEntity { + + @TableId + private Long id; + + // 会员等级id + private Long memberLevelId; + + // 权益名称 + private String benefitName; + + // 权益描述 + private String benefitDesc; + + // 权益类型 + private MemberBenefitTypeEnum benefitType; + + // 权益折扣 当权益类型为折扣时,记录折扣的具体数值,如0.9代表9折 + private Double benefitDiscount; + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberConsume.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberConsume.java new file mode 100644 index 0000000..c2f3aa3 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberConsume.java @@ -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 Double consumePoints; + + // 剩余积分 + private Double remainingPoints; + + // 消费时间 + private Date consumeTime; + + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberLevel.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberLevel.java new file mode 100644 index 0000000..12ec9ed --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberLevel.java @@ -0,0 +1,29 @@ +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.MemberPeriodicEnum; +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 MemberPeriodicEnum subscriptionPeriod; +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/UserMember.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/UserMember.java deleted file mode 100644 index bb95be5..0000000 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/UserMember.java +++ /dev/null @@ -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; - -} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberBenefitTypeEnum.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberBenefitTypeEnum.java new file mode 100644 index 0000000..39f4d6f --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberBenefitTypeEnum.java @@ -0,0 +1,26 @@ +package com.mcwl.memberCenter.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MemberBenefitTypeEnum { + + DISCOUNT("discount", "折扣"), + + POINTS("points", "积分"), + + CASH("cash", "现金"), + + FREE("free", "免费"); + + private final String name; + + @EnumValue + private final String value; + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberMenu.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberEnum.java similarity index 94% rename from mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberMenu.java rename to mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberEnum.java index b127cc0..6d27779 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberMenu.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberEnum.java @@ -6,7 +6,7 @@ import lombok.Getter; @Getter @AllArgsConstructor -public enum MemberMenu { +public enum MemberEnum { MEMBER_CENTER_ACTIVE("active", "活跃"), MEMBER_CENTER_INACTIVE("inactive", "非活跃"), MEMBER_CENTER_PENDING("pending", "待支付"), diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberPeriodicEnum.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberPeriodicEnum.java new file mode 100644 index 0000000..fc2de7d --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberPeriodicEnum.java @@ -0,0 +1,19 @@ +package com.mcwl.memberCenter.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MemberPeriodicEnum { + YEAR("year", "年"), + QUARTER("quarter", "季度"), + MONTH("month", "月"), + CONTINUE_MONTH("continueMonth", "包月"); + + + private final String name; + @EnumValue + private final String value; +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberBenefitMapper.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberBenefitMapper.java new file mode 100644 index 0000000..1be22b0 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberBenefitMapper.java @@ -0,0 +1,9 @@ +package com.mcwl.memberCenter.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.memberCenter.domain.MemberBenefit; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MemberBenefitMapper extends BaseMapper { +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberConsumeMapper.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberConsumeMapper.java new file mode 100644 index 0000000..218d1a3 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberConsumeMapper.java @@ -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 { +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/UserMemberMapper.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberLevelMapper.java similarity index 52% rename from mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/UserMemberMapper.java rename to mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberLevelMapper.java index 80311c6..13c0730 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/UserMemberMapper.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberLevelMapper.java @@ -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 { +@Mapper +public interface MemberLevelMapper extends BaseMapper { + + } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberMapper.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberMapper.java index c127692..61f0d66 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberMapper.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberMapper.java @@ -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 { - - } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberBenefitService.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberBenefitService.java new file mode 100644 index 0000000..d7154e4 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberBenefitService.java @@ -0,0 +1,10 @@ +package com.mcwl.memberCenter.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.memberCenter.domain.MemberBenefit; + +public interface MemberBenefitService extends IService { + + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberConsumeService.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberConsumeService.java new file mode 100644 index 0000000..79d564f --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberConsumeService.java @@ -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 { + + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberLevelService.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberLevelService.java new file mode 100644 index 0000000..5852b7d --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberLevelService.java @@ -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 { + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberService.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberService.java index 41aaeaf..59783f6 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberService.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberService.java @@ -7,5 +7,28 @@ import java.util.List; public interface MemberService extends IService { + /** + * 创建用户会员 + * + * @param userId 用户id + * @param memberLevelId 会员等级id + * @return 用户会员 + */ + Member createUserMember(Long userId, Long memberLevelId, String paymentMethod); + /** + * + * @return 获取正常的正在使用的用户会员集合 + */ + List getUseUserMember(); + + /** + * 根据用户id获取正常的正在使用的用户会员 + * @param userId 用户id + * @return 用户会员 + */ + Member getUseUserMemberByUserId(Long userId); + + + Member rechargePoints(Long userId, Double points); } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/UserMemberService.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/UserMemberService.java deleted file mode 100644 index 9298702..0000000 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/UserMemberService.java +++ /dev/null @@ -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 { - - /** - * 创建用户会员 - * @param userId 用户id - * @param memberId 会员id - * @return 用户会员 - */ - UserMember createUserMember(Long userId, Long memberId, String paymentMethod); - - -} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberBenefitServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberBenefitServiceImpl.java new file mode 100644 index 0000000..a469f2e --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberBenefitServiceImpl.java @@ -0,0 +1,14 @@ +package com.mcwl.memberCenter.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.memberCenter.domain.MemberBenefit; +import com.mcwl.memberCenter.mapper.MemberBenefitMapper; +import com.mcwl.memberCenter.service.MemberBenefitService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MemberBenefitServiceImpl extends ServiceImpl implements MemberBenefitService { + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberConsumeServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberConsumeServiceImpl.java new file mode 100644 index 0000000..aad3310 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberConsumeServiceImpl.java @@ -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 implements MemberConsumeService { + + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberLevelServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberLevelServiceImpl.java new file mode 100644 index 0000000..b974b0f --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberLevelServiceImpl.java @@ -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 implements MemberLevelService { + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java index 13dda34..5411b11 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberServiceImpl.java @@ -1,14 +1,185 @@ 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.MemberBenefit; +import com.mcwl.memberCenter.domain.MemberLevel; import com.mcwl.memberCenter.domain.Member; +import com.mcwl.memberCenter.enums.MemberBenefitTypeEnum; +import com.mcwl.memberCenter.enums.MemberEnum; +import com.mcwl.memberCenter.enums.MemberPeriodicEnum; import com.mcwl.memberCenter.mapper.MemberMapper; +import com.mcwl.memberCenter.service.MemberBenefitService; +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 javax.validation.constraints.NotNull; +import java.util.*; @Service +@RequiredArgsConstructor public class MemberServiceImpl extends ServiceImpl implements MemberService { + private final MemberLevelService memberLevelService; + + private final ISysUserService sysUserService; + + private final MemberBenefitService memberBenefitService; + + @Override + public Member createUserMember(Long userId, Long memberLevelId, String paymentMethod) { + if (userId == null) { + return null; + } + SysUser user = sysUserService.selectUserById(userId); + if (user == null || memberLevelId == null) { + return null; + } + MemberLevel memberLevel = memberLevelService.getById(memberLevelId); + if (memberLevel == null) { + return null; + } + // 查询用户是否已经存在会员 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(Member::getUserId, userId) + // subscriptionStatus不为expired + .ne(Member::getSubscriptionStatus, MemberEnum.MEMBER_CENTER_EXPIRED) + .orderBy(true, false, Member::getEndDate); + List 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(); + // 设置会员开始时间和结束时间 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(endDate); + calendar.add(Calendar.DAY_OF_MONTH, 1); + member.setStartDate(calendar.getTime()); + member.setEndDate(this.getEndDate(memberLevel.getSubscriptionPeriod(), calendar)); + } else { + // 用户不存在会员 + // 设置会员开始时间和结束时间 + Calendar calendar = Calendar.getInstance(); + member.setStartDate(calendar.getTime()); + member.setEndDate(this.getEndDate(memberLevel.getSubscriptionPeriod(), calendar)); + } + + // 设置积分 + MemberBenefit memberBenefit = memberBenefitService.lambdaQuery() + .eq(MemberBenefit::getMemberLevelId, memberLevelId) + .eq(MemberBenefit::getBenefitType, MemberBenefitTypeEnum.POINTS) + .one(); + if (memberBenefit != null) { + member.setPoints(memberBenefit.getBenefitDiscount()); + } + + // 设置订阅状态 + if (memberLevel.getSubscriptionPeriod() == MemberPeriodicEnum.CONTINUE_MONTH) { + // 连续包月,会员状态为活跃 + member.setSubscriptionStatus(MemberEnum.MEMBER_CENTER_ACTIVE); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(member.getEndDate()); + calendar.add(Calendar.MONTH, 1); + member.setNextBillingDate(calendar.getTime()); + } else { + member.setSubscriptionStatus(MemberEnum.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 getUseUserMember() { + return this.getUseUserMember(null); + } + + @Override + public Member getUseUserMemberByUserId(Long userId) { + + List memberList = this.getUseUserMember(userId); + if (memberList == null || memberList.isEmpty()) { + return null; + } + return memberList.get(0); + } + + @Override + public Member rechargePoints(Long userId, Double points) { + if (userId == null) { + return null; + } + if (points == null) { + return null; + } + Member member = getUseUserMemberByUserId(userId); + if (member != null) { + member.setPoints(member.getPoints() + points); + baseMapper.updateById(member); + return member; + } + return null; + } + + private List getUseUserMember(Long userId) { + // startDate 小于等于当前时间、endDate 大于等于当前时间 + // subscriptionStatus 不为 "过期" 或 "待支付" + // status 为 0 的 + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.le(Member::getStartDate, new Date()) + .ge(Member::getEndDate, new Date()) + .ne(Member::getSubscriptionStatus, MemberEnum.MEMBER_CENTER_EXPIRED) + .ne(Member::getSubscriptionStatus, MemberEnum.MEMBER_CENTER_PENDING) + .eq(Member::getStatus, "0") + .eq(userId != null, Member::getUserId, userId); + return baseMapper.selectList(qw); + } + + + /** + * 根据订阅周期和开始时间 计算结束时间 + * @param subscriptionPeriod 订阅周期 + * @param calendar 结束时间(日历) + * @return 结束时间 + */ + private Date getEndDate(MemberPeriodicEnum subscriptionPeriod, Calendar calendar) { + switch (subscriptionPeriod) { + case YEAR: + calendar.add(Calendar.YEAR, 1); + break; + case QUARTER: + calendar.add(Calendar.MONTH, 3); + break; + case MONTH: + case CONTINUE_MONTH: + calendar.add(Calendar.MONTH, 1); + break; + default: + break; + } + return calendar.getTime(); + } + } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/UserMemberServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/UserMemberServiceImpl.java deleted file mode 100644 index 5bd6436..0000000 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/UserMemberServiceImpl.java +++ /dev/null @@ -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 implements UserMemberService { - - private final MemberService memberService; - - private final ISysUserService sysUserService; - - - public void aaa() { - LambdaQueryWrapper 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 lqw = new LambdaQueryWrapper<>(); - lqw.eq(UserMember::getUserId, userId) - // subscriptionStatus不为expired - .ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED) - .orderBy(true, false, UserMember::getEndDate); - List 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; - } -} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java index 11cc3f4..a2dcadf 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java @@ -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.enums.MemberMenu; -import com.mcwl.memberCenter.service.UserMemberService; +import com.mcwl.memberCenter.domain.Member; +import com.mcwl.memberCenter.enums.MemberEnum; +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 userMemberList = this.getUseUserMember(); - if (userMemberList == null || userMemberList.isEmpty()) { + List 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 userMemberList = this.getUseUserMember(); - if (userMemberList == null || userMemberList.isEmpty()) { + List 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.0); + member.setUpdateTime(new Date()); } - userMemberService.updateBatchById(userMemberList); + memberService.updateBatchById(memberList); } /** * 更新会员状态 间隔1h检查 */ public void updateSubscriptionStatusTask() { - LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + LambdaQueryWrapper 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 userMemberList = userMemberService.list(qw); - if (userMemberList == null || userMemberList.isEmpty()) { + 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 = " + userMemberList); + System.out.println("userMemberList = " + memberList); - for (UserMember userMember : userMemberList) { - MemberMenu subscriptionStatus = userMember.getSubscriptionStatus(); - if (subscriptionStatus == MemberMenu.MEMBER_CENTER_ACTIVE) { + for (Member member : memberList) { + MemberEnum subscriptionStatus = member.getSubscriptionStatus(); + if (subscriptionStatus == MemberEnum.MEMBER_CENTER_ACTIVE) { // 如果subscriptionStatus是活跃的,表示连续包月。订阅状态改为"待支付" - userMember.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_PENDING); + member.setSubscriptionStatus(MemberEnum.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); - } else if (subscriptionStatus == MemberMenu.MEMBER_CENTER_INACTIVE) { + rabbitTemplate.convertAndSend(QueueConstants.MEMBER_BILLING_QUEUE, member); + } else if (subscriptionStatus == MemberEnum.MEMBER_CENTER_INACTIVE) { // 不是连续包月,会员状态改为过期,状态改为"1" - userMember.setSubscriptionStatus(MemberMenu.MEMBER_CENTER_EXPIRED); - userMember.setStatus("1"); - userMember.setUpdateTime(new Date()); + member.setSubscriptionStatus(MemberEnum.MEMBER_CENTER_EXPIRED); + member.setStatus("1"); + member.setUpdateTime(new Date()); } } } - // 获取正常使用的会员 - private List getUseUserMember() { - // startDate 小于等于当前时间、endDate 大于等于当前时间 - // subscriptionStatus 不为 "过期" 或 "待支付" - // status 为 0 的 - LambdaQueryWrapper 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); - } - - } diff --git a/mcwl-memberCenter/src/main/resources/mapper/MemberMapper.xml b/mcwl-memberCenter/src/main/resources/mapper/memberCenter/MemberLevelMapper.xml similarity index 68% rename from mcwl-memberCenter/src/main/resources/mapper/MemberMapper.xml rename to mcwl-memberCenter/src/main/resources/mapper/memberCenter/MemberLevelMapper.xml index ea8093a..6b9c5d8 100644 --- a/mcwl-memberCenter/src/main/resources/mapper/MemberMapper.xml +++ b/mcwl-memberCenter/src/main/resources/mapper/memberCenter/MemberLevelMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Commission.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Commission.java index 05d127d..bb7cd4a 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Commission.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Commission.java @@ -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; diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java index 6d9cc5a..1cd9935 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Consume.java @@ -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; diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Invitation.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Invitation.java index 06b237f..9b22e83 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Invitation.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/Invitation.java @@ -25,8 +25,6 @@ public class Invitation extends BaseEntity { // 邀请码 private String invitationCode; - // 备注 - private String remark; @Override public boolean equals(Object o) {