Administrator
2025-05-14 986e0dd18f9715d77e3b77292cb9c0dfecc815fa
feat(mall): 添加会员等级列表接口并更新相关模型

- 在 ApiSaleService 中添加 memberLevelList 方法
- 新增 ApiMemberLevelController 控制器处理会员等级列表请求
- 创建 ApiMemberLevelListInfoVo 类用于会员等级列表响应
- 更新 ApiLevelListInfoVo 类,添加当前等级编码字段
- 实现会员等级列表接口,包括用户当前等级和升级所需积分等信息
3 files modified
2 files added
123 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/member/ApiMemberLevelController.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/ApiSaleService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiSaleServiceImpl.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/memberLevel/ApiMemberLevelListInfoVo.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/sale/ApiLevelListInfoVo.java 5 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/member/ApiMemberLevelController.java
New file
@@ -0,0 +1,37 @@
package cc.mrbird.febs.mall.controller.member;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.service.ApiSaleService;
import cc.mrbird.febs.mall.vo.memberLevel.ApiMemberLevelListInfoVo;
import cc.mrbird.febs.mall.vo.sale.ApiLevelListInfoVo;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@Validated
@RequestMapping(value = "/api/memberLevel")
@RequiredArgsConstructor
@Api(value = "ApiMemberLevelController", tags = "365会员中心")
public class ApiMemberLevelController {
    private final ApiSaleService apiSaleService;
    @ApiOperation(value = "等级说明", notes = "等级说明")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiMemberLevelListInfoVo.class)
    })
    @PostMapping(value = "/memberLevelList")
    public FebsResponse memberLevelList() {
        return apiSaleService.memberLevelList();
    }
}
src/main/java/cc/mrbird/febs/mall/service/ApiSaleService.java
@@ -22,4 +22,6 @@
    FebsResponse levelInfoList();
    FebsResponse saleRecord(ApiSaleRecordInfoDto dto);
    FebsResponse memberLevelList();
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiSaleServiceImpl.java
@@ -8,10 +8,13 @@
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.ApiSaleService;
import cc.mrbird.febs.mall.vo.memberLevel.ApiMemberLevelListInfoVo;
import cc.mrbird.febs.mall.vo.sale.*;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -30,6 +33,7 @@
public class ApiSaleServiceImpl extends ServiceImpl<MallMemberMapper, MallMember> implements ApiSaleService {
    private final HappySaleLevelMapper happySaleLevelMapper;
    private final HappyMemberLevelMapper happyMemberLevelMapper;
    private final MallAchieveRecordMapper mallAchieveRecordMapper;
    private final MallMemberWalletMapper mallMemberWalletMapper;
    @Override
@@ -142,6 +146,10 @@
    public FebsResponse levelInfoList() {
        ArrayList<ApiLevelListInfoVo> apiLevelListInfoVos = new ArrayList<>();
        // 获取当前登录用户的ID
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = this.baseMapper.selectById(memberId);
        List<HappySaleLevel> happySaleLevels = happySaleLevelMapper.selectList(
                new LambdaQueryWrapper<HappySaleLevel>()
                        .orderByAsc(HappySaleLevel::getCode)
@@ -150,6 +158,7 @@
            happySaleLevels.forEach(happySaleLevel -> {
                ApiLevelListInfoVo apiLevelListInfoVo = new ApiLevelListInfoVo();
                apiLevelListInfoVo.setName(happySaleLevel.getName());
                apiLevelListInfoVo.setMemberCode(mallMember.getStoreMaster());
                apiLevelListInfoVo.setCode(happySaleLevel.getCode());
                apiLevelListInfoVo.setContent(happySaleLevel.getContent());
                apiLevelListInfoVo.setIconPng(happySaleLevel.getIconPng());
@@ -262,6 +271,37 @@
        return new FebsResponse().success().data(apiSaleRecordInfoVo);
    }
    @Override
    public FebsResponse memberLevelList() {
        ArrayList<ApiMemberLevelListInfoVo> apiLevelListInfoVos = new ArrayList<>();
        // 获取当前登录用户的ID
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = this.baseMapper.selectById(memberId);
        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
        List<HappyMemberLevel> happyMemberLevels = happyMemberLevelMapper.selectList(
                new LambdaQueryWrapper<HappyMemberLevel>()
                        .orderByAsc(HappyMemberLevel::getCode)
        );
        //Stream  操作 happyMemberLevels,返回一个Map<code,HappyMemberLevel>
        Map<Integer, HappyMemberLevel> happyMemberLevelMap = happyMemberLevels.stream()
                .collect(Collectors.toMap(HappyMemberLevel::getCode, happyMemberLevel -> happyMemberLevel));
        if (CollUtil.isNotEmpty(happyMemberLevels)) {
            happyMemberLevels.forEach(happyMemberLevel -> {
                ApiMemberLevelListInfoVo vo = new ApiMemberLevelListInfoVo();
                BeanUtil.copyProperties(happyMemberLevel, vo);
                vo.setMemberCode(mallMember.getDirector());
                vo.setMemberScore(mallMemberWallet.getScore());
                vo.setUpgradeScore(
                        ObjectUtil.isEmpty(happyMemberLevelMap.get(happyMemberLevel.getCode() + 1)) ?
                                 0 : happyMemberLevelMap.get(happyMemberLevel.getCode() + 1).getUpgradeScore()
            );
                apiLevelListInfoVos.add(vo);
            });
        }
        return new FebsResponse().success().data(apiLevelListInfoVos);
    }
}
src/main/java/cc/mrbird/febs/mall/vo/memberLevel/ApiMemberLevelListInfoVo.java
New file
@@ -0,0 +1,39 @@
package cc.mrbird.febs.mall.vo.memberLevel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(value = "ApiMemberLevelListInfoVo", description = "")
public class ApiMemberLevelListInfoVo {
    @ApiModelProperty(value = "等级名称")
    private String name;
    @ApiModelProperty(value = "等级图片")
    private String headerPng;
    @ApiModelProperty(value = "等级编码")
    private Integer code;
    @ApiModelProperty(value = "当前等级编码")
    private Integer memberCode;
    @ApiModelProperty(value = "升级所需积分,0不显示")
    private BigDecimal memberScore;
    @ApiModelProperty(value = "升级所需积分,0不显示")
    private Integer upgradeScore;
    @ApiModelProperty(value = "自己下单返积分的比例,0则不显示这个权益")
    private BigDecimal minePercent;
    @ApiModelProperty(value = "邀请好友下单后返积分比例,0则不显示这个权益")
    private BigDecimal otherPercent;
    @ApiModelProperty(value = "规则说明")
    private String content;
}
src/main/java/cc/mrbird/febs/mall/vo/sale/ApiLevelListInfoVo.java
@@ -10,7 +10,10 @@
    @ApiModelProperty(value = "等级名称")
    private String name;
    @ApiModelProperty(value = "分销等级(当前等级等于我的推广接口中的分销等级)")
    @ApiModelProperty(value = "当前等级编码")
    private Integer memberCode;
    @ApiModelProperty(value = "分销等级")
    private Integer code;
    @ApiModelProperty(value = "规则说明")
    private String content;