From 62036cc09bbe5346868b98fcc373910b55da08b9 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 06 十二月 2024 14:04:49 +0800 Subject: [PATCH] bug修改 --- flowable/src/main/java/com/ycl/service/IFlowTaskService.java | 8 ++ business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 29 +++---- flowable/src/main/java/com/ycl/service/common/TaskCommonService.java | 72 +++++++++++++----- flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | 89 ++++++++++++++++----- flowable/src/main/java/com/ycl/controller/FlowTaskController.java | 7 + 5 files changed, 147 insertions(+), 58 deletions(-) diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java index 50f95df..cc5d7b9 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -203,7 +203,7 @@ taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId())); taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(processDefId, projectProcess.getProcessInsId())); // taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId())); - taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInsId())); + taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(projectProcess.getProcessDefId(), projectProcess.getProcessInsId())); detail.setStatistics(taskStatistics); Result result = Result.ok(); @@ -719,6 +719,7 @@ if (StringUtils.isNotBlank(identityLink.getUserId())) { SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); if (Objects.nonNull(sysUser)) { + taskVO.setHandlerType(HandlerTypeEnum.USER); taskVO.setHandlerId(sysUser.getUserId()); if (Objects.nonNull(sysUser.getDept())) { taskVO.setHandlerUnitId(sysUser.getDept().getDeptId()); @@ -729,6 +730,7 @@ // 缁戝畾鐨勬槸瑙掕壊鎴栬�呮槸閮ㄩ棬锛岄渶瑕佹牴鎹甶d鍒ゆ柇 } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { if (identityLink.getGroupId().startsWith("dept")) { // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1 + taskVO.setHandlerType(HandlerTypeEnum.DEPT); String[] split = identityLink.getGroupId().split(":"); if (split.length > 1) { // 閮ㄩ棬 @@ -741,6 +743,7 @@ } } } else { + taskVO.setHandlerType(HandlerTypeEnum.ROLE); SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); if (Objects.nonNull(role)) { taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); @@ -755,6 +758,7 @@ for (IdentityLinkInfo identityLink : identityLinkInfos) { // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂� if (StringUtils.isNotBlank(identityLink.getUserId())) { + taskVO.setHandlerType(HandlerTypeEnum.USER); SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); if (Objects.nonNull(sysUser)) { // taskVO.setHandlerId(sysUser.getUserId()); @@ -767,6 +771,7 @@ // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉� } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { if (identityLink.getGroupId().startsWith("dept")) { + taskVO.setHandlerType(HandlerTypeEnum.DEPT); String[] split = identityLink.getGroupId().split(":"); if (split.length > 1) { // 閮ㄩ棬 @@ -776,13 +781,15 @@ taskVO.setHandlerUnitName(dept.getDeptName()); } } - } - SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); - if (Objects.nonNull(role)) { - taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); - taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�"); + } else { + taskVO.setHandlerType(HandlerTypeEnum.ROLE); + SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); + if (Objects.nonNull(role)) { + taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId())); + taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�"); // taskVO.setHandlerName(role.getRoleName()); // taskVO.setHandlerId(null); + } } } } @@ -833,16 +840,6 @@ */ private Long getTotalTaskNum(String processDefinitionId) { return Long.valueOf(this.getAllUserTaskElement(processDefinitionId).size()); - } - - /** - * 鑾峰彇娴佺▼鍓╀綑鏈畬鎴愮殑浠诲姟鏁� - * - * @param processInstanceId - * @return - */ - private Long getNotFinishedTaskNum(String processInstanceId) { - return historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).processUnfinished().count(); } /** diff --git a/flowable/src/main/java/com/ycl/controller/FlowTaskController.java b/flowable/src/main/java/com/ycl/controller/FlowTaskController.java index 70a98a4..4a23d6f 100644 --- a/flowable/src/main/java/com/ycl/controller/FlowTaskController.java +++ b/flowable/src/main/java/com/ycl/controller/FlowTaskController.java @@ -7,6 +7,7 @@ import com.ycl.domain.dto.FlowTaskDto; import com.ycl.domain.vo.FlowQueryVo; import com.ycl.domain.vo.FlowTaskVo; +import com.ycl.domain.vo.FormDetailVO; import com.ycl.service.IFlowTaskService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -97,6 +98,12 @@ return flowTaskService.processVariables(taskId); } + @ApiOperation(value = "鏌ョ湅浠诲姟", response = FormDetailVO.class) + @GetMapping(value = "/detail/{taskId}") + public AjaxResult detail(@ApiParam(value = "娴佺▼浠诲姟Id") @PathVariable(value = "taskId") String taskId) { + return flowTaskService.detail(taskId); + } + @ApiOperation(value = "瀹屾垚鎻愪氦琛ㄥ崟浠诲姟/鏅�氭彁浜�") @Log(title = "瀹屾垚鎻愪氦琛ㄥ崟浠诲姟/鏅�氭彁浜�", businessType = BusinessType.INSERT) diff --git a/flowable/src/main/java/com/ycl/service/IFlowTaskService.java b/flowable/src/main/java/com/ycl/service/IFlowTaskService.java index 93cd0cc..35f11b5 100644 --- a/flowable/src/main/java/com/ycl/service/IFlowTaskService.java +++ b/flowable/src/main/java/com/ycl/service/IFlowTaskService.java @@ -223,4 +223,12 @@ * @return */ AjaxResult completeSubmitForm(String taskId, Map<String, Object> variables); + + /** + * 鏌ョ湅浠诲姟 + * + * @param taskId + * @return + */ + AjaxResult detail(String taskId); } diff --git a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java index 5335db3..f95cdaf 100644 --- a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java +++ b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java @@ -36,7 +36,7 @@ * @param currentNodeDefId * @return */ - public List<FormDetailVO> getBeforeNodeDefId(String processDefId, String currentNodeDefId, ISysFormService sysFormService) { + public List<FormDetailVO> getBeforeNodeDefId(String processDefId, String currentNodeDefId, ISysFormService sysFormService, Boolean needInitCurrentForm) { // 鑾峰彇娴佺▼瀹氫箟 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionId(processDefId) @@ -75,14 +75,17 @@ formDetailVO.setBeforeNodeName(currentElement.getName()); formDetailVO.setCurrent(Boolean.TRUE); - SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(currentElement.getFormKey())); - if (Objects.isNull(sysForm)) { - throw new RuntimeException("璇ユ祦绋嬬粦瀹氱殑琛ㄥ崟涓嶅瓨鍦ㄦ垨宸茶鍒犻櫎"); - } - Map<String, Object> data = new HashMap<>(1); - data.put(ProcessConstants.TASK_FORM_KEY, JSONObject.parseObject(sysForm.getFormContent())); + if (needInitCurrentForm) { + SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(currentElement.getFormKey())); + if (Objects.isNull(sysForm)) { + throw new RuntimeException("璇ユ祦绋嬬粦瀹氱殑琛ㄥ崟涓嶅瓨鍦ㄦ垨宸茶鍒犻櫎"); + } + Map<String, Object> data = new HashMap<>(1); + data.put(ProcessConstants.TASK_FORM_KEY, JSONObject.parseObject(sysForm.getFormContent())); - formDetailVO.setFormJsonObj(data); + formDetailVO.setFormJsonObj(data); + } + defKeys.add(formDetailVO); } this.before(currentElement, defKeys); @@ -96,22 +99,51 @@ * @param currentElement * @param defKeys */ - private void before(UserTask currentElement, List<FormDetailVO> defKeys) { - if (! CollectionUtils.isEmpty(currentElement.getIncomingFlows())) { - for (SequenceFlow incomingFlow : currentElement.getIncomingFlows()) { - if (! (incomingFlow.getSourceFlowElement() instanceof UserTask)) { - // 涓嶅寘鍚紑濮嬭妭鐐� - if (! (incomingFlow.getSourceFlowElement() instanceof StartEvent)) { - before((UserTask) (incomingFlow.getSourceFlowElement()), defKeys); + private void before(FlowElement currentElement, List<FormDetailVO> defKeys) { + if (currentElement instanceof UserTask) { + UserTask userTask = (UserTask) currentElement; + if (! CollectionUtils.isEmpty(userTask.getIncomingFlows())) { + for (SequenceFlow incomingFlow : userTask.getIncomingFlows()) { + if (incomingFlow.getSourceFlowElement() instanceof UserTask) { + FormDetailVO formDetailVO = new FormDetailVO(); + formDetailVO.setBeforeNodeDefId(incomingFlow.getSourceFlowElement().getId()); + formDetailVO.setBeforeNodeName(incomingFlow.getSourceFlowElement().getName()); + defKeys.add(formDetailVO); + } else { + before(incomingFlow.getSourceFlowElement(), defKeys); } - } else { - FormDetailVO formDetailVO = new FormDetailVO(); - formDetailVO.setBeforeNodeDefId(incomingFlow.getSourceFlowElement().getId()); - formDetailVO.setBeforeNodeName(incomingFlow.getSourceFlowElement().getName()); - defKeys.add(formDetailVO); + } + } + } else if (currentElement instanceof Gateway ){ + Gateway gateway = (Gateway) currentElement; + if (! CollectionUtils.isEmpty(gateway.getIncomingFlows())) { + for (SequenceFlow incomingFlow : gateway.getIncomingFlows()) { + if (incomingFlow.getSourceFlowElement() instanceof UserTask) { + FormDetailVO formDetailVO = new FormDetailVO(); + formDetailVO.setBeforeNodeDefId(incomingFlow.getSourceFlowElement().getId()); + formDetailVO.setBeforeNodeName(incomingFlow.getSourceFlowElement().getName()); + defKeys.add(formDetailVO); + } else { + before(incomingFlow.getSourceFlowElement(), defKeys); + } } } } +// if (! CollectionUtils.isEmpty(currentElement.getIncomingFlows())) { +// for (SequenceFlow incomingFlow : currentElement.getIncomingFlows()) { +// if (! (incomingFlow.getSourceFlowElement() instanceof UserTask)) { +// // 涓嶅寘鍚紑濮嬭妭鐐广�佸苟琛岀綉鍏炽�佷簰鏂ョ綉鍏筹紝// TODO 杩橀渶瑕佹帓闄ゅ叾瀹冪壒娈婄被鍨� +// if (! (incomingFlow.getSourceFlowElement() instanceof StartEvent) && ! (incomingFlow.getSourceFlowElement() instanceof ParallelGateway) && ! (incomingFlow.getSourceFlowElement() instanceof ExclusiveGateway)) { +// before((UserTask) (incomingFlow.getSourceFlowElement()), defKeys); +// } +// } else { +// FormDetailVO formDetailVO = new FormDetailVO(); +// formDetailVO.setBeforeNodeDefId(incomingFlow.getSourceFlowElement().getId()); +// formDetailVO.setBeforeNodeName(incomingFlow.getSourceFlowElement().getName()); +// defKeys.add(formDetailVO); +// } +// } +// } } } 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 a7af1d7..67e0bc3 100644 --- a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java +++ b/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ycl.common.constant.ProcessConstants; import com.ycl.common.core.domain.AjaxResult; +import com.ycl.common.core.domain.entity.SysDept; import com.ycl.common.core.domain.entity.SysRole; import com.ycl.common.core.domain.entity.SysUser; import com.ycl.common.enums.FlowComment; @@ -28,6 +29,7 @@ import com.ycl.service.ISysDeployFormService; import com.ycl.service.ISysFormService; import com.ycl.service.common.TaskCommonService; +import com.ycl.system.service.ISysDeptService; import com.ycl.system.service.ISysRoleService; import com.ycl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; @@ -80,6 +82,7 @@ private final ISysUserService sysUserService; private final ISysRoleService sysRoleService; + private final ISysDeptService sysDeptService; private final ISysDeployFormService sysInstanceFormService; private final ISysFormService sysFormService; private final TaskCommonService taskCommonService; @@ -831,8 +834,14 @@ stringBuilder.append(sysUser.getNickName()).append(","); } if (StringUtils.isNotBlank(identityLink.getGroupId())) { - SysRole sysRole = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); - stringBuilder.append(sysRole.getRoleName()).append(","); + if (identityLink.getGroupId().contains("dept")) { + SysDept sysDept = sysDeptService.selectDeptById(Long.parseLong(identityLink.getGroupId().split(":")[1])); + stringBuilder.append(sysDept.getDeptName()).append(","); + } else { + SysRole sysRole = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); + stringBuilder.append(sysRole.getRoleName()).append(","); + } + } } } @@ -853,14 +862,14 @@ } map.put("flowList", hisFlowList); } - // 绗竴娆$敵璇疯幏鍙栧垵濮嬪寲琛ㄥ崟 - if (StringUtils.isNotBlank(deployId)) { - SysForm sysForm = sysInstanceFormService.selectSysDeployFormByDeployId(deployId); - if (Objects.isNull(sysForm)) { - return AjaxResult.error("璇峰厛閰嶇疆娴佺▼琛ㄥ崟"); - } - map.put("formData", JSONObject.parseObject(sysForm.getFormContent())); - } +// // 绗竴娆$敵璇疯幏鍙栧垵濮嬪寲琛ㄥ崟 +// if (StringUtils.isNotBlank(deployId)) { +// SysForm sysForm = sysInstanceFormService.selectSysDeployFormByDeployId(deployId); +// if (Objects.isNull(sysForm)) { +// return AjaxResult.error("璇峰厛閰嶇疆娴佺▼琛ㄥ崟"); +// } +// map.put("formData", JSONObject.parseObject(sysForm.getFormContent())); +// } return AjaxResult.success(map); } @@ -1149,10 +1158,46 @@ } else { parameters = taskService.getVariables(taskId); } + List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, task.getFormKey(), task.getName(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), Boolean.FALSE); + return AjaxResult.success(beforeNodes); + } + + @Override + public AjaxResult detail(String taskId) { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + // 娴佺▼鍙橀噺 + Map<String, Object> parameters = new HashMap<>(); + if (Objects.isNull(task)) { + // 濡傛灉涓虹┖锛屽彲鑳芥槸浠诲姟宸茬粡缁撴潫 + HistoricTaskInstance hisTask = historyService.createHistoricTaskInstanceQuery().taskId(taskId).includeProcessVariables().singleResult(); + if (Objects.isNull(hisTask)) { + throw new RuntimeException("璇ヤ换鍔′笉瀛樺湪"); + } + parameters = hisTask.getProcessVariables(); + List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, hisTask.getFormKey(), hisTask.getName(), hisTask.getProcessDefinitionId(), hisTask.getTaskDefinitionKey(), Boolean.TRUE); + return AjaxResult.success(beforeNodes); + } else { + parameters = taskService.getVariables(taskId); + List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, task.getFormKey(), task.getName(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), Boolean.TRUE); + return AjaxResult.success(beforeNodes); + } + } + + /** + * 鑾峰彇褰撳墠鑺傜偣鍜屼笂涓�鑺傜偣鐨勮〃鍗曞唴瀹� + * + * @param parameters 鏍规嵁浠诲姟鏌ユ壘鍑烘潵鐨勫弬鏁� + * @param formKey task鑷韩鍏宠仈鐨勮〃鍗昳d + * @param taskName task鑷韩鐨勪换鍔″悕 + * @param processDefId 娴佺▼瀹氫箟id + * @param processDefKey 娴佺▼瀹炰緥id + * @return + */ + private List<FormDetailVO> getBeforeNodeForm(Map<String, Object> parameters, String formKey, String taskName, String processDefId, String processDefKey, Boolean currentNeedData) { if (! parameters.keySet().stream().anyMatch(key -> key.contains(ProcessConstants.TASK_FORM_KEY))) { // 濡傛灉鏄┖鐨勶紝浣跨敤formId鍘绘煡 - if (StringUtils.isNotBlank(task.getFormKey())) { - SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(task.getFormKey())); + if (StringUtils.isNotBlank(formKey)) { + SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(formKey)); if (Objects.isNull(sysForm)) { throw new RuntimeException("璇ユ祦绋嬬粦瀹氱殑琛ㄥ崟涓嶅瓨鍦ㄦ垨宸茶鍒犻櫎"); } @@ -1160,16 +1205,16 @@ Map<String, Object> data = new HashMap<>(1); data.put(ProcessConstants.TASK_FORM_KEY, JSONObject.parseObject(sysForm.getFormContent())); formDetailVO.setFormJsonObj(data); - formDetailVO.setBeforeNodeName(task.getName()); + formDetailVO.setBeforeNodeName(taskName); formDetailVO.setCurrent(Boolean.TRUE); - return AjaxResult.success(Arrays.asList(formDetailVO)); + return Arrays.asList(formDetailVO); } else { - return AjaxResult.success(new ArrayList<>(1)); + return new ArrayList<>(1); } } // 杩欓噷鍙渶瑕佹煡鑷韩浠ュ強涓婁竴涓妭鐐�(濡傛灉骞惰鐨勬湁澶氫釜)鐨勮〃鍗曟暟鎹� - List<FormDetailVO> beforeNodes = taskCommonService.getBeforeNodeDefId(task.getProcessDefinitionId(), task.getTaskDefinitionKey(), sysFormService); - List<String> beforeNodeDefIds = beforeNodes.stream().filter(item -> !item.getCurrent()).map(FormDetailVO::getBeforeNodeDefId).collect(Collectors.toList()); + List<FormDetailVO> beforeNodes = taskCommonService.getBeforeNodeDefId(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()) { @@ -1177,7 +1222,8 @@ if (beforeNodeDefIds.stream().anyMatch(defId -> key.startsWith(defId))) { if (key.contains(ProcessConstants.TASK_FORM_KEY)) { newP.put(key, parameters.get(key)); - } else { + } + else { newP.put(key.split("&")[1], parameters.get(key)); } } @@ -1186,8 +1232,8 @@ // 鎷垮埌鐩爣琛ㄥ崟鍚庯紝鍐嶅鐞嗘瘡涓〃鍗曠殑鏁版嵁 for (FormDetailVO formDetailVO : beforeNodes) { - if (formDetailVO.getCurrent()) { - continue; // 璺宠繃褰撳墠鑺傜偣锛屽洜涓哄綋鍓嶈妭鐐瑰湪鑾峰彇鍓嶇疆鑺傜偣鏃跺凡缁忚缃繃浜� + if (formDetailVO.getCurrent() && !currentNeedData) { + continue; // 璺宠繃褰撳墠鑺傜偣锛屽洜涓哄綋鍓嶈妭鐐瑰湪鑾峰彇鍓嶇疆鑺傜偣鏃跺凡缁忚缃繃浜�(浣嗚〃鍗曟暟鎹病鏈夌粰) } Object form = newP.get(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY); if (Objects.nonNull(form)) { @@ -1224,8 +1270,7 @@ formDetailVO.setFormJsonObj(newP); } } - - return AjaxResult.success(beforeNodes); + return beforeNodes; } /** -- Gitblit v1.8.0