重新实现后端的 bpm 流程图的高亮接口
parent
adc6076deb
commit
676e4f29d9
@ -0,0 +1,78 @@
|
||||
package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl;
|
||||
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmActivityService;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.bpmn.model.BpmnModel;
|
||||
import org.activiti.engine.HistoryService;
|
||||
import org.activiti.engine.RepositoryService;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.history.HistoricProcessInstance;
|
||||
import org.activiti.engine.task.Task;
|
||||
import org.activiti.image.ProcessDiagramGenerator;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.InputStream;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_BPMN_MODEL_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
|
||||
/**
|
||||
* BPM 活动实例 Service 实现类
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@Validated
|
||||
public class BpmActivityServiceImpl implements BpmActivityService {
|
||||
|
||||
private static final String FONT_NAME = "宋体";
|
||||
|
||||
@Resource
|
||||
private ProcessDiagramGenerator processDiagramGenerator;
|
||||
|
||||
@Resource
|
||||
private BpmProcessInstanceService processInstanceService;
|
||||
@Resource
|
||||
private BpmProcessDefinitionService processDefinitionService;
|
||||
@Resource
|
||||
private BpmTaskService taskService;
|
||||
|
||||
@Override
|
||||
public byte[] generateHighlightDiagram(String processInstanceId) {
|
||||
// 获得流程实例
|
||||
HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(processInstanceId);
|
||||
if (processInstance == null) {
|
||||
throw exception(PROCESS_INSTANCE_NOT_EXISTS);
|
||||
}
|
||||
// 获得流程定义的 BPMN 模型
|
||||
BpmnModel bpmnModel = processDefinitionService.getBpmnModel(processInstance.getProcessDefinitionId());
|
||||
if (bpmnModel == null) {
|
||||
throw exception(PROCESS_DEFINITION_BPMN_MODEL_NOT_EXISTS);
|
||||
}
|
||||
|
||||
// 如果流程已经结束,则无进行中的任务,无法高亮
|
||||
// 如果流程未结束,才需要高亮
|
||||
List<String> highLightedActivities = Collections.emptyList();
|
||||
if (processInstance.getEndTime() == null) {
|
||||
List<Task> tasks = taskService.getTasksByProcessInstanceId(processInstanceId);
|
||||
highLightedActivities = CollectionUtils.convertList(tasks, Task::getTaskDefinitionKey);
|
||||
}
|
||||
|
||||
// 生成高亮流程图
|
||||
InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, highLightedActivities, Collections.emptyList(),
|
||||
FONT_NAME, FONT_NAME, FONT_NAME);
|
||||
return IoUtil.readBytes(inputStream);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue