重新实现后端的 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