|
|
|
|
@ -184,28 +184,28 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过流程实例id获取历史流程图
|
|
|
|
|
* 通过业务id获取历史流程图
|
|
|
|
|
*
|
|
|
|
|
* @param processInstanceId 流程实例id
|
|
|
|
|
* @param businessKey 业务id
|
|
|
|
|
*/
|
|
|
|
|
@SneakyThrows
|
|
|
|
|
@Override
|
|
|
|
|
public String getHistoryImage(String processInstanceId) {
|
|
|
|
|
public String getHistoryImage(String businessKey) {
|
|
|
|
|
String processDefinitionId;
|
|
|
|
|
// 获取当前的流程实例
|
|
|
|
|
ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId).singleResult();
|
|
|
|
|
ProcessInstance processInstance = QueryUtils.businessKeyQuery(businessKey).singleResult();
|
|
|
|
|
// 如果流程已经结束,则得到结束节点
|
|
|
|
|
if (Objects.isNull(processInstance)) {
|
|
|
|
|
HistoricProcessInstance pi = QueryUtils.hisInstanceQuery(processInstanceId).singleResult();
|
|
|
|
|
HistoricProcessInstance pi = QueryUtils.hisInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
|
|
|
|
|
processDefinitionId = pi.getProcessDefinitionId();
|
|
|
|
|
} else {
|
|
|
|
|
// 根据流程实例ID获得当前处于活动状态的ActivityId合集
|
|
|
|
|
ProcessInstance pi = QueryUtils.instanceQuery(processInstanceId).singleResult();
|
|
|
|
|
ProcessInstance pi = QueryUtils.instanceQuery(processInstance.getProcessInstanceId()).singleResult();
|
|
|
|
|
processDefinitionId = pi.getProcessDefinitionId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获得活动的节点
|
|
|
|
|
List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
|
|
|
|
|
List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstance.getProcessInstanceId()).orderByHistoricActivityInstanceStartTime().asc().list();
|
|
|
|
|
|
|
|
|
|
List<String> highLightedFlows = new ArrayList<>();
|
|
|
|
|
List<String> highLightedNodes = new ArrayList<>();
|
|
|
|
|
@ -240,15 +240,16 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过流程实例id获取历史流程图运行中,历史等节点
|
|
|
|
|
* 通过业务id获取历史流程图运行中,历史等节点
|
|
|
|
|
*
|
|
|
|
|
* @param processInstanceId 流程实例id
|
|
|
|
|
* @param businessKey 业务id
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> getHistoryList(String processInstanceId) {
|
|
|
|
|
public Map<String, Object> getHistoryList(String businessKey) {
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
List<Map<String, Object>> taskList = new ArrayList<>();
|
|
|
|
|
HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInstanceId).singleResult();
|
|
|
|
|
HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult();
|
|
|
|
|
String processInstanceId = historicProcessInstance.getId();
|
|
|
|
|
StringBuilder xml = new StringBuilder();
|
|
|
|
|
ProcessDefinition processDefinition = repositoryService.getProcessDefinition(historicProcessInstance.getProcessDefinitionId());
|
|
|
|
|
// 获取节点
|
|
|
|
|
@ -333,13 +334,15 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
/**
|
|
|
|
|
* 获取审批记录
|
|
|
|
|
*
|
|
|
|
|
* @param processInstanceId 流程实例id
|
|
|
|
|
* @param businessKey 业务id
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public List<ActHistoryInfoVo> getHistoryRecord(String processInstanceId) {
|
|
|
|
|
public List<ActHistoryInfoVo> getHistoryRecord(String businessKey) {
|
|
|
|
|
// 查询任务办理记录
|
|
|
|
|
List<HistoricTaskInstance> list = QueryUtils.hisTaskInstanceQuery(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list();
|
|
|
|
|
List<HistoricTaskInstance> list = QueryUtils.hisTaskBusinessKeyQuery(businessKey).orderByHistoricTaskInstanceEndTime().desc().list();
|
|
|
|
|
list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed());
|
|
|
|
|
HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult();
|
|
|
|
|
String processInstanceId = historicProcessInstance.getId();
|
|
|
|
|
List<ActHistoryInfoVo> actHistoryInfoVoList = new ArrayList<>();
|
|
|
|
|
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId);
|
|
|
|
|
//附件
|
|
|
|
|
@ -440,7 +443,8 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public boolean deleteRunInstance(ProcessInvalidBo processInvalidBo) {
|
|
|
|
|
try {
|
|
|
|
|
List<Task> list = QueryUtils.taskQuery(processInvalidBo.getProcessInstanceId()).list();
|
|
|
|
|
List<Task> list = QueryUtils.taskQuery().processInstanceBusinessKey(processInvalidBo.getBusinessKey()).list();
|
|
|
|
|
String processInstanceId = list.get(0).getProcessInstanceId();
|
|
|
|
|
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
|
|
|
|
|
if (CollUtil.isNotEmpty(subTasks)) {
|
|
|
|
|
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
|
|
|
|
|
@ -452,10 +456,10 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
for (Task task : StreamUtils.filter(list, e -> StringUtils.isBlank(e.getParentTaskId()))) {
|
|
|
|
|
taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.INVALID.getStatus(), deleteReason);
|
|
|
|
|
}
|
|
|
|
|
HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInvalidBo.getProcessInstanceId()).singleResult();
|
|
|
|
|
HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInstanceId).singleResult();
|
|
|
|
|
BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus());
|
|
|
|
|
runtimeService.updateBusinessStatus(processInvalidBo.getProcessInstanceId(), BusinessStatusEnum.INVALID.getStatus());
|
|
|
|
|
runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstanceId(), deleteReason);
|
|
|
|
|
runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.INVALID.getStatus());
|
|
|
|
|
runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
|
|
|
|
|
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey());
|
|
|
|
|
if (processHandler != null) {
|
|
|
|
|
processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false);
|
|
|
|
|
@ -470,40 +474,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
/**
|
|
|
|
|
* 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
|
|
|
|
*
|
|
|
|
|
* @param processInstanceIds 流程实例id
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public boolean deleteRunAndHisInstance(List<String> processInstanceIds) {
|
|
|
|
|
try {
|
|
|
|
|
// 1.删除运行中流程实例
|
|
|
|
|
List<Task> list = QueryUtils.taskQuery(processInstanceIds).list();
|
|
|
|
|
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
|
|
|
|
|
if (CollUtil.isNotEmpty(subTasks)) {
|
|
|
|
|
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
|
|
|
|
|
}
|
|
|
|
|
runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请");
|
|
|
|
|
// 2.删除历史记录
|
|
|
|
|
List<HistoricProcessInstance> historicProcessInstanceList = QueryUtils.hisInstanceQuery(new HashSet<>(processInstanceIds)).list();
|
|
|
|
|
if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
|
|
|
|
|
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
|
|
|
|
|
}
|
|
|
|
|
wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds);
|
|
|
|
|
return true;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
throw new ServiceException(e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 按照业务id删除 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
|
|
|
|
*
|
|
|
|
|
* @param businessKeys 业务id
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public boolean deleteRunAndHisInstanceByBusinessKeys(List<String> businessKeys) {
|
|
|
|
|
public boolean deleteRunAndHisInstance(List<String> businessKeys) {
|
|
|
|
|
try {
|
|
|
|
|
// 1.删除运行中流程实例
|
|
|
|
|
List<ActHiProcinst> actHiProcinsts = actHiProcinstService.selectByBusinessKeyIn(businessKeys);
|
|
|
|
|
@ -534,12 +509,18 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
/**
|
|
|
|
|
* 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
|
|
|
|
*
|
|
|
|
|
* @param processInstanceIds 流程实例id
|
|
|
|
|
* @param businessKeys 业务id
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public boolean deleteFinishAndHisInstance(List<String> processInstanceIds) {
|
|
|
|
|
public boolean deleteFinishAndHisInstance(List<String> businessKeys) {
|
|
|
|
|
try {
|
|
|
|
|
List<ActHiProcinst> actHiProcinsts = actHiProcinstService.selectByBusinessKeyIn(businessKeys);
|
|
|
|
|
if (CollUtil.isEmpty(actHiProcinsts)) {
|
|
|
|
|
log.warn("当前业务ID:{}查询到流程实例为空!", businessKeys);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
List<String> processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId);
|
|
|
|
|
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
|
|
|
|
|
wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds);
|
|
|
|
|
return true;
|
|
|
|
|
@ -552,13 +533,13 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
/**
|
|
|
|
|
* 撤销流程申请
|
|
|
|
|
*
|
|
|
|
|
* @param processInstanceId 流程实例id
|
|
|
|
|
* @param businessKey 业务id
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public boolean cancelProcessApply(String processInstanceId) {
|
|
|
|
|
public boolean cancelProcessApply(String businessKey) {
|
|
|
|
|
try {
|
|
|
|
|
ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId)
|
|
|
|
|
ProcessInstance processInstance = QueryUtils.businessKeyQuery(businessKey)
|
|
|
|
|
.startedBy(String.valueOf(LoginHelper.getUserId())).singleResult();
|
|
|
|
|
if (ObjectUtil.isNull(processInstance)) {
|
|
|
|
|
throw new ServiceException("您不是流程发起人,撤销失败!");
|
|
|
|
|
@ -566,6 +547,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|
|
|
|
if (processInstance.isSuspended()) {
|
|
|
|
|
throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED);
|
|
|
|
|
}
|
|
|
|
|
String processInstanceId = processInstance.getId();
|
|
|
|
|
BusinessStatusEnum.checkCancelStatus(processInstance.getBusinessStatus());
|
|
|
|
|
List<Task> taskList = QueryUtils.taskQuery(processInstanceId).list();
|
|
|
|
|
for (Task task : taskList) {
|
|
|
|
|
|