From ff6b2cdf30f7bb09dad25ed6c6534181447ffd7b Mon Sep 17 00:00:00 2001 From: yang <2119157836@qq.com> Date: Fri, 7 Mar 2025 10:56:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor(mcwl):=20=E8=B0=83=E6=95=B4=E4=BF=83?= =?UTF-8?q?=E9=94=80=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../memberCenter/PromotionController.java | 97 ++------- .../memberCenter/domain/vo/PromotionVo.java | 63 ++++++ .../service/PromotionService.java | 16 ++ .../service/impl/PromotionServiceImpl.java | 193 ++++++++++++++++++ .../memberCenter/task/UserMemberTask.java | 8 + 5 files changed, 298 insertions(+), 79 deletions(-) create mode 100644 mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/PromotionVo.java 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 90e14bc..fcacbfc 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,6 +4,8 @@ package com.mcwl.web.controller.memberCenter; import cn.hutool.core.bean.BeanUtil; import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.R; +import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.common.utils.SecurityUtils; import com.mcwl.memberCenter.domain.Member; import com.mcwl.memberCenter.domain.MemberPromotion; @@ -17,10 +19,12 @@ import com.mcwl.memberCenter.service.MemberService; import com.mcwl.memberCenter.service.PromotionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.util.Date; import java.util.List; import java.util.Optional; @@ -39,8 +43,6 @@ public class PromotionController { private final MemberPromotionService memberPromotionService; - private final MemberService memberService; - /** * 创建活动 @@ -67,76 +69,34 @@ public class PromotionController { /** * 活动列表 */ - @GetMapping("promotionList") + @PostMapping("promotionList") @ApiOperation(value = "活动列表") - public R> promotionList() { - List promotionList = promotionService.lambdaQuery() - .gt(Promotion::getEndTime, new Date()) - .list(); - return R.ok(promotionList); + public TableDataInfo getPromotionList(@Valid @RequestBody PageDomain pageDomain) { + + return promotionService.getPromotionList(pageDomain); } /** * 获取当前用户参与的活动 */ - @GetMapping("myPromotionList") + @PostMapping("myPromotionList") @ApiOperation(value = "获取当前用户参与的活动") - public R> myPromotionList() { - // 获取当前用户 - Long userId = SecurityUtils.getUserId(); - List memberPromotionList = memberPromotionService.lambdaQuery() - .eq(MemberPromotion::getUserId, userId) - .list(); - return R.ok(memberPromotionList); + public TableDataInfo myPromotionList(@Valid @RequestBody PageDomain pageDomain) { + + return promotionService.getMyPromotionList(pageDomain); } /** * 参与活动 */ - @PostMapping("joinPromotion") + @GetMapping("joinPromotion") @ApiOperation(value = "参与活动") - public R joinPromotion(@RequestBody @Valid JoinPromotionDto joinPromotionDto) { - // 用户id - Long userId = joinPromotionDto.getUserId(); - // 活动id - Long promotionId = joinPromotionDto.getPromotionId(); - // 按活动id查询活动信息 - Promotion promotion = promotionService.getById(promotionId); + public R joinPromotion(@Valid + @NotNull(message = "活动ID不能为空") + @ApiParam("活动ID") + Long promotionId) { - if (!Optional.ofNullable(promotion).isPresent()) { - return R.fail("活动不存在"); - } - - if (promotion.getStartTime().after(new Date())) { - return R.fail("活动未开始"); - } - - // 活动是否过期 - if (promotion.getEndTime().before(new Date())) { - return R.fail("活动已过期"); - } - - // 获取当前用户是否参与过该活动 - if (isJoinPromotion(userId, promotionId)) { - return R.fail("您已参与过该活动"); - } - - // 是否在活动期间内订阅或续订会员 -// if (!isSubscribe(userId, promotion)) { -// return AjaxResult.warn("请在活动期间内订阅或续期会员后参加该活动"); -// } - - Member member = memberService.getUseUserMemberByUserId(userId); - - String memberLevelIds = promotion.getMemberLevelIds(); - if (!memberLevelIds.contains(member.getMemberLevelId().toString())) { - return R.fail("无法参与该活动,请查看活动条件"); - } - MemberPromotion memberPromotion = getMemberPromotion(userId, promotionId); - memberPromotionService.save(memberPromotion); - - - return R.ok(); + return promotionService.joinPromotion(promotionId); } // private boolean isSubscribe(Long userId, Promotion promotion) { @@ -153,26 +113,5 @@ public class PromotionController { // 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-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/PromotionVo.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/PromotionVo.java new file mode 100644 index 0000000..7aa368c --- /dev/null +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/domain/vo/PromotionVo.java @@ -0,0 +1,63 @@ +package com.mcwl.memberCenter.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mcwl.common.core.domain.BaseEntity; +import com.mcwl.memberCenter.enums.PromotionEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 促销活动vo + */ +@Data +@ApiModel(description = "促销活动") +public class PromotionVo { + + /** + * 活动id + */ + @ApiModelProperty(value = "活动id") + private Long id; + + /** + * 活动名称 + */ + @ApiModelProperty(value = "活动名称") + private String activityName; + + /** + * 是否参与 + */ + @ApiModelProperty(value = "是否参与") + private Integer isJoin; + + + /** + * 活动的详细描述 + */ + @ApiModelProperty(value = "活动的详细描述") + private String description; + + /** + * 活动开始时间 + */ + @ApiModelProperty(value = "活动开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** + * 活动结束时间 + */ + @ApiModelProperty(value = "活动结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + + +} 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 index 39e313b..fabd0c2 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/PromotionService.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/service/PromotionService.java @@ -1,8 +1,24 @@ package com.mcwl.memberCenter.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.common.core.domain.R; +import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.memberCenter.domain.MemberPromotion; import com.mcwl.memberCenter.domain.Promotion; +import java.util.List; + public interface PromotionService extends IService { + + /** + * 获取促销活动列表 + * @return TableDataInfo + */ + TableDataInfo getPromotionList(PageDomain pageDomain); + + + TableDataInfo getMyPromotionList(PageDomain pageDomain); + + R joinPromotion(Long promotionId); } 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 index 25364c1..4ff9f38 100644 --- 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 @@ -1,17 +1,210 @@ package com.mcwl.memberCenter.service.impl; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.common.constant.HttpStatus; +import com.mcwl.common.core.domain.R; +import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.page.TableDataInfo; +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.vo.PromotionVo; +import com.mcwl.memberCenter.enums.PromotionEnum; import com.mcwl.memberCenter.mapper.MemberPromotionMapper; import com.mcwl.memberCenter.mapper.PromotionMapper; import com.mcwl.memberCenter.service.MemberPromotionService; +import com.mcwl.memberCenter.service.MemberService; import com.mcwl.memberCenter.service.PromotionService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.*; + @Service @RequiredArgsConstructor public class PromotionServiceImpl extends ServiceImpl implements PromotionService { + private final MemberPromotionService memberPromotionService; + + private final MemberService memberService; + + /** + * 获取促销活动列表 + * + * @return TableDataInfo + */ + @Override + public TableDataInfo getPromotionList(PageDomain pageDomain) { + + // 封装用户参加的促销活动, key为促销活动id, value为用户参加的促销活动 + Map map = new HashMap<>(); + + // 获取用户参加的促销活动 + Long userId = SecurityUtils.getUserId(); + List memberPromotionList = memberPromotionService.lambdaQuery() + .eq(MemberPromotion::getUserId, userId) + .eq(MemberPromotion::getStatus, PromotionEnum.PARTICIPATE) + .list(); + for (MemberPromotion memberPromotion : memberPromotionList) { + map.put(memberPromotion.getPromotionId(), memberPromotion); + } + + // 查询促销活动列表 + Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); + + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.gt(Promotion::getEndTime, new Date()); + + baseMapper.selectPage(page, lqw); + + // 封装数据 + List promotionVoList = new ArrayList<>(); + page.getRecords().forEach(promotion -> { + PromotionVo promotionVo = new PromotionVo(); + BeanUtil.copyProperties(promotion, promotionVo); + if (map.containsKey(promotion.getId())) { + promotionVo.setIsJoin(1); + } else { + promotionVo.setIsJoin(0); + } + promotionVoList.add(promotionVo); + }); + + // 封装分页结果 + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("查询成功"); + rspData.setRows(promotionVoList); + rspData.setTotal(page.getTotal()); + + return rspData; + } + + /** + * 获取用户参加的促销活动 + * + * @param pageDomain 分页参数 + * @return TableDataInfo + */ + @Override + public TableDataInfo getMyPromotionList(PageDomain pageDomain) { + + // 获取当前用户 + Long userId = SecurityUtils.getUserId(); + + + List memberPromotionIds = new ArrayList<>(); + // 默认添加一个不存在的id, 防止List为空时in查询出错 + memberPromotionIds.add(-1L); + + // 查询用户参加的促销活动 + List memberPromotionList = memberPromotionService.lambdaQuery() + .eq(MemberPromotion::getUserId, userId) + .eq(MemberPromotion::getStatus, PromotionEnum.PARTICIPATE) + .list(); + for (MemberPromotion memberPromotion : memberPromotionList) { + memberPromotionIds.add(memberPromotion.getPromotionId()); + } + + // 查询促销活动列表 + Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); + + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(Promotion::getId, memberPromotionIds); + baseMapper.selectPage(page, lqw); + + // 封装数据 + List promotionVoList = new ArrayList<>(); + page.getRecords().forEach(promotion -> { + PromotionVo promotionVo = new PromotionVo(); + BeanUtil.copyProperties(promotion, promotionVo); + promotionVoList.add(promotionVo); + }); + + + // 封装分页结果 + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("查询成功"); + rspData.setRows(promotionVoList); + rspData.setTotal(page.getTotal()); + + return rspData; + } + + + /** + * 用户参加促销活动 + * + * @param promotionId 促销活动id + * @return R + */ + @Override + public R joinPromotion(Long promotionId) { + + // 用户id + Long userId = SecurityUtils.getUserId(); + + // 按活动id查询活动信息 + Promotion promotion = baseMapper.selectById(promotionId); + + if (!Optional.ofNullable(promotion).isPresent()) { + return R.fail("活动不存在"); + } + + if (promotion.getStartTime().after(new Date())) { + return R.fail("活动未开始"); + } + + // 活动是否过期 + if (promotion.getEndTime().before(new Date())) { + return R.fail("活动已过期"); + } + + // 获取当前用户是否参与过该活动 + if (isJoinPromotion(userId, promotionId)) { + return R.fail("您已参与过该活动"); + } + + // 是否在活动期间内订阅或续订会员 +// if (!isSubscribe(userId, promotion)) { +// return AjaxResult.warn("请在活动期间内订阅或续期会员后参加该活动"); +// } + + Member member = memberService.getUseUserMemberByUserId(userId); + String memberLevelId = Objects.isNull(member) ? "-1" : member.getMemberLevelId().toString(); + + String memberLevelIds = promotion.getMemberLevelIds(); + if (!memberLevelIds.contains(memberLevelId)) { + return R.fail("会员等级不够,无法参与该活动,请查看活动条件"); + } + MemberPromotion memberPromotion = getMemberPromotion(userId, promotionId); + memberPromotionService.save(memberPromotion); + + return R.ok(); + } + + + 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()); + return memberPromotion; + } + + } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java index 7d38aaa..cdf8b64 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java @@ -129,6 +129,14 @@ public class UserMemberTask { } + /** + * 会员参与的促销活动是否过期 每天晚上0点检查 0 0 0 * * ? + */ + public void checkPromotionExpiredTask() { + + } + + /** * 根据会员等级获取积分 */