|
@@ -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());
|
|
|
+ }
|
|
|
}
|