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