xiangpei
2025-02-14 e988deb64f96240ed853e45973a9181369345a55
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -40,6 +40,7 @@
import com.ycl.system.service.ISysDeptService;
import com.ycl.system.service.ISysRoleService;
import com.ycl.system.service.ISysUserService;
import lombok.Synchronized;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
@@ -669,8 +670,21 @@
    }
    @Override
    @Synchronized
    public Result taskHangup(TaskHangupForm form) {
        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult();
        if (Objects.isNull(task)) {
            throw new RuntimeException("任务不存在");
        }
        List<ProcessLog> logs = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper())
                .eq(ProcessLog::getTaskId, form.getTaskId())
                .eq(ProcessLog::getProcessInsId, form.getProcessInsId())
                .eq(ProcessLog::getProjectId, form.getProjectId())
                .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.HANGUP, ProcessLogEventTypeEnum.CANCEL_HANGUP)
                .list();
        if (logs.size() % 2 != 0) {
            throw new RuntimeException("该任务正在挂起中,不能再次挂起");
        }
        // 任务挂起只需要存日志,查询待办时如果有这个日志记录,则禁用提交按钮,以此实现任务挂起
        publisher.publishEvent(new TaskLogEvent(this,
                null,
@@ -685,6 +699,35 @@
        return Result.ok("操作成功");
    }
    @Override
    @Synchronized
    public Result cancelTaskHangup(TaskHangupForm form) {
        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult();
        if (Objects.isNull(task)) {
            throw new RuntimeException("任务不存在");
        }
        List<ProcessLog> logs = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper())
                .eq(ProcessLog::getTaskId, form.getTaskId())
                .eq(ProcessLog::getProcessInsId, form.getProcessInsId())
                .eq(ProcessLog::getProjectId, form.getProjectId())
                .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.HANGUP, ProcessLogEventTypeEnum.CANCEL_HANGUP)
                .list();
        if (logs.size() % 2 == 0) {
            throw new RuntimeException("该任务未被挂起,不能取消挂起");
        }
        publisher.publishEvent(new TaskLogEvent(this,
                null,
                SecurityUtils.getUserId(),
                form.getProjectId(),
                form.getProcessInsId(),
                form.getTaskId(),
                task.getName(),
                ProcessLogEventTypeEnum.CANCEL_HANGUP,
                new HangupData(form.getReason())
        ));
        return Result.ok("操作成功");
    }
    /**
     * 查询待办任务
     *