From d175d1a66a53a46f182316680afd8a9bf6314ea0 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 08 Jan 2025 16:14:51 +0800 Subject: [PATCH] feat(mall): 添加优惠券相关功能 --- src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCouponConversion.java | 17 +++++ src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java | 59 ++++++++++++++++++- src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java | 19 ++++++ src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java | 10 ++- src/main/java/cc/mrbird/febs/mall/vo/ApiCouponVo.java | 25 ++++++++ 5 files changed, 121 insertions(+), 9 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java index 860cb91..e1fa7ef 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java @@ -1,8 +1,11 @@ package cc.mrbird.febs.mall.controller; +import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.mall.service.IApiMallActService; import cc.mrbird.febs.mall.vo.ApiActivityVo; +import cc.mrbird.febs.mall.vo.ApiCouponVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; @@ -26,9 +29,23 @@ @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiActivityVo.class) }) - @GetMapping(value = "/getActiy/{id}") + @GetMapping(value = "/getActivity/{id}") public FebsResponse getActivity(@PathVariable("id") Long id) { return new FebsResponse().success().data(iApiMallActService.findApiMallActDetailsById(id)); } + @ApiOperation(value = "优惠卷详情", notes = "优惠卷详情") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiCouponVo.class) + }) + @GetMapping(value = "/getCoupon/{id}") + public FebsResponse getCoupon(@PathVariable("id") Long id) { + return new FebsResponse().success().data(iApiMallActService.findApiCouponById(id)); + } + @ApiOperation(value = "领取优惠卷", notes = "领取优惠卷") + @GetMapping(value = "/addCoupon/{id}") + @Limit(key = "addCoupon", period = 10, count = 1, name = "领取优惠卷", prefix = "limit",limitType = LimitType.IP) + public FebsResponse addCoupon(@PathVariable("id") Long id) { + return iApiMallActService.addCoupon(id); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCouponConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCouponConversion.java new file mode 100644 index 0000000..f4c879d --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCouponConversion.java @@ -0,0 +1,17 @@ +package cc.mrbird.febs.mall.conversion; + +import cc.mrbird.febs.mall.entity.MallGoodsCoupon; +import cc.mrbird.febs.mall.vo.ApiCouponVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author wzy + * @date 2021-09-18 + **/ +@Mapper +public abstract class MallGoodsCouponConversion { + public static final MallGoodsCouponConversion INSTANCE = Mappers.getMapper(MallGoodsCouponConversion.class); + + public abstract ApiCouponVo entityToApiCouponVo(MallGoodsCoupon mallGoodsCoupon); +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java index 3b11a9d..629fc1b 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java @@ -1,11 +1,9 @@ package cc.mrbird.febs.mall.service; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.ApiMallActListDto; import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto; -import cc.mrbird.febs.mall.vo.ApiActivityVo; -import cc.mrbird.febs.mall.vo.ApiMallActListVo; -import cc.mrbird.febs.mall.vo.ApiMallActWinDetailsVo; -import cc.mrbird.febs.mall.vo.ApiMallAwardDetailsVo; +import cc.mrbird.febs.mall.vo.*; import com.baomidou.mybatisplus.core.metadata.IPage; public interface IApiMallActService { @@ -17,4 +15,8 @@ IPage<ApiMallActWinDetailsVo> findApiMallActWinDetailsInPage(ApiMallActWinDetailsDto apiMallActWinDetailsDto); ApiMallAwardDetailsVo luckDraw(long actId); + + ApiCouponVo findApiCouponById(Long id); + + FebsResponse addCoupon(Long id); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java index 4e54820..0113b5d 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java @@ -1,11 +1,13 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.mall.conversion.MallActivityConversion; +import cc.mrbird.febs.mall.conversion.MallGoodsCouponConversion; import cc.mrbird.febs.mall.dto.ApiMallActListDto; import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto; import cc.mrbird.febs.mall.entity.*; @@ -13,13 +15,13 @@ import cc.mrbird.febs.mall.service.IApiMallActService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; -import cc.mrbird.febs.mall.vo.ApiActivityVo; -import cc.mrbird.febs.mall.vo.ApiMallActListVo; -import cc.mrbird.febs.mall.vo.ApiMallActWinDetailsVo; -import cc.mrbird.febs.mall.vo.ApiMallAwardDetailsVo; +import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -46,6 +48,8 @@ private final IMallMoneyFlowService mallMoneyFlowService; private final IApiMallMemberWalletService mallMemberWalletService; private final MallActivityMapper mallActivityMapper; + private final MallGoodsCouponMapper mallGoodsCouponMapper; + private final MallMemberCouponMapper mallMemberCouponMapper; @Override public IPage<ApiMallActListVo> findApiMallActListInPage(ApiMallActListDto apiMallActListDto) { @@ -552,5 +556,52 @@ return apiMallAwardDetailsVo; } + @Override + public ApiCouponVo findApiCouponById(Long id) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + + MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(id); + ApiCouponVo apiCouponVo = MallGoodsCouponConversion.INSTANCE.entityToApiCouponVo(mallGoodsCoupon); + List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectList( + new LambdaQueryWrapper<MallMemberCoupon>() + .eq(MallMemberCoupon::getMemberId, memberId) + .eq(MallMemberCoupon::getCouponId, id) + ); + if(CollUtil.isNotEmpty(mallMemberCoupons)){ + apiCouponVo.setState(1); + }else{ + apiCouponVo.setState(0); + } + return apiCouponVo; + } + + @Override + public FebsResponse addCoupon(Long couponId) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId); + if(mallGoodsCoupon.getState() == 2){ + List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectList( + new LambdaQueryWrapper<MallMemberCoupon>() + .eq(MallMemberCoupon::getMemberId, memberId) + .eq(MallMemberCoupon::getCouponId, couponId) + ); + if(CollUtil.isNotEmpty(mallMemberCoupons)){ + return new FebsResponse().fail().message("优惠卷已领取,请刷新当前页面"); + } + + MallMemberCoupon memberCoupon = new MallMemberCoupon(); + memberCoupon.setMemberId(memberId); + memberCoupon.setCouponId(couponId); + memberCoupon.setCouponName(mallGoodsCoupon.getName()); + memberCoupon.setCouponUuid(IdUtil.simpleUUID()); + memberCoupon.setState(1); + memberCoupon.setFromType(1); + memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), mallGoodsCoupon.getExpireDay())); + mallMemberCouponMapper.insert(memberCoupon); + return new FebsResponse().success().message("操作成功"); + } + return new FebsResponse().fail().message("优惠卷已失效,请刷新当前页面"); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiCouponVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiCouponVo.java new file mode 100644 index 0000000..7b38c7c --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiCouponVo.java @@ -0,0 +1,25 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "ApiCouponVo", description = "信息返回类") +public class ApiCouponVo { + + @ApiModelProperty(value = "名称") + private String name; + @ApiModelProperty(value = "过期天数") + private Integer expireDay; + @ApiModelProperty(value = "类型 1:满100只减10 2:每满100减10") + private Integer type; + @ApiModelProperty(value = "1:已领取 0:未领取") + private Integer state; + @ApiModelProperty(value = "满足金额") + private BigDecimal costAmount; + @ApiModelProperty(value = "减免金额") + private BigDecimal realAmount; +} -- Gitblit v1.9.1