wlzboy
2026-02-26 f5c900c58513bad824381e69750ac7667ef35de0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -189,7 +189,7 @@
    }
    /**
     * 根据任务编号、调度单编号或服务单编号查询任务列表
     *根据任务编号、调度单编号或服务单编号查询任务列表(SQL算法下推优化版本)
     * 
     * @param queryVO 任务查询对象
     * @param taskCode 任务编号
@@ -197,52 +197,34 @@
     */
    @Override
    public List<SysTask> selectSysTaskListByMultiCode(TaskQueryVO queryVO, String taskCode) {
        // Create a new query object without the taskCode filter
        TaskQueryVO newQuery = new TaskQueryVO();
        // Copy all properties except taskCode
        try {
            org.springframework.beans.BeanUtils.copyProperties(queryVO, newQuery, "taskCode");
        } catch (Exception e) {
            // If copy fails, manually copy the important fields
            newQuery.setTaskType(queryVO.getTaskType());
            newQuery.setTaskStatus(queryVO.getTaskStatus());
            newQuery.setVehicleNo(queryVO.getVehicleNo());
            newQuery.setCreatorId(queryVO.getCreatorId());
            newQuery.setAssigneeId(queryVO.getAssigneeId());
            newQuery.setDeptId(queryVO.getDeptId());
            newQuery.setDeptIds(queryVO.getDeptIds());
            newQuery.setPlannedStartTimeBegin(queryVO.getPlannedStartTimeBegin());
            newQuery.setPlannedStartTimeEnd(queryVO.getPlannedStartTimeEnd());
            newQuery.setPlannedEndTimeBegin(queryVO.getPlannedEndTimeBegin());
            newQuery.setPlannedEndTimeEnd(queryVO.getPlannedEndTimeEnd());
            newQuery.setOverdue(queryVO.getOverdue());
        }
        // Get all tasks matching the other criteria
        List<SysTask> allTasks = sysTaskMapper.selectSysTaskList(newQuery);
        allTasks.stream().forEach(task -> {
        // 设置任务码用于SQL查询
        queryVO.setTaskCode(taskCode);
        // 使用优化的查询方法,直接在SQL中关联sys_task_emergency表并计算匹配的dispatchCode和serviceCode
        List<SysTask> tasks = sysTaskMapper.selectSysTaskListByMultiCodeOptimized(queryVO);
        // 处理任务分配信息和急救转运扩展信息
        tasks.forEach(task -> {
            bindTaskAssign(task);
            // 对于急救转运任务,使用SQL查询中已计算并匹配好的dispatchCode和serviceCode
            if ("EMERGENCY_TRANSFER".equals(task.getTaskType())) {
                SysTaskEmergency emergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(task.getTaskId());
                task.setEmergencyInfo(emergencyInfo);
                // 创建一个临时的emergencyInfo对象,包含从SQL查询结果中获取的计算后的代码
//                SysTaskEmergency emergencyInfo = new SysTaskEmergency();
//                emergencyInfo.setDispatchCode(task.getDispatchCode());
//                emergencyInfo.setServiceCode(task.getServiceCode());
                // 加载完整的扩展信息
                SysTaskEmergency fullEmergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(task.getTaskId());
                if (fullEmergencyInfo != null) {
                    // 保留完整信息,但确保dispatchCode和serviceCode是计算后的值
                    task.setEmergencyInfo(fullEmergencyInfo);
                }
            }
        });
        return allTasks.stream().filter(task -> {
            if (task.getTaskCode() != null && task.getTaskCode().contains(taskCode)) {
                return true;
            }
            bindTaskAssign(task);
            if ("EMERGENCY_TRANSFER".equals(task.getTaskType()) && task.getEmergencyInfo() != null) {
                String dispatchCode = task.getEmergencyInfo().getDispatchCode();
                String serviceCode = task.getEmergencyInfo().getServiceCode();
                return (dispatchCode != null && dispatchCode.contains(taskCode)) ||
                        (serviceCode != null && serviceCode.contains(taskCode));
            }
            return false;
        }).collect(Collectors.toList());
        return tasks;
    }
    /**
@@ -700,6 +682,7 @@
        }
//        task.setAssigneeId(updateVO.getAssigneeId());
        task.setUpdateBy(userName);
        task.setUpdateTime(DateUtils.getNowDate());