Quellcode durchsuchen

token、菜单权限

wuhongshuang vor 3 Jahren
Ursprung
Commit
cf592e2eaf

+ 1 - 1
README.md

@@ -1,6 +1,6 @@
 # szwlServer 申泽移动物联
 ## 功能设计文档
-UI图:https://lanhuapp.com/url/rk4hO-Av0mUD
+UI:https://lanhuapp.com/url/i9MYZ
 文档:https://docs.qq.com/doc/DUEtOTHB3TlpyT1Ri
 UI图:https://lanhuapp.com/url/rk4hO-Av0mUD
 

+ 1 - 1
src/main/java/com/szwl/annotation/Audit.java

@@ -7,7 +7,7 @@ import java.lang.annotation.*;
 /**
  * 审计日志
  *
- * @author PT-ZHOUYUHENG
+ * @author wuhs
  * @date 2022-05-17 11:40
  */
 @Target({ElementType.METHOD})

+ 1 - 1
src/main/java/com/szwl/aspect/AuditAspect.java

@@ -33,7 +33,7 @@ import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 /**
- * @author PT-ZHOUYUHENG
+ * @author wuhs
  * @date 2022-05-17 11:45
  */
 @Aspect

+ 1 - 1
src/main/java/com/szwl/aspect/HeadTokenInterceptor.java

@@ -27,7 +27,7 @@ public class HeadTokenInterceptor implements HandlerInterceptor {
         if(tokenManager.checkToken(request)){
             return true;
         }
-        throw new BizException(ResponseCodesEnum.L0005);
+        throw new BizException(ResponseCodesEnum.L0006);
     }
     //controller执行之后,且页面渲染之前调用
     @Override

