代码开发

This commit is contained in:
lvshaohua 2023-06-28 19:55:58 +08:00
parent eb6d04d52b
commit 874ef9f259
4 changed files with 98 additions and 25 deletions

View File

@ -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);
}
}

View File

@ -0,0 +1,6 @@
package cn.axzo.workflow.core.service.engine;
import cn.axzo.workflow.core.listener.BpmProcessEventListener;
public class EngineProcessInstanceEventListener implements BpmProcessEventListener {
}

View File

@ -28,19 +28,27 @@ public class EngineTaskEventListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_CREATE)) {
taskEventListener.created(delegateTask);
taskService.createTaskExt(delegateTask);
// 审批创建
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_ASSIGNMENT)) {
taskEventListener.assigned(delegateTask);
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_COMPLETE)) {
//审批完成
taskEventListener.completed(delegateTask);
taskService.updateTaskExtComplete(delegateTask);
} else if (delegateTask.getEventName().equals(TaskListener.EVENTNAME_DELETE)) {
// 审批删除
taskEventListener.deleted(delegateTask);
switch (delegateTask.getEventName()) {
case TaskListener.EVENTNAME_CREATE:
taskEventListener.created(delegateTask);
taskService.createTaskExt(delegateTask);
// 审批创建
break;
case TaskListener.EVENTNAME_ASSIGNMENT:
taskEventListener.assigned(delegateTask);
taskService.updateTaskExtAssign(delegateTask);
break;
case TaskListener.EVENTNAME_COMPLETE:
//审批完成
taskEventListener.completed(delegateTask);
taskService.updateTaskExtComplete(delegateTask);
break;
case TaskListener.EVENTNAME_DELETE:
// 审批删除
taskService.updateTaskExtCancel(delegateTask);
taskEventListener.deleted(delegateTask);
break;
default:
}
log.info("Task.notify {} taskDelegate:{}", delegateTask.getId(),taskDelegate);
taskDelegate.calculateAssignerAtExecution(delegateTask);

View File

@ -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();
}
}