From 5f14844e81dade9e55725642f42c76568c5ec908 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 16 一月 2026 10:22:48 +0800
Subject: [PATCH] 修改超时时间显示
---
business/src/main/java/com/ycl/task/FlowableTask.java | 141 +++++++++++++++++++++++++++-------------------
1 files changed, 83 insertions(+), 58 deletions(-)
diff --git a/business/src/main/java/com/ycl/task/FlowableTask.java b/business/src/main/java/com/ycl/task/FlowableTask.java
index dd90247..5adc84f 100644
--- a/business/src/main/java/com/ycl/task/FlowableTask.java
+++ b/business/src/main/java/com/ycl/task/FlowableTask.java
@@ -54,22 +54,33 @@
* 涓や釜閫昏緫 鏀归」鐩爜銆佹敼鑺傜偣棰滆壊
*/
public void expireTask() {
- log.info("寮�濮嬭祴鐮�");
+ log.info("寮�濮嬪畾鏃朵换鍔★細expireTask 璧嬬爜璁$畻");
//褰撳墠姝e湪杩愯鐨勬墍鏈変换鍔¤妭鐐�
List<Task> taskList = taskService.createTaskQuery().active().list();
- if (CollectionUtils.isEmpty(taskList)) return;
+ log.info("鏌ヨ鍒板綋鍓嶆椿璺冧换鍔℃暟閲�: {}", taskList.size());
+ if (CollectionUtils.isEmpty(taskList)) {
+ log.info("娲昏穬浠诲姟鍒楄〃涓虹┖锛岀粨鏉熶换鍔�");
+ return;
+ }
+
//鎺掗櫎鎺夎妭鐐规寕璧风殑浠诲姟
List<String> allHangupTask = processLogMapper.getAllHangup();
- taskList = taskList.stream()
- .filter(task -> !allHangupTask.contains(task.getId()))
- .collect(Collectors.toList());
- //TODO锛氱瓫閫夊嚭娴佺▼瀹炰緥id锛岀敤浣滈」鐩寕璧�
- Set<String> proInsIds = taskList.stream()
- .map(TaskInfo::getProcessInstanceId)
- .collect(Collectors.toSet());
- //TODO:鏌ヨ椤圭洰鎸傝捣鏃ュ織
+ log.info("鏌ヨ鍒版寕璧蜂换鍔� ID 鏁伴噺: {}", allHangupTask.size());
- List<String> taskIds = taskList.stream().map(TaskInfo::getId).collect(Collectors.toList());
+ List<Task> filteredTaskList = taskList.stream()
+ .filter(task -> {
+ boolean isHangup = allHangupTask.contains(task.getId());
+ if (isHangup) {
+ log.info("浠诲姟 [{}] 鍥犲浜庢寕璧风姸鎬佽璺宠繃", task.getId());
+ }
+ return !isHangup;
+ })
+ .collect(Collectors.toList());
+
+ log.info("鎺掗櫎鎸傝捣浠诲姟鍚庯紝寰呭鐞嗕换鍔℃暟閲�: {}", filteredTaskList.size());
+
+ List<String> taskIds = filteredTaskList
+ .stream().map(TaskInfo::getId).collect(Collectors.toList());
//鏌ヨ鑺傜偣鎸傝捣鏃ュ織
Map<String, List<ProcessLog>> hangupLogMap = new LambdaQueryChainWrapper<>(processLogMapper)
.in(ProcessLog::getEventType, HANGUP, CANCEL_HANGUP)
@@ -82,6 +93,9 @@
List<ProcessCoding> processCodingList = new LambdaQueryChainWrapper<>(processCodingMapper)
.in(ProcessCoding::getTaskId, taskIds)
.list();
+
+ log.info("寮�濮嬪鐞嗚祴鐮佽绠楅�昏緫銆傚綋鍓嶅緟澶勭悊娲昏穬浠诲姟鏁�: {}, 宸查厤缃洃鎺х殑浠诲姟鏁�: {}", taskIds.size(), processCodingList.size());
+
Map<String, ProcessCoding> taskMap = new HashMap<>();
Map<String, Date> startTaskMap = new HashMap<>();
if (!CollectionUtils.isEmpty(processCodingList)) {
@@ -89,7 +103,9 @@
taskMap = processCodingList.stream().collect(Collectors.toMap(ProcessCoding::getTaskId, Function.identity()));
//鎷垮埌寮�濮嬭鏃剁殑鑺傜偣闆嗗悎 key:taskId value:寮�濮嬫椂闂�
startTaskMap = getStartTaskList(processCodingList);
+ log.info("鑾峰彇鍒拌鏃惰捣鐐硅褰曟暟閲�: {}", startTaskMap.size());
}
+
//鎻愬墠鍑嗗鎺ユ敹鏁版嵁鐨刴ap key:娴佺▼瀹炰緥id value:闇�瑕佹敼鍙樼殑棰滆壊
Map<String, List<String>> map = new HashMap<>();
List<ProcessCoding> list = new ArrayList<>();
@@ -97,85 +113,85 @@
map.put(RED, new ArrayList<>());
map.put(YELLOW, new ArrayList<>());
Date now = new Date();
+
//閬嶅巻鎵�鏈変唬鍔炵殑鑺傜偣
- for (Task task : taskList) {
+ for (Task task : filteredTaskList) {
String taskId = task.getId();
+ String procInsId = task.getProcessInstanceId();
ProcessCoding processCoding = taskMap.get(taskId);
+
if (processCoding == null) {
//涓嶉渶瑕佺洃鎺х殑浠诲姟鑺傜偣椤圭洰鐮佺洿鎺ユ敼涓虹豢鑹�
- map.get(GREEN).add(task.getProcessInstanceId());
+ log.info("浠诲姟 ID: {}, 娴佺▼瀹炰緥: {}, 鍚嶇О: {} 鏈湪鐩戞帶閰嶇疆涓紝椤圭洰鐮侀粯璁よ涓� GREEN", taskId, procInsId, task.getName());
+ map.get(GREEN).add(procInsId);
continue;
}
+
//鍒ゆ柇璧嬬爜缁熶竴鐢ㄧ浣滀负鍗曚綅锛屼笖鍙渶鐢ㄧ孩鐮佹椂闂村垽鏂秴鏃讹紝閫氳繃瓒呮椂鍘绘敼鍙橀」鐩殑璧嬬爜鐘舵�侊紝鑺傜偣鏈韩鏃犺祴鐮佺姸鎬�
Date startTime = startTaskMap.get(processCoding.getStartTaskId());
+ if (startTime == null) {
+ log.warn("浠诲姟 ID: {}, 娴佺▼瀹炰緥: {} 鎵句笉鍒拌鏃惰捣鐐规椂闂� (StartTaskId: {}), 灏嗛粯璁ゅ綊涓� GREEN 浠ラ槻姝换鍔′涪澶�", taskId, procInsId, processCoding.getStartTaskId());
+ map.get(GREEN).add(procInsId);
+ continue;
+ }
+
try {
Long redTime = getTime(processCoding.getRedTime());
-// Long yellowTime = getTime(processCoding.getYellowTime());
-// Long overtime = getTime(processCoding.getOvertime());
- if (startTime == null) continue;
-
//鑺傜偣澶勭悊鏃堕棿锛岄渶鎺掗櫎鑺傚亣鏃�
long durationTime = DateUtils.getWorkingSed(startTime, now);
- //TODO锛氬噺鍘绘祦绋嬫寕璧锋椂闀�
-
//鍑忓幓鑺傜偣鎸傝捣鏃堕暱
- durationTime = subNodeHangupTime(hangupLogMap, task, durationTime);
+ long finalDurationTime = subNodeHangupTime(hangupLogMap, task, durationTime);
String status = GREEN; // 榛樿鐘舵�佷负缁胯壊
String overtimeStatus = NORMAL;
Long overtimeDurationSec = null; // 瓒呮椂鏃堕暱锛堢锛屽師濮嬪�硷級
- Double overtimeDurationHour = null; // 瓒呮椂鏃堕暱锛堝皬鏃讹紝杞崲鍚庯級
- if (redTime != null && redTime != 0 && durationTime >= redTime) {
+ Double overtimeDurationHour = 0.0; // 瓒呮椂鏃堕暱锛堝皬鏃讹紝杞崲鍚庯級
+
+ if (redTime != null && redTime != 0 && finalDurationTime >= redTime) {
status = RED; // 濡傛灉瓒呰繃绾㈣壊鏃堕棿闃堝�硷紝鍒欒〃鏄庤浠诲姟瓒呮椂
overtimeStatus = OVERTIME;
- overtimeDurationSec = durationTime - redTime;
- // 2. 杞崲涓哄皬鏃讹紙淇濈暀1浣嶅皬鏁帮紝閬垮厤灏忔暟杩囧锛�
+ overtimeDurationSec = finalDurationTime - redTime;
overtimeDurationHour = Math.round((overtimeDurationSec / 3600.0) * 10) / 10.0;
- // 鏃堕棿鏍煎紡鍖栵紙Java鏍囧噯API锛屾棤渚濊禆锛�
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String formattedStartTime = sdf.format(startTime);
- String formattedNow = sdf.format(now);
- // 杞崲绾㈢爜闃堝�间负灏忔椂锛堝彲閫夛紝鏃ュ織鏇存槗璇伙級
- Double redTimeHour = Math.round((redTime / 3600.0) * 10) / 10.0;
- Double durationTimeHour = Math.round((durationTime / 3600.0) * 10) / 10.0;
-
- // 鎵撳嵃瓒呮椂鏃堕暱锛堝皬鏃跺崟浣嶏級
- log.info("浠诲姟瓒呮椂棰勮锛氫换鍔D[{}]锛屾祦绋嬪疄渚婭D[{}]锛岃鏃惰捣鐐筟{}]锛屽綋鍓嶆椂闂碵{}]锛岀孩鐮侀槇鍊糩{}灏忔椂]锛屽疄闄呮湁鏁堣�楁椂[{}灏忔椂]锛岃秴鏃舵椂闀縖{}灏忔椂]",
- taskId, task.getProcessInstanceId(),
- formattedStartTime, formattedNow,
- redTimeHour, durationTimeHour, overtimeDurationHour);
+ log.info("浠诲姟瓒呮椂棰勮锛氫换鍔D[{}], 娴佺▼瀹炰緥[{}], 璧风偣[{}], 褰撳墠[{}], 绾㈢爜闃堝�糩{}灏忔椂], 瀹為檯鑰楁椂[{}灏忔椂], 瓒呮椂[{}灏忔椂]",
+ taskId, procInsId,
+ sdf.format(startTime), sdf.format(now),
+ Math.round((redTime / 3600.0) * 10) / 10.0,
+ Math.round((finalDurationTime / 3600.0) * 10) / 10.0,
+ overtimeDurationHour);
+ } else {
+ log.info("浠诲姟鏈秴鏃讹細浠诲姟ID[{}], 娴佺▼瀹炰緥[{}], 瀹為檯鑰楁椂[{}灏忔椂], 绾㈢爜闃堝�糩{}灏忔椂]",
+ taskId, procInsId,
+ Math.round((finalDurationTime / 3600.0) * 10) / 10.0,
+ redTime != null ? Math.round((redTime / 3600.0) * 10) / 10.0 : 0);
}
-// else if (yellowTime != null && yellowTime != 0 && durationTime >= yellowTime) {
-// status = YELLOW; // 鍚﹀垯锛屽鏋滆秴杩囬粍鑹叉椂闂撮槇鍊硷紝鍒欑姸鎬佷负榛勮壊
-// }
-// //澶勭悊鍔炵悊鏈熼檺
-// String overtimeStatus = NORMAL;
-// if (overtime != null && overtime != 0 && durationTime >= overtime) {
-// overtimeStatus = OVERTIME; // 濡傛灉瓒呰繃鍔炵悊鏈熼檺
-// } 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灏忔椂涓轰复鏈�)
-// }
- map.get(status).add(task.getProcessInstanceId());
+
+ map.get(status).add(procInsId);
processCoding.setOverTimeTotal(String.valueOf(overtimeDurationHour));
processCoding.setStatus(status);
processCoding.setOvertimeStatus(overtimeStatus);
processCoding.setStartTaskTime(task.getCreateTime());
list.add(processCoding);
} catch (Exception e) {
- log.error(e.getMessage(), "璧嬬爜鏃堕棿鏍煎紡鏈夎");
+ log.error("浠诲姟 [{}] 璧嬬爜璁$畻鍙戠敓寮傚父: {}", taskId, e.getMessage(), e);
}
}
//鏇存柊椤圭洰鐮�
- map.forEach((key, value) -> updateProjectCoding(value, key));
+ map.forEach((key, value) -> {
+ if (!value.isEmpty()) {
+ log.info("鍑嗗鏇存柊椤圭洰鐮佷负 {}: 娴佺▼瀹炰緥鍒楄〃 {}", key, value);
+ updateProjectCoding(value, key);
+ }
+ });
//鏇存柊鑺傜偣鐘舵�� 鑷畾涔夌殑mybatis鏂规硶
- if (!CollectionUtils.isEmpty(list)) processCodingMapper.updateBatch(list);
+ if (!CollectionUtils.isEmpty(list)) {
+ log.info("鎵归噺鏇存柊鑺傜偣鐘舵�佹暟閲�: {}", list.size());
+ processCodingMapper.updateBatch(list);
+ }
- log.info("缁撴潫璧嬬爜");
+ log.info("瀹氭椂浠诲姟锛歟xpireTask 璧嬬爜璁$畻缁撴潫");
}
//鍑忓幓鑺傜偣鎸傝捣鏃堕暱
@@ -239,19 +255,28 @@
return;
}
- List<String> projectIds = new LambdaQueryChainWrapper<>(projectProcessMapper)
+ List<ProjectProcess> projectProcesses = new LambdaQueryChainWrapper<>(projectProcessMapper)
.in(ProjectProcess::getProcessInsId, processInstanceIds)
.eq(ProjectProcess::getProjectType, ProjectProcessTypeEnum.PROJECT)
- .list()
- .stream()
- .map(ProjectProcess::getProjectId)
+ .list();
+
+ log.info("璧嬬爜绫诲瀷 [{}]: 鏌ヨ鍒� {} 涓搴旂殑椤圭洰娴佺▼鍏崇郴", coding, projectProcesses.size());
+
+ List<String> projectIds = projectProcesses.stream()
+ .map(p -> {
+ log.info("娴佺▼瀹炰緥 [{}] 瀵瑰簲椤圭洰 ID [{}]", p.getProcessInsId(), p.getProjectId());
+ return p.getProjectId();
+ })
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(projectIds)) {
+ log.info("鎵ц鏁版嵁搴撴洿鏂�: 灏嗛」鐩� {} 鐨勭紪鐮佹洿鏂颁负 {}", projectIds, coding);
new LambdaUpdateChainWrapper<>(projectInfoMapper)
.in(ProjectInfo::getId, projectIds)
.set(ProjectInfo::getCoding, coding)
.update();
+ } else {
+ log.warn("鏈壘鍒板搴旂殑椤圭洰 ID锛屾棤娉曟墽琛岀紪鐮佹洿鏂般�傛祦绋嬪疄渚嬪垪琛�: {}", processInstanceIds);
}
}
}
--
Gitblit v1.8.0