From b809036ade43c97f86a0802fed57177884cc61f7 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 26 十二月 2024 17:46:34 +0800
Subject: [PATCH] 赋码demo

---
 flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java |   77 +++++++++++++++++++++++++++++++-------
 1 files changed, 62 insertions(+), 15 deletions(-)

diff --git a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index cf45ee2..4486c01 100644
--- a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -792,6 +792,11 @@
                     .processInstanceId(procInsId)
                     .orderByHistoricActivityInstanceStartTime()
                     .desc().list();
+            Date now =new Date();
+            //鎵╁睍
+            List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery()
+                    .processInstanceId(procInsId)
+                    .list();
             List<FlowTaskDto> hisFlowList = new ArrayList<>();
             for (HistoricActivityInstance histIns : list) {
                 // 灞曠ず寮�濮嬭妭鐐�
@@ -850,6 +855,23 @@
                     }
 
                     flowTask.setDuration(histIns.getDurationInMillis() == null || histIns.getDurationInMillis() == 0 ? null : getDate(histIns.getDurationInMillis()));
+                    String taskId = histIns.getTaskId();
+
+                    //鎵╁睍 鍒ゆ柇鏄惁瓒呮椂
+                    for (HistoricTaskInstance taskInstance : taskList) {
+                        Date dueDate = taskInstance.getDueDate();
+                        //鎵惧埌瀵瑰簲浠诲姟鑺傜偣
+                        if(dueDate!=null && taskInstance.getId().equals(taskId) ) {
+                            //濡傛灉浠诲姟杩樻病瀹屾垚
+                            if(flowTask.getDuration()==null) {
+                                //鍒ゆ柇褰撳墠鏃堕棿鏄惁瓒呰繃鍒版湡鏃堕棿
+                                if (now.after(dueDate)) flowTask.setOvertime(Boolean.TRUE);
+                            }else {
+                                //濡傛灉浠诲姟鑺傜偣宸茬粡瀹屾垚浜嗭紝鐢ㄥ畬鎴愭椂闂村垽鏂�
+                                if(histIns.getEndTime().after(dueDate)) flowTask.setOvertime(Boolean.TRUE);
+                            }
+                        }
+                    }
                     // 鑾峰彇鎰忚璇勮鍐呭
                     List<Comment> commentList = taskService.getProcessInstanceComments(histIns.getProcessInstanceId());
                     commentList.forEach(comment -> {
@@ -1095,9 +1117,15 @@
     @Override
     public AjaxResult flowXmlAndNode(String procInsId, String deployId) {
         try {
+            Date now = new Date();
             List<FlowViewerDto> flowViewerList = new ArrayList<>();
             // 鑾峰彇宸茬粡瀹屾垚鐨勮妭鐐�
             List<HistoricActivityInstance> listFinished = historyService.createHistoricActivityInstanceQuery()
+                    .processInstanceId(procInsId)
+                    .finished()
+                    .list();
+            //鑾峰彇鎵�鏈変换鍔¤妭鐐逛俊鎭�(鎵╁睍)
+            List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery()
                     .processInstanceId(procInsId)
                     .finished()
                     .list();
@@ -1107,6 +1135,15 @@
                 FlowViewerDto flowViewerDto = new FlowViewerDto();
                 flowViewerDto.setKey(s.getActivityId());
                 flowViewerDto.setCompleted(true);
+                //鎵╁睍鍐呭 宸插畬鎴愮殑鐢ㄥ畬鎴愭椂闂村垽鏂�
+                Date endTime = s.getEndTime();
+                for (HistoricTaskInstance task : taskList) {
+                    if(s.getTaskId()!=null && s.getTaskId().equals(task.getId())){
+                        if(task.getDueDate()!=null && endTime.after(task.getDueDate())){
+                            flowViewerDto.setOvertime(true);
+                        }
+                    }
+                }
                 // 閫�鍥炶妭鐐逛笉杩涜灞曠ず
                 if (StringUtils.isBlank(s.getDeleteReason())) {
                     flowViewerList.add(flowViewerDto);
@@ -1126,6 +1163,14 @@
                 FlowViewerDto flowViewerDto = new FlowViewerDto();
                 flowViewerDto.setKey(s.getActivityId());
                 flowViewerDto.setCompleted(false);
+                //鎵╁睍鍐呭 浠e姙鐨勯�氳繃褰撳墠鏃堕棿鍘诲垽鏂�
+                for (HistoricTaskInstance task : taskList) {
+                    if(s.getTaskId()!=null && s.getTaskId().equals(task.getId())){
+                        if(task.getDueDate()!=null && now.after(task.getDueDate())){
+                            flowViewerDto.setOvertime(true);
+                        }
+                    }
+                }
                 flowViewerList.add(flowViewerDto);
             });
             Map<String, Object> result = new HashMap();
@@ -1215,26 +1260,28 @@
         // 杩欓噷鍙渶瑕佹煡鑷韩浠ュ強涓婁竴涓妭鐐�(濡傛灉骞惰鐨勬湁澶氫釜)鐨勮〃鍗曟暟鎹�
         List<FormDetailVO> beforeNodes = taskCommonService.getBeforeNodeDefInfo(processDefId, processDefKey, sysFormService, Boolean.TRUE);
         List<String> beforeNodeDefIds = beforeNodes.stream().filter(item -> !item.getCurrent() || currentNeedData).map(FormDetailVO::getBeforeNodeDefId).collect(Collectors.toList());
-        Map<String, Object> newP = new HashMap<>();
-        if (CollectionUtils.isNotEmpty(beforeNodeDefIds)) {
-            for (String key : parameters.keySet()) {
-                // 杩囨护鎷垮埌鐩爣鏁版嵁锛屽皢鐩爣琛ㄥ崟鏁版嵁鏀惧埌鏂癿ap涓�
-                if (beforeNodeDefIds.stream().anyMatch(defId -> key.startsWith(defId))) {
-                    if (key.contains(ProcessConstants.TASK_FORM_KEY)) {
-                        newP.put(key, parameters.get(key));
-                    }
-                    else {
-                        newP.put(key.split("&")[1], parameters.get(key));
-                    }
-                }
-            }
-        }
 
-        // 鎷垮埌鐩爣琛ㄥ崟鍚庯紝鍐嶅鐞嗘瘡涓〃鍗曠殑鏁版嵁
+        // 澶勭悊姣忎釜琛ㄥ崟鐨勬暟鎹�
         for (FormDetailVO formDetailVO : beforeNodes) {
             if (formDetailVO.getCurrent() && !currentNeedData) {
                 continue;  // 璺宠繃褰撳墠鑺傜偣锛屽洜涓哄綋鍓嶈妭鐐瑰湪鑾峰彇鍓嶇疆鑺傜偣鏃跺凡缁忚缃繃浜�(浣嗚〃鍗曟暟鎹病鏈夌粰)
             }
+
+            Map<String, Object> newP = new HashMap<>();
+            if (CollectionUtils.isNotEmpty(beforeNodeDefIds)) {
+                for (String key : parameters.keySet()) {
+                    // 杩囨护鎷垮埌鐩爣琛ㄥ崟鏁版嵁锛屽皢鐩爣琛ㄥ崟鏁版嵁鏀惧埌鏂癿ap涓�
+                    if (key.startsWith(formDetailVO.getBeforeNodeDefId())) {
+                        if (key.contains(ProcessConstants.TASK_FORM_KEY)) {
+                            newP.put(key, parameters.get(key));
+                        }
+                        else {
+                            newP.put(key.split("&")[1], parameters.get(key));
+                        }
+                    }
+                }
+            }
+
             Object form = newP.get(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY);
             if (Objects.nonNull(form)) {
                 JSONObject formJson = JSONObject.parseObject(JSON.toJSONString(form));

--
Gitblit v1.8.0