add 添加待办人查询

This commit is contained in:
gssong 2024-08-24 11:34:46 +08:00
parent 6fdea13932
commit d26772983c
5 changed files with 95 additions and 4 deletions

View File

@ -1,10 +1,14 @@
package org.dromara.workflow.controller; 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.FlowParams;
import com.warm.flow.core.dto.ModifyHandler; import com.warm.flow.core.dto.ModifyHandler;
import com.warm.flow.core.entity.Instance; import com.warm.flow.core.entity.Instance;
import com.warm.flow.core.entity.Task; import com.warm.flow.core.entity.Task;
import com.warm.flow.core.enums.CooperateType; 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 com.warm.flow.core.service.TaskService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
@ -40,6 +44,7 @@ public class FlwTaskController extends BaseController {
private final IFlwTaskService flwTaskService; private final IFlwTaskService flwTaskService;
private final TaskService taskService; private final TaskService taskService;
private final InsService insService;
/** /**
@ -107,8 +112,16 @@ public class FlwTaskController extends BaseController {
* @param taskId 任务id * @param taskId 任务id
*/ */
@GetMapping("/getTaskById/{taskId}") @GetMapping("/getTaskById/{taskId}")
public R<Task> getTaskById(@PathVariable Long taskId) { public R<FlowTaskVo> getTaskById(@PathVariable Long taskId) {
return R.ok(taskService.getById(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();
} }
/** /**

View File

@ -2,9 +2,11 @@ package org.dromara.workflow.domain.vo;
import com.warm.flow.orm.entity.FlowTask; import com.warm.flow.orm.entity.FlowTask;
import lombok.Data; import lombok.Data;
import org.dromara.common.core.domain.dto.UserDTO;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; 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<UserDTO> userDTOList;
} }

View File

@ -1,18 +1,22 @@
package org.dromara.workflow.service.impl; package org.dromara.workflow.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.warm.flow.core.dto.FlowParams; import com.warm.flow.core.dto.FlowParams;
import com.warm.flow.core.entity.Instance; import com.warm.flow.core.entity.Instance;
import com.warm.flow.core.entity.Task; 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.enums.SkipType;
import com.warm.flow.core.service.InsService; import com.warm.flow.core.service.InsService;
import com.warm.flow.core.service.TaskService; 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.FlowInstance;
import com.warm.flow.orm.entity.FlowTask; import com.warm.flow.orm.entity.FlowTask;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException; 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.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -44,6 +48,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final TaskService taskService; private final TaskService taskService;
private final InsService insService; private final InsService insService;
private final FlwTaskMapper flwTaskMapper; private final FlwTaskMapper flwTaskMapper;
private final UserService userService;
private final IWfDefinitionConfigService wfDefinitionConfigService; private final IWfDefinitionConfigService wfDefinitionConfigService;
private final IFlwInstanceService iFlwInstanceService; private final IFlwInstanceService iFlwInstanceService;
@ -133,6 +138,18 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
QueryWrapper<FlowTaskBo> queryWrapper = getFlowTaskBoQueryWrapper(flowTaskBo); QueryWrapper<FlowTaskBo> queryWrapper = getFlowTaskBoQueryWrapper(flowTaskBo);
queryWrapper.in("t.processed_by", WorkflowUtils.permissionList()); queryWrapper.in("t.processed_by", WorkflowUtils.permissionList());
Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
List<FlowTaskVo> records = page.getRecords();
if (CollUtil.isNotEmpty(records)) {
List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId);
List<User> userList = userService.getByAssociateds(taskIds);
for (FlowTaskVo record : records) {
if (CollUtil.isNotEmpty(userList)) {
List<User> 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); return TableDataInfo.build(page);
} }

View File

@ -2,12 +2,15 @@ package org.dromara.workflow.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; 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.Task;
import com.warm.flow.core.entity.User;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.dto.RoleDTO;
import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.domain.dto.UserDTO;
import org.dromara.common.core.service.UserService; 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.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.mail.utils.MailUtils;
@ -91,4 +94,50 @@ public class WorkflowUtils {
permissionList.add("dept:" + deptId); permissionList.add("dept:" + deptId);
return permissionList; return permissionList;
} }
/**
* 获取办理人
*
* @param userList 办理用户
* @return 用户
*/
public static List<UserDTO> getHandlerUser(List<User> userList) {
List<UserDTO> userDTOList = new ArrayList<>();
if (CollUtil.isNotEmpty(userList)) {
UserService userService = SpringUtils.getBean(UserService.class);
List<Long> userIds = new ArrayList<>();
List<Long> roleIds = new ArrayList<>();
List<Long> 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<UserDTO> users = userService.selectListByIds(userIds);
if (CollUtil.isNotEmpty(users)) {
userDTOList.addAll(users);
}
}
if (CollUtil.isNotEmpty(roleIds)) {
List<UserDTO> users = userService.selectUsersByRoleIds(roleIds);
if (CollUtil.isNotEmpty(users)) {
userDTOList.addAll(users);
}
}
if (CollUtil.isNotEmpty(deptIds)) {
List<UserDTO> users = userService.selectUsersByDeptIds(deptIds);
if (CollUtil.isNotEmpty(users)) {
userDTOList.addAll(users);
}
}
}
return userDTOList;
}
} }

View File

@ -80,7 +80,7 @@
FROM flow_task AS t FROM flow_task AS t
LEFT JOIN flow_user uu ON uu.associated = t.id LEFT JOIN flow_user uu ON uu.associated = t.id
LEFT JOIN flow_definition d on t.definition_id = d.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} ${ew.getCustomSqlSegment}
</select> </select>