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..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 @@ -2,21 +2,25 @@ 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.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.MemberLevelService; 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.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import java.util.List; +import java.util.Optional; @RestController @RequestMapping("member") @@ -31,6 +35,7 @@ public class MemberController { private final MemberBenefitService memberBenefitService; + private final MemberLevelService memberLevelService; /** * 创建用户会员 @@ -39,45 +44,42 @@ public class MemberController { * @return 用户会员 */ @PostMapping("createMember") - public AjaxResult createMemberCenter(@RequestBody UserMemberDto userMemberDto) { + public AjaxResult createMemberCenter(@RequestBody @Valid 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("支付方式错误,请重新支付"); + Long promotionId = userMemberDto.getPromotionId(); + + SysUser sysUser = sysUserService.selectUserById(userId); + if (!Optional.ofNullable(sysUser).isPresent()) { + return AjaxResult.warn("用户不存在"); } - Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod); - if (member == null) { + + MemberLevel memberLevel = memberLevelService.getById(memberLevelId); + if (!Optional.ofNullable(memberLevel).isPresent()) { + return AjaxResult.warn("会员等级不存在"); + } + + Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod, promotionId); + 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 (userId == null) { - return AjaxResult.warn("用户未登录"); - } - - SysUser sysUser = sysUserService.selectUserById(userId); - if (sysUser == null) { - return AjaxResult.warn("用户不存在"); - } + @GetMapping("getPoints") + public AjaxResult getPoints() { + Long userId = SecurityUtils.getUserId(); Member member = memberService.getUseUserMemberByUserId(userId); - if (member == null) { + if (!Optional.ofNullable(member).isPresent()) { return AjaxResult.warn("用户未开通会员"); } @@ -100,31 +102,19 @@ public class MemberController { * 会员积分充值 */ @PostMapping("rechargePoints") - public AjaxResult rechargePoints(@RequestBody RechargePointsDto rechargePointsDto) { + public AjaxResult rechargePoints(@RequestBody @Valid 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/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/memberCenter/PromotionController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java new file mode 100644 index 0000000..59e120e --- /dev/null +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/PromotionController.java @@ -0,0 +1,170 @@ +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.*; + +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; + + private final MemberService memberService; + + + /** + * 创建活动 + */ + @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); + + promotionService.save(promotion); + + return AjaxResult.success(); + } + + + /** + * 活动列表 + */ + @GetMapping("promotionList") + public AjaxResult promotionList() { + List promotionList = promotionService.lambdaQuery() + .gt(Promotion::getEndTime, new Date()) + .list(); + return AjaxResult.success(promotionList); + } + + /** + * 获取当前用户参与的活动 + */ + @GetMapping("myPromotionList") + public AjaxResult myPromotionList() { + // 获取当前用户 + Long userId = SecurityUtils.getUserId(); + List memberPromotionList = memberPromotionService.lambdaQuery() + .eq(MemberPromotion::getUserId, 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("活动已过期"); + } + + // 获取当前用户是否参与过该活动 + 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 = 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/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 deleted file mode 100644 index f3e9d81..0000000 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/RechargePointsDto.java +++ /dev/null @@ -1,14 +0,0 @@ -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 deleted file mode 100644 index c5c517d..0000000 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/memberCenter/pojo/dto/UserMemberDto.java +++ /dev/null @@ -1,17 +0,0 @@ -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/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..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 @@ -1,20 +1,28 @@ 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.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; 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,27 +31,60 @@ public class InvitationController { private final InvitationService invitationService; + + /** + * 获取邀请码 + * @return 邀请码 + */ @GetMapping("/getInvitationCode") public AjaxResult getInvitationCode() { // 获取当前用户 Long userId = SecurityUtils.getUserId(); - if (userId == null) { - return AjaxResult.warn("用户未登录"); - } String invitationCode = invitationService.getInvitationCode(userId); + if (StringUtils.isEmpty(invitationCode)) { + 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(); + + 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 d3eea9f..fb6dc69 100644 --- a/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java +++ b/mcwl-admin/src/test/java/com/mcwl/memberCenter/MemberCenterTest.java @@ -1,58 +1,71 @@ -//package com.mcwl.memberCenter; -// -//import com.mcwl.McWlApplication; -//import com.mcwl.common.utils.ShareCodeUtils; -//import com.mcwl.memberCenter.consumer.EmptyPointsRemindConsumer; -//import com.mcwl.memberCenter.domain.UserMember; -//import com.mcwl.memberCenter.service.MemberService; -//import com.mcwl.memberCenter.service.UserMemberService; -//import com.mcwl.memberCenter.task.UserMemberTask; -//import org.junit.Test; -//import org.junit.runner.RunWith; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.boot.test.context.SpringBootTest; -//import org.springframework.test.context.junit4.SpringRunner; -// -//@RunWith(SpringRunner.class) -//@SpringBootTest(classes = McWlApplication.class) -//public class MemberTest { -// -// -// @Autowired -// private MemberService memberService; -// -// @Autowired -// private UserMemberService userMemberService; -// -// @Autowired -// private UserMemberTask userMemberTask; -// -// @Autowired -// private EmptyPointsRemindConsumer emptyPointsRemindConsumer; -// @Test -// public void createUserMember() { -// System.out.println(userMemberService.createUserMember(1L, 1013L, "wechat")); -// } -// -// @Test -// public void emptyPointsTaskTest() { -// userMemberTask.emptyPointsTsk(); -// } -// -// @Test -// public void updateSubscriptionStatusTaskTest() { -// userMemberTask.updateSubscriptionStatusTask(); -// } -// -// @Test -// public void emptyPointsRemindTaskTst() { -// -// userMemberTask.emptyPointsRemindTask(); -// } -// -// @Test -// public void memberServiceTest() { -// System.out.println(memberService.list()); -// } -// -//} +package com.mcwl.memberCenter; + +import com.mcwl.McWlApplication; +import com.mcwl.common.core.domain.AjaxResult; +import com.mcwl.memberCenter.consumer.EmptyPointsRemindConsumer; +import com.mcwl.memberCenter.service.MemberLevelService; +import com.mcwl.memberCenter.service.MemberService; +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; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = McWlApplication.class) +public class MemberCenterTest { + + + @Autowired + private MemberLevelService memberLevelService; + + @Autowired + private MemberController memberController; + + @Autowired + private MemberService memberService; + + @Autowired + private UserMemberTask userMemberTask; + + @Autowired + private MemberLevelController memberLevelController; + + @Autowired + private EmptyPointsRemindConsumer emptyPointsRemindConsumer; + @Test + public void createUserMember() { + System.out.println(memberService.createUserMember(1L, 1013L, "wechat",1L)); + } + + @Test + public void emptyPointsTaskTest() { + userMemberTask.emptyPointsTsk(); + } + + @Test + public void updateSubscriptionStatusTaskTest() { + userMemberTask.updateSubscriptionStatusTask(); + } + + + @Test + public void memberServiceTest() { + System.out.println(memberLevelService.list()); + } + + @Test + public void getPointsTest() { + AjaxResult points = memberController.getPoints(); + 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/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..fe4c049 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/MemberPromotion.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 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 extends BaseEntity { + @TableId + private Long id; + + /** + * 用户ID + */ + private Long userId; + + /** + * 优惠活动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 new file mode 100644 index 0000000..8d1a358 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/Promotion.java @@ -0,0 +1,60 @@ +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_promotion") +public class Promotion extends BaseEntity { + + @TableId + private Long id; + + /** + * 活动名称 + */ + private String activityName; + + /** + * 活动开始时间 + */ + private Date startTime; + + /** + * 活动结束时间 + */ + private Date endTime; + + /** + * 活动类型,如“限时折扣”、“积分奖励” + */ + private PromotionEnum activityType; + + /** + * 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) + */ + private Double activityValue; + + /** + * 活动的详细描述 + */ + private String description; + + /** + * 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(用逗号分隔的会员等级ID) + */ + private String memberLevelIds; + + + +} 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..57a81cb --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/PromotionDto.java @@ -0,0 +1,70 @@ +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; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 促销活动请求参数 + */ +@Data +public class PromotionDto { + + @TableId + private Long id; + + /** + * 活动名称 + */ + @NotBlank(message = "活动名称不能为空") + private String activityName; + + /** + * 活动开始时间 校验时间格式 + */ + @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; + + /** + * 活动类型,如“限时折扣”、“额外积分” + */ + @NotNull() + private PromotionEnum activityType; + + /** + * 折扣/积分奖励 根据活动类型,这里可以是折扣率(如0.8代表8折) + */ + @NotNull(message = "折扣/积分奖励不能为空") + @Min(value = 0, message = "折扣/积分奖励不能小于0") + private Double activityValue; + + /** + * 活动的详细描述 + */ + private String description; + + /** + * 适用会员等级 可选字段,用于指定哪些会员等级可以享受此活动(可以用逗号分隔的会员等级ID) + */ + private String memberLevelIds; + + + +} 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 new file mode 100644 index 0000000..d4c7866 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/RechargePointsDto.java @@ -0,0 +1,26 @@ +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 new file mode 100644 index 0000000..a5080e6 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/dto/UserMemberDto.java @@ -0,0 +1,29 @@ +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 + @NotNull(message = "会员等级ID不能为空") + private Long memberLevelId; + + // 支付方式 + @NotBlank(message = "支付方式不能为空") + private String paymentMethod; + + // 活动ID + private Long promotionId; + +} 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 84% 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..248b5d0 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; @@ -7,6 +7,9 @@ import lombok.Data; import java.util.ArrayList; import java.util.List; +/** + * 会员权益VO + */ @Data public class MemberBenefitVO { 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-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..b51e031 --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/enums/PromotionEnum.java @@ -0,0 +1,40 @@ +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", "过期"), +// /** +// * 订阅/续订会员 +// */ +// SUBSCRIBE("subscribe", "订阅/续订会员"), + + /** + * 限时折扣 + */ + DISCOUNT("discount", "限时折扣"), + /** + * 积分奖励 + */ + POINTS("points", "积分奖励"); + + 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/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/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/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) { 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 { + +} 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