| | |
| | | } |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void cancelInstance(ApprovalInstance inst, String reason) { |
| | | inst.setStatus(ApprovalInstanceStatus.CANCELLED); |
| | | inst.setFinishedAt(LocalDateTime.now()); |
| | | approvalInstanceMapper.updateById(inst); |
| | | List<ApprovalTask> pending = |
| | | approvalTaskMapper.selectList( |
| | | new LambdaQueryWrapper<ApprovalTask>() |
| | | .eq(ApprovalTask::getInstanceId, inst.getId()) |
| | | .in( |
| | | ApprovalTask::getTaskStatus, |
| | | ApprovalTaskStatus.PENDING, |
| | | ApprovalTaskStatus.WAITING)); |
| | | for (ApprovalTask t : pending) { |
| | | t.setTaskStatus(ApprovalTaskStatus.CANCELLED); |
| | | t.setComment(reason); |
| | | approvalTaskMapper.updateById(t); |
| | | } |
| | | } |
| | | |
| | | private String resolveFirstNodeWithAssignees(List<String> chain, AppointmentOrder order) { |
| | | for (String nodeCode : chain) { |
| | | List<Long> assignees = resolveAssignees(nodeCode, order); |
| | |
| | | List<Long> assignees = resolveAssignees(nodeCode, order); |
| | | int created = createTasksWithGroupKey(inst.getId(), nodeCode, nodeCode, assignees, initialStatus); |
| | | if (created <= 0) { |
| | | throw new BizException(BizErrorCode.CONFIG_NOT_FOUND, "节点无审批人: " + nodeCode); |
| | | throw new BizException( |
| | | BizErrorCode.CONFIG_NOT_FOUND, |
| | | "节点无审批人: " + resolveNodeName(nodeCode)); |
| | | } |
| | | return created; |
| | | } |
| | |
| | | if (!Boolean.TRUE.equals(order.getInvolveOtherLocalUnit()) || localUnitIds.isEmpty()) { |
| | | throw new BizException( |
| | | BizErrorCode.CONFIG_NOT_FOUND, |
| | | "节点无审批人: " + ApprovalNodeCode.LEVEL3_LOCAL_DEPT_LEADER); |
| | | "节点无审批人: " + resolveNodeName(ApprovalNodeCode.LEVEL3_LOCAL_DEPT_LEADER)); |
| | | } |
| | | |
| | | List<MpPassLocalUnit> units = |
| | |
| | | if (total <= 0) { |
| | | throw new BizException( |
| | | BizErrorCode.CONFIG_NOT_FOUND, |
| | | "节点无审批人: " + ApprovalNodeCode.LEVEL3_LOCAL_DEPT_LEADER); |
| | | "节点无审批人: " + resolveNodeName(ApprovalNodeCode.LEVEL3_LOCAL_DEPT_LEADER)); |
| | | } |
| | | return total; |
| | | } |
| | | |
| | | private String resolveNodeName(String nodeCode) { |
| | | if (!StringUtils.hasText(nodeCode)) { |
| | | return "未知节点"; |
| | | } |
| | | return switch (nodeCode) { |
| | | case ApprovalNodeCode.LEVEL1_HANDLER -> "经办人(一级)"; |
| | | case ApprovalNodeCode.LEVEL2_DEPT_LEADER -> "部门负责人(二级)"; |
| | | case ApprovalNodeCode.LEVEL3_LOCAL_DEPT_LEADER -> "属地管理部门领导(三级)"; |
| | | case ApprovalNodeCode.LEVEL4_VISIT_DEPT -> "访客主管部门(四级)"; |
| | | case ApprovalNodeCode.LEVEL5_VISIT_DEPT_LEADER -> "访客主管部门领导(五级)"; |
| | | default -> nodeCode; |
| | | }; |
| | | } |
| | | |
| | | private int createTasksWithGroupKey( |
| | | Long instanceId, String nodeCode, String groupKey, List<Long> assignees, String initialStatus) { |
| | | Set<Long> unique = new LinkedHashSet<>(assignees == null ? List.of() : assignees); |