| | |
| | | import com.ycl.domain.entity.SysForm; |
| | | import com.ycl.domain.vo.FlowQueryVo; |
| | | import com.ycl.domain.vo.FlowTaskVo; |
| | | import com.ycl.domain.vo.FormDetailVO; |
| | | import com.ycl.factory.FlowServiceFactory; |
| | | import com.ycl.flow.CustomProcessDiagramGenerator; |
| | | import com.ycl.flow.FindNextNodeUtil; |
| | |
| | | import com.ycl.service.IFlowTaskService; |
| | | import com.ycl.service.ISysDeployFormService; |
| | | import com.ycl.service.ISysFormService; |
| | | import com.ycl.service.common.TaskCommonService; |
| | | import com.ycl.system.service.ISysRoleService; |
| | | import com.ycl.system.service.ISysUserService; |
| | | import lombok.RequiredArgsConstructor; |
| | |
| | | private final ISysRoleService sysRoleService; |
| | | private final ISysDeployFormService sysInstanceFormService; |
| | | private final ISysFormService sysFormService; |
| | | private final TaskCommonService taskCommonService; |
| | | |
| | | /** |
| | | * 完成审核任务 |
| | |
| | | if (Objects.isNull(task)) { |
| | | return AjaxResult.error("任务不存在"); |
| | | } |
| | | Map<String, Object> newV = new HashMap<>(2); |
| | | if (! org.springframework.util.CollectionUtils.isEmpty(variables)) { |
| | | for (String key : variables.keySet()) { |
| | | newV.put(task.getTaskDefinitionKey() + "&" + key, variables.get(key)); |
| | | // if (ProcessConstants.TASK_FORM_KEY.equals(key)) { |
| | | // newV.put(task.getTaskDefinitionKey() + "_" + ProcessConstants.TASK_FORM_KEY, variables.get(key)); |
| | | // } else if (ProcessConstants.WIDGET_LIST.equals(key)){ |
| | | // newV.put(task.getTaskDefinitionKey() + "_" + ProcessConstants.WIDGET_LIST, variables.get(key)); |
| | | // } |
| | | } |
| | | } |
| | | // 先让当前用户认领这个任务 |
| | | taskService.claim(taskId, SecurityUtils.getUserId() + ""); |
| | | taskService.addComment(taskId, task.getProcessInstanceId(), FlowComment.SUBMIT.getType(), "完成提交"); |
| | | taskService.complete(taskId, variables); |
| | | taskService.complete(taskId, newV); |
| | | return AjaxResult.success("提交成功"); |
| | | } |
| | | |
| | |
| | | } else { |
| | | parameters = taskService.getVariables(taskId); |
| | | } |
| | | |
| | | JSONObject oldVariables = JSONObject.parseObject(JSON.toJSONString(parameters.get("formJson"))); |
| | | if (Objects.isNull(oldVariables)) { |
| | | // 如果是空的,直接使用主表单,因为这代表是流程中的第一个提交表单的任务 |
| | | String deploymentId = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult().getDeploymentId(); |
| | | return this.flowFormData(deploymentId); |
| | | 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 (Objects.isNull(sysForm)) { |
| | | throw new RuntimeException("该流程绑定的表单不存在或已被删除"); |
| | | } |
| | | List<JSONObject> oldFields = JSON.parseObject(JSON.toJSONString(oldVariables.get("widgetList")), new TypeReference<List<JSONObject>>() { |
| | | FormDetailVO formDetailVO = new FormDetailVO(); |
| | | 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.setCurrent(Boolean.TRUE); |
| | | return AjaxResult.success(Arrays.asList(formDetailVO)); |
| | | } else { |
| | | return AjaxResult.success(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()); |
| | | 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()) { |
| | | continue; // 跳过当前节点,因为当前节点在获取前置节点时已经设置过了 |
| | | } |
| | | Object form = newP.get(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY); |
| | | if (Objects.nonNull(form)) { |
| | | JSONObject formJson = JSONObject.parseObject(JSON.toJSONString(form)); |
| | | List<JSONObject> oldFields = JSON.parseObject(JSON.toJSONString(formJson.get(ProcessConstants.WIDGET_LIST)), new TypeReference<List<JSONObject>>() { |
| | | }); |
| | | |
| | | // 设置已填写的表单为禁用状态 |
| | | for (JSONObject oldField : oldFields) { |
| | | JSONObject options = oldField.getJSONObject("options"); |
| | | options.put("disabled", true); |
| | | } |
| | | // TODO 暂时只处理用户任务上的表单 |
| | | if (StringUtils.isNotBlank(task.getFormKey())) { |
| | | SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(task.getFormKey())); |
| | | JSONObject data = JSONObject.parseObject(sysForm.getFormContent()); |
| | | List<JSONObject> newFields = JSON.parseObject(JSON.toJSONString(data.get("widgetList")), new TypeReference<List<JSONObject>>() { |
| | | }); |
| | | // 表单回显时 加入子表单信息到流程变量中 |
| | | for (JSONObject newField : newFields) { |
| | | String key = newField.getString("id"); |
| | | // 处理图片上传组件回显问题 |
| | | if ("picture-upload".equals(newField.getString("type"))) { |
| | | parameters.put(key, new ArrayList<>()); |
| | | } else { |
| | | parameters.put(key, null); |
| | | // if (StringUtils.isNotBlank(task.getFormKey())) { |
| | | // SysForm sysForm = sysFormService.selectSysFormById(Long.parseLong(task.getFormKey())); |
| | | // JSONObject data = JSONObject.parseObject(sysForm.getFormContent()); |
| | | // List<JSONObject> newFields = JSON.parseObject(JSON.toJSONString(data.get(ProcessConstants.WIDGET_LIST)), new TypeReference<List<JSONObject>>() { |
| | | // }); |
| | | // // 表单回显时 加入子表单信息到流程变量中 |
| | | // for (JSONObject newField : newFields) { |
| | | // String key = newField.getString("id"); |
| | | // // 处理图片上传组件回显问题 |
| | | // if ("picture-upload".equals(newField.getString("type"))) { |
| | | // parameters.put(key, new ArrayList<>()); |
| | | // } else { |
| | | // parameters.put(key, null); |
| | | // } |
| | | // } |
| | | // oldFields.addAll(newFields); |
| | | // } |
| | | formJson.put(ProcessConstants.WIDGET_LIST, oldFields); |
| | | newP.put(ProcessConstants.TASK_FORM_KEY, formJson); |
| | | newP.remove(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY); |
| | | formDetailVO.setFormJsonObj(newP); |
| | | } |
| | | } |
| | | oldFields.addAll(newFields); |
| | | } |
| | | oldVariables.put("widgetList", oldFields); |
| | | parameters.put("formJson", oldVariables); |
| | | return AjaxResult.success(parameters); |
| | | |
| | | return AjaxResult.success(beforeNodes); |
| | | } |
| | | |
| | | /** |