package com.stylefeng.guns.modular.system.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.modular.system.model.Reassign; import com.stylefeng.guns.modular.system.service.IReassignService; import com.stylefeng.guns.modular.system.util.PushUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; /** * 改派超时检查定时任务 * 每30秒检查一次待确认且已超时的改派申请 */ @Component public class ReassignTimeoutTask { @Autowired private IReassignService reassignService; @Autowired private PushUtil pushUtil; /** * 每30秒检查一次超时的改派申请 */ @Scheduled(cron = "0/30 * * * * ?") public void checkTimeoutReassigns() { try { // 查询超时的改派申请 List timeoutList = reassignService.selectList( new EntityWrapper() .eq("needConfirm", 2) // 需要确认的 .eq("confirmStatus", 1) // 待确认状态 .le("expireTime", new Date()) // 已超时 ); for (Reassign reassign : timeoutList) { // 设置为超时状态 reassign.setConfirmStatus(4); reassignService.updateById(reassign); // 通知原司机超时 pushReassignTimeout(reassign); System.out.println("改派申请超时处理:reassignId=" + reassign.getId() + ", orderId=" + reassign.getOrderId() + ", originalDriverId=" + reassign.getOriginalDriverId()); } if (timeoutList.size() > 0) { System.out.println("本次共处理 " + timeoutList.size() + " 条超时改派申请"); } } catch (Exception e) { System.err.println("改派超时检查任务执行失败:" + e.getMessage()); e.printStackTrace(); } } /** * 通知原司机改派超时(使用Socket推送) */ private void pushReassignTimeout(Reassign reassign) { try { pushUtil.pushReassignTimeout( reassign.getOriginalDriverId(), reassign.getId(), reassign.getOrderId(), reassign.getOrderType() ); } catch (Exception e) { e.printStackTrace(); } } }