From 80662b34fe93b4ede00c7fc03fbd9f01355c94e2 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 07 四月 2025 13:52:17 +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