From b71d11796454bb3d844be6e00cfb4c877519870d Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 16 Dec 2024 15:52:53 +0800
Subject: [PATCH] feat(mall): 添加 VIP购买相关接口和功能

---
 src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java |   37 ++++++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java |   44 ++++++++++++++
 src/main/java/cc/mrbird/febs/mall/conversion/RunVipConversion.java    |   15 +++++
 src/main/java/cc/mrbird/febs/common/enumerates/YesOrNoEnum.java       |   23 +++++++
 src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java         |   11 +++
 src/main/java/cc/mrbird/febs/mall/vo/ApiRunVipVo.java                 |   39 +++++++++++++
 6 files changed, 169 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/YesOrNoEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/YesOrNoEnum.java
new file mode 100644
index 0000000..fdee3bf
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/YesOrNoEnum.java
@@ -0,0 +1,23 @@
+package cc.mrbird.febs.common.enumerates;
+
+import lombok.Getter;
+
+@Getter
+public enum YesOrNoEnum {
+
+    /**
+     *  是否,同意拒绝,上线下线
+     */
+    YES(1, "是"),
+
+    NO(0, "否");
+
+    private final int value;
+
+    private final String desc;
+
+    YesOrNoEnum(int value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java
new file mode 100644
index 0000000..d2dfb14
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java
@@ -0,0 +1,37 @@
+package cc.mrbird.febs.mall.controller;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.mall.service.IRunVipService;
+import cc.mrbird.febs.mall.vo.ApiRunVipVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@Validated
+@RestController
+@CrossOrigin("*")
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/runVip")
+@Api(value = "ApiRunVipController", tags = "碳积分接口")
+public class ApiRunVipController {
+
+    private final IRunVipService iRunVipService;
+
+    @ApiOperation(value = "会员中心-购买VIP", notes = "会员中心-购买VIP")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiRunVipVo.class)
+    })
+    @GetMapping(value = "/vipInfo")
+    public FebsResponse vipInfo() {
+        return new FebsResponse().success().data(iRunVipService.vipInfo());
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/RunVipConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/RunVipConversion.java
new file mode 100644
index 0000000..043e458
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/conversion/RunVipConversion.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.mall.conversion;
+
+import cc.mrbird.febs.mall.entity.RunVip;
+import cc.mrbird.febs.mall.vo.ApiRunVipVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public abstract class RunVipConversion {
+    public static final RunVipConversion INSTANCE = Mappers.getMapper(RunVipConversion.class);
+
+    public abstract List<ApiRunVipVo> entityToVos(List<RunVip> runVips);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java b/src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java
new file mode 100644
index 0000000..beefd97
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java
@@ -0,0 +1,11 @@
+package cc.mrbird.febs.mall.service;
+
+import cc.mrbird.febs.mall.entity.RunVip;
+import cc.mrbird.febs.mall.vo.ApiRunVipVo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface IRunVipService extends IService<RunVip> {
+    List<ApiRunVipVo> vipInfo();
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
new file mode 100644
index 0000000..f1d39ed
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
@@ -0,0 +1,44 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.common.enumerates.YesOrNoEnum;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.mall.conversion.RunVipConversion;
+import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.entity.RunVip;
+import cc.mrbird.febs.mall.mapper.RunVipMapper;
+import cc.mrbird.febs.mall.service.IRunVipService;
+import cc.mrbird.febs.mall.vo.ApiRunVipVo;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class RunVipServiceImpl extends ServiceImpl<RunVipMapper, RunVip> implements IRunVipService {
+    @Override
+    public List<ApiRunVipVo> vipInfo() {
+        MallMember member = LoginUserUtil.getLoginUser();
+        List<ApiRunVipVo> apiRunVipVos = new ArrayList<>();
+        if (StrUtil.isEmpty(member.getLevel())) {
+            return apiRunVipVos;
+        }
+        String level = member.getLevel();
+        //获取当前用户的VIP等级
+        RunVip runVip = this.baseMapper.selectOne(new LambdaQueryWrapper<RunVip>().eq(RunVip::getVipCode, level));
+        //获取大于当前用户等级序号的所有的VIP等级
+        LambdaQueryWrapper<RunVip> runVipLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        runVipLambdaQueryWrapper.eq(RunVip::getState, YesOrNoEnum.YES.getValue());
+        runVipLambdaQueryWrapper.gt(RunVip::getOrderNumber, runVip.getOrderNumber());
+        List<RunVip> runVips = this.baseMapper.selectList(runVipLambdaQueryWrapper);
+        apiRunVipVos = RunVipConversion.INSTANCE.entityToVos(runVips);
+
+        return apiRunVipVos;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiRunVipVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiRunVipVo.java
new file mode 100644
index 0000000..c24e9c6
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiRunVipVo.java
@@ -0,0 +1,39 @@
+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 = "ApiRunVipVo", description = "VIP信息")
+public class ApiRunVipVo {
+
+    @ApiModelProperty(value = "ID")
+    private Long id;
+    @ApiModelProperty(value = "序号")
+    private Integer orderNumber;//序号
+    @ApiModelProperty(value = "vip编码")
+    private String vipCode;//vip编码
+    @ApiModelProperty(value = "vip名称")
+    private String vipName;//vip名称
+    @ApiModelProperty(value = "vip图标")
+    private String vipPng;//vip图标
+    @ApiModelProperty(value = "原价")
+    private BigDecimal originalPrice;//原价
+    @ApiModelProperty(value = "现价")
+    private BigDecimal presentPrice;//现价
+    @ApiModelProperty(value = "是否上架 1是0否")
+    private Integer state;//是否上架 1是0否
+    @ApiModelProperty(value = "是否允许碳积分兑换碳币 1是0否")
+    private Integer changeState;//是否允许碳积分兑换碳币 1是0否
+    @ApiModelProperty(value = "是否允许碳币提现 1是0否")
+    private Integer withdrawState;//是否允许碳币提现 1是0否
+    @ApiModelProperty(value = "每日碳积分增长倍数")
+    private BigDecimal growthValue;//每日碳积分增长倍数
+    @ApiModelProperty(value = "每日获取碳积分最大值")
+    private Integer growthCnt;//每日获取碳积分最大值
+    @ApiModelProperty(value = "购买会员返利金额比例(实际支付金额 * rebatePercent = 返利金额)")
+    private BigDecimal rebatePercent;//购买会员返利金额比例(实际支付金额 * rebatePercent = 返利金额)
+}

--
Gitblit v1.9.1