From 04273fdcccf78bb7abaea5cdbb01f8aa678f42e4 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 14 二月 2025 16:45:05 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java | 3 + business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 52 +++++++++++++++++++++++++ business/src/main/java/com/ycl/controller/ProjectProcessController.java | 7 +++ business/src/main/java/com/ycl/service/ProjectProcessService.java | 8 ++++ business/src/main/java/com/ycl/service/ProcessLogService.java | 9 ++++ business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java | 9 ++++ 6 files changed, 86 insertions(+), 2 deletions(-) diff --git a/business/src/main/java/com/ycl/controller/ProjectProcessController.java b/business/src/main/java/com/ycl/controller/ProjectProcessController.java index 19ed1b9..fa4096b 100644 --- a/business/src/main/java/com/ycl/controller/ProjectProcessController.java +++ b/business/src/main/java/com/ycl/controller/ProjectProcessController.java @@ -126,4 +126,11 @@ public Result taskHangup(@Validated @RequestBody TaskHangupForm form) { return projectProcessService.taskHangup(form); } + + @PostMapping("/detail/task/hangup/cancel") + @ApiOperation(value = "鍙栨秷鎸傝捣浠诲姟", notes = "鍙栨秷鎸傝捣浠诲姟") +// @PreAuthorize("@ss.hasPermi('projectProcess:detail')") + public Result cancelTaskHangup(@Validated @RequestBody TaskHangupForm form) { + return projectProcessService.cancelTaskHangup(form); + } } diff --git a/business/src/main/java/com/ycl/service/ProcessLogService.java b/business/src/main/java/com/ycl/service/ProcessLogService.java index 319bb4f..923854c 100644 --- a/business/src/main/java/com/ycl/service/ProcessLogService.java +++ b/business/src/main/java/com/ycl/service/ProcessLogService.java @@ -70,6 +70,15 @@ Boolean taskDelegation(String processInstanceId, String taskId); /** + * 妫�鏌ヤ换鍔℃槸鍚︽寕璧� + * + * @param taskId 浠诲姟id + * @param processInsId 娴佺▼瀹炰緥id + * @return true 鎸傝捣鐨� false娌℃寕璧� + */ + Boolean taskIsHangup(String taskId, String processInsId); + + /** * 娴佺▼鎺ㄨ繘鏃ュ織 * * @param query diff --git a/business/src/main/java/com/ycl/service/ProjectProcessService.java b/business/src/main/java/com/ycl/service/ProjectProcessService.java index b01847d..d839669 100644 --- a/business/src/main/java/com/ycl/service/ProjectProcessService.java +++ b/business/src/main/java/com/ycl/service/ProjectProcessService.java @@ -120,4 +120,12 @@ * @return */ Result taskHangup(TaskHangupForm form); + + /** + * 鍙栨秷鎸傝捣浠诲姟 + * + * @param form + * @return + */ + Result cancelTaskHangup(TaskHangupForm form); } diff --git a/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java index 2d31b69..7997fbd 100644 --- a/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java @@ -137,6 +137,15 @@ return CollectionUtils.isNotEmpty(list); } + @Override + public Boolean taskIsHangup(String taskId, String processInsId) { + Long num = new LambdaQueryChainWrapper<>(baseMapper) + .eq(ProcessLog::getProcessInsId, processInsId) + .eq(ProcessLog::getTaskId, taskId) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.HANGUP, ProcessLogEventTypeEnum.CANCEL_HANGUP) + .count(); + return num % 2 != 0; + } @Override public Result projectProcessLogPage(ProcessLogQuery query) { diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java index c82b1a8..6ac5ced 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/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; @@ -408,7 +409,10 @@ } } } - + // 妫�鏌ユ槸鍚︽寕璧� + if (processLogService.taskIsHangup(task.getId(), task.getProcessInstanceId())) { + taskVO.setTaskStatus(TaskStatusEnum.HANGUP); + } this.distinctVo(taskVO); vos.add(taskVO); } @@ -669,8 +673,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, @@ -682,6 +699,35 @@ 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("鎿嶄綔鎴愬姛"); } @@ -712,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); diff --git a/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java b/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java index a942187..4502b0c 100644 --- a/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java +++ b/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java @@ -14,7 +14,8 @@ NOT_START("not_start", "鏈紑濮�"), TODO("todo", "寰呭姙"), - FINISHED("finished", "宸插畬鎴�") + FINISHED("finished", "宸插畬鎴�"), + HANGUP("HANGUP", "鎸傝捣"), ; private final String value; -- Gitblit v1.8.0