wlzboy
2026-04-01 c459808efab29dc1b8439fbb90556bdb16f4c88b
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
@@ -11,6 +11,9 @@
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.SysTaskEmergency;
import com.ruoyi.system.service.*;
import com.ruoyi.system.service.ILegacySystemSyncService;
import com.ruoyi.system.service.ITaskDispatchSyncService;
import com.ruoyi.system.mapper.SysTaskStatusHistoryMapper;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +34,7 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.SysTask;
import com.ruoyi.system.domain.SysTaskLog;
import com.ruoyi.system.domain.SysTaskStatusHistory;
import com.ruoyi.system.domain.VehicleInfo;
import com.ruoyi.system.domain.vo.TaskQueryVO;
import com.ruoyi.system.domain.vo.TaskCreateVO;
@@ -71,6 +75,18 @@
    @Qualifier("tiandituMapService")
    private IMapService mapService;
    @Autowired
    private ILegacySystemSyncService legacySystemSyncService;
    @Autowired
    private ITaskDispatchSyncService taskDispatchSyncService;
    @Autowired
    private ITaskStatusPushService taskStatusPushService;
    @Autowired
    private SysTaskStatusHistoryMapper sysTaskStatusHistoryMapper;
    /**
     * 查询任务管理列表(后台管理端)
     * 管理员权限,可以查看所有任务
@@ -84,7 +100,7 @@
        List<SysTask> list;
        if(searchTaskCode != null && !searchTaskCode.trim().isEmpty()){
            // Search across task_code, emergency_info.dispatch_code, and emergency_info.service_code
            list = sysTaskService.selectSysTaskListByMultiCode(queryVO, searchTaskCode);
            list = sysTaskService.selectSysTaskListByMultiCode(queryVO, searchTaskCode.trim());
        } else {
            queryVO.setTaskCode(null);
            list = sysTaskService.selectSysTaskList(queryVO);
@@ -184,10 +200,9 @@
    @Log(title = "任务管理", businessType = BusinessType.INSERT)
    @PostMapping("/admin")
    public AjaxResult adminAdd(@RequestBody TaskCreateVO createVO) {
        return toAjax(sysTaskService.insertSysTask(createVO));
        Long taskId = sysTaskService.insertSysTask(createVO);
        return taskId > 0 ? AjaxResult.success("新增成功").put("taskId", taskId) : AjaxResult.error("新增失败");
    }
    /**
     * 新增任务(APP端)
@@ -195,7 +210,8 @@
    @Log(title = "任务创建", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult appAdd(@RequestBody TaskCreateVO createVO) {
        return toAjax(sysTaskService.insertSysTask(createVO));
        Long taskId = sysTaskService.insertSysTask(createVO);
        return taskId > 0 ? AjaxResult.success("新增成功").put("taskId", taskId) : AjaxResult.error("新增失败");
    }
    
    /**
@@ -615,4 +631,149 @@
            this.actualEndTime = actualEndTime;
        }
    }
    /**
     * 手动同步服务单到旧系统
     * 当服务单同步失败或未同步时,可以通过此接口手动触发同步
     */
