代码开发
This commit is contained in:
parent
eb6d04d52b
commit
874ef9f259
@ -9,21 +9,21 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface BpmTaskExtMapper extends BaseMapper<BpmTaskExtDO> {
|
||||
public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> {
|
||||
default void updateByTaskId(BpmTaskExtDO entity) {
|
||||
update(entity,
|
||||
new LambdaQueryWrapper<BpmTaskExtDO>().eq(BpmTaskExtDO::getTaskId, entity.getTaskId()));
|
||||
}
|
||||
|
||||
// default List<BpmTaskExtDO> selectListByTaskIds(Collection<String> taskIds) {
|
||||
// return selectList(BpmTaskExtDO::getTaskId, taskIds);
|
||||
// }
|
||||
//
|
||||
// default List<BpmTaskExtDO> selectListByProcessInstanceId(String processInstanceId) {
|
||||
// return selectList("process_instance_id", processInstanceId);
|
||||
// }
|
||||
//
|
||||
// default BpmTaskExtDO selectByTaskId(String taskId) {
|
||||
// return selectOne(BpmTaskExtDO::getTaskId, taskId);
|
||||
// }
|
||||
default List<BpmTaskExtDO> selectListByTaskIds(Collection<String> taskIds) {
|
||||
return selectList(BpmTaskExtDO::getTaskId, taskIds);
|
||||
}
|
||||
|
||||
default List<BpmTaskExtDO> selectListByProcessInstanceId(String processInstanceId) {
|
||||
return selectList("process_instance_id", processInstanceId);
|
||||
}
|
||||
|
||||
default BpmTaskExtDO selectByTaskId(String taskId) {
|
||||
return selectOne(BpmTaskExtDO::getTaskId, taskId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
package cn.axzo.workflow.core.service.engine;
|
||||
|
||||
import cn.axzo.workflow.core.listener.BpmProcessEventListener;
|
||||
|
||||
public class EngineProcessInstanceEventListener implements BpmProcessEventListener {
|
||||
}
|
||||
@ -28,19 +28,27 @@ public class EngineTaskEventListener implements TaskListener {
|
||||
|
||||
@Override
|
||||
public void notify(DelegateTask delegateTask) {
|
||||
if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_CREATE)) {
|
||||
switch (delegateTask.getEventName()) {
|
||||
case TaskListener.EVENTNAME_CREATE:
|
||||
taskEventListener.created(delegateTask);
|
||||
taskService.createTaskExt(delegateTask);
|
||||
// 审批创建
|
||||
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_ASSIGNMENT)) {
|
||||
break;
|
||||
case TaskListener.EVENTNAME_ASSIGNMENT:
|
||||
taskEventListener.assigned(delegateTask);
|
||||
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_COMPLETE)) {
|
||||
taskService.updateTaskExtAssign(delegateTask);
|
||||
break;
|
||||
case TaskListener.EVENTNAME_COMPLETE:
|
||||
//审批完成
|
||||
taskEventListener.completed(delegateTask);
|
||||
taskService.updateTaskExtComplete(delegateTask);
|
||||
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_DELETE)) {
|
||||
break;
|
||||
case TaskListener.EVENTNAME_DELETE:
|
||||
// 审批删除
|
||||
taskService.updateTaskExtCancel(delegateTask);
|
||||
taskEventListener.deleted(delegateTask);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
log.info("Task.notify {} taskDelegate:{}", delegateTask.getId(),taskDelegate);
|
||||
taskDelegate.calculateAssignerAtExecution(delegateTask);
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.workflow.core.service.impl;
|
||||
|
||||
import cn.axzo.workflow.core.common.BpmConstants;
|
||||
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceDeleteReasonEnum;
|
||||
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum;
|
||||
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.core.repository.entity.BpmTaskExtDO;
|
||||
@ -15,6 +16,7 @@ import cn.axzo.workflow.core.service.dto.response.task.BpmTaskDonePageItemVO;
|
||||
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskTodoPageItemVO;
|
||||
import cn.azxo.framework.common.utils.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.engine.HistoryService;
|
||||
import org.flowable.engine.RepositoryService;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
@ -26,6 +28,8 @@ import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.flowable.task.service.delegate.DelegateTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.support.TransactionSynchronization;
|
||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
@ -34,6 +38,7 @@ import static cn.axzo.workflow.core.common.BpmConstants.*;
|
||||
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.*;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
|
||||
@Autowired
|
||||
@ -192,4 +197,58 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
taskExtDO.setEndTime(new Date());
|
||||
taskExtMapper.updateByTaskId(taskExtDO);
|
||||
}
|
||||
|
||||
public void updateTaskExtAssign(DelegateTask task) {
|
||||
String assignee = task.getAssignee();
|
||||
String processDefinitionId = task.getProcessDefinitionId();
|
||||
String taskDefinitionKey = task.getTaskDefinitionKey();
|
||||
// 在获取候选人列表时,向bpm_task_assignee_info表中插入选择的审批人的信息,在这里更新bpm_task_exe表时,通过task_id从bpm_task_assigner_info表中获取审批人的完整信息
|
||||
BpmTaskExtDO taskExtDO = new BpmTaskExtDO();
|
||||
taskExtDO.setTaskId(task.getId());
|
||||
taskExtDO.setTenantId(task.getTenantId());
|
||||
taskExtDO.setIdentityId(Long.valueOf(task.getAssignee()));
|
||||
taskExtDO.setProcessDefinitionId(processDefinitionId);
|
||||
taskExtDO.setUserName(task.getOwner());
|
||||
taskExtMapper.updateByTaskId(taskExtDO);
|
||||
}
|
||||
|
||||
public void updateTaskExtCancel(DelegateTask task) {
|
||||
// 需要在事务提交后,才进行查询。不然查询不到历史的原因
|
||||
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
||||
|
||||
@Override
|
||||
public void afterCommit() {
|
||||
// 可能只是活动,不是任务,所以查询不到
|
||||
String taskId = task.getId();
|
||||
HistoricTaskInstance task = getHistoricTask(taskId);
|
||||
if (task == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果任务拓展表已经是完成的状态,则跳过
|
||||
BpmTaskExtDO taskExt = taskExtMapper.selectByTaskId(taskId);
|
||||
if (taskExt == null) {
|
||||
log.error("[updateTaskExtCancel][taskId({}) 查找不到对应的记录,可能存在问题]", taskId);
|
||||
return;
|
||||
}
|
||||
// 如果已经是最终的结果,则跳过
|
||||
if (BpmProcessInstanceResultEnum.isEndResult(taskExt.getResult())) {
|
||||
log.warn("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId,
|
||||
taskExt.getResult());
|
||||
return;
|
||||
}
|
||||
taskExt.setEndTime(new Date());
|
||||
taskExt.setResult(BpmProcessInstanceResultEnum.CANCEL.getResult());
|
||||
taskExt.setComment(BpmProcessInstanceDeleteReasonEnum.translateReason(task.getDeleteReason()));
|
||||
|
||||
// 更新任务
|
||||
taskExtMapper.updateById(taskExt);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public HistoricTaskInstance getHistoricTask(String id) {
|
||||
return historyService.createHistoricTaskInstanceQuery().taskId(id).singleResult();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user