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>