+ 1 - 1
src/main/java/com/szwl/constant/AuditEnum.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.IEnum;
 /**
  * 审计日志类别
  *
- * @author PT-ZHOUYUHENG
+ * @author wuhs
  * @date 2022-05-17 11:29
  */
 public enum AuditEnum implements IEnum<String> {

+ 72 - 0
src/main/java/com/szwl/constant/MenuEnum.java

@@ -0,0 +1,72 @@
+package com.szwl.constant;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.szwl.model.dto.OptionDTO;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 权限菜单
+ * @author wuhs
+ * @date 2022-05-17 11:29
+ */
+public enum MenuEnum implements IEnum<String> {
+
+    M1("M1","设备管理"),
+    M2("M2","设备查看"),
+    M3("M3","分销设置"),
+    M4("M4","报警历史"),
+    M5("M5","广告管理"),
+    M6("M6","任务消息"),
+    M7("M7", "优惠码"),
+    M8("M8", "账号权限"),
+    M9("M9", "订单导出"),
+    M10("M10", "杉德分账"),
+    M11("M11", "销售排行"),
+    M12("M12", "提现账号"),
+    M13("M13", "备用提现账号"),
+    M14("M14", "数据概览"),
+    M15("M15", "订单数据"),
+    M16("M16", "订单退款")
+    ;
+    private String code;
+
+    private String desc;
+
+    MenuEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+    // 普通方法
+    public static List<OptionDTO> enumToOptionList() {
+        List<OptionDTO> list = new ArrayList<>();
+        for (MenuEnum c : MenuEnum.values()) {
+            OptionDTO map = new OptionDTO();
+            map.setValue(c.code);
+            map.setLabel(c.desc);
+            list.add(map);
+        }
+        return list;
+    }
+    @Override
+    public String getValue() {
+        return this.code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 72 - 0
src/main/java/com/szwl/controller/SysRoleMenuController.java

@@ -0,0 +1,72 @@
+package com.szwl.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.gexin.fastjson.JSON;
+import com.szwl.annotation.Audit;
+import com.szwl.constant.AuditEnum;
+import com.szwl.constant.MenuEnum;
+import com.szwl.constant.ResponseCodesEnum;
+import com.szwl.exception.BizException;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.dto.OptionDTO;
+import com.szwl.model.entity.SysRole;
+import com.szwl.model.param.AddSysRoleParam;
+import com.szwl.model.param.UpdateSysRoleParam;
+import com.szwl.service.SysRoleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/sysRoleMenu")
+@Api(value = "/sysRoleMenu", tags = {"角色权限菜单"})
+public class SysRoleMenuController {
+    @Autowired
+    SysRoleService sysRoleService;
+
+    @GetMapping("/listMenuOption")
+    @ApiOperation("获取所有菜单下拉框")
+    public ResponseModel<List<OptionDTO>> listMenuOption() {
+        List<OptionDTO> list = MenuEnum.enumToOptionList();
+        return R.ok(list);
+    }
+
+    @GetMapping("/listRoleOption")
+    @ApiOperation("获取所有角色下拉框")
+    public ResponseModel<List<OptionDTO>> listRoleOption() {
+        List<OptionDTO> list = sysRoleService.list()
+                .stream()
+                .map(e -> new OptionDTO()
+                        .setLabel(e.getRoleName())
+                        .setValue(e.getRoleId())
+                ).collect(Collectors.toList());
+        return R.ok(list);
+    }
+
+    @PostMapping("/addSysRole")
+    @ApiOperation("新增角色及权限菜单")
+    @Audit(type = AuditEnum.INSERT,content = "#loginUser.name + '新增角色及权限菜单'")
+    public ResponseModel<?> addSysRole(@RequestBody @Valid AddSysRoleParam param) {
+        sysRoleService.addSysRole(param);
+        return R.ok();
+    }
+
+    @PostMapping("/updateSysRole")
+    @ApiOperation("修改角色及权限菜单")
+    @Audit(type = AuditEnum.UPDATE,content = "#loginUser.name + '修改角色及权限菜单'")
+    public ResponseModel<?> updateSysRole(@RequestBody @Valid UpdateSysRoleParam param) {
+        sysRoleService.updateSysRole(param);
+        return R.ok();
+    }
+}
+

+ 52 - 3
src/main/java/com/szwl/controller/TAdminController.java

@@ -2,6 +2,7 @@ package com.szwl.controller;
 
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -14,20 +15,26 @@ import com.szwl.manager.TokenManager;
 import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.bo.UserDetailBO;
+import com.szwl.model.entity.SysUserRole;
 import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.TMessageCode;
+import com.szwl.model.param.AddLoginUserParam;
+import com.szwl.service.SysRoleService;
+import com.szwl.service.SysUserRoleService;
 import com.szwl.service.TAdminService;
 import com.szwl.service.TMessageCodeService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import javax.validation.Valid;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -37,19 +44,57 @@ import java.util.Optional;
  * @author wuhs
  * @since 2022-04-14
  */
+@Slf4j
 @Api(value = "/tAdmin", tags = {"账户"})
 @RestController
 @RequestMapping("/tAdmin")
 public class TAdminController {
     @Autowired
+    SysRoleService sysRoleService;
+    @Autowired
+    SysUserRoleService sysUserRoleService;
+    @Autowired
     TokenManager tokenManager;
     @Autowired
     TAdminService tAdminService;
     @Autowired
     TMessageCodeService tMessageCodeService;
 
+    @ApiOperation(value = "添加账号")
+    @PostMapping("/addLoginUser")
+    @Transactional
+    @Audit(type = AuditEnum.INSERT,content = "#loginUser.name + '添加账号'")
+    public ResponseModel<?> addLoginUser(@RequestBody @Valid AddLoginUserParam param) {
+        //获取当前操作人员
+        UserDetailBO loginUser = tokenManager.getLoginUserDetails();
+        // 保存用户实体
+        Date now = new Date();
+        TAdmin entity = BeanUtil.copyProperties(param,TAdmin.class);
+        entity.setParentId(loginUser.getId());
+        entity.setIsAdmined(true);
+        entity.setCreateDate(now);
+        entity.setModifyDate(now);
+        entity.setIsLocked(false);
+        entity.setLoginFailureCount(0);
+
+        tAdminService.save(entity);
+        log.debug("添加账号 id:{},TAdmin:{}",entity.getId(),entity);
+        // 保存用户角色关系
+        List<SysUserRole> userRoleList = param.getRoleList()
+                .stream()
+                .map(e -> new SysUserRole().setRoleId(e).setUserId(String.valueOf(entity.getId())) )
+                .collect(Collectors.toList());
+
+        if(CollUtil.isNotEmpty(userRoleList)){
+            sysUserRoleService.saveBatch(userRoleList);
+        }
+        return R.ok(entity);
+    }
+
+
     @ApiOperation(value = "注册")
     @PostMapping("/save")
+    @Transactional
     public ResponseModel<?> save(@RequestBody TAdmin admin) {
         if(StringUtils.isEmpty(admin.getUsername())||StringUtils.isEmpty(admin.getName())||StringUtils.isEmpty(admin.getPassword())){
             return R.fail(ResponseCodesEnum.A0100,"数据有空!");
@@ -138,8 +183,12 @@ public class TAdminController {
         TAdmin tAdmin = Optional.ofNullable(tAdminService.getOnly(query))
                 .orElseThrow(() -> new BizException(ResponseCodesEnum.L0002));
         UserDetailBO userDetailBO = BeanUtil.copyProperties(tAdmin,UserDetailBO.class);
+
         String token = IdUtil.simpleUUID();
         userDetailBO.setCurrentToken(token);
+        // 获取拥有的权限菜单
+        Set<String> menuList = sysRoleService.listAuthMenuByUserId(userDetailBO.getId());
+        userDetailBO.setMenuCodeList(CollUtil.newArrayList(menuList));
         // 保存到redis
         tokenManager.saveAuthentication(token,userDetailBO);
         return R.ok(userDetailBO);

+ 16 - 0
src/main/java/com/szwl/mapper/SysRoleMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.SysRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+public interface SysRoleMapper extends BaseMapper<SysRole> {
+
+}

+ 16 - 0
src/main/java/com/szwl/mapper/SysUserRoleMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.SysUserRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+
+}

+ 6 - 0
src/main/java/com/szwl/model/bo/UserDetailBO.java

@@ -1,8 +1,11 @@
 package com.szwl.model.bo;
 
 import com.szwl.model.entity.TAdmin;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class UserDetailBO extends TAdmin {
     /**
@@ -14,4 +17,7 @@ public class UserDetailBO extends TAdmin {
      * 当前token
      */
     private String currentToken;
+
+    @ApiModelProperty("菜单code list")
+    List<String> menuCodeList;
 }

+ 16 - 0
src/main/java/com/szwl/model/dto/OptionDTO.java

@@ -0,0 +1,16 @@
+package com.szwl.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@ApiModel(value="OptionDTO 对象", description="下拉选项")
+@Data
+@Accessors(chain = true)
+public class OptionDTO {
+    @ApiModelProperty(value = "label")
+    String label;
+    @ApiModelProperty(value = "value")
+    String value;
+}

+ 41 - 0
src/main/java/com/szwl/model/entity/SysRole.java

@@ -0,0 +1,41 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+@Accessors(chain = true)
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="SysRole对象", description="")
+public class SysRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "ROLE_ID", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "角色id")
+    private String roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "权限菜单json")
+    private String menuCodesJson;
+}

+ 40 - 0
src/main/java/com/szwl/model/entity/SysUserRole.java

@@ -0,0 +1,40 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+@Accessors(chain = true)
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="SysUserRole对象", description="")
+public class SysUserRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "ID", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+
+    @ApiModelProperty(value = "角色id")
+    private String roleId;
+
+
+}

+ 38 - 0
src/main/java/com/szwl/model/param/AddLoginUserParam.java

@@ -0,0 +1,38 @@
+package com.szwl.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Accessors(chain = true)
+@ApiModel(description = "添加账号 参数")
+@Data
+public class AddLoginUserParam {
+    @NotBlank(message = "账号 不能为空")
+    @ApiModelProperty(value = "登录名、账号")
+    private String username;
+
+    @NotBlank(message = "密码 不能为空")
+    @ApiModelProperty("密码")
+    private String password;
+
+    @ApiModelProperty(value = "真实姓名")
+    private String name;
+
+    @ApiModelProperty(value = "邮箱")
+    private String email;
+
+    @NotNull
+    @ApiModelProperty(value = "是否启用")
+    private Boolean isEnabled;
+
+    @NotEmpty(message = "请选择角色")
+    @ApiModelProperty("角色id list")
+    List<String> roleList;
+}

+ 26 - 0
src/main/java/com/szwl/model/param/AddSysRoleParam.java

@@ -0,0 +1,26 @@
+package com.szwl.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@Accessors(chain = true)
+@ApiModel(description = "新增角色权限菜单 参数")
+@Data
+public class AddSysRoleParam {
+    @NotBlank(message = "角色名称 不能为空")
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty("角色备注")
+    private String remark;
+
+    @NotEmpty(message = "请选择权限菜单")
+    @ApiModelProperty("菜单code list")
+    List<String> menuCodeList;
+}

+ 27 - 0
src/main/java/com/szwl/model/param/UpdateSysRoleParam.java

@@ -0,0 +1,27 @@
+package com.szwl.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@Accessors(chain = true)
+@ApiModel(description = "修改角色权限菜单 参数")
+@Data
+public class UpdateSysRoleParam {
+    @NotBlank
+    @ApiModelProperty(value = "角色id")
+    private String roleId;
+
+    @NotBlank(message = "角色名称 不能为空")
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @NotEmpty(message = "请选择权限菜单")
+    @ApiModelProperty("菜单code list")
+    List<String> menuCodeList;
+}

