Administrator
16 hours ago 258dc93217e5af0bbe79802a665ef77e62fe7bc0
feat(member): 添加会员角色管理功能

- 新增 memberRoleAll 接口用于获取公司下所有会员角色
- 集成 AiMemberRole 相关实体和映射器实现角色数据查询
- 修改前端界面将会员等级相关文字更新为角色
- 更新 VIP 等级设置页面标题和标签显示
- 使用 MyBatis-Plus LambdaUpdateWrapper 优化数据库更新操作
- 移除不必要的 Excel 导入相关依赖包
6 files modified
65 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/member/AdminMallMemberController.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/memberLevel/AdminHappyMemberLevelController.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/AdminMemberLevelService.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMemberLevelServiceImpl.java 15 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html 4 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/mallMember/vip-level-setting.html 6 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/member/AdminMallMemberController.java
@@ -15,6 +15,7 @@
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@@ -656,9 +657,11 @@
    @PostMapping("vipLevelSetUpdate")
    public FebsResponse vipLevelSetUpdate(MallMember member) {
        MallMember mallMember = mallMemberService.getBaseMapper().selectById(member.getId());
        mallMember.setDirector(member.getDirector());
        mallMemberService.updateById(mallMember);
        mallMemberService.getBaseMapper().update(null,
                Wrappers.lambdaUpdate(MallMember.class)
                .set(MallMember::getDirector, member.getDirector())
                .eq(MallMember::getId, member.getId())
                );
        return new FebsResponse().success().message("操作成功");
    }
src/main/java/cc/mrbird/febs/mall/controller/memberLevel/AdminHappyMemberLevelController.java
@@ -5,34 +5,15 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.excl.ExcelSheetPO;
import cc.mrbird.febs.common.utils.excl.ExcelUtil;
import cc.mrbird.febs.common.utils.excl.ExcelVersion;
import cc.mrbird.febs.common.utils.excl.ResponseHeadUtil;
import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto;
import cc.mrbird.febs.mall.dto.activity.*;
import cc.mrbird.febs.mall.dto.memberLevel.*;
import cc.mrbird.febs.mall.entity.HappyActivity;
import cc.mrbird.febs.mall.entity.HappyActivityOption;
import cc.mrbird.febs.mall.service.AdminMemberLevelService;
import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
import cc.mrbird.febs.mall.vo.memberLevel.AdminMemberLabelSetDto;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@@ -139,6 +120,17 @@
        return adminMemberLevelService.levelAll();
    }
    /**
     * 会员等级-获取全部
     * @return
     */
    @GetMapping(value = "/memberRoleAll")
    public FebsResponse memberRoleAll() {
        String companyId = getCurrentUserCompanyId();
        return adminMemberLevelService.memberRoleAll(companyId);
    }
    /**
src/main/java/cc/mrbird/febs/mall/service/AdminMemberLevelService.java
@@ -29,6 +29,7 @@
    FebsResponse labelMemberSet(AdminMemberLabelSetDto dto);
    FebsResponse levelAll();
    FebsResponse memberRoleAll(String companyId);
    IPage<HappySaleLevel> getSaleLevelListInPage(AdminSaleLevelDto dto, QueryRequest request);
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMemberLevelServiceImpl.java
@@ -1,5 +1,7 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.ai.entity.AiMemberRole;
import cc.mrbird.febs.ai.mapper.AiMemberRoleMapper;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.StateUpDownEnum;
@@ -37,6 +39,7 @@
    private final HappySaleLevelMapper happySaleLevelMapper;
    private final HappyMemberLabelMapper happyMemberLabelMapper;
    private final HappyMemberLabelRecordMapper happyMemberLabelRecordMapper;
    private final AiMemberRoleMapper aiMemberRoleMapper;
    @Override
    public IPage<HappyMemberLevel> getLevelListInPage(AdminMemberLevelDto dto, QueryRequest request) {
@@ -152,6 +155,18 @@
    }
    @Override
    public FebsResponse memberRoleAll(String companyId) {
        LambdaQueryWrapper<AiMemberRole> aiMemberRoleLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberRole.class);
        aiMemberRoleLambdaQueryWrapper.select(AiMemberRole::getId, AiMemberRole::getName);
        if (StrUtil.isNotBlank(companyId)){
            aiMemberRoleLambdaQueryWrapper.eq(AiMemberRole::getCompanyId, companyId);
        }
        aiMemberRoleLambdaQueryWrapper.orderByAsc(AiMemberRole::getSort);
        List<AiMemberRole> aiMemberRoles = aiMemberRoleMapper.selectList(aiMemberRoleLambdaQueryWrapper);
        return new FebsResponse().success().data(aiMemberRoles);
    }
    @Override
    public IPage<HappySaleLevel> getSaleLevelListInPage(AdminSaleLevelDto dto, QueryRequest request) {
        Page<HappySaleLevel> page = new Page<>(request.getPageNum(), request.getPageSize());
src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html
@@ -133,7 +133,7 @@
<script type="text/html" id="memberToolbar">
    <div class="layui-btn-container">
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="updateReferer">修改推荐人</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="updateMemberLevel:update" lay-event="updateMemberLevel">修改会员等级</button>-->
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="updateMemberLevel">修改角色</button>
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="updateSaleLevel:update" lay-event="updateSaleLevel">修改分销等级</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="wallet:update" lay-event="balance">余额修改</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="wallet:update" lay-event="prizeScore">积分修改</button>-->
@@ -475,7 +475,7 @@
                    febs.alert.warn('每次只能修改一个用户');
                    return;
                }
                febs.modal.open('设置会员等级', 'modules/mallMember/vipLevelSetting/' + checkData[0].id, {
                febs.modal.open('角色设置', 'modules/mallMember/vipLevelSetting/' + checkData[0].id, {
                    btn: ['确认', '取消'],
                    yes: function (index, layero) {
                        $('#vip-level-set').find('#submit').trigger('click');
src/main/resources/templates/febs/views/modules/mallMember/vip-level-setting.html
@@ -27,7 +27,7 @@
        </div>
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">会员等级:</label>
                <label class="layui-form-label">角色:</label>
                <div class="layui-input-inline">
                    <select lay-verify="required" name="director" class="vip-level-set-level" id="levelSet">
                        <option value="">请选择</option>
@@ -67,11 +67,11 @@
        }
        //(下拉框)
        $.get(ctx + 'admin/level/levelAll', function (res) {
        $.get(ctx + 'admin/level/memberRoleAll', function (res) {
            var data = res.data;
            for (var k in data)
            {
                $(".vip-level-set-level").append("<option value='" + data[k].code + "'>" + data[k].name + "</option>");
                $(".vip-level-set-level").append("<option value='" + data[k].id + "'>" + data[k].name + "</option>");
            }
            layui.use('form', function () {
                var form = layui.form;