package com.ruoyi.system.service; import java.util.Date; import java.util.List; import com.ruoyi.system.domain.vo.*; import org.springframework.web.multipart.MultipartFile; import com.ruoyi.system.domain.SysTask; import com.ruoyi.system.domain.SysTaskLog; import com.ruoyi.system.domain.SysTaskVehicle; import com.ruoyi.system.domain.SysTaskAttachment; import com.ruoyi.system.domain.enums.TaskStatus; /** * 任务管理Service接口 * * @author ruoyi * @date 2024-01-15 */ public interface ISysTaskService { public Boolean dispatchSyncEvent(Long taskId); /** * 查询任务管理 * * @param taskId 任务管理主键 * @return 任务管理 */ public SysTask selectSysTaskByTaskId(Long taskId); /** * 查询任务管理列表 * * @param queryVO 任务查询对象 * @return 任务管理集合 */ public List selectSysTaskList(TaskQueryVO queryVO); /** * 根据任务编号、调度单编号或服务单编号查询任务列表 * * @param queryVO 任务查询对象 * @param taskCode 任务编号 * @return 任务管理集合 */ public List selectSysTaskListByMultiCode(TaskQueryVO queryVO, String taskCode); /** * 新增任务管理 * * @param createVO 任务创建对象 * @return 结果 */ public int insertSysTask(TaskCreateVO createVO); /** * 新增任务管理(允许从外部传入用户信息、部门信息和时间信息) * * @param createVO 任务创建对象 * @param userId 用户ID * @param deptId 部门ID * @param createTime 创建时间 * @param updateTime 更新时间 * @return 结果 */ public int insertTask(TaskCreateVO createVO,String serviceOrderId,String dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime); /** * 修改任务管理 * * @param updateVO 任务更新对象 * @return 结果 */ public int updateSysTask(TaskUpdateVO updateVO,Boolean updateFromLegacy); /** * 修改任务管理(允许从外部传入用户信息、部门信息和时间信息) 用于从旧系统中同步过来 * @param updateVO * @param serviceOrderId * @param dispatchOrderId * @param serviceOrdNo * @param userId * @param userName * @param deptId * @param createTime * @param updateTime * @return */ public int updateTask(TaskUpdateVO updateVO, String serviceOrderId, String dispatchOrderId, String serviceOrdNo, Long userId, String userName, Long deptId, Date createTime, Date updateTime); /** * 批量删除任务管理 * * @param taskIds 需要删除的任务管理主键集合 * @return 结果 */ public int deleteSysTaskByTaskIds(Long[] taskIds); /** * 分配任务 * * @param taskId 任务ID * @param assigneeId 执行人ID * @param remark 备注 * @return 结果 */ public int assignTask(Long taskId, Long assigneeId, String remark); /** * 变更任务状态 * * @param taskId 任务ID * @param newStatus 新状态 * @param remark 备注 * @return 结果 */ public int changeTaskStatus(Long taskId, TaskStatus newStatus, String remark); /** * 变更任务状态(含GPS位置信息) * * @param taskId 任务ID * @param newStatus 新状态 * @param remark 备注 * @param locationLog GPS位置信息日志对象 * @return 结果 */ public int changeTaskStatusWithLocation(Long taskId, TaskStatus newStatus, String remark, SysTaskLog locationLog); /** * 上传任务附件 * * @param taskId 任务ID * @param file 文件 * @param category 附件分类 * @return 结果 */ public Long uploadAttachment(Long taskId, MultipartFile file, String category); /** * 从微信mediaId上传任务附件 * * @param taskId 任务ID * @param accessToken 微信AccessToken * @param mediaId 微信mediaId * @param category 附件分类 * @return */ public Long uploadAttachmentFromWechat(Long taskId, String accessToken, String mediaId, String category); /** * 删除任务附件 * * @param attachmentId 附件ID * @return 结果 */ public int deleteAttachment(Long attachmentId); /** * 根据ID获取附件详情 * * @param attachmentId 附件ID * @return 附件详情 */ public SysTaskAttachment getAttachmentById(Long attachmentId); public List getAttachmentsByTaskId(Long taskId); /** * 分配车辆给任务 * * @param taskId 任务ID * @param vehicleId 车辆ID * @param remark 备注 * @return 结果 */ public int assignVehicleToTask(Long taskId, Long vehicleId, String remark,Long userId,String userName); /** * 取消任务车辆分配 * * @param taskId 任务ID * @param vehicleId 车辆ID * @return 结果 */ public int unassignVehicleFromTask(Long taskId, Long vehicleId); /** * 批量分配车辆给任务 * * @param taskId 任务ID * @param vehicleIds 车辆ID列表 * @param remark 备注 * @return 结果 */ public int assignMultipleVehiclesToTask(Long taskId, List vehicleIds, String remark,Long userId,String userName); /** * 查询任务关联的车辆 * * @param taskId 任务ID * @return 任务车辆关联列表 */ public List getTaskVehicles(Long taskId); /** * 查询可用车辆 * * @param deptId 部门ID * @param taskType 任务类型 * @return 可用车辆列表 */ public List getAvailableVehicles(Long deptId, String taskType); /** * 查询任务统计信息 * * @return 任务统计信息 */ public TaskStatisticsVO getTaskStatistics(); /** * 查询超时任务列表 * * @return 超时任务列表 */ public List selectOverdueTasks(); /** * 查询我的任务列表 * * @param userId 用户ID * @return 我的任务列表 */ public List selectMyTasks(Long userId); /** * 获取任务详情(包含关联数据) * * @param taskId 任务ID * @return 任务详情 */ public SysTask getTaskDetail(Long taskId); /** * 检查车辆是否有正在进行中的任务 * 正在进行中的任务是指状态不为:PENDING(待处理)、COMPLETED(已完成)、CANCELLED(已取消)的任务 * * @param vehicleId 车辆ID * @return 正在进行中的任务列表 */ public List checkVehicleActiveTasks(Long vehicleId); /** * 检查任务是否已关联旧系统服务单ID * * @param taskId 任务ID * @return true-已关联,false-未关联 */ public boolean hasLegacyServiceOrdId(Long taskId); /** * 检查任务是否已关联旧系统调度单ID * * @param taskId 任务ID * @return true-已关联,false-未关联 */ public boolean hasLegacyDispatchOrdId(Long taskId); /** * 根据旧系统服务单ID检查是否存在任务 * * @param legacyServiceOrdId 旧系统服务单ID * @return true-存在,false-不存在 */ public boolean existsByLegacyServiceOrdId(Long legacyServiceOrdId); /** * 根据旧系统调度单ID检查是否存在任务 * * @param legacyDispatchOrdId 旧系统调度单ID * @return true-存在,false-不存在 */ public boolean existsByLegacyDispatchOrdId(Long legacyDispatchOrdId); /** * 检查任务是否可以出发 * 检查: * 1. 车辆是否有未完成的任务 * 2. 执行人员是否有未完成的任务 * * @param taskId 任务ID * @return AjaxResult 校验结果,包含 valid 和 conflicts 信息 */ public com.ruoyi.common.core.domain.AjaxResult checkTaskCanDepart(Long taskId); /** * 执行人点击就绪 * * @param taskId 任务ID * @param userId 用户ID * @return 结果 */ public com.ruoyi.common.core.domain.AjaxResult setAssigneeReady(Long taskId, Long userId); /** * 取消执行人就绪 * * @param taskId 任务ID * @param userId 用户ID * @return 结果 */ public com.ruoyi.common.core.domain.AjaxResult cancelAssigneeReady(Long taskId, Long userId); }