zxl
2025-06-04 33aa0f005c1952dda7dc1f713b424a6700a6befd
用户权限管理(商家)
2个文件已修改
9个文件已添加
595 ■■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/StoreMemberController.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreMember.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/form/StoreMemberForm.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreMemberQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreMemberVO.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/StoreMemberMapper.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/StoreMemberService.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreMemberServiceImpl.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/service/MemberService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/StoreMemberMapper.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/lmk/StoreMemberController.java
New file
@@ -0,0 +1,75 @@
package cn.lili.controller.lmk;
import cn.lili.base.Result;
import cn.lili.group.Add;
import cn.lili.group.Update;
import cn.lili.modules.lmk.domain.form.StoreMemberForm;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import cn.lili.modules.lmk.service.StoreMemberService;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import lombok.RequiredArgsConstructor;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
/**
 * 用户权限管理(商家) 前端控制器
 *
 * @author zxl
 * @since 2025-05-30
 */
@Validated
@RequiredArgsConstructor
@Api(value = "用户权限管理(商家)", tags = "用户权限管理(商家)管理")
@RestController
@RequestMapping("/buyer/lmk/lmk-user-permissions")
public class StoreMemberController {
    // store_member
    private final StoreMemberService storeMemberService;
    @PostMapping
    @ApiOperation(value = "添加", notes = "添加")
    public Result add(@RequestBody @Validated(Add.class) StoreMemberForm form) {
        return storeMemberService.add(form);
    }
    @PutMapping
    @ApiOperation(value = "修改", notes = "修改")
    public Result update(@RequestBody @Validated(Update.class) StoreMemberForm form) {
        return storeMemberService.update(form);
    }
    @DeleteMapping("/{id}")
    @ApiOperation(value = "ID删除", notes = "ID删除")
    public Result removeById(@PathVariable("id") String id) {
        return storeMemberService.removeById(id);
    }
    @DeleteMapping("/batch")
    @ApiOperation(value = "批量删除", notes = "批量删除")
    public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List<String> ids) {
        return storeMemberService.remove(ids);
    }
    @GetMapping("/page")
    @ApiOperation(value = "分页", notes = "分页")
    public Result page(StoreMemberQuery query) {
        return storeMemberService.page(query);
    }
    @GetMapping("/{id}")
    @ApiOperation(value = "详情", notes = "详情")
    public Result detail(@PathVariable("id") String id) {
        return storeMemberService.detail(id);
    }
    @GetMapping("/list")
    @ApiOperation(value = "列表", notes = "列表")
    public Result list() {
        return storeMemberService.all();
    }
}
framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreMember.java
New file
@@ -0,0 +1,35 @@
package cn.lili.modules.lmk.domain.entity;
import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
/**
 * 用户权限管理(商家)
 *
 * @author zxl
 * @since 2025-05-30
 */
@Data
@TableName("lmk_store_member")
public class StoreMember extends BaseEntity {
    private static final long serialVersionUID = 1L;
    @TableField("real_name")
    /** 真实姓名 */
    private String realName;
    @TableField("role")
    /** 角色 */
    private String role;
    @TableField("member_id")
    /** 会员用户id */
    private String memberId;
    /** 商户id */
    @TableField("store_id")
    private String storeId;
}
framework/src/main/java/cn/lili/modules/lmk/domain/form/StoreMemberForm.java
New file
@@ -0,0 +1,51 @@
package cn.lili.modules.lmk.domain.form;
import cn.lili.base.AbsForm;
import cn.lili.group.Add;
import cn.lili.group.Update;
import cn.lili.modules.lmk.domain.entity.StoreMember;
import org.springframework.beans.BeanUtils;
import javax.validation.constraints.NotBlank;
import org.springframework.lang.NonNull;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * 用户权限管理(商家)表单
 *
 * @author zxl
 * @since 2025-05-30
 */
