From cd6de797868cd3ba10b4bd7fad0d3fdea208b2d5 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 11 二月 2025 11:45:55 +0800
Subject: [PATCH] 按时完成、超时事项、即将超时的统计逻辑更换
---
business/src/main/java/com/ycl/listener/flowable/FlowableOverTimeListener.java | 88 +++++++++++++++++++++++++------------------
1 files changed, 51 insertions(+), 37 deletions(-)
diff --git a/business/src/main/java/com/ycl/listener/flowable/FlowableOverTimeListener.java b/business/src/main/java/com/ycl/listener/flowable/FlowableOverTimeListener.java
index 6fde445..8a036dd 100644
--- a/business/src/main/java/com/ycl/listener/flowable/FlowableOverTimeListener.java
+++ b/business/src/main/java/com/ycl/listener/flowable/FlowableOverTimeListener.java
@@ -7,6 +7,7 @@
import com.ycl.mapper.ProcessCodingMapper;
import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.impl.el.FixedValue;
+import org.flowable.engine.HistoryService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.service.delegate.DelegateTask;
@@ -16,10 +17,11 @@
import java.util.List;
import static com.ycl.common.constant.ProcessOverTimeConstants.GREEN;
+import static com.ycl.common.constant.ProcessOverTimeConstants.NORMAL;
/**
* 浠诲姟鐩戝惉鍣�
- *
+ * <p>
* create锛堝垱寤猴級:鍦ㄤ换鍔¤鍒涘缓涓旀墍鏈夌殑浠诲姟灞炴�ц缃畬鎴愬悗鎵嶈Е鍙�
* assignment锛堟寚娲撅級锛氬湪浠诲姟琚垎閰嶇粰鏌愪釜鍔炵悊浜轰箣鍚庤Е鍙�
* complete锛堝畬鎴愶級锛氬湪閰嶇疆浜嗙洃鍚櫒鐨勪笂涓�涓换鍔″畬鎴愭椂瑙﹀彂
@@ -30,25 +32,30 @@
*/
@Slf4j
@Component
-public class FlowableOverTimeListener extends FlowServiceFactory implements TaskListener {
+public class FlowableOverTimeListener implements TaskListener {
/**
* 榛勭爜鏃堕棿
*/
- private FixedValue yellowTime;
+ private FixedValue 榛勭爜鏃堕暱;
/**
* 绾㈢爜鏃堕棿
*/
- private FixedValue redTime;
+ private FixedValue 绾㈢爜鏃堕暱;
+ /**
+ * 鍔炵悊鏈熼檺
+ */
+ private FixedValue 鍔炵悊鏈熼檺;
/**
* 璁℃椂璧峰鑺傜偣瀹氫箟Id
*/
- private FixedValue startTaskId;
+ private FixedValue 寮�濮嬭鏃惰妭鐐�;
@Override
public void notify(DelegateTask delegateTask) {
log.info("瑙﹀彂瓒呮椂鐩戝惉鍣�:{}", delegateTask);
//Flowable鐨刡ean鑷繁绠$悊鐨勯渶瑕佹墜鍔ㄨ幏鍙�
ProcessCodingMapper processCodingMapper = SpringUtils.getBean(ProcessCodingMapper.class);
+ HistoryService historyService = SpringUtils.getBean(HistoryService.class);
//浠诲姟id
String taskId = delegateTask.getId();
//娴佺▼瀹炰緥id
@@ -57,40 +64,47 @@
processCoding.setTaskId(taskId);
processCoding.setProcessInsId(processInstanceId);
processCoding.setTaskDefKey(delegateTask.getTaskDefinitionKey());
- //娑夊強鍒伴┏鍥烇紝闇�瑕佹煡涓�涓嬭繖涓妭鐐规槸鍚﹀凡缁忔坊鍔犺繃浜嗭紝濡傛灉娣诲姞杩囧氨涓嶈繘琛屽悗缁搷浣�
+ //璁剧疆鐘舵�侊紝鏌ヨ鏄惁鏈夎繖涓畾涔夎妭鐐圭殑鍘嗗彶鏁版嵁锛屽彇鏈�鏂扮殑涓�鏉$姸鎬佺爜锛岄伩鍏嶅畾鏃朵换鍔¤繕鏈墽琛岀殑璇樊
List<ProcessCoding> processCodings = processCodingMapper.selectList(new QueryWrapper<ProcessCoding>()
- .eq("process_ins_id", processInstanceId)
- .eq("task_def_key", delegateTask.getTaskDefinitionKey()));
- if (CollectionUtils.isEmpty(processCodings)) {
+ .eq("process_ins_id",processInstanceId)
+ .eq("task_def_key", delegateTask.getTaskDefinitionKey())
+ .orderByDesc("gmt_create"));
+ if(!CollectionUtils.isEmpty(processCodings)){
+ processCoding.setStatus(processCodings.get(0).getStatus());
+ processCoding.setOvertimeStatus(processCodings.get(0).getOvertimeStatus());
+ }else {
processCoding.setStatus(GREEN);
- if (yellowTime != null && yellowTime.getValue(delegateTask) != null) {
- processCoding.setYellowTime(Integer.parseInt(yellowTime.getValue(delegateTask).toString()));
- }
- if (redTime != null && redTime.getValue(delegateTask) != null) {
- processCoding.setRedTime(Integer.parseInt(redTime.getValue(delegateTask).toString()));
- }
- if (startTaskId != null && startTaskId.getValue(delegateTask) != null) {
- String taskDefKey = startTaskId.getValue(delegateTask).toString();
- //閫氳繃娴佺▼瀹炰緥id鍜岃妭鐐瑰畾涔塱d鎵惧埌瀵瑰簲taskId
- if (delegateTask.getTaskDefinitionKey().equals(taskDefKey)) {
- //褰撳墠鑺傜偣涓哄紑濮嬭鏃惰妭鐐�
- processCoding.setStartTaskId(delegateTask.getId());
- } else {
- //寮�濮嬭妭鐐逛粠鍘嗗彶鑺傜偣鏌ヨ 鍙栧鏉′腑鏈�鏃╃殑涓�鏉�
- List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
- .processInstanceId(processInstanceId)
- .taskDefinitionKey(delegateTask.getTaskDefinitionKey())
- .orderByHistoricTaskInstanceStartTime()
- .asc()
- .list();
- if (!CollectionUtils.isEmpty(list)) {
- HistoricTaskInstance hisTask = list.get(0);
- processCoding.setStartTaskId(hisTask.getId());
- }
- }
- }
- processCodingMapper.insert(processCoding);
- log.info("娣诲姞鑺傜偣鍒板畾鏃跺櫒");
+ processCoding.setOvertimeStatus(NORMAL);
}
+
+ if (榛勭爜鏃堕暱 != null && 榛勭爜鏃堕暱.getValue(delegateTask) != null) {
+ processCoding.setYellowTime(榛勭爜鏃堕暱.getValue(delegateTask).toString());
+ }
+ if (绾㈢爜鏃堕暱 != null && 绾㈢爜鏃堕暱.getValue(delegateTask) != null) {
+ processCoding.setRedTime(绾㈢爜鏃堕暱.getValue(delegateTask).toString());
+ }
+ if (鍔炵悊鏈熼檺 != null && 鍔炵悊鏈熼檺.getValue(delegateTask) != null) {
+ processCoding.setOvertime(鍔炵悊鏈熼檺.getValue(delegateTask).toString());
+ }
+ //璁剧疆寮�濮嬭妭鐐�
+ if (寮�濮嬭鏃惰妭鐐� != null && 寮�濮嬭鏃惰妭鐐�.getValue(delegateTask) != null) {
+ String taskDefKey = 寮�濮嬭鏃惰妭鐐�.getValue(delegateTask).toString();
+ //寮�濮嬭妭鐐逛粠鍘嗗彶鑺傜偣鏌ヨ 鍙栧鏉′腑鏈�鏃╃殑涓�鏉�
+ List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
+ .processInstanceId(processInstanceId)
+ .taskDefinitionKey(taskDefKey)
+ .orderByHistoricTaskInstanceStartTime()
+ .asc()
+ .list();
+ if (!CollectionUtils.isEmpty(list)) {
+ HistoricTaskInstance hisTask = list.get(0);
+ processCoding.setStartTaskId(hisTask.getId());
+ } else {
+ //濡傛灉涓虹┖锛岃鏄庢祦绋嬮娆¤蛋鍒皌askDefKey鑺傜偣
+ processCoding.setStartTaskId(delegateTask.getId());
+ }
+ }
+ processCodingMapper.insert(processCoding);
+ log.info("娣诲姞鑺傜偣鍒板畾鏃跺櫒");
}
}
--
Gitblit v1.8.0