mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-21 02:25:56 +08:00
update 调整任务查询 添加抄送
This commit is contained in:
parent
bc218cb23a
commit
3c349485af
@ -0,0 +1,192 @@
|
|||||||
|
package org.dromara.workflow.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程历史任务对象 act_hi_taskinst
|
||||||
|
*
|
||||||
|
* @author gssong
|
||||||
|
* @date 2024-03-02
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("act_hi_taskinst")
|
||||||
|
public class ActHiTaskinst {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableId(value = "id_")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 版本
|
||||||
|
*/
|
||||||
|
@TableField(value = "rev_")
|
||||||
|
private Long rev;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程定义id
|
||||||
|
*/
|
||||||
|
@TableField(value = "proc_def_id_")
|
||||||
|
private String procDefId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableField(value = "task_def_id_")
|
||||||
|
private String taskDefId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务节点id
|
||||||
|
*/
|
||||||
|
@TableField(value = "task_def_key_")
|
||||||
|
private String taskDefKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程实例id
|
||||||
|
*/
|
||||||
|
@TableField(value = "proc_inst_id_")
|
||||||
|
private String procInstId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程执行id
|
||||||
|
*/
|
||||||
|
@TableField(value = "execution_id")
|
||||||
|
private String executionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableField(value = "scope_id_")
|
||||||
|
private String scopeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableField(value = "sub_scope_id_")
|
||||||
|
private String subScopeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 先用当前字段标识抄送类型
|
||||||
|
*/
|
||||||
|
@TableField(value = "scope_type_")
|
||||||
|
private String scopeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableField(value = "scope_definition_id_")
|
||||||
|
private String scopeDefinitionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableField(value = "propagated_stage_inst_id_")
|
||||||
|
private String propagatedStageInstId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务名称
|
||||||
|
*/
|
||||||
|
@TableField(value = "name_")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 父级id
|
||||||
|
*/
|
||||||
|
@TableField(value = "parent_task_id_")
|
||||||
|
private String parentTaskId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
@TableField(value = "description_")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办理人
|
||||||
|
*/
|
||||||
|
@TableField(value = "owner_")
|
||||||
|
private String owner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办理人
|
||||||
|
*/
|
||||||
|
@TableField(value = "assignee_")
|
||||||
|
private String assignee;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始事件
|
||||||
|
*/
|
||||||
|
@TableField(value = "start_time_")
|
||||||
|
private Date startTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 认领时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "claim_time_")
|
||||||
|
private Date claimTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "end_time_")
|
||||||
|
private Date endTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 持续时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "duration_")
|
||||||
|
private Long duration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除原因
|
||||||
|
*/
|
||||||
|
@TableField(value = "delete_reason_")
|
||||||
|
private String deleteReason;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 优先级
|
||||||
|
*/
|
||||||
|
@TableField(value = "priority_")
|
||||||
|
private Long priority;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 到期时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "due_date_")
|
||||||
|
private Date dueDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableField(value = "form_key_")
|
||||||
|
private String formKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类
|
||||||
|
*/
|
||||||
|
@TableField(value = "category_")
|
||||||
|
private String category;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最后修改时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "last_updated_time_")
|
||||||
|
private Date lastUpdatedTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户id
|
||||||
|
*/
|
||||||
|
@TableField(value = "tenant_id_")
|
||||||
|
private String tenantId;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
package org.dromara.workflow.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||||
|
import org.dromara.workflow.domain.ActHiTaskinst;
|
||||||
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程历史任务Mapper接口
|
||||||
|
*
|
||||||
|
* @author gssong
|
||||||
|
* @date 2024-03-02
|
||||||
|
*/
|
||||||
|
@InterceptorIgnore(tenantLine = "true")
|
||||||
|
public interface ActHiTaskinstMapper extends BaseMapperPlus<ActHiTaskinst, ActHiTaskinst> {
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
package org.dromara.workflow.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
import org.dromara.workflow.domain.vo.TaskVo;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务信息Mapper接口
|
||||||
|
*
|
||||||
|
* @author gssong
|
||||||
|
* @date 2024-03-02
|
||||||
|
*/
|
||||||
|
@InterceptorIgnore(tenantLine = "true")
|
||||||
|
public interface ActTaskMapper extends BaseMapperPlus<TaskVo, TaskVo> {
|
||||||
|
/**
|
||||||
|
* 获取待办信息
|
||||||
|
*
|
||||||
|
* @param page 分页
|
||||||
|
* @param queryWrapper 条件
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
Page<TaskVo> getTaskWaitByPage(@Param("page") Page<TaskVo> page, @Param(Constants.WRAPPER) Wrapper<TaskVo> queryWrapper);
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
package org.dromara.workflow.service;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程历史任务Service接口
|
||||||
|
*
|
||||||
|
* @author gssong
|
||||||
|
* @date 2024-03-02
|
||||||
|
*/
|
||||||
|
public interface IActHiTaskinstService {
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
package org.dromara.workflow.service.impl;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.dromara.workflow.mapper.ActHiTaskinstMapper;
|
||||||
|
import org.dromara.workflow.service.IActHiTaskinstService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程历史任务Service业务层处理
|
||||||
|
*
|
||||||
|
* @author gssong
|
||||||
|
* @date 2024-03-02
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class ActHiTaskinstServiceImpl implements IActHiTaskinstService {
|
||||||
|
|
||||||
|
private final ActHiTaskinstMapper baseMapper;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -331,11 +331,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(processInstanceComments)) {
|
if (CollUtil.isNotEmpty(processInstanceComments)) {
|
||||||
processInstanceComments.stream().filter(e -> e.getTaskId().equals(historicTaskInstance.getId())).findFirst().ifPresent(e -> {
|
processInstanceComments.stream().filter(e -> e.getTaskId().equals(historicTaskInstance.getId())).findFirst().ifPresent(e -> {
|
||||||
if (StringUtils.isNotBlank(e.getFullMessage())) {
|
actHistoryInfoVo.setComment(e.getFullMessage());
|
||||||
actHistoryInfoVo.setComment(e.getFullMessage());
|
actHistoryInfoVo.setStatus(e.getType());
|
||||||
actHistoryInfoVo.setStatus(e.getType());
|
actHistoryInfoVo.setStatusName(TaskStatusEnum.findByStatus(e.getType()));
|
||||||
actHistoryInfoVo.setStatusName(TaskStatusEnum.findByStatus(e.getType()));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) {
|
if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) {
|
||||||
|
|||||||
@ -6,11 +6,14 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.domain.dto.RoleDTO;
|
import org.dromara.common.core.domain.dto.RoleDTO;
|
||||||
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.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.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.tenant.helper.TenantHelper;
|
import org.dromara.common.tenant.helper.TenantHelper;
|
||||||
@ -25,6 +28,7 @@ import org.dromara.workflow.flowable.strategy.FlowEventStrategy;
|
|||||||
import org.dromara.workflow.flowable.cmd.*;
|
import org.dromara.workflow.flowable.cmd.*;
|
||||||
import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
|
import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
|
||||||
import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
|
import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
|
||||||
|
import org.dromara.workflow.mapper.ActTaskMapper;
|
||||||
import org.dromara.workflow.service.IActTaskService;
|
import org.dromara.workflow.service.IActTaskService;
|
||||||
import org.dromara.workflow.utils.WorkflowUtils;
|
import org.dromara.workflow.utils.WorkflowUtils;
|
||||||
import org.flowable.common.engine.api.FlowableObjectNotFoundException;
|
import org.flowable.common.engine.api.FlowableObjectNotFoundException;
|
||||||
@ -65,6 +69,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|||||||
private final IdentityService identityService;
|
private final IdentityService identityService;
|
||||||
private final ManagementService managementService;
|
private final ManagementService managementService;
|
||||||
private final FlowEventStrategy flowEventStrategy;
|
private final FlowEventStrategy flowEventStrategy;
|
||||||
|
private final ActTaskMapper actTaskMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动任务
|
* 启动任务
|
||||||
@ -227,47 +232,37 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public TableDataInfo<TaskVo> getTaskWaitByPage(TaskBo taskBo) {
|
public TableDataInfo<TaskVo> getTaskWaitByPage(TaskBo taskBo) {
|
||||||
|
PageQuery pageQuery = new PageQuery();
|
||||||
|
pageQuery.setPageNum(taskBo.getPageNum());
|
||||||
|
pageQuery.setPageSize(taskBo.getPageSize());
|
||||||
|
QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>();
|
||||||
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
|
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
|
||||||
String userId = String.valueOf(LoginHelper.getUserId());
|
String userId = String.valueOf(LoginHelper.getUserId());
|
||||||
TaskQuery query = taskService.createTaskQuery();
|
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
|
||||||
query.taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId);
|
queryWrapper.eq("t.tenant_id_", TenantHelper.getTenantId());
|
||||||
if (CollUtil.isNotEmpty(roles)) {
|
queryWrapper.and(w1 ->
|
||||||
List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId()));
|
w1.eq("t.assignee_", userId)
|
||||||
query.taskCandidateGroupIn(groupIds);
|
.or(w2 -> w2.isNull("t.assignee_")
|
||||||
}
|
.and(w3 -> w3.eq("t.user_id_", userId).or().in("t.group_id_", StreamUtils.toList(roles, RoleDTO::getRoleId))))
|
||||||
|
);
|
||||||
if (StringUtils.isNotBlank(taskBo.getName())) {
|
if (StringUtils.isNotBlank(taskBo.getName())) {
|
||||||
query.taskNameLike("%" + taskBo.getName() + "%");
|
queryWrapper.like("t.name_", taskBo.getName());
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) {
|
if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) {
|
||||||
query.processDefinitionNameLike("%" + taskBo.getProcessDefinitionName() + "%");
|
queryWrapper.like("t.processDefinitionName", taskBo.getProcessDefinitionName());
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) {
|
if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) {
|
||||||
query.processDefinitionKey(taskBo.getProcessDefinitionKey());
|
queryWrapper.eq("t.processDefinitionKey", taskBo.getProcessDefinitionKey());
|
||||||
}
|
}
|
||||||
List<Task> taskList = query.listPage(taskBo.getPageNum(), taskBo.getPageSize());
|
Page<TaskVo> page = actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
|
||||||
List<ProcessInstance> processInstanceList = null;
|
|
||||||
if (CollUtil.isNotEmpty(taskList)) {
|
List<TaskVo> taskList = page.getRecords();
|
||||||
Set<String> processInstanceIds = StreamUtils.toSet(taskList, Task::getProcessInstanceId);
|
for (TaskVo task : taskList) {
|
||||||
processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIds).list();
|
task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus()));
|
||||||
|
task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId()));
|
||||||
|
task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null);
|
||||||
}
|
}
|
||||||
List<TaskVo> list = new ArrayList<>();
|
return new TableDataInfo<>(taskList, page.getTotal());
|
||||||
for (Task task : taskList) {
|
|
||||||
TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class);
|
|
||||||
if (CollUtil.isNotEmpty(processInstanceList)) {
|
|
||||||
processInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> {
|
|
||||||
taskVo.setBusinessStatus(e.getBusinessStatus());
|
|
||||||
taskVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(taskVo.getBusinessStatus()));
|
|
||||||
taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey());
|
|
||||||
taskVo.setProcessDefinitionName(e.getProcessDefinitionName());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
taskVo.setAssignee(Convert.toLong(task.getAssignee()));
|
|
||||||
taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId()));
|
|
||||||
taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null);
|
|
||||||
list.add(taskVo);
|
|
||||||
}
|
|
||||||
long count = query.count();
|
|
||||||
return new TableDataInfo<>(list, count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package org.dromara.workflow.utils;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
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;
|
||||||
@ -16,11 +18,14 @@ import org.dromara.system.domain.vo.SysUserVo;
|
|||||||
import org.dromara.workflow.common.constant.FlowConstant;
|
import org.dromara.workflow.common.constant.FlowConstant;
|
||||||
import org.dromara.workflow.common.enums.BusinessStatusEnum;
|
import org.dromara.workflow.common.enums.BusinessStatusEnum;
|
||||||
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
||||||
|
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||||
import org.dromara.workflow.domain.ActHiProcinst;
|
import org.dromara.workflow.domain.ActHiProcinst;
|
||||||
|
import org.dromara.workflow.domain.ActHiTaskinst;
|
||||||
import org.dromara.workflow.domain.vo.MultiInstanceVo;
|
import org.dromara.workflow.domain.vo.MultiInstanceVo;
|
||||||
import org.dromara.workflow.domain.vo.ParticipantVo;
|
import org.dromara.workflow.domain.vo.ParticipantVo;
|
||||||
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
||||||
import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd;
|
import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd;
|
||||||
|
import org.dromara.workflow.mapper.ActHiTaskinstMapper;
|
||||||
import org.dromara.workflow.service.IActHiProcinstService;
|
import org.dromara.workflow.service.IActHiProcinstService;
|
||||||
import org.dromara.workflow.service.IWorkflowUserService;
|
import org.dromara.workflow.service.IWorkflowUserService;
|
||||||
import org.dromara.workflow.service.impl.WorkflowUserServiceImpl;
|
import org.dromara.workflow.service.impl.WorkflowUserServiceImpl;
|
||||||
@ -52,6 +57,7 @@ public class WorkflowUtils {
|
|||||||
private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class);
|
private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class);
|
||||||
private static final IWorkflowUserService I_WORKFLOW_USER_SERVICE = SpringUtils.getBean(WorkflowUserServiceImpl.class);
|
private static final IWorkflowUserService I_WORKFLOW_USER_SERVICE = SpringUtils.getBean(WorkflowUserServiceImpl.class);
|
||||||
private static final IActHiProcinstService I_ACT_HI_PROCINST_SERVICE = SpringUtils.getBean(IActHiProcinstService.class);
|
private static final IActHiProcinstService I_ACT_HI_PROCINST_SERVICE = SpringUtils.getBean(IActHiProcinstService.class);
|
||||||
|
private static final ActHiTaskinstMapper ACT_HI_TASKINST_MAPPER = SpringUtils.getBean(ActHiTaskinstMapper.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个新任务
|
* 创建一个新任务
|
||||||
@ -99,21 +105,27 @@ public class WorkflowUtils {
|
|||||||
newTask.setProcessDefinitionId(parentTask.getProcessDefinitionId());
|
newTask.setProcessDefinitionId(parentTask.getProcessDefinitionId());
|
||||||
newTask.setProcessInstanceId(parentTask.getProcessInstanceId());
|
newTask.setProcessInstanceId(parentTask.getProcessInstanceId());
|
||||||
newTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey());
|
newTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey());
|
||||||
|
newTask.setTenantId(TenantHelper.getTenantId());
|
||||||
list.add(newTask);
|
list.add(newTask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PROCESS_ENGINE.getTaskService().bulkSaveTasks(list);
|
PROCESS_ENGINE.getTaskService().bulkSaveTasks(list);
|
||||||
/*if (CollectionUtil.isNotEmpty(list) && CollectionUtil.isNotEmpty(parentTaskList)) {
|
if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(parentTaskList)) {
|
||||||
String processInstanceId = parentTaskList.get(0).getProcessInstanceId();
|
String processInstanceId = parentTaskList.get(0).getProcessInstanceId();
|
||||||
String processDefinitionId = parentTaskList.get(0).getProcessDefinitionId();
|
String processDefinitionId = parentTaskList.get(0).getProcessDefinitionId();
|
||||||
List<String> taskIds = list.stream().map(Task::getId).collect(Collectors.toList());
|
List<String> taskIds = StreamUtils.toList(list, Task::getId);
|
||||||
ActHiTaskinst actHiTaskinst = new ActHiTaskinst();
|
ActHiTaskinst actHiTaskinst = new ActHiTaskinst();
|
||||||
actHiTaskinst.setProcDefId(processDefinitionId);
|
actHiTaskinst.setProcDefId(processDefinitionId);
|
||||||
actHiTaskinst.setProcInstId(processInstanceId);
|
actHiTaskinst.setProcInstId(processInstanceId);
|
||||||
|
actHiTaskinst.setScopeType(TaskStatusEnum.COPY.getStatus());
|
||||||
|
actHiTaskinst.setTenantId(TenantHelper.getTenantId());
|
||||||
LambdaUpdateWrapper<ActHiTaskinst> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<ActHiTaskinst> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
updateWrapper.eq(ActHiTaskinst::getId, Collections.singletonList(taskIds));
|
updateWrapper.in(ActHiTaskinst::getId, Collections.singletonList(taskIds));
|
||||||
actHiTaskinstMapper.update(actHiTaskinst, updateWrapper);
|
ACT_HI_TASKINST_MAPPER.update(actHiTaskinst, updateWrapper);
|
||||||
}*/
|
for (Task task : list) {
|
||||||
|
PROCESS_ENGINE.getTaskService().addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(), StrUtil.EMPTY);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="org.dromara.workflow.mapper.ActHiTaskinstMapper">
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="org.dromara.workflow.mapper.ActTaskMapper">
|
||||||
|
<resultMap type="org.dromara.workflow.domain.vo.TaskVo" id="TaskWaitingVoResult">
|
||||||
|
<result property="id" column="ID_"/>
|
||||||
|
<result property="name" column="NAME_"/>
|
||||||
|
<result property="description" column="DESCRIPTION_"/>
|
||||||
|
<result property="priority" column="PRIORITY_"/>
|
||||||
|
<result property="owner" column="OWNER_"/>
|
||||||
|
<result property="assignee" column="ASSIGNEE_"/>
|
||||||
|
<result property="processInstanceId" column="PROC_INST_ID_"/>
|
||||||
|
<result property="executionId" column="EXECUTION_ID_"/>
|
||||||
|
<result property="taskDefinitionId" column="TASK_DEF_ID_"/>
|
||||||
|
<result property="processDefinitionId" column="PROC_DEF_ID_"/>
|
||||||
|
<result property="createTime" column="CREATE_TIME_"/>
|
||||||
|
<result property="endTime" column="END_TIME_"/>
|
||||||
|
<result property="taskDefinitionKey" column="TASK_DEF_KEY_"/>
|
||||||
|
<result property="dueDate" column="DUE_DATE_"/>
|
||||||
|
<result property="processDefinitionKey" column="key_"/>
|
||||||
|
<result property="category" column="CATEGORY_"/>
|
||||||
|
<result property="parentTaskId" column="PARENT_TASK_ID_"/>
|
||||||
|
<result property="tenantId" column="TENANT_ID_"/>
|
||||||
|
<result property="claimTime" column="CLAIM_TIME"/>
|
||||||
|
<result property="businessStatus" column="BUSINESS_STATUS_"/>
|
||||||
|
<result property="processDefinitionName" column="processDefinitionName"/>
|
||||||
|
<result property="processDefinitionKey" column="processDefinitionName"/>
|
||||||
|
|
||||||
|
</resultMap>
|
||||||
|
<select id="getTaskWaitByPage" resultMap="TaskWaitingVoResult">
|
||||||
|
select *
|
||||||
|
from (SELECT RES.*,
|
||||||
|
AHP.business_status_,
|
||||||
|
ARP.name_ as processDefinitionName,
|
||||||
|
ARP.key_ as processDefinitionKey,
|
||||||
|
LINK.user_id_,
|
||||||
|
LINK.group_id_
|
||||||
|
FROM ACT_RU_TASK RES
|
||||||
|
INNER JOIN ACT_HI_PROCINST AHP ON RES.PROC_INST_ID_ = AHP.PROC_INST_ID_
|
||||||
|
INNER JOIN ACT_RE_PROCDEF ARP ON ARP.ID_ = RES.PROC_DEF_ID_
|
||||||
|
LEFT JOIN ACT_RU_IDENTITYLINK LINK ON LINK.TASK_ID_ = RES.ID_ AND LINK.TYPE_ = 'candidate'
|
||||||
|
WHERE RES.PARENT_TASK_ID_ is null
|
||||||
|
ORDER BY RES.CREATE_TIME_ DESC) t ${ew.getCustomSqlSegment}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
Loading…
Reference in New Issue
Block a user