+ 27 - 0
src/main/java/com/szwl/service/SysRoleService.java

@@ -0,0 +1,27 @@
+package com.szwl.service;
+
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.SysRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.szwl.model.param.AddSysRoleParam;
+import com.szwl.model.param.UpdateSysRoleParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.Set;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+public interface SysRoleService extends IService<SysRole> {
+    Set<String> listAuthMenuByUserId(Long userId);
+    void addSysRole(AddSysRoleParam param);
+    void updateSysRole(UpdateSysRoleParam param);
+}

+ 16 - 0
src/main/java/com/szwl/service/SysUserRoleService.java

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.SysUserRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+public interface SysUserRoleService extends IService<SysUserRole> {
+
+}

+ 93 - 0
src/main/java/com/szwl/service/impl/SysRoleServiceImpl.java

@@ -0,0 +1,93 @@
+package com.szwl.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.gexin.fastjson.JSON;
+import com.gexin.fastjson.JSONArray;
+import com.szwl.constant.ResponseCodesEnum;
+import com.szwl.exception.BizException;
+import com.szwl.model.entity.SysRole;
+import com.szwl.mapper.SysRoleMapper;
+import com.szwl.model.entity.SysUserRole;
+import com.szwl.model.param.AddSysRoleParam;
+import com.szwl.model.param.UpdateSysRoleParam;
+import com.szwl.service.SysRoleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.szwl.service.SysUserRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+@Service
+public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
+    @Autowired
+    SysUserRoleService sysUserRoleService;
+    /**
+     * 获取用户所有有权限的菜单
+     * @param userId
+     * @return
+     */
+    @Override
+    public Set<String> listAuthMenuByUserId(Long userId){
+        Set<String> menuList_final = new HashSet<>();
+        // 查询用户的全部角色
+        LambdaQueryWrapper<SysUserRole> query = Wrappers.lambdaQuery();
+        query.eq(SysUserRole::getUserId,userId);
+        List<String> roleIdList = sysUserRoleService.list(query).stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
+        if(CollUtil.isEmpty(roleIdList)){
+            return menuList_final;
+        }
+        List<SysRole> roleList = listByIds(roleIdList);
+        for (SysRole role:roleList) {
+            List<String> menuList = JSON.parseArray(role.getMenuCodesJson(),String.class);
+            CollUtil.addAll(menuList_final,menuList);
+        }
+        return menuList_final;
+    }
+
+    public void checkRoleName(String roleName){
+        LambdaQueryWrapper<SysRole> query = Wrappers.lambdaQuery();
+        query.eq(SysRole::getRoleName, roleName);
+        int count = this.count(query);
+        if(count>0){
+            throw new BizException(ResponseCodesEnum.B0002,"角色名称已存在");
+        }
+    }
+
+    @Override
+    @Transactional
+    public void addSysRole(AddSysRoleParam param){
+        this.checkRoleName(param.getRoleName());
+        SysRole sysRole = new SysRole()
+                .setRoleName(param.getRoleName())
+                .setMenuCodesJson(JSON.toJSONString(param.getMenuCodeList()))
+                .setRemark(param.getRemark());
+        save(sysRole);
+    }
+    @Override
+    @Transactional
+    public void updateSysRole(UpdateSysRoleParam param){
+        SysRole sysRole = Optional.ofNullable(this.getById(param.getRoleId()))
+                .orElseThrow(() ->new BizException(ResponseCodesEnum.B0005,"无法根据id:"+param.getRoleId()+" 找到角色配置"));
+        if(StrUtil.equals(param.getRoleName(),sysRole.getRoleName())){
+            this.checkRoleName(param.getRoleName());
+        }
+        BeanUtil.copyProperties(param,sysRole);
+        sysRole.setMenuCodesJson(JSON.toJSONString(param.getMenuCodeList()));
+        updateById(sysRole);
+    }
+}

+ 26 - 0
src/main/java/com/szwl/service/impl/SysUserRoleServiceImpl.java

@@ -0,0 +1,26 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.SysUserRole;
+import com.szwl.mapper.SysUserRoleMapper;
+import com.szwl.model.param.AddSysRoleParam;
+import com.szwl.model.param.UpdateSysRoleParam;
+import com.szwl.service.SysUserRoleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.beans.Transient;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-17
+ */
+@Service
+public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {
+
+}