update 调整流程监听
This commit is contained in:
parent
b726a91cdb
commit
d729c8ecde
@ -13,21 +13,11 @@ public interface FlowConstant {
|
|||||||
*/
|
*/
|
||||||
String INITIATOR = "initiator";
|
String INITIATOR = "initiator";
|
||||||
|
|
||||||
/**
|
|
||||||
* 流程实例id
|
|
||||||
*/
|
|
||||||
String PROCESS_INSTANCE_ID = "processInstanceId";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 业务id
|
* 业务id
|
||||||
*/
|
*/
|
||||||
String BUSINESS_ID = "businessId";
|
String BUSINESS_ID = "businessId";
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务id
|
|
||||||
*/
|
|
||||||
String TASK_ID = "taskId";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 委托
|
* 委托
|
||||||
*/
|
*/
|
||||||
@ -63,4 +53,24 @@ public interface FlowConstant {
|
|||||||
*/
|
*/
|
||||||
Long FLOW_CATEGORY_ID = 100L;
|
Long FLOW_CATEGORY_ID = 100L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为申请人提交常量
|
||||||
|
*/
|
||||||
|
String SUBMIT = "submit";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 抄送常量
|
||||||
|
*/
|
||||||
|
String FLOW_COPY_LIST = "flowCopyList";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息类型常量
|
||||||
|
*/
|
||||||
|
String MESSAGE_TYPE = "messageType";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知常量
|
||||||
|
*/
|
||||||
|
String MESSAGE_NOTICE = "messageNotice";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package org.dromara.workflow.listener;
|
package org.dromara.workflow.listener;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -14,6 +15,7 @@ import org.dromara.warm.flow.core.listener.GlobalListener;
|
|||||||
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||||
|
import org.dromara.workflow.common.constant.FlowConstant;
|
||||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||||
import org.dromara.workflow.domain.bo.FlowCopyBo;
|
import org.dromara.workflow.domain.bo.FlowCopyBo;
|
||||||
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
||||||
@ -37,7 +39,7 @@ import java.util.Map;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class WorkflowGlobalListener implements GlobalListener {
|
public class WorkflowGlobalListener implements GlobalListener {
|
||||||
|
|
||||||
private final IFlwTaskService taskService;
|
private final IFlwTaskService flwTaskService;
|
||||||
private final IFlwInstanceService instanceService;
|
private final IFlwInstanceService instanceService;
|
||||||
private final FlowProcessEventHandler flowProcessEventHandler;
|
private final FlowProcessEventHandler flowProcessEventHandler;
|
||||||
private final IFlwCommonService flwCommonService;
|
private final IFlwCommonService flwCommonService;
|
||||||
@ -51,11 +53,19 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
public void create(ListenerVariable listenerVariable) {
|
public void create(ListenerVariable listenerVariable) {
|
||||||
Instance instance = listenerVariable.getInstance();
|
Instance instance = listenerVariable.getInstance();
|
||||||
Definition definition = listenerVariable.getDefinition();
|
Definition definition = listenerVariable.getDefinition();
|
||||||
|
FlowParams flowParams = listenerVariable.getFlowParams();
|
||||||
|
Map<String, Object> variable = flowParams.getVariable();
|
||||||
Task task = listenerVariable.getTask();
|
Task task = listenerVariable.getTask();
|
||||||
if (task != null) {
|
if (task != null) {
|
||||||
// 判断流程状态(发布审批中事件)
|
// 判断流程状态(发布审批中事件)
|
||||||
flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), instance, task.getId());
|
flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), instance, task.getId());
|
||||||
}
|
}
|
||||||
|
Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
|
||||||
|
if (submit != null && submit) {
|
||||||
|
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(), variable, true);
|
||||||
|
}
|
||||||
|
variable.remove(FlowConstant.SUBMIT);
|
||||||
|
flowParams.variable(variable);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -126,25 +136,24 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
if (StringUtils.isNotBlank(status)) {
|
if (StringUtils.isNotBlank(status)) {
|
||||||
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false);
|
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false);
|
||||||
}
|
}
|
||||||
|
Map<String, Object> variable = listenerVariable.getVariable();
|
||||||
// 只有办理或者退回的时候才执行消息通知和抄送
|
// 只有办理或者退回的时候才执行消息通知和抄送
|
||||||
if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
|
if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
|
||||||
|| TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) {
|
|| TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) {
|
||||||
Task task = listenerVariable.getTask();
|
Task task = listenerVariable.getTask();
|
||||||
Map<String, Object> variable = listenerVariable.getVariable();
|
List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get(FlowConstant.FLOW_COPY_LIST);
|
||||||
List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get("flowCopyList");
|
List<String> messageType = (List<String>) variable.get(FlowConstant.MESSAGE_TYPE);
|
||||||
List<String> messageType = (List<String>) variable.get("messageType");
|
String notice = (String) variable.get(FlowConstant.MESSAGE_NOTICE);
|
||||||
String notice = (String) variable.get("notice");
|
|
||||||
|
|
||||||
// 添加抄送人
|
// 添加抄送人
|
||||||
taskService.setCopy(task, flowCopyList);
|
flwTaskService.setCopy(task, flowCopyList);
|
||||||
variable.remove("flowCopyList");
|
variable.remove(FlowConstant.FLOW_COPY_LIST);
|
||||||
|
|
||||||
// 消息通知
|
// 消息通知
|
||||||
if (CollUtil.isNotEmpty(messageType)) {
|
if (CollUtil.isNotEmpty(messageType)) {
|
||||||
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
||||||
variable.remove("messageType");
|
variable.remove(FlowConstant.MESSAGE_TYPE);
|
||||||
variable.remove("notice");
|
variable.remove(FlowConstant.MESSAGE_NOTICE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,7 +171,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
return flowStatus;
|
return flowStatus;
|
||||||
} else {
|
} else {
|
||||||
Long instanceId = instance.getId();
|
Long instanceId = instance.getId();
|
||||||
List<FlowTask> flowTasks = taskService.selectByInstId(instanceId);
|
List<FlowTask> flowTasks = flwTaskService.selectByInstId(instanceId);
|
||||||
if (CollUtil.isEmpty(flowTasks)) {
|
if (CollUtil.isEmpty(flowTasks)) {
|
||||||
String status = BusinessStatusEnum.FINISH.getStatus();
|
String status = BusinessStatusEnum.FINISH.getStatus();
|
||||||
// 更新流程状态为已完成
|
// 更新流程状态为已完成
|
||||||
|
@ -248,7 +248,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
|
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
|
||||||
FlowParams flowParams = FlowParams.build()
|
FlowParams flowParams = FlowParams.build()
|
||||||
.message(message)
|
.message(message)
|
||||||
.skipType(SkipType.PASS.getKey())
|
|
||||||
.flowStatus(BusinessStatusEnum.CANCEL.getStatus())
|
.flowStatus(BusinessStatusEnum.CANCEL.getStatus())
|
||||||
.hisStatus(BusinessStatusEnum.CANCEL.getStatus())
|
.hisStatus(BusinessStatusEnum.CANCEL.getStatus())
|
||||||
.handler(userIdStr)
|
.handler(userIdStr)
|
||||||
|
@ -39,12 +39,12 @@ import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
|
|||||||
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||||
|
import org.dromara.workflow.common.constant.FlowConstant;
|
||||||
import org.dromara.workflow.common.enums.TaskAssigneeType;
|
import org.dromara.workflow.common.enums.TaskAssigneeType;
|
||||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||||
import org.dromara.workflow.domain.bo.*;
|
import org.dromara.workflow.domain.bo.*;
|
||||||
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
||||||
import org.dromara.workflow.domain.vo.FlowTaskVo;
|
import org.dromara.workflow.domain.vo.FlowTaskVo;
|
||||||
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
|
||||||
import org.dromara.workflow.handler.WorkflowPermissionHandler;
|
import org.dromara.workflow.handler.WorkflowPermissionHandler;
|
||||||
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
||||||
import org.dromara.workflow.mapper.FlwTaskMapper;
|
import org.dromara.workflow.mapper.FlwTaskMapper;
|
||||||
@ -81,7 +81,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
private final FlowTaskMapper flowTaskMapper;
|
private final FlowTaskMapper flowTaskMapper;
|
||||||
private final FlowHisTaskMapper flowHisTaskMapper;
|
private final FlowHisTaskMapper flowHisTaskMapper;
|
||||||
private final IdentifierGenerator identifierGenerator;
|
private final IdentifierGenerator identifierGenerator;
|
||||||
private final FlowProcessEventHandler flowProcessEventHandler;
|
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
private final FlwTaskMapper flwTaskMapper;
|
private final FlwTaskMapper flwTaskMapper;
|
||||||
private final FlwCategoryMapper flwCategoryMapper;
|
private final FlwCategoryMapper flwCategoryMapper;
|
||||||
@ -157,11 +156,11 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
// 获取抄送人
|
// 获取抄送人
|
||||||
List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList();
|
List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList();
|
||||||
// 设置抄送人
|
// 设置抄送人
|
||||||
completeTaskBo.getVariables().put("flowCopyList", flowCopyList);
|
completeTaskBo.getVariables().put(FlowConstant.FLOW_COPY_LIST, flowCopyList);
|
||||||
// 消息类型
|
// 消息类型
|
||||||
completeTaskBo.getVariables().put("messageType", messageType);
|
completeTaskBo.getVariables().put(FlowConstant.MESSAGE_TYPE, messageType);
|
||||||
// 消息通知
|
// 消息通知
|
||||||
completeTaskBo.getVariables().put("notice", notice);
|
completeTaskBo.getVariables().put(FlowConstant.MESSAGE_NOTICE, notice);
|
||||||
|
|
||||||
|
|
||||||
FlowTask flowTask = flowTaskMapper.selectById(taskId);
|
FlowTask flowTask = flowTaskMapper.selectById(taskId);
|
||||||
@ -169,11 +168,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
throw new ServiceException("流程任务不存在或任务已审批!");
|
throw new ServiceException("流程任务不存在或任务已审批!");
|
||||||
}
|
}
|
||||||
Instance ins = insService.getById(flowTask.getInstanceId());
|
Instance ins = insService.getById(flowTask.getInstanceId());
|
||||||
// 获取流程定义信息
|
|
||||||
Definition definition = defService.getById(flowTask.getDefinitionId());
|
|
||||||
// 检查流程状态是否为草稿、已撤销或已退回状态,若是则执行流程提交监听
|
// 检查流程状态是否为草稿、已撤销或已退回状态,若是则执行流程提交监听
|
||||||
if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
|
if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
|
||||||
flowProcessEventHandler.processHandler(definition.getFlowCode(), ins, ins.getFlowStatus(), null, true);
|
completeTaskBo.getVariables().put(FlowConstant.SUBMIT, true);
|
||||||
}
|
}
|
||||||
// 设置弹窗处理人
|
// 设置弹窗处理人
|
||||||
Map<String, Object> assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap());
|
Map<String, Object> assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user