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<Reassign> timeoutList = reassignService.selectList(
|
new EntityWrapper<Reassign>()
|
.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();
|
}
|
}
|
}
|