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