package com.ycl.service.impl;
|
|
import com.ycl.common.core.domain.AjaxResult;
|
import com.ycl.common.utils.SecurityUtils;
|
import com.ycl.domain.vo.FlowTaskVo;
|
import com.ycl.factory.FlowServiceFactory;
|
import com.ycl.service.IFlowInstanceService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.flowable.common.engine.api.FlowableObjectNotFoundException;
|
import org.flowable.engine.history.HistoricProcessInstance;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.Map;
|
import java.util.Objects;
|
|
/**
|
* <p>工作流流程实例管理<p>
|
*
|
* @author Tony
|
* @date 2021-04-03
|
*/
|
@Service
|
@Slf4j
|
@RequiredArgsConstructor
|
public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlowInstanceService {
|
|
/**
|
* 结束流程实例
|
*
|
* @param vo
|
*/
|
@Override
|
public void stopProcessInstance(FlowTaskVo vo) {
|
String taskId = vo.getTaskId();
|
|
}
|
|
/**
|
* 激活或挂起流程实例
|
*
|
* @param state 状态
|
* @param instanceId 流程实例ID
|
*/
|
@Override
|
public void updateState(Integer state, String instanceId) {
|
|
// 激活
|
if (state == 1) {
|
runtimeService.activateProcessInstanceById(instanceId);
|
}
|
// 挂起
|
if (state == 2) {
|
runtimeService.suspendProcessInstanceById(instanceId);
|
}
|
}
|
|
/**
|
* 删除流程实例ID
|
*
|
* @param instanceId 流程实例ID
|
* @param deleteReason 删除原因
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void delete(String instanceId, String deleteReason) {
|
|
// 查询历史数据
|
HistoricProcessInstance historicProcessInstance = getHistoricProcessInstanceById(instanceId);
|
if (historicProcessInstance.getEndTime() != null) {
|
historyService.deleteHistoricProcessInstance(historicProcessInstance.getId());
|
return;
|
}
|
// 删除流程实例
|
runtimeService.deleteProcessInstance(instanceId, deleteReason);
|
// 删除历史流程实例
|
historyService.deleteHistoricProcessInstance(instanceId);
|
}
|
|
/**
|
* 根据实例ID查询历史实例数据
|
*
|
* @param processInstanceId
|
* @return
|
*/
|
@Override
|
public HistoricProcessInstance getHistoricProcessInstanceById(String processInstanceId) {
|
HistoricProcessInstance historicProcessInstance =
|
historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
if (Objects.isNull(historicProcessInstance)) {
|
throw new FlowableObjectNotFoundException("流程实例不存在: " + processInstanceId);
|
}
|
return historicProcessInstance;
|
}
|
|
/**
|
* 根据流程定义ID启动流程实例
|
*
|
* @param procDefId 流程定义Id
|
* @param variables 流程变量
|
* @return
|
*/
|
@Override
|
public AjaxResult startProcessInstanceById(String procDefId, Map<String, Object> variables) {
|
|
try {
|
// 设置流程发起人Id到流程中
|
Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
|
// identityService.setAuthenticatedUserId(userId.toString());
|
variables.put("initiator",userId);
|
variables.put("_FLOWABLE_SKIP_EXPRESSION_ENABLED", true);
|
runtimeService.startProcessInstanceById(procDefId, variables);
|
return AjaxResult.success("流程启动成功");
|
} catch (Exception e) {
|
e.printStackTrace();
|
return AjaxResult.error("流程启动错误");
|
}
|
}
|
}
|