@Data
@ApiModel(value = "LmkUserPermissions表单", description = "用户权限管理(商家)表单")
public class StoreMemberForm extends AbsForm {
    @NotBlank(message = "真实姓名不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("真实姓名")
    private String realName;
    @NotBlank(message = "电话号码不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("电话号码")
    private String mobile;
    @NotBlank(message = "密码不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("密码")
    private String password;
    @NotBlank(message = "角色不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("角色Json字符串")
    private String role;
    public static StoreMember getEntityByForm(@NonNull StoreMemberForm form, StoreMember entity) {
        if(entity == null) {
          entity = new StoreMember();
        }
        BeanUtils.copyProperties(form, entity);
        return entity;
    }
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreMemberQuery.java
New file
@@ -0,0 +1,22 @@
package cn.lili.modules.lmk.domain.query;
import cn.lili.base.AbsQuery;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
 * 用户权限管理(商家)查询
 *
 * @author zxl
 * @since 2025-05-30
 */
@Data
@ApiModel(value = "LmkUserPermissions查询参数", description = "用户权限管理(商家)查询参数")
public class StoreMemberQuery extends AbsQuery {
    /** 真实姓名*/
    private String realName;
    /** 店铺id */
    private String storeId;
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreMemberVO.java
New file
@@ -0,0 +1,58 @@
package cn.lili.modules.lmk.domain.vo;
import cn.lili.base.AbsVo;
import cn.lili.modules.lmk.domain.entity.StoreMember;
import org.springframework.lang.NonNull;
import org.springframework.beans.BeanUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * 用户权限管理(商家)展示
 *
 * @author zxl
 * @since 2025-05-30
 */
@Data
@ApiModel(value = "用户权限管理(商家)响应数据", description = "用户权限管理(商家)响应数据")
public class StoreMemberVO extends AbsVo {
    /** 电话 */
    @ApiModelProperty("电话")
    private String mobile;
    /** 用户名 */
    @ApiModelProperty("用户名")
    private String userName;
    /** 真实姓名 */
    @ApiModelProperty("真实姓名")
    private String realName;
    /** 密码 */
    @ApiModelProperty("密码")
    private String password;
    /** 角色 */
    @ApiModelProperty("角色")
    private String role;
    /** 用户id */
    @ApiModelProperty("用户id")
    private String memberId;
    /** 店铺id */
    @ApiModelProperty("店铺id")
    private String storeId;
    public static StoreMemberVO getVoByEntity(@NonNull StoreMember entity, StoreMemberVO vo) {
        if(vo == null) {
            vo = new StoreMemberVO();
        }
        BeanUtils.copyProperties(entity, vo);
        return vo;
    }
}
framework/src/main/java/cn/lili/modules/lmk/mapper/StoreMemberMapper.java
New file
@@ -0,0 +1,33 @@
package cn.lili.modules.lmk.mapper;
import cn.lili.modules.lmk.domain.entity.StoreMember;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import cn.lili.modules.lmk.domain.vo.StoreMemberVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * 用户权限管理(商家) Mapper 接口
 *
 * @author zxl
 * @since 2025-05-30
 */
@Mapper
public interface StoreMemberMapper extends BaseMapper<StoreMember> {
    /**
     * id查找用户权限管理(商家)
     * @param id
     * @return
     */
    StoreMemberVO getById(String id);
    /**
    *  分页
    */
    IPage getPage(IPage page, @Param("query") StoreMemberQuery query);
}
framework/src/main/java/cn/lili/modules/lmk/service/StoreMemberService.java
New file
@@ -0,0 +1,67 @@
package cn.lili.modules.lmk.service;
import cn.lili.base.Result;
import cn.lili.modules.lmk.domain.entity.StoreMember;
import cn.lili.modules.lmk.domain.form.StoreMemberForm;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * 用户权限管理(商家) 服务类
 *
 * @author zxl
 * @since 2025-05-30
 */
public interface StoreMemberService extends IService<StoreMember> {
    /**
     * 添加
     * @param form
     * @return
     */
    Result add(StoreMemberForm form);
    /**
     * 修改
     * @param form
     * @return
     */
    Result update(StoreMemberForm form);
    /**
     * 批量删除
     * @param ids
     * @return
     */
    Result remove(List<String> ids);
    /**
     * id删除
     * @param id
     * @return
     */
    Result removeById(String id);
    /**
     * 分页查询
     * @param query
     * @return
     */
    Result page(StoreMemberQuery query);
    /**
     * 根据id查找
     * @param id
     * @return
     */
    Result detail(String id);
    /**
     * 列表
     * @return
     */
    Result all();
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreMemberServiceImpl.java
New file
@@ -0,0 +1,169 @@
package cn.lili.modules.lmk.service.impl;
import cn.lili.base.Result;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.modules.lmk.domain.entity.StoreMember;
import cn.lili.modules.lmk.domain.form.StoreMemberForm;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import cn.lili.modules.lmk.domain.vo.StoreMemberVO;
import cn.lili.modules.lmk.mapper.StoreMemberMapper;
import cn.lili.modules.lmk.service.StoreMemberService;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO;
import cn.lili.modules.member.entity.dto.MemberAddDTO;
import cn.lili.modules.member.service.MemberService;
import cn.lili.utils.PageUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.util.Assert;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 用户权限管理(商家) 服务实现类
 *
 * @author zxl
 * @since 2025-05-30
 */
@Service
@RequiredArgsConstructor
public class StoreMemberServiceImpl extends ServiceImpl<StoreMemberMapper, StoreMember> implements StoreMemberService {
    private final StoreMemberMapper storeMemberMapper;
    private final MemberService memberService;
    /**
     * 添加
     * @param form
     * @return
     */
    @Override
    public Result add(StoreMemberForm form) {
        //插入到用户表中
        AuthUser currentUser = UserContext.getCurrentUser();
        String id = currentUser.getId();
//        String storeId = currentUser.getStoreId();
        String storeId = "12312323123";
        if (id == null || storeId == null) {
            return Result.error("当前登录账户未绑定商户或用户id获取异常");
        }
        //插入会员表
        MemberAddDTO addDTO = new MemberAddDTO();
        addDTO.setMobile(form.getMobile());
        addDTO.setPassword(form.getPassword());
        addDTO.setUsername(form.getMobile());
        Member member = memberService.addMember(addDTO);
        //插入用户权限表
        //id插入问题
        StoreMember entity = StoreMemberForm.getEntityByForm(form, null);
        entity.setMemberId(member.getId());
        entity.setStoreId(storeId);
        baseMapper.insert(entity);
        return Result.ok("添加成功");
    }
    /**
     * 修改
     * @param form
     * @return
     */
    @Override
    public Result update(StoreMemberForm form) {
        StoreMember entity = baseMapper.selectById(form.getId());
        //TODO 是否需要判断密码新密码
        //会员修改密码,电话
        memberService.updateMemberPartProperties(entity.getMemberId(),form.getPassword(),form.getMobile());
        //修改真实姓名
        entity.setRealName(form.getRealName());
        entity.setRole(form.getRole());
        baseMapper.updateById(entity);
        return Result.ok("修改成功");
    }
    /**
     * 批量删除
     * @param ids
     * @return
     */
    @Override
    public Result remove(List<String> ids) {
        baseMapper.deleteBatchIds(ids);
        return Result.ok("删除成功");
    }
    /**
     * id删除
     * @param id
     * @return
     */
    @Override
    public Result removeById(String id) {
        StoreMember entity = baseMapper.selectById(id);
        memberService.removeById(entity.getMemberId());
        baseMapper.deleteById(id);
        //同时删除用户
        return Result.ok("删除成功");
    }
    /**
     * 分页查询
     * @param query
     * @return
     */
    @Override
    public Result page(StoreMemberQuery query) {
        AuthUser currentUser = UserContext.getCurrentUser();
//        String storeId = currentUser.getStoreId();
        String storeId = "12312323123";
        if (storeId == null) {
            return Result.error("当前登录账户未绑定商户或用户id获取异常");
        }
        IPage<StoreMemberVO> page = PageUtil.getPage(query, StoreMemberVO.class);
        query.setStoreId(storeId);
        baseMapper.getPage(page, query);
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
    /**
     * 根据id查找
     * @param id
     * @return
     */
    @Override
    public Result detail(String id) {
        StoreMemberVO vo = baseMapper.getById(id);
        //密码是否需要解密
        Assert.notNull(vo, "记录不存在");
        return Result.ok().data(vo);
    }
    /**
     * 列表
     * @return
     */
    @Override
    public Result all() {
        List<StoreMember> entities = baseMapper.selectList(null);
        List<StoreMemberVO> vos = entities.stream()
                .map(entity -> StoreMemberVO.getVoByEntity(entity, null))
                .collect(Collectors.toList());
        return Result.ok().data(vos);
    }
}
framework/src/main/java/cn/lili/modules/member/service/MemberService.java
@@ -27,6 +27,15 @@
 */
public interface MemberService extends IService<Member> {
    /**
     * 用户权限管理修改用户
     * @param id 会员id
     * @param password 密码
     * @param mobile 电话(账号)
     * @return
     */
    Member updateMemberPartProperties(String id,String password,String mobile);
    /**
     * 默认密码
     */
    static String DEFAULT_PASSWORD = "111111";
framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -502,6 +502,21 @@
        return member;
    }
    @Override
    public Member updateMemberPartProperties(String id,String password,String mobile) {
        //查询会员信息
        Member member = this.getById(id);
        //如果密码不为空则加密密码
        if (CharSequenceUtil.isNotBlank(password)) {
            member.setPassword(new BCryptPasswordEncoder().encode(password));
        }
        member.setMobile(mobile);
        member.setUsername(mobile);
        this.updateById(member);
        return member;
    }
    @Override
    public IPage<MemberVO> getMemberPage(MemberSearchVO memberSearchVO, PageVO page) {
        QueryWrapper<Member> queryWrapper = Wrappers.query();
framework/src/main/resources/mapper/lmk/StoreMemberMapper.xml
New file
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.lili.modules.lmk.mapper.StoreMemberMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.StoreMemberVO">
        <result column="real_name" property="realName" />
        <result column="mobile" property="mobile" />
        <result column="password" property="password" />
        <result column="role" property="role" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="delete_flag" property="deleteFlag" />
        <result column="store_id" property="storeId" />
        <result column="member_id" property="memberId" />
        <result column="username" property="userName" />
    </resultMap>
    <select id="getById" resultMap="BaseResultMap">
        SELECT
            LSM.id,
            LSM.real_name,
            LSM.role,
            LSM.store_id,
            LSM.member_id,
            LM.mobile,
            LM.username
        FROM lmk_store_member LSM
        LEFT JOIN li_member LM
        ON LM.id = LSM.member_id
        where LSM.delete_flag = 0
        AND LM.delete_flag = 0
        AND LSM.id = #{id}
    </select>
    <select id="getPage" resultMap="BaseResultMap">
        SELECT
            LSM.id,
            LSM.real_name,
            LSM.role,
            LSM.store_id,
            LSM.member_id,
            LM.mobile,
            LM.username
        FROM lmk_store_member LSM
        LEFT JOIN li_member LM
        ON LM.id = LSM.member_id
        where LSM.delete_flag = 0
        AND LM.delete_flag = 0
        <if test="query.realName != null and query.realName != ''">
            AND LSM.real_name LIKE CONCAT('%', #{query.realName}, '%')
        </if>
        AND LSM.store_id = #{query.storeId}
    </select>
</mapper>