From 6ea08e3b1c0a74e2d1a1e941fc1cf9e93dd8c966 Mon Sep 17 00:00:00 2001 From: yang <2119157836@qq.com> Date: Sat, 4 Jan 2025 18:50:05 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=82=80?= =?UTF-8?q?=E8=AF=B7=E5=8A=9F=E8=83=BD=E5=92=8C=E6=B6=88=E8=B4=B9=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Consume 和 Commission 表及相关服务 - 实现消费记录保存和提成计算 - 添加邀请码生成和收益展示功能 -重构 Invitation 相关代码,支持获取邀请列表和收益信息 --- .../memberCenter/MemberController.java | 23 ++++--- .../memberCenter/MemberLevelController.java | 2 +- .../myInvitation/ConsumeController.java | 24 ++++--- .../myInvitation/InvitationController.java | 62 ++++++++++++++++--- .../mcwl/memberCenter/MemberCenterTest.java | 5 -- .../java/com/mcwl/common/utils/JwtUtils.java | 2 +- mcwl-memberCenter/pom.xml | 4 ++ .../consumer/EmptyPointsRemindConsumer.java | 23 ++----- .../consumer/MemberBillingConsumer.java | 41 ++++++++++++ .../com/mcwl/memberCenter/domain/Member.java | 3 + .../memberCenter/domain/MemberBenefit.java | 3 + .../memberCenter/domain/MemberConsume.java | 3 + .../mcwl/memberCenter/domain/MemberLevel.java | 3 + .../memberCenter/domain/MemberPromotion.java | 14 +++++ .../mcwl/memberCenter/domain/Promotion.java | 42 +++++++++++++ .../domain}/dto/RechargePointsDto.java | 2 +- .../domain}/dto/UserMemberDto.java | 2 +- .../domain}/vo/MemberBenefitVO.java | 2 +- .../memberCenter/domain}/vo/PointsVO.java | 2 +- .../enums/MemberBenefitTypeEnum.java | 3 + .../mcwl/memberCenter/enums/MemberEnum.java | 3 + .../enums/MemberPeriodicEnum.java | 3 + mcwl-myInvitation/pom.xml | 9 +++ .../mcwl/myInvitation/domain/Commission.java | 25 +++----- .../com/mcwl/myInvitation/domain/Consume.java | 20 ++---- .../mcwl/myInvitation/domain/Invitation.java | 20 ++---- .../myInvitation/domain/dto/ConsumeDto.java | 15 +++++ .../domain/dto/EarningsDisplay.java | 13 ++++ .../domain/dto/EarningsDisplayDto.java | 14 +++++ .../domain/vo/EarningsDisplayVO.java | 21 +++++++ .../myInvitation/mapper/InvitationMapper.java | 7 ++- .../myInvitation/service/ConsumeService.java | 1 + .../service/InvitationService.java | 8 +++ .../service/impl/ConsumeServiceImpl.java | 32 ++++++++++ .../service/impl/InvitationServiceImpl.java | 45 ++++++++++++-- .../mapper/myInvitation/InvitationMapper.xml | 18 ++++++ 36 files changed, 409 insertions(+), 110 deletions(-) create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java rename {mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo => mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain}/dto/RechargePointsDto.java (73%) rename {mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo => mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain}/dto/UserMemberDto.java (78%) rename {mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo => mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain}/vo/MemberBenefitVO.java (87%) rename {mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo => mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain}/vo/PointsVO.java (86%) create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/ConsumeDto.java create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplay.java create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplayDto.java create mode 100644 mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/EarningsDisplayVO.java 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 index f10f65f..6d4b9b9 100644 --- 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 @@ -4,19 +4,18 @@ 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.domain.dto.RechargePointsDto; +import com.mcwl.memberCenter.domain.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 com.mcwl.memberCenter.domain.vo.PointsVO; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Optional; @RestController @RequestMapping("member") @@ -41,19 +40,19 @@ public class MemberController { @PostMapping("createMember") public AjaxResult createMemberCenter(@RequestBody UserMemberDto userMemberDto) { Long userId = userMemberDto.getUserId(); - if (userId == null) { + if (!Optional.ofNullable(userId).isPresent()) { return AjaxResult.warn("用户未登录"); } Long memberLevelId = userMemberDto.getMemberLevelId(); - if (memberLevelId == null) { + if (!Optional.ofNullable(memberLevelId).isPresent()) { return AjaxResult.warn("会员等级未选择"); } String paymentMethod = userMemberDto.getPaymentMethod(); - if (paymentMethod == null) { + if (!Optional.ofNullable(paymentMethod).isPresent()) { return AjaxResult.warn("支付方式错误,请重新支付"); } Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod); - if (member == null) { + if (!Optional.ofNullable(member).isPresent()) { return AjaxResult.warn("创建会员失败"); } return AjaxResult.success(member); @@ -67,17 +66,17 @@ public class MemberController { */ @GetMapping("getPoints/{id}") public AjaxResult getPoints(@PathVariable("id") Long userId) { - if (userId == null) { + if (!Optional.ofNullable(userId).isPresent()) { return AjaxResult.warn("用户未登录"); } SysUser sysUser = sysUserService.selectUserById(userId); - if (sysUser == null) { + if (!Optional.ofNullable(sysUser).isPresent()) { return AjaxResult.warn("用户不存在"); } Member member = memberService.getUseUserMemberByUserId(userId); - if (member == null) { + if (!Optional.ofNullable(member).isPresent()) { return AjaxResult.warn("用户未开通会员"); } 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 index 9ac70f2..e292e0b 100644 --- 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 @@ -5,7 +5,7 @@ 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 com.mcwl.memberCenter.domain.vo.MemberBenefitVO; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/ConsumeController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/ConsumeController.java index d6e54dd..97cd6a5 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/ConsumeController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/ConsumeController.java @@ -1,22 +1,30 @@ package com.mcwl.web.controller.myInvitation; -import com.mcwl.common.annotation.Anonymous; -import com.mcwl.common.domain.IdsParam; +import cn.hutool.core.bean.BeanUtil; +import com.mcwl.myInvitation.domain.Consume; +import com.mcwl.myInvitation.service.ConsumeService; +import com.mcwl.myInvitation.domain.dto.ConsumeDto; +import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +/** + * 消费记录 + */ @RestController() +@RequiredArgsConstructor @RequestMapping("/consume") public class ConsumeController { - @PostMapping() - @Anonymous - public void removeByIds(@RequestBody IdsParam ids){ - System.out.println(ids); + private final ConsumeService consumeService; + @PostMapping + public void consume(@RequestBody ConsumeDto consumeDto) { + + Consume consume = new Consume(); + BeanUtil.copyProperties(consumeDto, consume); + consumeService.saveConsume(consume); } - - } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java index c09cf2a..8d63753 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java @@ -1,20 +1,27 @@ package com.mcwl.web.controller.myInvitation; -import com.mcwl.common.annotation.Anonymous; import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.utils.SecurityUtils; import com.mcwl.myInvitation.domain.Invitation; +import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto; import com.mcwl.myInvitation.service.InvitationService; +import com.mcwl.myInvitation.domain.vo.EarningsDisplayVO; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Optional; import static com.mcwl.common.core.domain.AjaxResult.success; + +/** + * 邀请管理 + */ @RestController() @RequiredArgsConstructor @RequestMapping("/invitation") @@ -23,6 +30,11 @@ public class InvitationController { private final InvitationService invitationService; + + /** + * 获取邀请码 + * @return 邀请码 + */ @GetMapping("/getInvitationCode") public AjaxResult getInvitationCode() { // 获取当前用户 @@ -31,19 +43,53 @@ public class InvitationController { return AjaxResult.warn("用户未登录"); } String invitationCode = invitationService.getInvitationCode(userId); + if (invitationCode == null) { + return AjaxResult.warn("获取邀请码失败"); + } return success("操作成功", invitationCode); } - @GetMapping("/list") - public AjaxResult list() { - List list = invitationService.list(); + + /** + * 获取邀请列表 + * @param userId 用户id + * @return 邀请列表 + */ + + @GetMapping("/list/{userId}") + public AjaxResult list(@PathVariable Long userId) { + List list = invitationService.lambdaQuery() + .eq(Invitation::getUserId, userId) + .list(); return success(list); } - @GetMapping("/getById") - public AjaxResult getById(Long id) { - Invitation invitation = invitationService.getById(id); - return success(invitation); + + /** + * 邀请人收益展示 + */ + @GetMapping("earningsDisplay") + public AjaxResult earningsDisplay() { + Long userId = SecurityUtils.getUserId(); + if (!Optional.ofNullable(userId).isPresent()) { + return AjaxResult.warn("用户未登录"); + } + + EarningsDisplayVO earningsDisplayVO = new EarningsDisplayVO(); + + // 获取邀请人收益 + Double totalAmount = invitationService.getTotalAmount(userId); + + // 获取我的团员 + List earningsDisplay = invitationService.getEarningsDisplay(userId); + if (earningsDisplay == null || earningsDisplay.isEmpty()) { + return AjaxResult.warn("暂无收益"); + } + + earningsDisplayVO.setTotalAmount(totalAmount); + earningsDisplayVO.setEarningsDisplayList(earningsDisplay); + + return success(earningsDisplayVO); } diff --git a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java index bf2a1d8..941a4e6 100644 --- a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java +++ b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java @@ -51,11 +51,6 @@ public class MemberCenterTest { userMemberTask.updateSubscriptionStatusTask(); } - @Test - public void emptyPointsRemindTaskTst() { - - userMemberTask.emptyPointsRemindTask(); - } @Test public void memberServiceTest() { diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/JwtUtils.java b/mcwl-common/src/main/java/com/mcwl/common/utils/JwtUtils.java index 8038062..d7985f6 100644 --- a/mcwl-common/src/main/java/com/mcwl/common/utils/JwtUtils.java +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/JwtUtils.java @@ -9,7 +9,7 @@ import java.util.Date; import java.util.Map; /** - * @description: Jwt工具类 + * Jwt工具类 * @author DongZl */ public class JwtUtils { diff --git a/mcwl-memberCenter/pom.xml b/mcwl-memberCenter/pom.xml index fabd5b2..59a3d39 100644 --- a/mcwl-memberCenter/pom.xml +++ b/mcwl-memberCenter/pom.xml @@ -9,6 +9,10 @@ 3.8.8 + + memberCenter会员中心 + + mcwl-memberCenter 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 98b261d..b54de54 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 @@ -12,7 +12,9 @@ import org.springframework.stereotype.Component; import java.io.IOException; - +/** + * 积分消费者 + */ @Slf4j @Component @RequiredArgsConstructor @@ -20,6 +22,9 @@ public class EmptyPointsRemindConsumer { private final MemberService memberService; + /** + * 积分清零提醒 + */ @RabbitListener(queues = QueueConstants.EMPTY_POINTS_REMIND_QUEUE, ackMode = "MANUAL") public void emptyPointsRemind(Member Member, Channel channel, Message message) { try { @@ -37,20 +42,4 @@ public class EmptyPointsRemindConsumer { } - @RabbitListener(queues = QueueConstants.MEMBER_BILLING_QUEUE, ackMode = "MANUAL") - public void memberBillingQueue(Member member, Channel channel, Message message) { - try { - // TODO 发送短信提醒用户会员账单,如果支付成功,更新last_payment_date,并重新计算end_date(start_date + 1个月) - log.info("获取到会员账单的数据:{}", member); - } catch (Exception e) { - log.error("处理会员账单消息时出错: {}", e.getMessage(), e); - try { - channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); - } catch (IOException ex) { - log.error("消息确认失败: {}", ex.getMessage(), ex); - } - } - } - - } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java new file mode 100644 index 0000000..a617d5b --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/MemberBillingConsumer.java @@ -0,0 +1,41 @@ +package com.mcwl.memberCenter.consumer; + +import com.mcwl.common.constant.QueueConstants; +import com.mcwl.memberCenter.domain.Member; +import com.rabbitmq.client.Channel; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +/** + * 会员账单消费者 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class MemberBillingConsumer { + + + /** + * 会员账单 + */ + @RabbitListener(queues = QueueConstants.MEMBER_BILLING_QUEUE, ackMode = "MANUAL") + public void memberBillingQueue(Member member, Channel channel, Message message) { + try { + // TODO 发送短信提醒用户会员账单,如果支付成功,更新last_payment_date,并重新计算end_date(start_date + 1个月) + log.info("获取到会员账单的数据:{}", member); + } catch (Exception e) { + log.error("处理会员账单消息时出错: {}", e.getMessage(), e); + try { + channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException ex) { + log.error("消息确认失败: {}", ex.getMessage(), ex); + } + } + } + +} 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 8443633..7b6614f 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 @@ -10,6 +10,9 @@ import lombok.EqualsAndHashCode; import java.util.Date; +/** + * 会员表 + */ @Data @EqualsAndHashCode(callSuper = false) @TableName("mem_member") 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 index 4458531..f72a4c2 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberBenefit.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberBenefit.java @@ -7,6 +7,9 @@ import com.mcwl.memberCenter.enums.MemberBenefitTypeEnum; import lombok.Data; import lombok.EqualsAndHashCode; +/** + * 会员权益表 + */ @Data @EqualsAndHashCode(callSuper = false) @TableName("mem_member_benefit") 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 index c2f3aa3..2cf461f 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberConsume.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberConsume.java @@ -8,6 +8,9 @@ import lombok.EqualsAndHashCode; import java.util.Date; +/** + * 会员消费表 + */ @Data @EqualsAndHashCode(callSuper = false) @TableName("mem_member_consume") 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 index 12ec9ed..78c2928 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberLevel.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberLevel.java @@ -7,6 +7,9 @@ import com.mcwl.memberCenter.enums.MemberPeriodicEnum; import lombok.Data; import lombok.EqualsAndHashCode; +/** + * 会员等级表 + */ @Data @EqualsAndHashCode(callSuper = false) @TableName("mem_member_level") diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java new file mode 100644 index 0000000..89cf372 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java @@ -0,0 +1,14 @@ +package com.mcwl.memberCenter.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 会员优惠活动关联表 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("mem_member_promotion") +public class MemberPromotion { +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java new file mode 100644 index 0000000..85ffa16 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java @@ -0,0 +1,42 @@ +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_promotion") +public class Promotion extends BaseEntity { + + @TableId + private Long id; + + private String activityName; + + private Date startTime; + + private Date endTime; + + // 活动类型 活动类型,如“限时折扣”、“额外积分” + private String activityType; + + // 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) + private Double activityValue; + + // 活动的详细描述 + private String description; + + // 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(可以用逗号分隔的会员等级ID) + private String memberLevelId; + + + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/RechargePointsDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java similarity index 73% rename from mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/RechargePointsDto.java rename to mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java index f3e9d81..e5dac69 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/RechargePointsDto.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java @@ -1,4 +1,4 @@ -package com.mcwl.web.controller.memberCenter.pojo.dto; +package com.mcwl.memberCenter.domain.dto; import lombok.Data; diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/UserMemberDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java similarity index 78% rename from mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/UserMemberDto.java rename to mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java index c5c517d..bd1dde8 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/UserMemberDto.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java @@ -1,4 +1,4 @@ -package com.mcwl.web.controller.memberCenter.pojo.dto; +package com.mcwl.memberCenter.domain.dto; import lombok.Data; diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/MemberBenefitVO.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/MemberBenefitVO.java similarity index 87% rename from mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/MemberBenefitVO.java rename to mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/MemberBenefitVO.java index d9a6a66..1059b29 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/MemberBenefitVO.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/MemberBenefitVO.java @@ -1,4 +1,4 @@ -package com.mcwl.web.controller.memberCenter.pojo.vo; +package com.mcwl.memberCenter.domain.vo; import com.mcwl.memberCenter.domain.MemberBenefit; import com.mcwl.memberCenter.domain.MemberLevel; diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/PointsVO.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/PointsVO.java similarity index 86% rename from mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/PointsVO.java rename to mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/PointsVO.java index 3c902cd..b4f937b 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/vo/PointsVO.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/PointsVO.java @@ -1,4 +1,4 @@ -package com.mcwl.web.controller.memberCenter.pojo.vo; +package com.mcwl.memberCenter.domain.vo; import com.mcwl.memberCenter.domain.MemberConsume; import lombok.Data; 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 index 39f4d6f..c19a0fa 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberBenefitTypeEnum.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberBenefitTypeEnum.java @@ -5,6 +5,9 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; +/** + * 会员权益类型枚举 + */ @Getter @AllArgsConstructor public enum MemberBenefitTypeEnum { diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberEnum.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberEnum.java index 6d27779..a442dad 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberEnum.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberEnum.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.AllArgsConstructor; import lombok.Getter; +/** + * 会员状态枚举 + */ @Getter @AllArgsConstructor public enum MemberEnum { 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 index fc2de7d..8803088 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberPeriodicEnum.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/MemberPeriodicEnum.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.AllArgsConstructor; import lombok.Getter; +/** + * 会员周期枚举 + */ @Getter @AllArgsConstructor public enum MemberPeriodicEnum { diff --git a/mcwl-myInvitation/pom.xml b/mcwl-myInvitation/pom.xml index 4c77feb..025231b 100644 --- a/mcwl-myInvitation/pom.xml +++ b/mcwl-myInvitation/pom.xml @@ -9,6 +9,10 @@ 3.8.8 + + myInvitation我的邀请 + + mcwl-myInvitation @@ -32,6 +36,11 @@ test + + com.mcwl + mcwl-system + + com.baomidou mybatis-plus-boot-starter 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 bb7cd4a..97c2202 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 @@ -4,21 +4,22 @@ 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.Objects; -// 提成表 +/** + * 提成表 + */ @Data -@TableName("commissions") +@EqualsAndHashCode(callSuper = true) +@TableName("inv_commission") public class Commission extends BaseEntity { @TableId private Long id; - // 用户id - private Long userId; - - // 消费id + // 消费者id private Long consumeId; // 提成金额 @@ -26,16 +27,4 @@ public class Commission extends BaseEntity { // 支付状态 private Integer payStatus; - - @Override - public boolean equals(Object o) { - if (o == null || getClass() != o.getClass()) return false; - Commission that = (Commission) o; - return Objects.equals(id, that.id) && Objects.equals(userId, that.userId) && Objects.equals(consumeId, that.consumeId) && Objects.equals(amount, that.amount) && Objects.equals(payStatus, that.payStatus); - } - - @Override - public int hashCode() { - return Objects.hash(id, userId, consumeId, amount, payStatus); - } } 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 1cd9935..8121c49 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 @@ -4,13 +4,17 @@ 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; import java.util.Objects; -// 消费表 +/** + * 消费表 + */ @Data -@TableName("consumes") +@EqualsAndHashCode(callSuper = true) +@TableName("inv_consume") public class Consume extends BaseEntity { @TableId @@ -24,16 +28,4 @@ public class Consume extends BaseEntity { // 消费时间 private Date consumeDate; - - @Override - public boolean equals(Object o) { - if (o == null || getClass() != o.getClass()) return false; - Consume consume = (Consume) o; - return Objects.equals(id, consume.id) && Objects.equals(userId, consume.userId) && Objects.equals(amount, consume.amount) && Objects.equals(consumeDate, consume.consumeDate); - } - - @Override - public int hashCode() { - return Objects.hash(id, userId, amount, consumeDate); - } } 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 9b22e83..4b577ca 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 @@ -8,9 +8,12 @@ import lombok.EqualsAndHashCode; import java.util.Objects; -// 邀请表 +/** + * 邀请表 + */ @Data -@TableName("invitations") +@EqualsAndHashCode(callSuper = true) +@TableName("inv_invitation") public class Invitation extends BaseEntity { @TableId @@ -24,17 +27,4 @@ public class Invitation extends BaseEntity { // 邀请码 private String invitationCode; - - - @Override - public boolean equals(Object o) { - if (o == null || getClass() != o.getClass()) return false; - Invitation that = (Invitation) o; - return Objects.equals(id, that.id) && Objects.equals(userId, that.userId) && Objects.equals(userInviteId, that.userInviteId) && Objects.equals(invitationCode, that.invitationCode); - } - - @Override - public int hashCode() { - return Objects.hash(id, userId, userInviteId, invitationCode); - } } diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/ConsumeDto.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/ConsumeDto.java new file mode 100644 index 0000000..20fd81d --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/ConsumeDto.java @@ -0,0 +1,15 @@ +package com.mcwl.myInvitation.domain.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * 消费记录Dto + */ +@Data +public class ConsumeDto { + private Long userId; + private Double amount; + private Date consumeDate; +} diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplay.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplay.java new file mode 100644 index 0000000..f8958a0 --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplay.java @@ -0,0 +1,13 @@ +package com.mcwl.myInvitation.domain.dto; + +import lombok.Data; + +@Data +public class EarningsDisplay { + + private Long userId; + + private Integer count; + +} + diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplayDto.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplayDto.java new file mode 100644 index 0000000..50e6ec7 --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/dto/EarningsDisplayDto.java @@ -0,0 +1,14 @@ +package com.mcwl.myInvitation.domain.dto; + +import com.mcwl.common.core.domain.entity.SysUser; +import lombok.Data; + +@Data +public class EarningsDisplayDto { + + private SysUser user; + + private Integer count; + +} + diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/EarningsDisplayVO.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/EarningsDisplayVO.java new file mode 100644 index 0000000..5bfd883 --- /dev/null +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/domain/vo/EarningsDisplayVO.java @@ -0,0 +1,21 @@ +package com.mcwl.myInvitation.domain.vo; + +import com.mcwl.myInvitation.domain.dto.EarningsDisplay; +import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto; +import lombok.Data; + +import java.util.List; + +@Data +public class EarningsDisplayVO { + + /** + * 总金额 + */ + private Double totalAmount; + + /** + * 提成列表 + */ + private List earningsDisplayList; +} diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/InvitationMapper.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/InvitationMapper.java index 4bb170a..41c6544 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/InvitationMapper.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/mapper/InvitationMapper.java @@ -1,11 +1,16 @@ package com.mcwl.myInvitation.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.mcwl.myInvitation.domain.Commission; import com.mcwl.myInvitation.domain.Invitation; +import com.mcwl.myInvitation.domain.dto.EarningsDisplay; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + @Mapper public interface InvitationMapper extends BaseMapper { + Double getTotalAmount(Long userId); + + List getEarningsDisplay(Long userId); } diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/ConsumeService.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/ConsumeService.java index 9afdfd8..565c2be 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/ConsumeService.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/ConsumeService.java @@ -5,4 +5,5 @@ import com.mcwl.myInvitation.domain.Consume; public interface ConsumeService extends IService { + void saveConsume(Consume consume); } diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/InvitationService.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/InvitationService.java index d898219..cfc76a2 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/InvitationService.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/InvitationService.java @@ -2,6 +2,10 @@ package com.mcwl.myInvitation.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mcwl.myInvitation.domain.Invitation; +import com.mcwl.myInvitation.domain.dto.EarningsDisplay; +import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto; + +import java.util.List; public interface InvitationService extends IService { @@ -11,4 +15,8 @@ public interface InvitationService extends IService { * @return 邀请码 */ String getInvitationCode(Long userId); + + List getEarningsDisplay(Long userId); + + Double getTotalAmount(Long userId); } diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/ConsumeServiceImpl.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/ConsumeServiceImpl.java index e3d5032..1d79f5e 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/ConsumeServiceImpl.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/ConsumeServiceImpl.java @@ -1,15 +1,47 @@ package com.mcwl.myInvitation.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.myInvitation.domain.Commission; import com.mcwl.myInvitation.domain.Consume; import com.mcwl.myInvitation.mapper.ConsumeMapper; +import com.mcwl.myInvitation.service.CommissionService; import com.mcwl.myInvitation.service.ConsumeService; +import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor public class ConsumeServiceImpl extends ServiceImpl implements ConsumeService { + private final ConsumeMapper consumeMapper; + private final CommissionService commissionService; + + private final ISysUserService sysUserService; + + + @Override + @Transactional + public void saveConsume(Consume consume) { + consumeMapper.insert(consume); + + Commission commission = new Commission(); + SysUser sysUser = sysUserService.selectUserById(consume.getUserId()); + // TODO 设置用户id +// commission.setUserId(sysUser.getParentId()); + + // 设置消费者id + commission.setConsumeId(consume.getUserId()); + + // TODO 设置佣金,目前固定2.0 + commission.setAmount(2.0); + commission.setPayStatus(0); + + commissionService.save(commission); + + + } } diff --git a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/InvitationServiceImpl.java b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/InvitationServiceImpl.java index 32abe1c..41c762e 100644 --- a/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/InvitationServiceImpl.java +++ b/mcwl-myInvitation/src/main/java/com/mcwl/myInvitation/service/impl/InvitationServiceImpl.java @@ -1,27 +1,60 @@ package com.mcwl.myInvitation.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.mcwl.common.constant.JwtConstants; -import com.mcwl.common.utils.JwtUtils; import com.mcwl.common.utils.ShareCodeUtils; import com.mcwl.myInvitation.domain.Invitation; +import com.mcwl.myInvitation.domain.dto.EarningsDisplay; +import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto; import com.mcwl.myInvitation.mapper.InvitationMapper; +import com.mcwl.myInvitation.service.ConsumeService; import com.mcwl.myInvitation.service.InvitationService; +import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.Map; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @Service @RequiredArgsConstructor public class InvitationServiceImpl extends ServiceImpl implements InvitationService { + private final ConsumeService consumeService; + + private final ISysUserService sysUserService; + + @Override public String getInvitationCode(Long userId) { + if (userId == null) { + return null; + } // 生成邀请码 - String invitationCode = ShareCodeUtils.idToCode(userId); - return invitationCode; + return ShareCodeUtils.idToCode(userId); + } + + @Override + public List getEarningsDisplay(Long userId) { + List earningsDisplay = baseMapper.getEarningsDisplay(userId); + if (earningsDisplay == null || earningsDisplay.isEmpty()) { + return Collections.emptyList(); + } + + List list = new ArrayList<>(); + earningsDisplay.forEach(item -> { + EarningsDisplayDto edd = new EarningsDisplayDto(); + edd.setUser(sysUserService.selectUserById(item.getUserId())); + edd.setCount(item.getCount()); + list.add(edd); + }); + + return list; + } + + @Override + public Double getTotalAmount(Long userId) { + return baseMapper.getTotalAmount(userId); } } diff --git a/mcwl-myInvitation/src/main/resources/mapper/myInvitation/InvitationMapper.xml b/mcwl-myInvitation/src/main/resources/mapper/myInvitation/InvitationMapper.xml index 610e6fa..c6daf41 100644 --- a/mcwl-myInvitation/src/main/resources/mapper/myInvitation/InvitationMapper.xml +++ b/mcwl-myInvitation/src/main/resources/mapper/myInvitation/InvitationMapper.xml @@ -5,5 +5,23 @@ + + + + \ No newline at end of file From 40bc8128ebf57c3ad0914db5c30b76a7a4e14b8e Mon Sep 17 00:00:00 2001 From: yang <2119157836@qq.com> Date: Sun, 5 Jan 2025 14:09:46 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(memberCenter):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BF=83=E9=94=80=E6=B4=BB=E5=8A=A8=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BC=9A=E5=91=98=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增促销活动相关实体、Mapper、Service及Controller - 优化会员创建和积分充值逻辑 -移除全局跨域配置,改为在具体接口中处理跨域问题 - 重构邀请码获取和收益展示接口,提高代码可读性 --- .../memberCenter/MemberController.java | 58 ++++----- .../memberCenter/PromotionController.java | 117 ++++++++++++++++++ .../myInvitation/InvitationController.java | 9 +- .../com/mcwl/web/core/config/CorsConfig.java | 25 ---- .../mcwl/memberCenter/MemberCenterTest.java | 2 +- .../memberCenter/domain/MemberPromotion.java | 30 ++++- .../mcwl/memberCenter/domain/Promotion.java | 25 +++- .../domain/dto/JoinPromotionDto.java | 25 ++++ .../memberCenter/domain/dto/PromotionDto.java | 66 ++++++++++ .../domain/dto/RechargePointsDto.java | 12 ++ .../domain/dto/UserMemberDto.java | 11 +- .../domain/vo/MemberBenefitVO.java | 3 + .../memberCenter/enums/PromotionEnum.java | 27 ++++ .../mapper/MemberBenefitMapper.java | 3 + .../mapper/MemberConsumeMapper.java | 3 + .../mapper/MemberLevelMapper.java | 3 + .../memberCenter/mapper/MemberMapper.java | 3 + .../mapper/MemberPromotionMapper.java | 13 ++ .../memberCenter/mapper/PromotionMapper.java | 13 ++ .../service/MemberPromotionService.java | 8 ++ .../service/PromotionService.java | 8 ++ .../impl/MemberPromotionServiceImpl.java | 31 +++++ .../service/impl/PromotionServiceImpl.java | 17 +++ 23 files changed, 438 insertions(+), 74 deletions(-) create mode 100644 mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java delete mode 100644 mcwl-admin/src/main/java/com/mcwl/web/core/config/CorsConfig.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/JoinPromotionDto.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberPromotionMapper.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/PromotionMapper.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberPromotionService.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/PromotionService.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberPromotionServiceImpl.java create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/PromotionServiceImpl.java 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 index 6d4b9b9..c2ea63f 100644 --- 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 @@ -2,16 +2,20 @@ package com.mcwl.web.controller.memberCenter; import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.common.utils.SecurityUtils; 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.domain.dto.RechargePointsDto; import com.mcwl.memberCenter.domain.dto.UserMemberDto; import com.mcwl.memberCenter.service.MemberConsumeService; +import com.mcwl.memberCenter.service.MemberLevelService; import com.mcwl.memberCenter.service.MemberService; import com.mcwl.system.service.ISysUserService; import com.mcwl.memberCenter.domain.vo.PointsVO; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -30,6 +34,7 @@ public class MemberController { private final MemberBenefitService memberBenefitService; + private final MemberLevelService memberLevelService; /** * 创建用户会员 @@ -40,40 +45,35 @@ public class MemberController { @PostMapping("createMember") public AjaxResult createMemberCenter(@RequestBody UserMemberDto userMemberDto) { Long userId = userMemberDto.getUserId(); - if (!Optional.ofNullable(userId).isPresent()) { - return AjaxResult.warn("用户未登录"); - } Long memberLevelId = userMemberDto.getMemberLevelId(); - if (!Optional.ofNullable(memberLevelId).isPresent()) { - return AjaxResult.warn("会员等级未选择"); - } String paymentMethod = userMemberDto.getPaymentMethod(); - if (!Optional.ofNullable(paymentMethod).isPresent()) { - return AjaxResult.warn("支付方式错误,请重新支付"); + + SysUser sysUser = sysUserService.selectUserById(userId); + if (!Optional.ofNullable(sysUser).isPresent()) { + return AjaxResult.warn("用户不存在"); } + + MemberLevel memberLevel = memberLevelService.getById(memberLevelId); + if (!Optional.ofNullable(memberLevel).isPresent()) { + return AjaxResult.warn("会员等级不存在"); + } + Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod); if (!Optional.ofNullable(member).isPresent()) { return AjaxResult.warn("创建会员失败"); } + return AjaxResult.success(member); } /** * 获取积分余额和历史记录 - * @param userId 用户id * @return 积分余额和历史记录 */ - @GetMapping("getPoints/{id}") - public AjaxResult getPoints(@PathVariable("id") Long userId) { - if (!Optional.ofNullable(userId).isPresent()) { - return AjaxResult.warn("用户未登录"); - } - - SysUser sysUser = sysUserService.selectUserById(userId); - if (!Optional.ofNullable(sysUser).isPresent()) { - return AjaxResult.warn("用户不存在"); - } + @GetMapping("getPoints") + public AjaxResult getPoints() { + Long userId = SecurityUtils.getUserId(); Member member = memberService.getUseUserMemberByUserId(userId); if (!Optional.ofNullable(member).isPresent()) { @@ -101,29 +101,17 @@ public class MemberController { @PostMapping("rechargePoints") public AjaxResult rechargePoints(@RequestBody RechargePointsDto rechargePointsDto) { Long userId = rechargePointsDto.getUserId(); - Double points = rechargePointsDto.getPoints(); - - if (userId == null) { - return AjaxResult.warn("用户未登录"); - } + Double amount = rechargePointsDto.getAmount(); SysUser sysUser = sysUserService.selectUserById(userId); - if (sysUser == null) { + if (!Optional.ofNullable(sysUser).isPresent()) { return AjaxResult.warn("用户不存在"); } - if (points == null) { - return AjaxResult.warn("充值积分为空"); - } - - if (points <= 0) { - return AjaxResult.warn("充值积分必须大于0"); - } - - Member member = memberService.rechargePoints(userId, points); + Member member = memberService.rechargePoints(userId, amount * 10); // 返回充值积分 - if (member == null) { + if (!Optional.ofNullable(member).isPresent()) { return AjaxResult.warn("充值积分失败"); } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java new file mode 100644 index 0000000..8073e89 --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java @@ -0,0 +1,117 @@ +package com.mcwl.web.controller.memberCenter; + + +import cn.hutool.core.bean.BeanUtil; +import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.memberCenter.domain.MemberPromotion; +import com.mcwl.memberCenter.domain.Promotion; +import com.mcwl.memberCenter.domain.dto.JoinPromotionDto; +import com.mcwl.memberCenter.domain.dto.PromotionDto; +import com.mcwl.memberCenter.enums.PromotionEnum; +import com.mcwl.memberCenter.service.MemberPromotionService; +import com.mcwl.memberCenter.service.PromotionService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.Date; +import java.util.List; +import java.util.Optional; + + +/** + * 促销活动 + */ +@RestController +@RequestMapping("promotion") +@RequiredArgsConstructor +public class PromotionController { + + private final PromotionService promotionService; + + private final MemberPromotionService memberPromotionService; + + + /** + * 创建活动 + */ + @PostMapping("createPromotion") + public AjaxResult createPromotion(@RequestBody @Valid PromotionDto promotionDto) { + + Promotion promotion = new Promotion(); + + BeanUtil.copyProperties(promotionDto, promotion); + + promotionService.save(promotion); + + return AjaxResult.success(); + } + + + /** + * 活动列表 + */ + @GetMapping("promotionList") + public AjaxResult promotionList() { + List promotionList = promotionService.lambdaQuery() + .lt(Promotion::getEndTime, new Date()) + .list(); + return AjaxResult.success(promotionList); + } + + /** + * 获取当前用户参与的活动 + */ + @GetMapping("myPromotionList") + public AjaxResult myPromotionList() { + // 获取当前用户 + Long userId = SecurityUtils.getUserId(); + List memberPromotionList = memberPromotionService.lambdaQuery() + .eq(MemberPromotion::getMemberId, userId) + .list(); + return AjaxResult.success(memberPromotionList); + } + + /** + * 参与活动 + */ + @PostMapping("joinPromotion") + public AjaxResult joinPromotion(@RequestBody @Valid JoinPromotionDto joinPromotionDto) { + // 用户id + Long userId = joinPromotionDto.getUserId(); + // 活动id + Long promotionId = joinPromotionDto.getPromotionId(); + // 按活动id查询活动信息 + Promotion promotion = promotionService.getById(promotionId); + + if (!Optional.ofNullable(promotion).isPresent()) { + return AjaxResult.warn("活动不存在"); + } + + if (promotion.getStartTime().after(new Date())) { + return AjaxResult.warn("活动未开始"); + } + + // 活动是否过期 + if (promotion.getEndTime().before(new Date())) { + return AjaxResult.warn("活动已过期"); + } + + String memberLevelIds = promotion.getMemberLevelId(); + if (!memberLevelIds.contains(userId.toString())) { + return AjaxResult.warn("无法参与该活动,请查看活动条件"); + } + MemberPromotion memberPromotion = new MemberPromotion(); + memberPromotion.setMemberId(userId); + memberPromotion.setPromotionId(promotionId); + memberPromotion.setStatus(PromotionEnum.EXPIRED); + memberPromotion.setParticipationTime(new Date()); + memberPromotionService.save(memberPromotion); + + + return AjaxResult.success(); + } + + +} diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java index 8d63753..332ce95 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/myInvitation/InvitationController.java @@ -8,6 +8,7 @@ import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto; import com.mcwl.myInvitation.service.InvitationService; import com.mcwl.myInvitation.domain.vo.EarningsDisplayVO; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -39,11 +40,8 @@ public class InvitationController { public AjaxResult getInvitationCode() { // 获取当前用户 Long userId = SecurityUtils.getUserId(); - if (userId == null) { - return AjaxResult.warn("用户未登录"); - } String invitationCode = invitationService.getInvitationCode(userId); - if (invitationCode == null) { + if (StringUtils.isEmpty(invitationCode)) { return AjaxResult.warn("获取邀请码失败"); } return success("操作成功", invitationCode); @@ -71,9 +69,6 @@ public class InvitationController { @GetMapping("earningsDisplay") public AjaxResult earningsDisplay() { Long userId = SecurityUtils.getUserId(); - if (!Optional.ofNullable(userId).isPresent()) { - return AjaxResult.warn("用户未登录"); - } EarningsDisplayVO earningsDisplayVO = new EarningsDisplayVO(); diff --git a/mcwl-admin/src/main/java/com/mcwl/web/core/config/CorsConfig.java b/mcwl-admin/src/main/java/com/mcwl/web/core/config/CorsConfig.java deleted file mode 100644 index 0eae7b1..0000000 --- a/mcwl-admin/src/main/java/com/mcwl/web/core/config/CorsConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mcwl.web.core.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -/** - * 跨域配置 - */ -@Configuration -public class CorsConfig { - - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); - CorsConfiguration corsConfiguration = new CorsConfiguration(); - corsConfiguration.addAllowedOrigin("*"); - corsConfiguration.addAllowedHeader("*"); - corsConfiguration.addAllowedMethod("*"); - urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); - return new CorsFilter(urlBasedCorsConfigurationSource); - } -} diff --git a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java index 941a4e6..a36da35 100644 --- a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java +++ b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java @@ -59,7 +59,7 @@ public class MemberCenterTest { @Test public void getPointsTest() { - AjaxResult points = memberController.getPoints(1L); + AjaxResult points = memberController.getPoints(); System.out.println("points = " + points); } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java index 89cf372..62e24d7 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java @@ -1,14 +1,42 @@ 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.PromotionEnum; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Date; + /** * 会员优惠活动关联表 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("mem_member_promotion") -public class MemberPromotion { +public class MemberPromotion extends BaseEntity { + @TableId + private Long id; + + /** + * 会员ID + */ + private Long memberId; + + /** + * 优惠活动ID + */ + private Long promotionId; + + /** + * 参与时间 + */ + private Date participationTime; + + /** + * 状态 “已参与”“已过期” + */ + private PromotionEnum status; + } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java index 85ffa16..bdf59e5 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java @@ -19,22 +19,39 @@ public class Promotion extends BaseEntity { @TableId private Long id; + /** + * 活动名称 + */ private String activityName; + /** + * 活动开始时间 + */ private Date startTime; + /** + * 活动结束时间 + */ private Date endTime; - // 活动类型 活动类型,如“限时折扣”、“额外积分” + /** + * 活动类型,如“限时折扣”、“额外积分”、“活动期间内订阅或续订会员” + */ private String activityType; - // 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) + /** + * 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) + */ private Double activityValue; - // 活动的详细描述 + /** + * 活动的详细描述 + */ private String description; - // 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(可以用逗号分隔的会员等级ID) + /** + * 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(用逗号分隔的会员等级ID) + */ private String memberLevelId; diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/JoinPromotionDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/JoinPromotionDto.java new file mode 100644 index 0000000..0a8c57a --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/JoinPromotionDto.java @@ -0,0 +1,25 @@ +package com.mcwl.memberCenter.domain.dto; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 参与活动请求参数 + */ +@Data +public class JoinPromotionDto { + + @NotNull(message = "用户id不能为空") + private Long userId; + + @NotNull(message = "活动id不能为空") + private Long promotionId; + + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java new file mode 100644 index 0000000..62c727d --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java @@ -0,0 +1,66 @@ +package com.mcwl.memberCenter.domain.dto; + +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 javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 促销活动请求参数 + */ +@Data +public class PromotionDto { + + @TableId + private Long id; + + /** + * 活动名称 + */ + @NotBlank(message = "活动名称不能为空") + private String activityName; + + /** + * 活动开始时间 校验时间格式 + */ + @NotNull(message = "活动开始时间不能为空") + private Date startTime; + + /** + * 活动结束时间 + */ + @NotNull(message = "活动结束时间不能为空") + private Date endTime; + + /** + * 活动类型,如“限时折扣”、“额外积分” + */ + @NotBlank(message = "活动类型不能为空") + private String activityType; + + /** + * 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) + */ + @NotNull(message = "折扣/积分奖励不能为空") + @Min(value = 0, message = "折扣/积分奖励不能小于0") + private Double activityValue; + + /** + * 活动的详细描述 + */ + private String description; + + /** + * 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(可以用逗号分隔的会员等级ID) + */ + private String memberLevelId; + + + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java index e5dac69..d4c7866 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java @@ -2,13 +2,25 @@ package com.mcwl.memberCenter.domain.dto; import lombok.Data; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * 积分充值请求参数 + */ @Data public class RechargePointsDto { // 用户ID + @NotNull(message = "用户ID不能为空") private Long userId; // 充值积分 + @NotNull(message = "充值积分不能为空") + @Min(value = 5, message = "充值积分不能小于5") + private Double amount; + + // 剩余积分 private Double points; } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java index bd1dde8..5f3af1b 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java @@ -2,16 +2,25 @@ package com.mcwl.memberCenter.domain.dto; import lombok.Data; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 创建会员请求参数 + */ @Data public class UserMemberDto { // 用户ID + @NotNull(message = "用户ID不能为空") private Long userId; - // 会员ID + // 会员等级ID + @NotNull(message = "会员等级ID不能为空") private Long memberLevelId; // 支付方式 + @NotBlank(message = "支付方式不能为空") private String paymentMethod; } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/MemberBenefitVO.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/MemberBenefitVO.java index 1059b29..248b5d0 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/MemberBenefitVO.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/MemberBenefitVO.java @@ -7,6 +7,9 @@ import lombok.Data; import java.util.ArrayList; import java.util.List; +/** + * 会员权益VO + */ @Data public class MemberBenefitVO { diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java new file mode 100644 index 0000000..1885065 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java @@ -0,0 +1,27 @@ +package com.mcwl.memberCenter.enums; + + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 会员参与活动状态 + */ +@Getter +@AllArgsConstructor +public enum PromotionEnum { + /** + * 参与 + */ + PARTICIPATE("participate", "参与"), + /** + * 过期 + */ + EXPIRED("expired", "过期"); + + 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 index 1be22b0..a8b2b6b 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberBenefitMapper.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberBenefitMapper.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mcwl.memberCenter.domain.MemberBenefit; import org.apache.ibatis.annotations.Mapper; +/** + * 会员权益 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 index 218d1a3..dd28576 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberConsumeMapper.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberConsumeMapper.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mcwl.memberCenter.domain.MemberConsume; import org.apache.ibatis.annotations.Mapper; +/** + * 会员消费记录 Mapper + */ @Mapper public interface MemberConsumeMapper extends BaseMapper { } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberLevelMapper.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberLevelMapper.java index 13c0730..08485d8 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberLevelMapper.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberLevelMapper.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mcwl.memberCenter.domain.MemberLevel; import org.apache.ibatis.annotations.Mapper; +/** + * 会员等级表 Mapper + */ @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 61f0d66..0acbd94 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,6 +4,9 @@ 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/mapper/MemberPromotionMapper.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberPromotionMapper.java new file mode 100644 index 0000000..baed3b1 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/MemberPromotionMapper.java @@ -0,0 +1,13 @@ +package com.mcwl.memberCenter.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.memberCenter.domain.MemberBenefit; +import com.mcwl.memberCenter.domain.MemberPromotion; +import org.apache.ibatis.annotations.Mapper; + +/** + * 会员优惠活动关联 Mapper + */ +@Mapper +public interface MemberPromotionMapper extends BaseMapper { +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/PromotionMapper.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/PromotionMapper.java new file mode 100644 index 0000000..cf77b8e --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/mapper/PromotionMapper.java @@ -0,0 +1,13 @@ +package com.mcwl.memberCenter.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.memberCenter.domain.MemberPromotion; +import com.mcwl.memberCenter.domain.Promotion; +import org.apache.ibatis.annotations.Mapper; + +/** + * 促销活动 Mapper + */ +@Mapper +public interface PromotionMapper extends BaseMapper { +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberPromotionService.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberPromotionService.java new file mode 100644 index 0000000..e35cbc1 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/MemberPromotionService.java @@ -0,0 +1,8 @@ +package com.mcwl.memberCenter.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.memberCenter.domain.Member; +import com.mcwl.memberCenter.domain.MemberPromotion; + +public interface MemberPromotionService extends IService { +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/PromotionService.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/PromotionService.java new file mode 100644 index 0000000..39e313b --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/PromotionService.java @@ -0,0 +1,8 @@ +package com.mcwl.memberCenter.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.memberCenter.domain.MemberPromotion; +import com.mcwl.memberCenter.domain.Promotion; + +public interface PromotionService extends IService { +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberPromotionServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberPromotionServiceImpl.java new file mode 100644 index 0000000..e83d7f5 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/MemberPromotionServiceImpl.java @@ -0,0 +1,31 @@ +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.memberCenter.domain.Member; +import com.mcwl.memberCenter.domain.MemberBenefit; +import com.mcwl.memberCenter.domain.MemberLevel; +import com.mcwl.memberCenter.domain.MemberPromotion; +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.mapper.MemberPromotionMapper; +import com.mcwl.memberCenter.service.MemberBenefitService; +import com.mcwl.memberCenter.service.MemberLevelService; +import com.mcwl.memberCenter.service.MemberPromotionService; +import com.mcwl.memberCenter.service.MemberService; +import com.mcwl.system.service.ISysUserService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class MemberPromotionServiceImpl extends ServiceImpl implements MemberPromotionService { + +} diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/PromotionServiceImpl.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/PromotionServiceImpl.java new file mode 100644 index 0000000..25364c1 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/impl/PromotionServiceImpl.java @@ -0,0 +1,17 @@ +package com.mcwl.memberCenter.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.memberCenter.domain.MemberPromotion; +import com.mcwl.memberCenter.domain.Promotion; +import com.mcwl.memberCenter.mapper.MemberPromotionMapper; +import com.mcwl.memberCenter.mapper.PromotionMapper; +import com.mcwl.memberCenter.service.MemberPromotionService; +import com.mcwl.memberCenter.service.PromotionService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class PromotionServiceImpl extends ServiceImpl implements PromotionService { + +} From 4fc9909191e67b4a3c1794c7bb505688fbb5399a Mon Sep 17 00:00:00 2001 From: yang <2119157836@qq.com> Date: Sun, 5 Jan 2025 18:35:08 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(memberCenter):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BC=9A=E5=91=98=E4=BF=83=E9=94=80=E6=B4=BB=E5=8A=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增积分奖励活动类型 - 实现活动期间内订阅或续订会员的积分加成 - 增加活动参与记录和状态管理 - 优化活动列表展示逻辑 - 修复活动开始时间不能大于结束时间的问题 --- .../memberCenter/MemberController.java | 9 ++- .../memberCenter/PromotionController.java | 71 ++++++++++++++++--- .../mcwl/memberCenter/MemberCenterTest.java | 2 +- .../memberCenter/domain/MemberPromotion.java | 4 +- .../mcwl/memberCenter/domain/Promotion.java | 7 +- .../memberCenter/domain/dto/PromotionDto.java | 10 ++- .../domain/dto/UserMemberDto.java | 3 + .../memberCenter/enums/PromotionEnum.java | 15 +++- .../memberCenter/service/MemberService.java | 6 +- .../service/impl/MemberServiceImpl.java | 36 +++++++++- 10 files changed, 137 insertions(+), 26 deletions(-) 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 index c2ea63f..d4c51fd 100644 --- 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 @@ -18,6 +18,7 @@ import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import java.util.List; import java.util.Optional; @@ -43,10 +44,11 @@ public class MemberController { * @return 用户会员 */ @PostMapping("createMember") - public AjaxResult createMemberCenter(@RequestBody UserMemberDto userMemberDto) { + public AjaxResult createMemberCenter(@RequestBody @Valid UserMemberDto userMemberDto) { Long userId = userMemberDto.getUserId(); Long memberLevelId = userMemberDto.getMemberLevelId(); String paymentMethod = userMemberDto.getPaymentMethod(); + Long promotionId = userMemberDto.getPromotionId(); SysUser sysUser = sysUserService.selectUserById(userId); if (!Optional.ofNullable(sysUser).isPresent()) { @@ -58,7 +60,7 @@ public class MemberController { return AjaxResult.warn("会员等级不存在"); } - Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod); + Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod, promotionId); if (!Optional.ofNullable(member).isPresent()) { return AjaxResult.warn("创建会员失败"); } @@ -69,6 +71,7 @@ public class MemberController { /** * 获取积分余额和历史记录 + * * @return 积分余额和历史记录 */ @GetMapping("getPoints") @@ -99,7 +102,7 @@ public class MemberController { * 会员积分充值 */ @PostMapping("rechargePoints") - public AjaxResult rechargePoints(@RequestBody RechargePointsDto rechargePointsDto) { + public AjaxResult rechargePoints(@RequestBody @Valid RechargePointsDto rechargePointsDto) { Long userId = rechargePointsDto.getUserId(); Double amount = rechargePointsDto.getAmount(); diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java index 8073e89..59e120e 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java @@ -4,12 +4,15 @@ package com.mcwl.web.controller.memberCenter; import cn.hutool.core.bean.BeanUtil; import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.memberCenter.domain.Member; import com.mcwl.memberCenter.domain.MemberPromotion; import com.mcwl.memberCenter.domain.Promotion; import com.mcwl.memberCenter.domain.dto.JoinPromotionDto; import com.mcwl.memberCenter.domain.dto.PromotionDto; +import com.mcwl.memberCenter.enums.MemberEnum; import com.mcwl.memberCenter.enums.PromotionEnum; import com.mcwl.memberCenter.service.MemberPromotionService; +import com.mcwl.memberCenter.service.MemberService; import com.mcwl.memberCenter.service.PromotionService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -32,6 +35,8 @@ public class PromotionController { private final MemberPromotionService memberPromotionService; + private final MemberService memberService; + /** * 创建活动 @@ -39,6 +44,11 @@ public class PromotionController { @PostMapping("createPromotion") public AjaxResult createPromotion(@RequestBody @Valid PromotionDto promotionDto) { + Date startTime = promotionDto.getStartTime(); + Date endTime = promotionDto.getEndTime(); + if (startTime.after(endTime)) { + return AjaxResult.warn("活动开始时间不能大于结束时间"); + } Promotion promotion = new Promotion(); BeanUtil.copyProperties(promotionDto, promotion); @@ -55,7 +65,7 @@ public class PromotionController { @GetMapping("promotionList") public AjaxResult promotionList() { List promotionList = promotionService.lambdaQuery() - .lt(Promotion::getEndTime, new Date()) + .gt(Promotion::getEndTime, new Date()) .list(); return AjaxResult.success(promotionList); } @@ -68,7 +78,7 @@ public class PromotionController { // 获取当前用户 Long userId = SecurityUtils.getUserId(); List memberPromotionList = memberPromotionService.lambdaQuery() - .eq(MemberPromotion::getMemberId, userId) + .eq(MemberPromotion::getUserId, userId) .list(); return AjaxResult.success(memberPromotionList); } @@ -98,20 +108,63 @@ public class PromotionController { return AjaxResult.warn("活动已过期"); } - String memberLevelIds = promotion.getMemberLevelId(); - if (!memberLevelIds.contains(userId.toString())) { + // 获取当前用户是否参与过该活动 + if (isJoinPromotion(userId, promotionId)) { + return AjaxResult.warn("您已参与过该活动"); + } + + // 是否在活动期间内订阅或续订会员 +// if (!isSubscribe(userId, promotion)) { +// return AjaxResult.warn("请在活动期间内订阅或续期会员后参加该活动"); +// } + + Member member = memberService.getUseUserMemberByUserId(userId); + + String memberLevelIds = promotion.getMemberLevelIds(); + if (!memberLevelIds.contains(member.getMemberLevelId().toString())) { return AjaxResult.warn("无法参与该活动,请查看活动条件"); } - MemberPromotion memberPromotion = new MemberPromotion(); - memberPromotion.setMemberId(userId); - memberPromotion.setPromotionId(promotionId); - memberPromotion.setStatus(PromotionEnum.EXPIRED); - memberPromotion.setParticipationTime(new Date()); + MemberPromotion memberPromotion = getMemberPromotion(userId, promotionId); memberPromotionService.save(memberPromotion); return AjaxResult.success(); } +// private boolean isSubscribe(Long userId, Promotion promotion) { +// if (promotion.getActivityType() == PromotionEnum.SUBSCRIBE) { +// // 获取当前用户最新的订阅或续订 +// Member member = memberService.latestSubscription(userId); +// if (!Optional.ofNullable(member).isPresent()) { +// return false; +// } +// Date createTime = member.getCreateTime(); +// // 会员创建时间在活动开始时间之前,说明用户不符合“活动期间内订阅或续订会员”的条件 +// return !createTime.before(promotion.getStartTime()); +// } +// return true; +// } + + private boolean isJoinPromotion(Long userId, Long promotionId) { + MemberPromotion memberPromotion = memberPromotionService.lambdaQuery() + .eq(MemberPromotion::getUserId, userId) + .eq(MemberPromotion::getPromotionId, promotionId) + .one(); + return memberPromotion != null; + } + + private static MemberPromotion getMemberPromotion(Long userId, Long promotionId) { + MemberPromotion memberPromotion = new MemberPromotion(); + memberPromotion.setUserId(userId); + memberPromotion.setPromotionId(promotionId); + memberPromotion.setStatus(PromotionEnum.PARTICIPATE); + memberPromotion.setParticipationTime(new Date()); + memberPromotion.setCreateBy(SecurityUtils.getUsername()); + memberPromotion.setCreateTime(new Date()); + memberPromotion.setUpdateBy(SecurityUtils.getUsername()); + memberPromotion.setUpdateTime(new Date()); + return memberPromotion; + } + } diff --git a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java index a36da35..fb6dc69 100644 --- a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java +++ b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java @@ -38,7 +38,7 @@ public class MemberCenterTest { private EmptyPointsRemindConsumer emptyPointsRemindConsumer; @Test public void createUserMember() { - System.out.println(memberService.createUserMember(1L, 1013L, "wechat")); + System.out.println(memberService.createUserMember(1L, 1013L, "wechat",1L)); } @Test diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java index 62e24d7..fe4c049 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.java @@ -20,9 +20,9 @@ public class MemberPromotion extends BaseEntity { private Long id; /** - * 会员ID + * 用户ID */ - private Long memberId; + private Long userId; /** * 优惠活动ID diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java index bdf59e5..8d1a358 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java @@ -3,6 +3,7 @@ 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.PromotionEnum; import lombok.Data; import lombok.EqualsAndHashCode; @@ -35,9 +36,9 @@ public class Promotion extends BaseEntity { private Date endTime; /** - * 活动类型,如“限时折扣”、“额外积分”、“活动期间内订阅或续订会员” + * 活动类型,如“限时折扣”、“积分奖励” */ - private String activityType; + private PromotionEnum activityType; /** * 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) @@ -52,7 +53,7 @@ public class Promotion extends BaseEntity { /** * 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(用逗号分隔的会员等级ID) */ - private String memberLevelId; + private String memberLevelIds; diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java index 62c727d..57a81cb 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java @@ -3,8 +3,10 @@ package com.mcwl.memberCenter.domain.dto; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.mcwl.common.core.domain.BaseEntity; +import com.mcwl.memberCenter.enums.PromotionEnum; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; @@ -30,19 +32,21 @@ public class PromotionDto { * 活动开始时间 校验时间格式 */ @NotNull(message = "活动开始时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date startTime; /** * 活动结束时间 */ @NotNull(message = "活动结束时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endTime; /** * 活动类型,如“限时折扣”、“额外积分” */ - @NotBlank(message = "活动类型不能为空") - private String activityType; + @NotNull() + private PromotionEnum activityType; /** * 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) @@ -59,7 +63,7 @@ public class PromotionDto { /** * 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(可以用逗号分隔的会员等级ID) */ - private String memberLevelId; + private String memberLevelIds; diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java index 5f3af1b..a5080e6 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java @@ -23,4 +23,7 @@ public class UserMemberDto { @NotBlank(message = "支付方式不能为空") private String paymentMethod; + // 活动ID + private Long promotionId; + } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java index 1885065..b51e031 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java @@ -18,7 +18,20 @@ public enum PromotionEnum { /** * 过期 */ - EXPIRED("expired", "过期"); + EXPIRED("expired", "过期"), +// /** +// * 订阅/续订会员 +// */ +// SUBSCRIBE("subscribe", "订阅/续订会员"), + + /** + * 限时折扣 + */ + DISCOUNT("discount", "限时折扣"), + /** + * 积分奖励 + */ + POINTS("points", "积分奖励"); private final String name; @EnumValue 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 59783f6..1074264 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 @@ -12,9 +12,11 @@ public interface MemberService extends IService { * * @param userId 用户id * @param memberLevelId 会员等级id + * @param paymentMethod 支付方式 + * @param promotionId 活动id * @return 用户会员 */ - Member createUserMember(Long userId, Long memberLevelId, String paymentMethod); + Member createUserMember(Long userId, Long memberLevelId, String paymentMethod, Long promotionId); /** * @@ -31,4 +33,6 @@ public interface MemberService extends IService { Member rechargePoints(Long userId, Double points); + + Member latestSubscription(Long userId); } 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 5411b11..a5bd52c 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 @@ -7,13 +7,17 @@ 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.domain.Promotion; import com.mcwl.memberCenter.enums.MemberBenefitTypeEnum; import com.mcwl.memberCenter.enums.MemberEnum; import com.mcwl.memberCenter.enums.MemberPeriodicEnum; +import com.mcwl.memberCenter.enums.PromotionEnum; import com.mcwl.memberCenter.mapper.MemberMapper; +import com.mcwl.memberCenter.mapper.PromotionMapper; import com.mcwl.memberCenter.service.MemberBenefitService; import com.mcwl.memberCenter.service.MemberLevelService; import com.mcwl.memberCenter.service.MemberService; +import com.mcwl.memberCenter.service.PromotionService; import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -31,8 +35,10 @@ public class MemberServiceImpl extends ServiceImpl impleme private final MemberBenefitService memberBenefitService; + private final PromotionMapper promotionMapper; + @Override - public Member createUserMember(Long userId, Long memberLevelId, String paymentMethod) { + public Member createUserMember(Long userId, Long memberLevelId, String paymentMethod, Long promotionId) { if (userId == null) { return null; } @@ -79,7 +85,15 @@ public class MemberServiceImpl extends ServiceImpl impleme .eq(MemberBenefit::getBenefitType, MemberBenefitTypeEnum.POINTS) .one(); if (memberBenefit != null) { - member.setPoints(memberBenefit.getBenefitDiscount()); + Double points = memberBenefit.getBenefitDiscount(); + // 根据活动id查询活动类型,如果为积分,则积分加成 + if (promotionId != null) { + Promotion promotion = promotionMapper.selectById(promotionId); + if (promotion.getActivityType() == PromotionEnum.POINTS) { + points = points + promotion.getActivityValue(); + } + } + member.setPoints(points); } // 设置订阅状态 @@ -143,6 +157,21 @@ public class MemberServiceImpl extends ServiceImpl impleme return null; } + @Override + public Member latestSubscription(Long userId) { + // 根据userId 查询会员,按创建时间降序,获取最新的会员 + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(Member::getUserId, userId) + .ne(Member::getSubscriptionStatus, MemberEnum.MEMBER_CENTER_EXPIRED) + .ne(Member::getSubscriptionStatus, MemberEnum.MEMBER_CENTER_PENDING) + .orderByDesc(Member::getCreateTime); + List memberList = baseMapper.selectList(qw); + if (memberList != null && !memberList.isEmpty()) { + return memberList.get(0); + } + return null; + } + private List getUseUserMember(Long userId) { // startDate 小于等于当前时间、endDate 大于等于当前时间 // subscriptionStatus 不为 "过期" 或 "待支付" @@ -160,8 +189,9 @@ public class MemberServiceImpl extends ServiceImpl impleme /** * 根据订阅周期和开始时间 计算结束时间 + * * @param subscriptionPeriod 订阅周期 - * @param calendar 结束时间(日历) + * @param calendar 结束时间(日历) * @return 结束时间 */ private Date getEndDate(MemberPeriodicEnum subscriptionPeriod, Calendar calendar) {