瀏覽代碼

消息通知,流程表达式,巡检路线查询

lipenghui 2 月之前
父節點
當前提交
dab8b0e243
共有 15 個文件被更改,包括 168 次插入27 次删除
  1. 68 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/expression/BpmTaskByParentRoleExpression.java
  2. 4 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java
  3. 9 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/constant/PmsConstants.java
  4. 3 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/inspect/route/vo/IotInspectRoutePageReqVO.java
  5. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/failure/IotFailureReportService.java
  6. 24 21
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/failure/IotFailureReportServiceImpl.java
  7. 12 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/inspect/IotInspectOrderServiceImpl.java
  8. 6 2
      yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotInspectRouteMapper.xml
  9. 2 1
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java
  10. 16 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java
  11. 5 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/vo/message/NotifyMessageRespVO.java
  12. 9 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notify/NotifyMessageDO.java
  13. 3 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImpl.java
  14. 1 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java
  15. 5 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java

+ 68 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/expression/BpmTaskByParentRoleExpression.java

@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.expression;
+
+import cn.hutool.core.lang.Assert;
+import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
+import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import cn.iocoder.yudao.module.system.api.permission.RoleApi;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static java.util.Collections.emptySet;
+
+@Component
+public class BpmTaskByParentRoleExpression {
+    @Resource
+    private AdminUserApi adminUserApi;
+    @Resource
+    private DeptApi deptApi;
+    @Resource
+    private RoleApi roleApi;
+
+    @Resource
+    private BpmProcessInstanceService processInstanceService;
+
+    public Set<Long> calculateUsers(DelegateExecution execution, int level) {
+        Assert.isTrue(level>0, "leve必须大于0");
+        ProcessInstance processInstance = processInstanceService.getProcessInstance(execution.getProcessInstanceId());
+        Long startId = NumberUtils.parseLong(processInstance.getStartUserId());
+        DeptRespDTO dept = null;
+        for (int i = 0; i < level; i++) {
+            // 获得 level 对应的部门
+            if (dept == null) {
+                dept = getStartUserDept(startId);
+                if (dept == null) { // 找不到发起人的部门,所以无法使用该规则
+                    return emptySet();
+                }
+            } else {
+                DeptRespDTO parentDept = deptApi.getDept(dept.getParentId());
+                if (parentDept == null) { // 找不到父级部门,所以只好结束寻找。原因是:例如说,级别比较高的人,所在部门层级比较少
+                    break;
+                }
+                dept = parentDept;
+            }
+        }
+        Long deptId = dept.getId();
+        List<Long> users = adminUserApi.getUserListByDept(deptId).stream().map(AdminUserRespDTO::getId).collect(Collectors.toList());
+        List<Long> roleUserIds = roleApi.getRoleUserIds("公司设备管理");
+        Set<Long> collect = users.stream().filter(roleUserIds::contains).collect(Collectors.toSet());
+        return collect;
+    }
+
+    private DeptRespDTO getStartUserDept(Long startUserId) {
+        AdminUserRespDTO startUser = adminUserApi.getUser(startUserId);
+        if (startUser.getDeptId() == null) { // 找不到部门,所以无法使用该规则
+            return null;
+        }
+        return deptApi.getDept(startUser.getDeptId());
+    }
+}

+ 4 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.bpm.service.message;
 
+import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.web.config.WebProperties;
 import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert;
 import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum;
@@ -84,9 +85,11 @@ public class BpmMessageServiceImpl implements BpmMessageService {
         String msg = "【DeepOil】供应商审核流程 - 有新的供应商信息需要审核"+",请前往 http://1.94.244.160:91/ 处理。"+"["+new Date()+"]";
         if ("故障上报流程".equals(reqDTO.getProcessInstanceName())){
             String templateCode = "failure-report";
+            templateParams.put("businessType", "failureReport");
+            templateParams.put("businessId", reqDTO.getProcessInstanceId());
             notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
                     .setUserId(reqDTO.getAssigneeUserId()).setTemplateCode(templateCode).setTemplateParams(templateParams));
-            msg = "【PMS】故障上报流程 - 有新的故障上报需要审核"+",请前往 http://1.94.244.160:70/ 进行处理。"+"["+new Date()+"]";
+            msg = "【PMS】故障上报流程 - 有新的故障上报需要审核"+",请前往 http://1.94.244.160:70/ 进行处理。"+"["+ DateUtil.format(new Date(),"yyyy-MM-dd hh:mm:ss")+"]";
         }
         dingtalkSendApi.send(user.getMobile(), msg);
     }

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/constant/PmsConstants.java

