update 优化 工作流后台发起或审批可以手动设置办理人

dev
疯狂的狮子Li 4 months ago
parent e878adb6e8
commit e67399c2c7

@ -50,6 +50,11 @@ public class RemoteCompleteTask implements Serializable {
*/ */
private String notice; private String notice;
/**
* ( )
*/
private String handler;
/** /**
* *
*/ */

@ -30,6 +30,11 @@ public class RemoteStartProcess implements Serializable {
*/ */
private String flowCode; private String flowCode;
/**
* ( )
*/
private String handler;
/** /**
* {'entity': {}} * {'entity': {}}
*/ */

@ -53,6 +53,11 @@ public class CompleteTaskBo implements Serializable {
*/ */
private String notice; private String notice;
/**
* ( )
*/
private String handler;
/** /**
* *
*/ */

@ -34,6 +34,11 @@ public class StartProcessBo implements Serializable {
@NotBlank(message = "流程定义编码不能为空", groups = {AddGroup.class}) @NotBlank(message = "流程定义编码不能为空", groups = {AddGroup.class})
private String flowCode; private String flowCode;
/**
* ( )
*/
private String handler;
/** /**
* {'entity': {}} * {'entity': {}}
*/ */

@ -78,6 +78,8 @@ public interface WorkflowService {
/** /**
* *
*
* completeTask.getVariables().put("ignore", true);
* *
* @param completeTask * @param completeTask
* @return * @return
@ -89,7 +91,15 @@ public interface WorkflowService {
* *
* @param taskId ID * @param taskId ID
* @param message * @param message
* @return
*/ */
boolean completeTask(Long taskId, String message); boolean completeTask(Long taskId, String message);
/**
*
*
* @param startProcess
* @return
*/
boolean startCompleteTask(RemoteStartProcess startProcess);
} }

@ -128,6 +128,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
variables.put(FlowConstant.AUTO_PASS, autoPass); variables.put(FlowConstant.AUTO_PASS, autoPass);
FlowParams flowParams = FlowParams.build() FlowParams flowParams = FlowParams.build()
.handler(startProcessBo.getHandler())
.flowCode(startProcessBo.getFlowCode()) .flowCode(startProcessBo.getFlowCode())
.variable(startProcessBo.getVariables()) .variable(startProcessBo.getVariables())
.flowStatus(BusinessStatusEnum.DRAFT.getStatus()); .flowStatus(BusinessStatusEnum.DRAFT.getStatus());
@ -187,6 +188,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
} }
// 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息 // 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
FlowParams flowParams = FlowParams.build() FlowParams flowParams = FlowParams.build()
.handler(completeTaskBo.getHandler())
.variable(variables) .variable(variables)
.skipType(SkipType.PASS.getKey()) .skipType(SkipType.PASS.getKey())
.message(completeTaskBo.getMessage()) .message(completeTaskBo.getMessage())

@ -132,16 +132,15 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
bo.setId(leave.getId()); bo.setId(leave.getId());
// 后端发起需要忽略权限 // 后端发起需要忽略权限
bo.getParams().put("ignore", true); bo.getParams().put("ignore", true);
RemoteStartProcessReturn result = workflowService.startWorkFlow(new RemoteStartProcess() {{
setBusinessId(leave.getId().toString()); RemoteStartProcess startProcess = new RemoteStartProcess();
setFlowCode(StringUtils.isEmpty(bo.getFlowCode()) ? "leave1" : bo.getFlowCode()); startProcess.setBusinessId(leave.getId().toString());
setVariables(bo.getParams()); startProcess.setFlowCode(StringUtils.isEmpty(bo.getFlowCode()) ? "leave1" : bo.getFlowCode());
}}); startProcess.setVariables(bo.getParams());
boolean flag1 = workflowService.completeTask(new RemoteCompleteTask() {{ // 后端发起 如果没有登录用户 比如定时任务 可以手动设置一个处理人id
setTaskId(result.getTaskId()); // startProcess.setHandler("0");
setMessageType(List.of("1"));
setVariables(bo.getParams()); boolean flag1 = workflowService.startCompleteTask(startProcess);
}});
if (!flag1) { if (!flag1) {
throw new ServiceException("流程发起异常"); throw new ServiceException("流程发起异常");
} }

@ -3,12 +3,14 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.enums.MessageTypeEnum;
import org.dromara.workflow.domain.bo.CompleteTaskBo; import org.dromara.workflow.domain.bo.CompleteTaskBo;
import org.dromara.workflow.domain.bo.StartProcessBo; import org.dromara.workflow.domain.bo.StartProcessBo;
import org.dromara.workflow.service.IFlwDefinitionService; import org.dromara.workflow.service.IFlwDefinitionService;
@ -17,6 +19,7 @@ import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.service.WorkflowService; import org.dromara.workflow.service.WorkflowService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -148,4 +151,34 @@ public class WorkflowServiceImpl implements WorkflowService {
return flwTaskService.completeTask(completeTask); return flwTaskService.completeTask(completeTask);
} }
/**
*
*
* @param startProcess
*/
@Override
public boolean startCompleteTask(RemoteStartProcess startProcess) {
try {
StartProcessBo processBo = new StartProcessBo();
processBo.setBusinessId(startProcess.getBusinessId());
processBo.setFlowCode(startProcess.getFlowCode());
processBo.setVariables(startProcess.getVariables());
processBo.setHandler(startProcess.getHandler());
RemoteStartProcessReturn result = flwTaskService.startWorkFlow(processBo);
CompleteTaskBo taskBo = new CompleteTaskBo();
taskBo.setTaskId(result.getTaskId());
taskBo.setMessageType(Collections.singletonList(MessageTypeEnum.SYSTEM_MESSAGE.getCode()));
taskBo.setVariables(startProcess.getVariables());
taskBo.setHandler(startProcess.getHandler());
boolean flag = flwTaskService.completeTask(taskBo);
if (!flag) {
throw new ServiceException("流程发起异常");
}
return true;
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
}
} }

Loading…
Cancel
Save