package com.java110.common.smo.impl; import com.java110.core.base.smo.BaseServiceSMO; import com.java110.core.smo.purchaseApplyUser.IActivitiWorkflowImageInnerServiceSMO; import com.java110.core.smo.user.IUserInnerServiceSMO; import com.java110.dto.purchaseApply.PurchaseApplyDto; import com.java110.dto.user.UserDto; import com.java110.utils.util.Base64Convert; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.HistoryService; import org.activiti.engine.ProcessEngine; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @ClassName ActivitiWorkflowImageInnerServiceSMOImpl * @Description TODO * @Author wuxw * @Date 2020/5/10 1:42 * @Version 1.0 * add by wuxw 2020/5/10 **/ @RestController public class ActivitiWorkflowImageInnerServiceSMOImpl extends BaseServiceSMO implements IActivitiWorkflowImageInnerServiceSMO { @Autowired private HistoryService historyService; @Autowired private RepositoryService repositoryService; @Autowired private ProcessEngine processEngine; @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired private IUserInnerServiceSMO userInnerServiceSMOImpl; public String getWorkflowImage(@RequestBody String taskId){ Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); String processInstanceId = task.getProcessInstanceId(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId).singleResult(); String processDefinitionId = ""; if (processInstance == null) { //查询已经结束的流程实例 HistoricProcessInstance processInstanceHistory = historyService.createHistoricProcessInstanceQuery() .processInstanceId(processInstanceId).singleResult(); if (processInstanceHistory == null) return null; else processDefinitionId = processInstanceHistory.getProcessDefinitionId(); } else { processDefinitionId = processInstance.getProcessDefinitionId(); } //使用宋体 String fontName = "宋体"; //获取BPMN模型对象 BpmnModel model = repositoryService.getBpmnModel(processDefinitionId); //获取流程实例当前的节点,需要高亮显示 List currentActs = Collections.EMPTY_LIST; if (processInstance != null) currentActs = runtimeService.getActiveActivityIds(processInstance.getId()); InputStream is = processEngine.getProcessEngineConfiguration() .getProcessDiagramGenerator() .generateDiagram(model, "png", currentActs, new ArrayList(), fontName, fontName, fontName, null, 1.0); String image = ""; try { image = Base64Convert.ioToBase64(is); } catch (IOException e) { e.printStackTrace(); } return image; } }