@@ -0,0 +1,9 @@
+package cn.iocoder.yudao.module.pms.constant;
+
+public interface PmsConstants {
+    String GENERATE_INSPECT = "generateInspect";
+    String GENERATE_MAINTAIN = "generateMaintain";
+    String GENERATE_MAINTENANCE = "generateMaintenance";
+    String FAILURE_REPORT = "failureReport";
+    String GENERATE_INSPECT_TEMPLATE = "genrate-inspect";
+}

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/inspect/route/vo/IotInspectRoutePageReqVO.java

@@ -30,6 +30,9 @@ public class IotInspectRoutePageReqVO extends PageParam {
     @Schema(description = "设备名称", example = "王五")
     private String deviceName;
 
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
     @Schema(description = "巡检项")
     private String itemJson;
 

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/failure/IotFailureReportService.java

@@ -20,7 +20,7 @@ public interface IotFailureReportService {
      * 提交供应商数据审核
      *
      */
-    Long submitForApproval(Long id);
+    String submitForApproval(Long id);
     /**
      * 创建故障上报
      *

+ 24 - 21
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/failure/IotFailureReportServiceImpl.java

@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
+import cn.iocoder.yudao.module.pms.constant.PmsConstants;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportProcessVO;
 import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportSaveReqVO;
@@ -23,6 +24,7 @@ import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import cn.iocoder.yudao.module.system.api.dingtalk.DingtalkSendApi;
 import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
 import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
+import cn.iocoder.yudao.module.system.api.permission.RoleApi;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
@@ -38,6 +40,7 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_FAILURE_REPORT_NOT_EXISTS;
@@ -69,6 +72,8 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
     private IotMaintainMapper iotMaintainMapper;
     @Autowired
     private DeptApi deptApi;
+    @Autowired
+    private RoleApi roleApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -102,7 +107,7 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Long submitForApproval(Long id) {
+    public String submitForApproval(Long id) {
 //        IotFailureReportDO iotFailureReportDO = iotFailureReportMapper.selectById(id);
 //        if (Objects.isNull(iotFailureReportDO)) {throw new ServiceException(IOT_FAILURE_REPORT_NOT_EXISTS);}
         // 发起BPM流程
@@ -111,7 +116,7 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
                 new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(id)));
         // 将流程实例id 更新到 供应商主数据表
         iotFailureReportMapper.updateById(new IotFailureReportDO().setId(id).setProcessInstanceId(processInstanceId).setAuditStatus(FailureAuditStatusEnum.PROCESS.getStatus()));
-        return 0l;
+        return processInstanceId;
     }
 
     @Override
@@ -134,40 +139,38 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
                 iotFailureReport.setDealHour(v);
             }
             iotFailureReportMapper.insert(iotFailureReport);
-            sendMessage(iotFailureReport);
         } else {
             iotFailureReport.setStatus("reporting");
             iotFailureReport.setAuditStatus(FailureAuditStatusEnum.PROCESS.getStatus());
             iotFailureReportMapper.insert(iotFailureReport);
             //直接发起流程
-            submitForApproval(iotFailureReport.getId());
-            //sendMessage(iotFailureReport);
+            String processInstanceId = submitForApproval(iotFailureReport.getId());
+//            sendMessage(iotFailureReport,processInstanceId);
         }
         // 返回
         return iotFailureReport.getId();
     }
 
-    private void sendMessage(IotFailureReportDO iotFailureReport) {
+    private void sendMessage(IotFailureReportDO iotFailureReport, String processInstanceId) {
         Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
         DeptDO dept = deptService.getDept(loginUserDeptId);
-        DeptRespDTO parentDept = deptApi.getDeptNoPermission(dept.getParentId());
-        String templateCode = "failure-report"; // 站内信模版,记得在【站内信管理】中配置噢
+        Long deptId = dept.getParentId();
+        List<Long> users = adminUserApi.getUserListByDept(deptId).stream().map(AdminUserRespDTO::getId).collect(Collectors.toList());
+        List<Long> roleUserIds = roleApi.getRoleUserIds("公司设备管理");
+        Set<Long> collect = users.stream().filter(roleUserIds::contains).collect(Collectors.toSet());
         Map<String, Object> templateParams = new HashMap<>();
+        templateParams.put("businessType", PmsConstants.FAILURE_REPORT);
+        templateParams.put("businessId", processInstanceId);
         templateParams.put("name", iotFailureReport.getDeviceName());
-        CompletableFuture.runAsync(() ->{
-            if (Objects.nonNull(parentDept.getLeaderUserId())){
-//                parentDept.getLeaderUserId().forEach(e ->{
-                notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
-                        .setUserId(parentDept.getLeaderUserId()).setTemplateCode(templateCode).setTemplateParams(templateParams));
-                String msg = "【PMS】故障上报 - "+iotFailureReport.getFailureName()+"故障已解决。"+"["+new Date()+"]";
-                AdminUserRespDTO user = adminUserApi.getUser(parentDept.getLeaderUserId());
-                if (Objects.nonNull(user)) {
-                    dingtalkSendApi.send(user.getMobile(), msg);
-                }
-//                })
+        CompletableFuture.runAsync(() -> collect.forEach(e->{
+            notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
+                    .setUserId(e).setTemplateCode(PROCESS_KEY).setTemplateParams(templateParams));
+            String msg = "【PMS】您有新的故障上报 - "+iotFailureReport.getFailureName()+"流程待审批。"+"["+new Date()+"]";
+            AdminUserRespDTO user = adminUserApi.getUser(e);
+            if (Objects.nonNull(user)) {
+                dingtalkSendApi.send(user.getMobile(), msg);
             }
-
-        });
+        }));
     }
 
     @Override

+ 12 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/inspect/IotInspectOrderServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.pms.constant.PmsConstants;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
@@ -16,6 +17,8 @@ import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectOrderDetailMapper
 import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectOrderMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectPlanMapper;
 import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
+import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
+import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
@@ -61,6 +64,8 @@ public class IotInspectOrderServiceImpl implements IotInspectOrderService {
     private IotInspectPlanMapper iotInspectPlanMapper;
     @Autowired
     private IotDevicePersonService iotDevicePersonService;
+    @Autowired
+    private NotifyMessageSendApi notifyMessageSendApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -267,6 +272,13 @@ public class IotInspectOrderServiceImpl implements IotInspectOrderService {
             iotInspectOrderDetailMapper.insertBatch(results);
             iotInspectPlan.setLastCreateTime(LocalDateTime.now());
             iotInspectPlanMapper.updateById(iotInspectPlan);
+            //发送消息
+            Map<String, Object> templateParams = new HashMap<>();
+            templateParams.put("name", iotInspectOrderDO.getInspectOrderTitle());
+            templateParams.put("businessType", PmsConstants.GENERATE_INSPECT);
+            templateParams.put("businessId", iotInspectOrderDO.getId());
+            notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
+                    .setUserId(k).setTemplateCode(PmsConstants.GENERATE_INSPECT_TEMPLATE).setTemplateParams(templateParams));
         });
     }
 

+ 6 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotInspectRouteMapper.xml

@@ -15,9 +15,13 @@
 
         union all
         select route_name, device_name, device_id,id,item_json,create_time,dept_id,device_code from rq_iot_inspect_route where device_id is not null)fin
+        <where>
         <if test="reqVO.deviceName!=null and reqVO.deviceName!=''">
-            AND fin.device_name LIKE concat(concat("%",#{reqVO.deviceName}),"%")
+            and fin.device_name LIKE CONCAT('%',#{reqVO.deviceName},'%')
         </if>
-
+        <if test="reqVO.deviceCode!=null and reqVO.deviceCode!=''">
+            and fin.device_code LIKE CONCAT('%',#{reqVO.deviceCode},'%')
+        </if>
+        </where>
     </select>
 </mapper>

+ 2 - 1
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.system.api.permission;
 
 import java.util.Collection;
+import java.util.List;
 
 /**
  * 角色 API 接口
@@ -17,5 +18,5 @@ public interface RoleApi {
      * @param ids 角色编号数组
      */
     void validRoleList(Collection<Long> ids);
-
+    List<Long> getRoleUserIds(String code);
 }

+ 16 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java

@@ -1,10 +1,16 @@
 package cn.iocoder.yudao.module.system.api.permission;
 
+import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
+import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper;
 import cn.iocoder.yudao.module.system.service.permission.RoleService;
+import com.google.common.collect.ImmutableList;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 角色 API 实现类
@@ -16,9 +22,19 @@ public class RoleApiImpl implements RoleApi {
 
     @Resource
     private RoleService roleService;
+    @Resource
+    private UserRoleMapper userRoleMapper;
 
     @Override
     public void validRoleList(Collection<Long> ids) {
         roleService.validateRoleList(ids);
     }
+
+    @Override
+    public List<Long> getRoleUserIds(String code) {
+        RoleDO roleCode = roleService.getRoleByCode(code);
+        Long roleId = roleCode.getId();
+        List<Long> collect = userRoleMapper.selectListByRoleIds(ImmutableList.of(roleId)).stream().map(UserRoleDO::getUserId).collect(Collectors.toList());
+        return collect;
+    }
 }

+ 5 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/vo/message/NotifyMessageRespVO.java

@@ -46,4 +46,9 @@ public class NotifyMessageRespVO {
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime createTime;
 
+    @Schema(description = "业务类型")
+    private String businessType;
+
+    @Schema(description = "业务id")
+    private String businessId;
 }

+ 9 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/notify/NotifyMessageDO.java

@@ -98,4 +98,13 @@ public class NotifyMessageDO extends BaseDO {
      */
     private LocalDateTime readTime;
 
+    /**
+     * 业务类型
+     */
+    private String businessType;
+
+    /**
+     * 业务id
+     */
+    private String businessId;
 }

+ 3 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImpl.java

@@ -13,6 +13,7 @@ import javax.annotation.Resource;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * 站内信 Service 实现类
@@ -32,7 +33,8 @@ public class NotifyMessageServiceImpl implements NotifyMessageService {
         NotifyMessageDO message = new NotifyMessageDO().setUserId(userId).setUserType(userType)
                 .setTemplateId(template.getId()).setTemplateCode(template.getCode())
                 .setTemplateType(template.getType()).setTemplateNickname(template.getNickname())
-                .setTemplateContent(templateContent).setTemplateParams(templateParams).setReadStatus(false);
+                .setTemplateContent(templateContent).setTemplateParams(templateParams).setReadStatus(false).setBusinessType(Objects.nonNull(templateParams.get("businessType"))?String.valueOf(templateParams.get("businessType")):null)
+                .setBusinessId(Objects.nonNull(templateParams.get("businessId"))?String.valueOf(templateParams.get("businessId")):"");
         notifyMessageMapper.insert(message);
         return message.getId();
     }

+ 1 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java

@@ -57,6 +57,7 @@ public interface RoleService {
      */
     RoleDO getRole(Long id);
 
+    RoleDO getRoleByCode(String code);
     /**
      * 获得角色,从缓存中
      *

+ 5 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java

@@ -177,6 +177,11 @@ public class RoleServiceImpl implements RoleService {
         return roleMapper.selectById(id);
     }
 
+    @Override
+    public RoleDO getRoleByCode(String code) {
+        return roleMapper.selectByCode(code);
+    }
+
     @Override
     @Cacheable(value = RedisKeyConstants.ROLE, key = "#id",
             unless = "#result == null")