mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	feat: 添加查找用户的处理器,用于在bpmn中辅助查找用户
This commit is contained in:
		| @@ -0,0 +1,67 @@ | ||||
| package cn.iocoder.yudao.module.bpm.framework.flowable.core.handler; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.iocoder.yudao.framework.flowable.core.enums.ProcessConstants; | ||||
| import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | ||||
| import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ||||
| import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | ||||
| import jakarta.annotation.Resource; | ||||
| import lombok.AllArgsConstructor; | ||||
| import org.flowable.bpmn.model.FlowElement; | ||||
| import org.flowable.bpmn.model.UserTask; | ||||
| import org.flowable.engine.delegate.DelegateExecution; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.LinkedHashSet; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | ||||
|  | ||||
| /** | ||||
|  * 多实例处理类 | ||||
|  */ | ||||
| @AllArgsConstructor | ||||
| @Component("multiInstanceHandler") | ||||
| public class MultiInstanceHandler { | ||||
|  | ||||
|     @Resource | ||||
|     private AdminUserApi userApi; | ||||
|  | ||||
|     @Resource | ||||
|     private PermissionApi permissionApi; | ||||
|  | ||||
|     public Set<String> getUserIds(DelegateExecution execution) { | ||||
|         Set<String> candidateUserIds = new LinkedHashSet<>(); | ||||
|         FlowElement flowElement = execution.getCurrentFlowElement(); | ||||
|         if (ObjectUtil.isNotEmpty(flowElement) && flowElement instanceof UserTask userTask) { | ||||
|             String dataType = userTask.getAttributeValue(ProcessConstants.NAMESPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); | ||||
|             if ("USERS".equals(dataType) && CollUtil.isNotEmpty(userTask.getCandidateUsers())) { | ||||
|                 // 添加候选用户id | ||||
|                 candidateUserIds.addAll(userTask.getCandidateUsers()); | ||||
|             } else if (CollUtil.isNotEmpty(userTask.getCandidateGroups())) { | ||||
|                 // 获取组的ID,角色ID集合或部门ID集合 | ||||
|                 List<Long> groups = userTask.getCandidateGroups().stream() | ||||
|                         // 例如部门DEPT100,100才是部门id | ||||
|                         .map(item -> Long.parseLong(item.substring(4))) | ||||
|                         .collect(Collectors.toList()); | ||||
|                 List<Long> userIds = new ArrayList<>(); | ||||
|                 if ("ROLES".equals(dataType)) { | ||||
|                     // 通过角色id,获取所有用户id集合 | ||||
|                     Set<Long> userRoleIdListByRoleIds = permissionApi.getUserRoleIdListByRoleIds(groups); | ||||
|                     userIds = new ArrayList<>(userRoleIdListByRoleIds); | ||||
|                 } else if ("DEPTS".equals(dataType)) { | ||||
|                     // 通过部门id,获取所有用户id集合 | ||||
|                     List<AdminUserRespDTO> userListByDeptIds = userApi.getUserListByDeptIds(groups); | ||||
|                     userIds = convertList(userListByDeptIds, AdminUserRespDTO::getId); | ||||
|                 } | ||||
|                 // 添加候选用户id | ||||
|                 userIds.forEach(id -> candidateUserIds.add(String.valueOf(id))); | ||||
|             } | ||||
|         } | ||||
|         return candidateUserIds; | ||||
|     } | ||||
| } | ||||
| @@ -5,8 +5,8 @@ import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.object.PageUtils; | ||||
| import cn.iocoder.yudao.framework.flowable.core.enums.ProcessConstants; | ||||
| import cn.iocoder.yudao.framework.flowable.core.util.BpmnModelUtils; | ||||
| import cn.iocoder.yudao.framework.flowable.core.util.FlowableUtils; | ||||
| import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; | ||||
| import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO; | ||||
| import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO; | ||||
| @@ -17,6 +17,8 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; | ||||
| import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; | ||||
| import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; | ||||
| import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO; | ||||
| import jakarta.annotation.Resource; | ||||
| import jakarta.validation.Valid; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.flowable.bpmn.converter.BpmnXMLConverter; | ||||
| import org.flowable.bpmn.model.BpmnModel; | ||||
| @@ -29,13 +31,10 @@ import org.flowable.engine.repository.ProcessDefinitionQuery; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import jakarta.annotation.Resource; | ||||
| import jakarta.validation.Valid; | ||||
| import java.util.*; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | ||||
| import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; | ||||
| import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; | ||||
| import static java.util.Collections.emptyList; | ||||
| @@ -53,8 +52,6 @@ import static java.util.Collections.emptyList; | ||||
| @Slf4j | ||||
| public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionService { | ||||
|  | ||||
|     private static final String BPMN_FILE_SUFFIX = ".bpmn"; | ||||
|  | ||||
|     @Resource | ||||
|     private RepositoryService repositoryService; | ||||
|  | ||||
| @@ -125,7 +122,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ | ||||
|         // 创建 Deployment 部署 | ||||
|         Deployment deploy = repositoryService.createDeployment() | ||||
|                 .key(createReqDTO.getKey()).name(createReqDTO.getName()).category(createReqDTO.getCategory()) | ||||
|                 .addBytes(createReqDTO.getKey() + BPMN_FILE_SUFFIX, createReqDTO.getBpmnBytes()) | ||||
|                 .addBytes(createReqDTO.getKey() + ProcessConstants.BPMN_FILE_SUFFIX, createReqDTO.getBpmnBytes()) | ||||
|                 .tenantId(TenantContextHolder.getTenantIdStr()) | ||||
|                 .deploy(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 kyle
					kyle