mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-29 22:56:40 +08:00
add 添加加签,减签人员接口
This commit is contained in:
parent
cfc29bfd45
commit
cbbd81f2b9
@ -0,0 +1,49 @@
|
|||||||
|
package org.dromara.workflow.controller;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.common.core.domain.R;
|
||||||
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.common.web.core.BaseController;
|
||||||
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
|
import org.dromara.workflow.domain.bo.SysUserMultiBo;
|
||||||
|
import org.dromara.workflow.domain.vo.TaskVo;
|
||||||
|
import org.dromara.workflow.service.IWorkflowUserService;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作流用户选人管理 控制层
|
||||||
|
*
|
||||||
|
* @author may
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/workflow/user")
|
||||||
|
public class WorkflowUserController extends BaseController {
|
||||||
|
|
||||||
|
private final IWorkflowUserService iWorkflowUserService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询工作流选择加签人员
|
||||||
|
*
|
||||||
|
* @param sysUserMultiBo 参数
|
||||||
|
*/
|
||||||
|
@GetMapping("/getWorkflowAddMultiListByPage")
|
||||||
|
public TableDataInfo<SysUserVo> getWorkflowAddMultiInstanceByPage(SysUserMultiBo sysUserMultiBo) {
|
||||||
|
return iWorkflowUserService.getWorkflowAddMultiInstanceByPage(sysUserMultiBo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询工作流选择减签人员
|
||||||
|
*
|
||||||
|
* @param taskId 任务id
|
||||||
|
*/
|
||||||
|
@GetMapping("/getWorkflowDeleteMultiInstanceList/{taskId}")
|
||||||
|
public R<List<TaskVo>> getWorkflowDeleteMultiInstanceList(@PathVariable String taskId) {
|
||||||
|
return R.ok(iWorkflowUserService.getWorkflowDeleteMultiInstanceList(taskId));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package org.dromara.workflow.domain.bo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.dromara.workflow.common.PageEntity;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户加签查询
|
||||||
|
*
|
||||||
|
* @author may
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
|
||||||
|
public class SysUserMultiBo extends PageEntity {
|
||||||
|
/**
|
||||||
|
* 人员名称
|
||||||
|
*/
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 人员名称
|
||||||
|
*/
|
||||||
|
private String nickName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
private String deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务id
|
||||||
|
*/
|
||||||
|
private String taskId;
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package org.dromara.workflow.service;
|
||||||
|
|
||||||
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
|
import org.dromara.workflow.domain.bo.SysUserMultiBo;
|
||||||
|
import org.dromara.workflow.domain.vo.TaskVo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作流用户选人管理 服务层
|
||||||
|
*
|
||||||
|
* @author may
|
||||||
|
*/
|
||||||
|
public interface IWorkflowUserService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询工作流选择加签人员
|
||||||
|
*
|
||||||
|
* @param sysUserMultiBo 参数
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
TableDataInfo<SysUserVo> getWorkflowAddMultiInstanceByPage(SysUserMultiBo sysUserMultiBo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询工作流选择减签人员
|
||||||
|
*
|
||||||
|
* @param taskId 任务id
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
List<TaskVo> getWorkflowDeleteMultiInstanceList(String taskId);
|
||||||
|
}
|
@ -0,0 +1,175 @@
|
|||||||
|
package org.dromara.workflow.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.common.core.enums.UserStatus;
|
||||||
|
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.TableDataInfo;
|
||||||
|
import org.dromara.common.tenant.helper.TenantHelper;
|
||||||
|
import org.dromara.system.domain.SysUser;
|
||||||
|
import org.dromara.system.domain.vo.SysDeptVo;
|
||||||
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
|
import org.dromara.system.mapper.SysDeptMapper;
|
||||||
|
import org.dromara.system.mapper.SysUserMapper;
|
||||||
|
import org.dromara.workflow.domain.bo.SysUserMultiBo;
|
||||||
|
import org.dromara.workflow.domain.vo.MultiInstanceVo;
|
||||||
|
import org.dromara.workflow.domain.vo.TaskVo;
|
||||||
|
import org.dromara.workflow.service.IWorkflowUserService;
|
||||||
|
import org.dromara.workflow.utils.WorkflowUtils;
|
||||||
|
import org.flowable.engine.RuntimeService;
|
||||||
|
import org.flowable.engine.TaskService;
|
||||||
|
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
|
||||||
|
import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
|
||||||
|
import org.flowable.task.api.Task;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作流用户选人管理 业务处理层
|
||||||
|
*
|
||||||
|
* @author may
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class WorkflowUserServiceImpl implements IWorkflowUserService {
|
||||||
|
|
||||||
|
private final SysUserMapper sysUserMapper;
|
||||||
|
private final SysDeptMapper sysDeptMapper;
|
||||||
|
private final TaskService taskService;
|
||||||
|
private final RuntimeService runtimeService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询工作流选择加签人员
|
||||||
|
*
|
||||||
|
* @param sysUserMultiBo 参数
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<SysUserVo> getWorkflowAddMultiInstanceByPage(SysUserMultiBo sysUserMultiBo) {
|
||||||
|
Task task = taskService.createTaskQuery().taskId(sysUserMultiBo.getTaskId()).singleResult();
|
||||||
|
if (task == null) {
|
||||||
|
throw new ServiceException("任务不存在");
|
||||||
|
}
|
||||||
|
MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
|
||||||
|
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||||
|
//检索条件
|
||||||
|
queryWrapper.eq(StringUtils.isNotEmpty(sysUserMultiBo.getDeptId()), SysUser::getDeptId, sysUserMultiBo.getDeptId());
|
||||||
|
queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode());
|
||||||
|
if (multiInstance != null) {
|
||||||
|
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
||||||
|
List<Long> assigneeList = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList());
|
||||||
|
queryWrapper.notIn(CollectionUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList);
|
||||||
|
} else {
|
||||||
|
List<Task> list = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
|
||||||
|
List<Long> userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee()));
|
||||||
|
queryWrapper.notIn(CollectionUtil.isNotEmpty(userIds), SysUser::getUserId, userIds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
queryWrapper.like(StringUtils.isNotEmpty(sysUserMultiBo.getUserName()), SysUser::getUserName, sysUserMultiBo.getUserName());
|
||||||
|
queryWrapper.like(StringUtils.isNotEmpty(sysUserMultiBo.getNickName()), SysUser::getNickName, sysUserMultiBo.getNickName());
|
||||||
|
Page<SysUser> page = new Page<>(sysUserMultiBo.getPageNum(), sysUserMultiBo.getPageSize());
|
||||||
|
Page<SysUserVo> userPage = sysUserMapper.selectVoPage(page, queryWrapper);
|
||||||
|
return TableDataInfo.build(recordPage(userPage));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询工作流选择减签人员
|
||||||
|
*
|
||||||
|
* @param taskId 任务id 任务id
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<TaskVo> getWorkflowDeleteMultiInstanceList(String taskId) {
|
||||||
|
Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(taskId).singleResult();
|
||||||
|
List<Task> taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId())
|
||||||
|
.processInstanceId(task.getProcessInstanceId()).list();
|
||||||
|
MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
|
||||||
|
List<TaskVo> taskListVo = new ArrayList<>();
|
||||||
|
if (multiInstance == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<Long> assigneeList = null;
|
||||||
|
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
||||||
|
assigneeList = (List<Long>) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
||||||
|
List<Long> userIds = StreamUtils.filter(assigneeList, e -> !e.toString().equals(task.getAssignee()));
|
||||||
|
List<SysUserVo> sysUsers = null;
|
||||||
|
if (CollectionUtil.isNotEmpty(userIds)) {
|
||||||
|
sysUsers = sysUserMapper.selectVoBatchIds(userIds);
|
||||||
|
}
|
||||||
|
for (Long userId : userIds) {
|
||||||
|
TaskVo taskVo = new TaskVo();
|
||||||
|
taskVo.setId("串行会签");
|
||||||
|
taskVo.setExecutionId("串行会签");
|
||||||
|
taskVo.setProcessInstanceId(task.getProcessInstanceId());
|
||||||
|
taskVo.setName(task.getName());
|
||||||
|
taskVo.setAssignee(userId);
|
||||||
|
if (CollectionUtil.isNotEmpty(sysUsers)) {
|
||||||
|
sysUsers.stream().filter(u -> u.getUserId().toString().equals(userId.toString())).findFirst().ifPresent(u -> {
|
||||||
|
taskVo.setAssigneeName(u.getNickName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
taskListVo.add(taskVo);
|
||||||
|
}
|
||||||
|
return taskListVo;
|
||||||
|
} else if (multiInstance.getType() instanceof ParallelMultiInstanceBehavior) {
|
||||||
|
List<Task> tasks = StreamUtils.filter(taskList, e -> StringUtils.isBlank(e.getParentTaskId()) && !e.getExecutionId().equals(task.getExecutionId())
|
||||||
|
&& e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey()));
|
||||||
|
if (CollectionUtil.isNotEmpty(tasks)) {
|
||||||
|
List<Long> userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee()));
|
||||||
|
List<SysUserVo> sysUsers = null;
|
||||||
|
if (CollectionUtil.isNotEmpty(userIds)) {
|
||||||
|
sysUsers = sysUserMapper.selectVoBatchIds(userIds);
|
||||||
|
}
|
||||||
|
for (Task t : tasks) {
|
||||||
|
TaskVo taskVo = new TaskVo();
|
||||||
|
taskVo.setId(t.getId());
|
||||||
|
taskVo.setExecutionId(t.getExecutionId());
|
||||||
|
taskVo.setProcessInstanceId(t.getProcessInstanceId());
|
||||||
|
taskVo.setName(t.getName());
|
||||||
|
taskVo.setAssignee(Long.valueOf(t.getAssignee()));
|
||||||
|
if (CollectionUtil.isNotEmpty(sysUsers)) {
|
||||||
|
sysUsers.stream().filter(u -> u.getUserId().toString().equals(t.getAssignee())).findFirst().ifPresent(e -> {
|
||||||
|
taskVo.setAssigneeName(e.getNickName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
taskListVo.add(taskVo);
|
||||||
|
}
|
||||||
|
return taskListVo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 翻译部门
|
||||||
|
*
|
||||||
|
* @param page 用户分页数据
|
||||||
|
*/
|
||||||
|
private Page<SysUserVo> recordPage(Page<SysUserVo> page) {
|
||||||
|
List<SysUserVo> records = page.getRecords();
|
||||||
|
if (CollectionUtil.isEmpty(records)) {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
List<Long> collectDeptId = records.stream().map(SysUserVo::getDeptId).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
|
if (CollectionUtil.isEmpty(collectDeptId)) {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
List<SysDeptVo> sysDeptList = sysDeptMapper.selectVoBatchIds(collectDeptId);
|
||||||
|
records.forEach(e -> {
|
||||||
|
sysDeptList.stream().filter(d -> d.getDeptId().equals(e.getDeptId())).findFirst().ifPresent(e::setDept);
|
||||||
|
});
|
||||||
|
page.setRecords(records);
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user