fuliqi
2024-12-26 b809036ade43c97f86a0802fed57177884cc61f7
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);
                //扩展内容 代办的通过当前时间去判断
                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()) {
                // 过滤拿到目标数据,将目标表单数据放到新map中
                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()) {
                    // 过滤拿到目标表单数据,将目标表单数据放到新map中
                    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));