From 9aae4e48f0551b8ed9a6bbd1de7586a0041539b1 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 14 二月 2025 16:44:50 +0800
Subject: [PATCH] 赋码减去节点挂起时长
---
flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java | 2 +
business/src/main/java/com/ycl/task/FlowableTask.java | 60 ++++++++++++++++++++++++-----
2 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/business/src/main/java/com/ycl/task/FlowableTask.java b/business/src/main/java/com/ycl/task/FlowableTask.java
index b5eb3ec..e5cefa7 100644
--- a/business/src/main/java/com/ycl/task/FlowableTask.java
+++ b/business/src/main/java/com/ycl/task/FlowableTask.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.ycl.common.enums.business.ProcessLogEventTypeEnum;
import com.ycl.domain.entity.ProcessCoding;
+import com.ycl.domain.entity.ProcessLog;
import com.ycl.domain.entity.ProjectInfo;
import com.ycl.domain.entity.ProjectProcess;
import com.ycl.factory.FlowServiceFactory;
@@ -10,6 +12,7 @@
import com.ycl.mapper.ProjectInfoMapper;
import com.ycl.mapper.ProjectProcessMapper;
import com.ycl.service.ProcessCodingService;
+import com.ycl.service.ProcessLogService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.task.api.Task;
@@ -24,6 +27,8 @@
import java.util.stream.Collectors;
import static com.ycl.common.constant.ProcessOverTimeConstants.*;
+import static com.ycl.common.enums.business.ProcessLogEventTypeEnum.CANCEL_HANGUP;
+import static com.ycl.common.enums.business.ProcessLogEventTypeEnum.HANGUP;
@Slf4j
@Component("flowableTask")
@@ -34,7 +39,8 @@
private ProjectInfoMapper projectInfoMapper;
@Autowired
private ProcessCodingMapper processCodingMapper;
-
+ @Autowired
+ private ProcessLogService processLogService;
/**
* 璧嬬爜浠诲姟
* 涓や釜閫昏緫 鏀归」鐩爜銆佹敼鑺傜偣棰滆壊
@@ -44,7 +50,18 @@
//褰撳墠姝e湪杩愯鐨勬墍鏈変换鍔¤妭鐐�
List<Task> taskList = taskService.createTaskQuery().active().list();
if (CollectionUtils.isEmpty(taskList)) return;
+ //TODO锛氱瓫閫夊嚭娴佺▼瀹炰緥id锛岀敤浣滈」鐩寕璧�
+ Set<String> proInsIds = taskList.stream()
+ .map(TaskInfo::getProcessInstanceId)
+ .collect(Collectors.toSet());
+ //TODO:鏌ヨ椤圭洰鎸傝捣鏃ュ織
+
List<String> taskIds = taskList.stream().map(TaskInfo::getId).collect(Collectors.toList());
+ //鏌ヨ鑺傜偣鎸傝捣鏃ュ織
+ Map<String, List<ProcessLog>> hangupLogMap = processLogService.list(new QueryWrapper<ProcessLog>()
+ .in("event_type", Arrays.asList(HANGUP, CANCEL_HANGUP))
+ .in("process_ins_id", taskIds)).stream()
+ .collect(Collectors.groupingBy(ProcessLog::getTaskId));
//闇�瑕佺洃鎺х殑璧嬬爜浠诲姟
List<ProcessCoding> processCodingList = processCodingMapper.selectList(new QueryWrapper<ProcessCoding>().in("task_id", taskIds));
Map<String, ProcessCoding> taskMap = new HashMap<>();
@@ -68,8 +85,7 @@
ProcessCoding processCoding = taskMap.get(taskId);
if (processCoding == null) {
//涓嶉渶瑕佺洃鎺х殑浠诲姟鑺傜偣椤圭洰鐮佺洿鎺ユ敼涓虹豢鑹�
- List<String> processInsIds = map.get(GREEN);
- processInsIds.add(task.getProcessInstanceId());
+ map.get(GREEN).add(task.getProcessInstanceId());
continue;
}
//鍒ゆ柇璧嬬爜缁熶竴鐢ㄧ浣滀负鍗曚綅
@@ -80,27 +96,30 @@
Long overtime = getTime(processCoding.getOvertime());
if (startTime == null) continue;
//鑺傜偣澶勭悊鏃堕棿
- long durationDay = (now.getTime() - startTime.getTime()) / 1000;
+ long durationTime = (now.getTime() - startTime.getTime()) / 1000;
+ //TODO锛氬噺鍘婚」鐩寕璧锋椂闀�
+
+ //鍑忓幓鑺傜偣鎸傝捣鏃堕暱
+ durationTime = subNodeHangupTime(hangupLogMap, task, durationTime);
+
String status = GREEN; // 榛樿鐘舵�佷负缁胯壊
- if (redTime != null && redTime !=0 && durationDay >= redTime) {
+ if (redTime != null && redTime !=0 && durationTime >= redTime) {
status = RED; // 濡傛灉瓒呰繃绾㈣壊鏃堕棿闃堝�硷紝鍒欑姸鎬佷负绾㈣壊
- } else if (yellowTime != null && yellowTime !=0 && durationDay >= yellowTime) {
+ } else if (yellowTime != null && yellowTime !=0 && durationTime >= yellowTime) {
status = YELLOW; // 鍚﹀垯锛屽鏋滆秴杩囬粍鑹叉椂闂撮槇鍊硷紝鍒欑姸鎬佷负榛勮壊
}
//澶勭悊鍔炵悊鏈熼檺
String overtimeStatus = NORMAL;
- if (overtime != null && overtime !=0 && durationDay >= overtime) {
+ if (overtime != null && overtime !=0 && durationTime >= overtime) {
overtimeStatus = OVERTIME; // 濡傛灉瓒呰繃鍔炵悊鏈熼檺
}
- else if (overtime != null && overtime != 0 && durationDay >= (overtime - 12 * 60 * 60)) {
+ else if (overtime != null && overtime != 0 && durationTime >= (overtime - 12 * 60 * 60)) {
overtimeStatus = WILLOVERTIME; // 濡傛灉涓存湡(鍥哄畾瓒呮椂鍓�12灏忔椂涓轰复鏈�)
}
// else if (overtime != null && overtime != 0 && durationDay >= (overtime - 60)) {
// overtimeStatus = WILLOVERTIME; // 濡傛灉涓存湡(鍥哄畾瓒呮椂鍓�12灏忔椂涓轰复鏈�)
// }
- List<String> processInsIds = map.get(status);
- processInsIds.add(task.getProcessInstanceId());
-
+ map.get(status).add(task.getProcessInstanceId());
processCoding.setStatus(status);
processCoding.setOvertimeStatus(overtimeStatus);
list.add(processCoding);
@@ -116,6 +135,25 @@
log.info("缁撴潫璧嬬爜");
}
+ //鍑忓幓鑺傜偣鎸傝捣鏃堕暱
+ private long subNodeHangupTime(Map<String, List<ProcessLog>> hangupLogMap, Task task, long durationTime) {
+ List<ProcessLog> processLogs = hangupLogMap.get(task.getId());
+ if (!CollectionUtils.isEmpty(processLogs)) {
+ long hangupTime = 0;
+ //鍒嗙粍鍒嗕负鎸傝捣鍜屽彇娑堟寕璧�
+ Map<ProcessLogEventTypeEnum, List<ProcessLog>> logEventTypeMap = processLogs.stream()
+ .sorted(Comparator.comparing(ProcessLog::getGmtCreate))
+ .collect(Collectors.groupingBy(ProcessLog::getEventType));
+ List<ProcessLog> cancelHangup = logEventTypeMap.get(CANCEL_HANGUP);
+ for (int i = 0; i < cancelHangup.size(); i++) {
+ ProcessLog processLog = cancelHangup.get(i);
+ hangupTime += processLog.getGmtCreate().getTime() - logEventTypeMap.get(HANGUP).get(i).getGmtCreate().getTime();
+ }
+ durationTime = durationTime - hangupTime;
+ }
+ return durationTime;
+ }
+
private Long getTime(String timeStr) {
Long time = null;
if (StringUtils.isNotBlank(timeStr)) {
diff --git a/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java b/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java
index 9f5e5ee..a71956f 100644
--- a/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java
+++ b/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java
@@ -104,6 +104,8 @@
public static final String EXTENSION_PROPERTY_CAN_WAIT_TEXT = "鏄惁鍏佽瀹圭己";
+ public static final String EXTENSION_PROPERTY_PROJECT_PHASE = "椤圭洰闃舵";
+
public static final String EXTENSION_PROPERTY_VALUE = "鏄�";
--
Gitblit v1.8.0