Quellcode durchsuchen

优化主管返回审批逻辑

hubin vor 1 Jahr
Ursprung
Commit
70589e93ba

+ 41 - 9
src/main/java/com/aizuda/boot/modules/flw/flow/FlowTaskActorProvider.java

@@ -2,24 +2,44 @@ package com.aizuda.boot.modules.flw.flow;
 
 import com.aizuda.boot.modules.system.entity.vo.DepartmentHeadVO;
 import com.aizuda.boot.modules.system.service.ISysDepartmentService;
-import com.aizuda.core.api.ApiAssert;
-import com.aizuda.service.spring.SpringHelper;
-import com.aizuda.service.web.UserSession;
+import com.aizuda.boot.modules.system.service.ISysUserRoleService;
 import com.aizuda.bpm.engine.TaskActorProvider;
 import com.aizuda.bpm.engine.assist.ObjectUtils;
 import com.aizuda.bpm.engine.core.Execution;
+import com.aizuda.bpm.engine.core.FlowCreator;
 import com.aizuda.bpm.engine.entity.FlwTaskActor;
+import com.aizuda.bpm.engine.model.NodeAssignee;
 import com.aizuda.bpm.engine.model.NodeModel;
+import com.aizuda.core.api.ApiAssert;
+import com.aizuda.service.spring.SpringHelper;
+import com.aizuda.service.web.UserSession;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 @Component
 public class FlowTaskActorProvider implements TaskActorProvider {
 
+    @Override
+    public boolean isAllowed(NodeModel nodeModel, FlowCreator flowCreator) {
+        List<NodeAssignee> nodeUserList = nodeModel.getNodeUserList();
+        if (ObjectUtils.isNotEmpty(nodeUserList)) {
+            return nodeUserList.stream().anyMatch((t) -> Objects.equals(t.getId(), flowCreator.getCreateId()));
+        }
+
+        if (ObjectUtils.isNotEmpty(nodeModel.getNodeRoleList())) {
+            ISysUserRoleService sysUserRoleService = SpringHelper.getBean(ISysUserRoleService.class);
+            List<Long> roleIds = nodeModel.getNodeRoleList().stream().map(t -> Long.valueOf(t.getId())).toList();
+            ApiAssert.fail(!sysUserRoleService.existRoles(Long.valueOf(flowCreator.getCreateId()), roleIds), "当前用户无操作权限");
+        }
+        return true;
+    }
+
     @Override
     public List<FlwTaskActor> getTaskActors(NodeModel nodeModel, Execution execution) {
         if (nodeModel.getType() == 0) {
@@ -40,14 +60,13 @@ public class FlowTaskActorProvider implements TaskActorProvider {
              */
             if (Objects.equals(nodeModel.getSetType(), 2)) {
                 // 2,主管
-                UserSession userSession = UserSession.getLoginInfo();
-                DepartmentHeadVO vo = SpringHelper.getBean(ISysDepartmentService.class).getDepartmentHeadByUserId(userSession.getId());
-                ApiAssert.isEmpty(vo, "请设置直接主管信息");
-                return Collections.singletonList(vo.toFlwTaskActor());
+                return getDepartmentHeadInfo(nodeModel.getExamineLevel(), false, () -> "请设置直接主管信息");
             } else if (Objects.equals(nodeModel.getSetType(), 5)) {
                 // 5,发起人自己
-
-                return null;
+                return Collections.singletonList(FlowHelper.getFlwTaskActor());
+            } else if (Objects.equals(nodeModel.getSetType(), 7)) {
+                // 7,连续多级主管
+                return getDepartmentHeadInfo(nodeModel.getExamineLevel(), true, () -> "未找到任何主管信息");
             }
         }
         if (ObjectUtils.isNotEmpty(nodeModel.getNodeUserList())) {
@@ -58,4 +77,17 @@ public class FlowTaskActorProvider implements TaskActorProvider {
         }
         return null;
     }
+
+    /**
+     * 获取部门主管信息
+     */
+    private List<FlwTaskActor> getDepartmentHeadInfo(Integer examineLevel, boolean multiLevel, Supplier<String> supplier) {
+        UserSession userSession = UserSession.getLoginInfo();
+        ISysDepartmentService sysDepartmentService = SpringHelper.getBean(ISysDepartmentService.class);
+        List<DepartmentHeadVO> voList = sysDepartmentService.getDepartmentHeadInfo(userSession.getId(), examineLevel, multiLevel);
+        if (CollectionUtils.isEmpty(voList)) {
+            ApiAssert.fail(supplier.get());
+        }
+        return voList.stream().map(DepartmentHeadVO::toFlwTaskActor).collect(Collectors.toList());
+    }
 }

+ 5 - 1
src/main/java/com/aizuda/boot/modules/system/service/ISysDepartmentService.java

@@ -32,6 +32,10 @@ public interface ISysDepartmentService extends IBaseService<SysDepartment> {
 
     /**
      * 获取部门主管信息
+     *
+     * @param userId       用户ID
+     * @param examineLevel 指定主管层级
+     * @param multiLevel   连续多级主管
      */
-    DepartmentHeadVO getDepartmentHeadByUserId(Long userId);
+    List<DepartmentHeadVO> getDepartmentHeadInfo(Long userId, Integer examineLevel, boolean multiLevel);
 }

+ 5 - 0
src/main/java/com/aizuda/boot/modules/system/service/ISysUserRoleService.java

@@ -39,4 +39,9 @@ public interface ISysUserRoleService extends IBaseService<SysUserRole> {
      * @param roleId 角色ID
      */
     boolean existRelByRoleId(Long roleId);
+
+    /**
+     * 判断用户是否拥有角色
+     */
+    boolean existRoles(Long userId, List<Long> roleIds);
 }

+ 3 - 2
src/main/java/com/aizuda/boot/modules/system/service/impl/SysDepartmentServiceImpl.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.stereotype.Service;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
@@ -96,7 +97,7 @@ public class SysDepartmentServiceImpl extends BaseServiceImpl<SysDepartmentMappe
     }
 
     @Override
-    public DepartmentHeadVO getDepartmentHeadByUserId(Long userId) {
-        return baseMapper.selectDepartmentHeadByUserId(userId);
+    public List<DepartmentHeadVO> getDepartmentHeadInfo(Long userId, Integer examineLevel, boolean multiLevel) {
+        return Collections.singletonList(baseMapper.selectDepartmentHeadByUserId(userId));
     }
 }

+ 6 - 0
src/main/java/com/aizuda/boot/modules/system/service/impl/SysUserRoleServiceImpl.java

@@ -72,4 +72,10 @@ public class SysUserRoleServiceImpl extends BaseServiceImpl<SysUserRoleMapper, S
     public boolean existRelByRoleId(Long roleId) {
         return lambdaQuery().eq(SysUserRole::getRoleId, roleId).count() > 0;
     }
+
+    @Override
+    public boolean existRoles(Long userId, List<Long> roleIds) {
+        return lambdaQuery().eq(SysUserRole::getUserId, userId)
+                .in(SysUserRole::getRoleId, roleIds).count() > 0;
+    }
 }

+ 1 - 1
src/main/java/com/aizuda/boot/modules/system/service/impl/SysUserServiceImpl.java

@@ -99,7 +99,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser>
     }
 
     protected void checkPassword(String password) {
-        ApiAssert.fail(!RegexUtils.isPassword(password), "登录密码必须为6-20位大小写字母数字特殊字符组合");
+        ApiAssert.fail(!RegexUtils.isPassword(password), "登录密码必须为6-20位大小写字母数字特殊字符组合不包含@符合");
     }
 
     protected String encodePassword(String username, String salt, String password) {