//    @PreAuthorize("@ss.hasPermi('task:general:edit')")
    @Log(title = "手动同步服务单", businessType = BusinessType.UPDATE)
    @PostMapping("/syncServiceOrder/{taskId}")
    public AjaxResult syncServiceOrder(@PathVariable Long taskId) {
        try {
            // 查询任务信息
            SysTask task = sysTaskService.selectSysTaskByTaskId(taskId);
            if (task == null) {
                return error("任务不存在");
            }
            // 只支持急救转运任务
            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
                return error("只有急救转运任务才能同步到旧系统");
            }
            // 调用同步服务
            Long serviceOrdId = legacySystemSyncService.syncEmergencyTaskToLegacy(taskId);
            if (serviceOrdId != null && serviceOrdId > 0) {
                return success("服务单同步成功,ServiceOrdID: " + serviceOrdId);
            } else {
                return error("服务单同步失败,请查看同步错误信息");
            }
        } catch (Exception e) {
            logger.error("手动同步服务单异常,taskId: {}", taskId, e);
            return error("同步异常: " + e.getMessage());
        }
    }
    /**
     * 手动同步调度单到旧系统
     * 当调度单同步失败或未同步时,可以通过此接口手动触发同步
     */
    @PreAuthorize("@ss.hasPermi('task:general:edit')")
    @Log(title = "手动同步调度单", businessType = BusinessType.UPDATE)
    @PostMapping("/syncDispatchOrder/{taskId}")
    public AjaxResult syncDispatchOrder(@PathVariable Long taskId) {
        try {
            // 查询任务信息
            SysTask task = sysTaskService.selectSysTaskByTaskId(taskId);
            if (task == null) {
                return error("任务不存在");
            }
            // 只支持急救转运任务
            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
                return error("只有急救转运任务才能同步到旧系统");
            }
            // 查询急救转运扩展信息
            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
            if (emergency == null) {
                return error("急救转运扩展信息不存在");
            }
            // 必须先有服务单
            if (emergency.getLegacyServiceOrdId() == null || emergency.getLegacyServiceOrdId() <= 0) {
                return error("请先同步服务单");
            }
            // 调用同步服务
            Long dispatchOrdId = taskDispatchSyncService.syncDispatch(taskId);
            if (dispatchOrdId != null && dispatchOrdId > 0) {
                return success("调度单同步成功,DispatchOrdID: " + dispatchOrdId);
            } else {
                return error("调度单同步失败,请查看同步错误信息");
            }
        } catch (Exception e) {
            logger.error("手动同步调度单异常,taskId: {}", taskId, e);
            return error("同步异常: " + e.getMessage());
        }
    }
    /**
     * 手动同步任务状态到旧系统
     * 当任务状态变更后由于网络等原因未同步到旧系统时,可以通过此接口手动触发同步
     */
//    @PreAuthorize("@ss.hasPermi('task:general:edit')")
    @Log(title = "手动同步任务状态", businessType = BusinessType.UPDATE)
    @PostMapping("/syncTaskStatus/{taskId}")
    public AjaxResult syncTaskStatus(@PathVariable Long taskId) {
        try {
            // 查询任务信息
            SysTask task = sysTaskService.selectSysTaskByTaskId(taskId);
            if (task == null) {
                return error("任务不存在");
            }
            // 只支持急救转运任务
            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
                return error("只有急救转运任务才能同步到旧系统");
            }
            // 查询急救转运扩展信息
            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
            if (emergency == null) {
                return error("急救转运扩展信息不存在");
            }
            // 必须先有调度单
            if (emergency.getLegacyDispatchOrdId() == null || emergency.getLegacyDispatchOrdId() <= 0) {
                return error("请先同步调度单,任务状态信息同步到旧系统的调度单中");
            }
            // 调用状态同步服务
            boolean success = taskStatusPushService.pushTaskStatusToLegacy(taskId);
            if (success) {
                return success("任务状态同步成功");
            } else {
                return error("任务状态同步失败,请查看日志获取详细信息");
            }
        } catch (Exception e) {
            logger.error("手动同步任务状态异常,taskId: {}", taskId, e);
            return error("同步异常: " + e.getMessage());
        }
    }
    /**
     * 查询任务状态变更历史
     */
    @GetMapping("/{taskId}/statusHistory")
    public AjaxResult getTaskStatusHistory(@PathVariable Long taskId) {
        try {
            SysTask task = sysTaskService.selectSysTaskByTaskId(taskId);
            if (task == null) {
                return error("任务不存在");
            }
            List<SysTaskStatusHistory> list = sysTaskStatusHistoryMapper.selectByTaskId(taskId);
            return success(list);
        } catch (Exception e) {
            logger.error("查询任务状态历史异常,taskId: {}", taskId, e);
            return error("查询失败: " + e.getMessage());
        }
    }
}