xiangpei
2025-02-14 12f73bafbe361f78d68a35de83ca3b3b4d4e0224
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -20,10 +20,10 @@
import com.ycl.common.utils.SecurityUtils;
import com.ycl.constant.TaskTypeConstant;
import com.ycl.domain.entity.*;
import com.ycl.domain.form.TaskDelegationForm;
import com.ycl.domain.form.TaskJumpForm;
import com.ycl.domain.form.TaskSuperviseForm;
import com.ycl.domain.form.*;
import com.ycl.domain.json.DelegateData;
import com.ycl.domain.json.HangupData;
import com.ycl.domain.json.JumpData;
import com.ycl.domain.json.SuperviseData;
import com.ycl.domain.vo.CustomerTaskVO;
import com.ycl.domain.vo.IndexCustomerTaskVO;
@@ -34,13 +34,13 @@
import com.ycl.service.*;
import com.ycl.common.base.Result;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.domain.form.ProjectProcessForm;
import com.ycl.domain.vo.ProjectProcessVO;
import com.ycl.domain.query.ProjectProcessQuery;
import com.ycl.service.common.TaskCommonService;
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;
@@ -341,7 +341,7 @@
                    .processDefinitionId(task.getProcessDefinitionId())
                    .singleResult();
            taskVO.setDeployId(pd.getDeploymentId());
            taskVO.setProcessName(pd.getName());
            taskVO.setProcessName(pd.getName() + "(v" + pd.getVersion() + ")");
            taskVO.setProcessInsId(task.getProcessInstanceId());
            taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey());
@@ -409,7 +409,10 @@
                    }
                }
            }
            // 检查是否挂起
            if (processLogService.taskIsHangup(task.getId(), task.getProcessInstanceId())) {
                taskVO.setTaskStatus(TaskStatusEnum.HANGUP);
            }
            this.distinctVo(taskVO);
            vos.add(taskVO);
        }
@@ -610,7 +613,7 @@
        jsonData.setAfterHandlerIds(afterHandlerIds);
        jsonData.setAfterHandlerType(form.getPeopleType());
        // 发布转办事件
        publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), ProcessLogEventTypeEnum.DELEGATE, jsonData));
        publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), task.getName(),ProcessLogEventTypeEnum.DELEGATE, jsonData));
        return Result.ok("转办成功");
    }
@@ -621,7 +624,7 @@
        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).processInstanceId(form.getProcessInsId()).singleResult();
        if (Objects.nonNull(task)) {
            // 添加跳过日志
            publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.JUMP, null));
            publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), task.getName(),ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc())));
            // 查出该任务绑定的表单
            Map<String, Object> data = new HashMap<>(1);
@@ -639,6 +642,7 @@
    @Override
    public Result taskSupervise(TaskSuperviseForm form) {
        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult();
        SuperviseData jsonData = new SuperviseData();
        jsonData.setCreateTime(new Date());
        jsonData.setContent(form.getContent());
@@ -664,7 +668,66 @@
        }
        dataList.add(jsonData);
        //添加督办日志
        publisher.publishEvent(new TaskLogEvent(this, processLog.getId(), processLog.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.SUPERVISE, dataList));
        publisher.publishEvent(new TaskLogEvent(this, processLog.getId(), processLog.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), task.getName(),ProcessLogEventTypeEnum.SUPERVISE, dataList));
        return Result.ok("操作成功");
    }
    @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,
                SecurityUtils.getUserId(),
                form.getProjectId(),
                form.getProcessInsId(),
                form.getTaskId(),
                task.getName(),
                ProcessLogEventTypeEnum.HANGUP,
                new HangupData(form.getReason())
                ));
        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("操作成功");
    }
@@ -695,6 +758,10 @@
        for (Task task : taskList) {
            CustomerTaskVO taskVO = new CustomerTaskVO();
            this.setRuntimeTaskInfo(task, taskVO, projectId);
            // 检查是否挂起
            if (processLogService.taskIsHangup(task.getId(), task.getProcessInstanceId())) {
                taskVO.setTaskStatus(TaskStatusEnum.HANGUP);
            }
            vos.add(taskVO);
        }
        result.put("taskList", vos);