diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java index f367c77b9..27eaadb1b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java @@ -1,10 +1,14 @@ package org.dromara.workflow.controller; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; import com.warm.flow.core.dto.FlowParams; import com.warm.flow.core.dto.ModifyHandler; import com.warm.flow.core.entity.Instance; import com.warm.flow.core.entity.Task; import com.warm.flow.core.enums.CooperateType; +import com.warm.flow.core.enums.FlowStatus; +import com.warm.flow.core.service.InsService; import com.warm.flow.core.service.TaskService; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; @@ -40,6 +44,7 @@ public class FlwTaskController extends BaseController { private final IFlwTaskService flwTaskService; private final TaskService taskService; + private final InsService insService; /** @@ -107,8 +112,16 @@ public class FlwTaskController extends BaseController { * @param taskId 任务id */ @GetMapping("/getTaskById/{taskId}") - public R getTaskById(@PathVariable Long taskId) { - return R.ok(taskService.getById(taskId)); + public R getTaskById(@PathVariable Long taskId) { + Task task = taskService.getById(taskId); + if (ObjectUtil.isNotNull(task)) { + FlowTaskVo flowTaskVo = BeanUtil.toBean(task, FlowTaskVo.class); + Instance instance = insService.getById(task.getInstanceId()); + flowTaskVo.setFlowStatus(instance.getFlowStatus()); + flowTaskVo.setFlowStatusName(FlowStatus.getValueByKey(instance.getFlowStatus())); + return R.ok(flowTaskVo); + } + return R.fail(); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java index 278a5eb45..0ce330c20 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java @@ -2,9 +2,11 @@ package org.dromara.workflow.domain.vo; import com.warm.flow.orm.entity.FlowTask; import lombok.Data; +import org.dromara.common.core.domain.dto.UserDTO; import java.io.Serial; import java.io.Serializable; +import java.util.List; /** * 任务视图 @@ -25,5 +27,15 @@ public class FlowTaskVo extends FlowTask implements Serializable { /** * 流程状态 */ - private String flowStatus; + private Integer flowStatus; + + /** + * 流程状态 + */ + private String flowStatusName; + + /** + * 办理人 + */ + private List userDTOList; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 940b1baa8..1023ddaac 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -1,18 +1,22 @@ package org.dromara.workflow.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.warm.flow.core.dto.FlowParams; import com.warm.flow.core.entity.Instance; import com.warm.flow.core.entity.Task; +import com.warm.flow.core.entity.User; import com.warm.flow.core.enums.SkipType; import com.warm.flow.core.service.InsService; import com.warm.flow.core.service.TaskService; +import com.warm.flow.core.service.UserService; import com.warm.flow.orm.entity.FlowInstance; import com.warm.flow.orm.entity.FlowTask; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -44,6 +48,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { private final TaskService taskService; private final InsService insService; private final FlwTaskMapper flwTaskMapper; + private final UserService userService; private final IWfDefinitionConfigService wfDefinitionConfigService; private final IFlwInstanceService iFlwInstanceService; @@ -133,6 +138,18 @@ public class FlwTaskServiceImpl implements IFlwTaskService { QueryWrapper queryWrapper = getFlowTaskBoQueryWrapper(flowTaskBo); queryWrapper.in("t.processed_by", WorkflowUtils.permissionList()); Page page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); + List records = page.getRecords(); + if (CollUtil.isNotEmpty(records)) { + List taskIds = StreamUtils.toList(records, FlowTaskVo::getId); + List userList = userService.getByAssociateds(taskIds); + for (FlowTaskVo record : records) { + if (CollUtil.isNotEmpty(userList)) { + List users = StreamUtils.filter(userList, e -> e.getAssociated().toString().equals(record.getId().toString())); + record.setUserList(CollUtil.isEmpty(users) ? Collections.emptyList() : users); + record.setUserDTOList(WorkflowUtils.getHandlerUser(users)); + } + } + } return TableDataInfo.build(page); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java index 85373a1a8..873a9459b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java @@ -2,12 +2,15 @@ package org.dromara.workflow.utils; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.warm.flow.core.entity.Task; +import com.warm.flow.core.entity.User; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.service.UserService; +import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mail.utils.MailUtils; @@ -91,4 +94,50 @@ public class WorkflowUtils { permissionList.add("dept:" + deptId); return permissionList; } + + /** + * 获取办理人 + * + * @param userList 办理用户 + * @return 用户 + */ + public static List getHandlerUser(List userList) { + List userDTOList = new ArrayList<>(); + if (CollUtil.isNotEmpty(userList)) { + UserService userService = SpringUtils.getBean(UserService.class); + List userIds = new ArrayList<>(); + List roleIds = new ArrayList<>(); + List deptIds = new ArrayList<>(); + for (User user : userList) { + if (user.getProcessedBy().startsWith("user:")) { + userIds.add(Long.valueOf(StringUtils.substringAfter(user.getProcessedBy(), StrUtil.C_COLON))); + } + if (user.getProcessedBy().startsWith("role:")) { + roleIds.add(Long.valueOf(StringUtils.substringAfter(user.getProcessedBy(), StrUtil.C_COLON))); + } + if (user.getProcessedBy().startsWith("dept:")) { + deptIds.add(Long.valueOf(StringUtils.substringAfter(user.getProcessedBy(), StrUtil.C_COLON))); + } + } + if (CollUtil.isNotEmpty(userIds)) { + List users = userService.selectListByIds(userIds); + if (CollUtil.isNotEmpty(users)) { + userDTOList.addAll(users); + } + } + if (CollUtil.isNotEmpty(roleIds)) { + List users = userService.selectUsersByRoleIds(roleIds); + if (CollUtil.isNotEmpty(users)) { + userDTOList.addAll(users); + } + } + if (CollUtil.isNotEmpty(deptIds)) { + List users = userService.selectUsersByDeptIds(deptIds); + if (CollUtil.isNotEmpty(users)) { + userDTOList.addAll(users); + } + } + } + return userDTOList; + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml index bd4b32ad8..9944da213 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml @@ -80,7 +80,7 @@ FROM flow_task AS t LEFT JOIN flow_user uu ON uu.associated = t.id LEFT JOIN flow_definition d on t.definition_id = d.id - LEFT JOIN flow_instance i on t.instance_id = i.id where t.node_type = 1 and i.flow_status = '1') t + LEFT JOIN flow_instance i on t.instance_id = i.id where t.node_type = 1 and i.flow_status = '1' and t.del_flag = '0') t ${ew.getCustomSqlSegment}