parent
bebd9e7a54
commit
cb296ef2cd
@ -0,0 +1,46 @@
|
||||
package org.dromara.common.core.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* OSS对象
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class OssDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 对象存储主键
|
||||
*/
|
||||
private Long ossId;
|
||||
|
||||
/**
|
||||
* 文件名
|
||||
*/
|
||||
private String fileName;
|
||||
|
||||
/**
|
||||
* 原名
|
||||
*/
|
||||
private String originalName;
|
||||
|
||||
/**
|
||||
* 文件后缀名
|
||||
*/
|
||||
private String fileSuffix;
|
||||
|
||||
/**
|
||||
* URL地址
|
||||
*/
|
||||
private String url;
|
||||
|
||||
}
|
||||
@ -1,72 +0,0 @@
|
||||
package org.dromara.workflow.controller;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
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 workflowUserService;
|
||||
|
||||
/**
|
||||
* 分页查询工作流选择加签人员
|
||||
*
|
||||
* @param bo 参数
|
||||
*/
|
||||
@GetMapping("/getPageByAddMultiInstance")
|
||||
public TableDataInfo<SysUserVo> getPageByAddMultiInstance(SysUserMultiBo bo, PageQuery pageQuery) {
|
||||
return workflowUserService.getPageByAddMultiInstance(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询工作流选择减签人员
|
||||
*
|
||||
* @param taskId 任务id
|
||||
*/
|
||||
@GetMapping("/getListByDeleteMultiInstance/{taskId}")
|
||||
public R<List<TaskVo>> getListByDeleteMultiInstance(@PathVariable String taskId) {
|
||||
return R.ok(workflowUserService.getListByDeleteMultiInstance(taskId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照用户id查询用户
|
||||
*
|
||||
* @param userIds 用户id
|
||||
*/
|
||||
@GetMapping("/getUserListByIds/{userIds}")
|
||||
public R<List<SysUserVo>> getUserListByIds(@PathVariable List<Long> userIds) {
|
||||
return R.ok(workflowUserService.getUserListByIds(userIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询用户
|
||||
*
|
||||
* @param sysUserBo 参数
|
||||
* @param pageQuery 分页
|
||||
*/
|
||||
@GetMapping("/getPageByUserList")
|
||||
public TableDataInfo<SysUserVo> getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery) {
|
||||
return workflowUserService.getPageByUserList(sysUserBo, pageQuery);
|
||||
}
|
||||
}
|
||||
@ -1,61 +0,0 @@
|
||||
package org.dromara.workflow.service;
|
||||
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
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 参数
|
||||
* @param pageQuery 分页
|
||||
* @return 结果
|
||||
*/
|
||||
TableDataInfo<SysUserVo> getPageByAddMultiInstance(SysUserMultiBo sysUserMultiBo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询工作流选择减签人员
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @return 结果
|
||||
*/
|
||||
List<TaskVo> getListByDeleteMultiInstance(String taskId);
|
||||
|
||||
/**
|
||||
* 按照用户id查询用户
|
||||
*
|
||||
* @param userIds 用户id
|
||||
* @return 结果
|
||||
*/
|
||||
List<SysUserVo> getUserListByIds(List<Long> userIds);
|
||||
|
||||
/**
|
||||
* 按照角色id查询关联用户id
|
||||
*
|
||||
* @param roleIds 角色id
|
||||
* @return 结果
|
||||
*/
|
||||
List<SysUserRole> getUserRoleListByRoleIds(List<Long> roleIds);
|
||||
|
||||
/**
|
||||
* 分页查询用户
|
||||
*
|
||||
* @param sysUserBo 参数
|
||||
* @param pageQuery 分页
|
||||
* @return 结果
|
||||
*/
|
||||
TableDataInfo<SysUserVo> getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery);
|
||||
}
|
||||
@ -1,214 +0,0 @@
|
||||
package org.dromara.workflow.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
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.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysUser;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.mapper.SysUserMapper;
|
||||
import org.dromara.system.mapper.SysUserRoleMapper;
|
||||
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.QueryUtils;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 工作流用户选人管理 业务处理层
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class WorkflowUserServiceImpl implements IWorkflowUserService {
|
||||
|
||||
private final SysUserMapper sysUserMapper;
|
||||
private final SysUserRoleMapper sysUserRoleMapper;
|
||||
private final RuntimeService runtimeService;
|
||||
|
||||
/**
|
||||
* 分页查询工作流选择加签人员
|
||||
*
|
||||
* @param bo 参数
|
||||
* @param pageQuery 分页
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public TableDataInfo<SysUserVo> getPageByAddMultiInstance(SysUserMultiBo bo, PageQuery pageQuery) {
|
||||
Task task = QueryUtils.taskQuery().taskId(bo.getTaskId()).singleResult();
|
||||
if (task == null) {
|
||||
throw new ServiceException("任务不存在");
|
||||
}
|
||||
MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
|
||||
if (multiInstance == null) {
|
||||
return TableDataInfo.build();
|
||||
}
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
//检索条件
|
||||
queryWrapper.eq(StringUtils.isNotEmpty(bo.getDeptId()), SysUser::getDeptId, bo.getDeptId());
|
||||
queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode());
|
||||
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
||||
List<Long> assigneeList = (List<Long>) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList());
|
||||
queryWrapper.notIn(CollUtil.isNotEmpty(assigneeList), SysUser::getUserId, assigneeList);
|
||||
} else {
|
||||
List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list();
|
||||
List<Long> userIds = StreamUtils.toList(list, e -> Long.valueOf(e.getAssignee()));
|
||||
queryWrapper.notIn(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds);
|
||||
}
|
||||
queryWrapper.like(StringUtils.isNotEmpty(bo.getUserName()), SysUser::getUserName, bo.getUserName());
|
||||
queryWrapper.like(StringUtils.isNotEmpty(bo.getNickName()), SysUser::getNickName, bo.getNickName());
|
||||
Page<SysUser> page = new Page<>(pageQuery.getFirstNum(), pageQuery.getPageSize());
|
||||
Page<SysUserVo> userPage = sysUserMapper.selectVoPage(page, queryWrapper);
|
||||
return TableDataInfo.build(recordPage(userPage));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询工作流选择减签人员
|
||||
*
|
||||
* @param taskId 任务id 任务id
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<TaskVo> getListByDeleteMultiInstance(String taskId) {
|
||||
Task task = QueryUtils.taskQuery().taskId(taskId).singleResult();
|
||||
List<Task> taskList = QueryUtils.taskQuery(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 = new ArrayList<>();
|
||||
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
||||
List<Object> variable = (List<Object>) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList());
|
||||
for (Object o : variable) {
|
||||
assigneeList.add(Long.valueOf(o.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
|
||||
List<Long> userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee()));
|
||||
List<SysUserVo> sysUsers = null;
|
||||
if (CollUtil.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 (CollUtil.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 (CollUtil.isNotEmpty(tasks)) {
|
||||
List<Long> userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee()));
|
||||
List<SysUserVo> sysUsers = null;
|
||||
if (CollUtil.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 (CollUtil.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 (CollUtil.isEmpty(records)) {
|
||||
return page;
|
||||
}
|
||||
List<Long> collectDeptId = StreamUtils.toList(records, SysUserVo::getDeptId);
|
||||
if (CollUtil.isEmpty(collectDeptId)) {
|
||||
return page;
|
||||
}
|
||||
page.setRecords(records);
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照用户id查询用户
|
||||
*
|
||||
* @param userIds 用户id
|
||||
*/
|
||||
@Override
|
||||
public List<SysUserVo> getUserListByIds(List<Long> userIds) {
|
||||
if (CollUtil.isEmpty(userIds)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
// 检索条件
|
||||
queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode());
|
||||
queryWrapper.in(SysUser::getUserId, userIds);
|
||||
return sysUserMapper.selectVoList(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照角色id查询关联用户id
|
||||
*
|
||||
* @param roleIds 角色id
|
||||
*/
|
||||
@Override
|
||||
public List<SysUserRole> getUserRoleListByRoleIds(List<Long> roleIds) {
|
||||
return sysUserRoleMapper.selectList(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询用户
|
||||
*
|
||||
* @param sysUserBo 参数
|
||||
* @param pageQuery 分页
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<SysUserVo> getPageByUserList(SysUserBo sysUserBo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.eq(sysUserBo.getDeptId() != null, SysUser::getDeptId, sysUserBo.getDeptId());
|
||||
queryWrapper.eq(SysUser::getStatus, UserStatus.OK.getCode());
|
||||
queryWrapper.like(StringUtils.isNotEmpty(sysUserBo.getUserName()), SysUser::getUserName, sysUserBo.getUserName());
|
||||
queryWrapper.like(StringUtils.isNotEmpty(sysUserBo.getNickName()), SysUser::getNickName, sysUserBo.getNickName());
|
||||
Page<SysUserVo> userPage = sysUserMapper.selectVoPage(pageQuery.build(), queryWrapper);
|
||||
return TableDataInfo.build(recordPage(userPage));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue