package org.springblade.mdm.flow.service;
|
|
import lombok.AllArgsConstructor;
|
import org.flowable.engine.HistoryService;
|
import org.flowable.engine.RuntimeService;
|
import org.flowable.engine.TaskService;
|
import org.flowable.engine.history.HistoricProcessInstance;
|
import org.flowable.engine.runtime.ProcessInstance;
|
import org.flowable.task.api.Task;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.StringUtil;
|
import org.springblade.mdm.flow.constants.FlowContants;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import java.util.Map;
|
|
@AllArgsConstructor
|
@Service
|
public class FlowCommonService {
|
private final RuntimeService runtimeService;
|
private final HistoryService historyService;
|
|
/**
|
* 根据流程实例id获取definitionKey
|
* @param processInstanceId
|
* @return
|
*/
|
public String getDefinitionKey(String processInstanceId){
|
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
.processInstanceId(processInstanceId)
|
.singleResult();
|
return processInstance.getProcessDefinitionKey();
|
}
|
|
/**
|
* 从流程变量获取发起流程的树形
|
* @param processInstanceId
|
* @return
|
*/
|
public FlowProgramProperties getProgramProperties(String processInstanceId){
|
FlowProgramProperties programProperties = new FlowProgramProperties();
|
programProperties.setProcessInstanceId(processInstanceId);
|
|
Map<String, Object> vars = runtimeService.getVariables(processInstanceId);
|
|
programProperties.setTitle(String.valueOf(vars.get(FlowContants.TITLE)));
|
programProperties.setDrawingNo(String.valueOf(vars.get(FlowContants.DRAWING_NO)));
|
programProperties.setDrawingNoEdition(String.valueOf(vars.get(FlowContants.DRAWING_NO_EDITION)));
|
programProperties.setProductModel(String.valueOf(vars.get(FlowContants.PRODUCT_MODEL)));
|
|
programProperties.setProcessNo(String.valueOf(vars.get(FlowContants.PROCESS_NO)));
|
programProperties.setProcessEdition(String.valueOf(vars.get(FlowContants.PROCESS_EDITION)));//工序版次
|
programProperties.setProcessName(String.valueOf(vars.get(FlowContants.PROCESS_NAME)));
|
programProperties.setMachineCode(String.valueOf(vars.get(FlowContants.MACHINE_CODE)));
|
|
programProperties.setMachineMode(String.valueOf(vars.get(FlowContants.MACHINE_MODE)));
|
//数据处理名称为版次以前,零件号加工序号:YZL4-1100-01-50 零组件号:YZL4-1100-01 工序号 50
|
|
programProperties.setCraftEdition(String.valueOf(vars.get(FlowContants.CRAFT_EDITION)));
|
programProperties.setHasCuredProgram(String.valueOf(vars.get(FlowContants.HAS_CURED_PROGRAM)));
|
programProperties.setIsProcessEditionSame(String.valueOf(vars.get(FlowContants.IS_PROCESS_EDITION_SAME)));
|
if(vars.containsKey(FlowContants.DEVIATION)) {
|
programProperties.setDeviation(String.valueOf(vars.get(FlowContants.DEVIATION)));
|
}
|
if(vars.containsKey(FlowContants.CURED_NODE_ID)){
|
programProperties.setCuredNodeId(Func.toLong(vars.get(FlowContants.CURED_NODE_ID)));
|
}
|
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
.processInstanceId(processInstanceId)
|
.singleResult();
|
String processDefinitionKey = processInstance.getProcessDefinitionKey();
|
programProperties.setProcessDefinitionKey(processDefinitionKey);
|
return programProperties;
|
}
|
|
/**
|
* 流程是否在进行
|
* @param processInstanceId 实例id
|
*/
|
public boolean isProcessInstanceActive(String processInstanceId) {
|
if(processInstanceId == null){
|
return false;
|
}
|
// 先查运行时表
|
ProcessInstance instance = runtimeService.createProcessInstanceQuery()
|
.processInstanceId(processInstanceId)
|
.singleResult();
|
|
if (instance != null) {
|
return true;
|
}
|
|
// 再查历史表确认是否曾经存在
|
HistoricProcessInstance historicInstance = historyService.createHistoricProcessInstanceQuery()
|
.processInstanceId(processInstanceId)
|
.singleResult();
|
|
return historicInstance != null && historicInstance.getEndTime() == null;
|
}
|
|
|
}
|