| | |
| | | * @throws RuntimeException 当任务不存在、状态不允许转换或操作失败时抛出 |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | // @Transactional(rollbackFor = Exception.class) |
| | | public boolean auditPatrolTask(GdPatrolTaskAuditParam auditParam) { |
| | | // 1. 获取巡查任务 |
| | | GdPatrolTaskEntity task = getById(auditParam.getId()); |
| | |
| | | .eq(GdPatrolTaskEntity::getWorkOrderId, task.getWorkOrderId())); |
| | | |
| | | // 检查是否所有子任务都审核成功(除了被撤回和验收拒绝的) |
| | | boolean allSubTasksAudited = checkAllSubTasksStatus(subTasks, PatrolTaskStatusEnum.AUDIT_PASSED); |
| | | // 示例:如果所有子任务都审核成功,可以更新工单状态为已完成 |
| | | boolean allSubTasksAudited = subTasks.stream() |
| | | .map(GdPatrolTaskEntity::getTaskStatus) |
| | | .filter(Objects::nonNull) |
| | | // 过滤掉撤回和验收拒绝的任务 |
| | | .filter(status -> !status.equals(PatrolTaskStatusEnum.WITHDRAWN.getValue()) && |
| | | !status.equals(PatrolTaskStatusEnum.REJECTED_ACCEPTANCE.getValue())) |
| | | // 判断是否有小于待审核的任务 |
| | | .anyMatch(status -> status.compareTo(PatrolTaskStatusEnum.PENDING_AUDIT.getValue()) < 0); |
| | | if (allSubTasksAudited) { |
| | | // 执行工单状态更新逻辑 |
| | | return updateWorkOrderStatusAndFlow(task.getWorkOrderId(), |
| | |
| | | .eq(GdPatrolTaskEntity::getWorkOrderId, task.getWorkOrderId())); |
| | | |
| | | // 检查是否所有子任务都验收通过(除了被撤回和验收拒绝的) |
| | | boolean allSubTasksAudited = checkAllSubTasksStatus(subTasks, PatrolTaskStatusEnum.ACCEPTANCE_PASSED); |
| | | boolean allSubTasksAudited = subTasks.stream() |
| | | .map(GdPatrolTaskEntity::getTaskStatus) |
| | | .filter(Objects::nonNull) |
| | | // 过滤掉撤回和验收拒绝的任务 |
| | | .filter(status -> !status.equals(PatrolTaskStatusEnum.WITHDRAWN.getValue()) && |
| | | !status.equals(PatrolTaskStatusEnum.REJECTED_ACCEPTANCE.getValue())) |
| | | // 判断是否有小于待审核的任务 |
| | | .anyMatch(status -> status.compareTo(PatrolTaskStatusEnum.PENDING_AUDIT.getValue()) < 0); |
| | | // 这里可以根据allSubTasksAudited的结果执行后续逻辑,比如更新工单状态等 |
| | | if (allSubTasksAudited) { |
| | | // 1.验收通过,生成报告 |
| | |
| | | return b; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 检查是否所有子任务都达到指定状态(除了被撤回和验收拒绝的) |
| | | * |
| | | * @param subTasks 子任务列表 |
| | | * @param targetStatus 目标状态枚举 |
| | | * @return 是否所有子任务都达到指定状态 |
| | | */ |
| | | private boolean checkAllSubTasksStatus(List<GdPatrolTaskEntity> subTasks, PatrolTaskStatusEnum targetStatus) { |
| | | for (GdPatrolTaskEntity subTask : subTasks) { |
| | | String taskStatus = subTask.getTaskStatus(); |
| | | PatrolTaskStatusEnum statusEnum = PatrolTaskStatusEnum.getByValue(taskStatus); |
| | | |
| | | // 如果任务状态不是目标状态,且不是被撤回和验收拒绝的,则返回false |
| | | if (statusEnum != targetStatus && |
| | | statusEnum != PatrolTaskStatusEnum.WITHDRAWN && |
| | | statusEnum != PatrolTaskStatusEnum.REJECTED_ACCEPTANCE) { |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 更新工单状态并保存流转记录 |