每两分钟执行一次findBookingOrderNeedDispatchAndDispatch()方法
public void findBookingOrderNeedDispatchAndDispatch(){
List<BookingOrder> list=bookingOrderMapper.findBookingOrderNeedDispatch();
for (BookingOrder bookingOrder :list){
//如果用户最早可收获时间-当前时间<30分钟
if(bookingOrder.getDeliveryStartTime().getTime()-new Date().getTime()<1800000){
bookingOrder.setEnableToDispatch(1);
bookingOrder.setIsUseFul(0);
//根据bookingOrder表的orderId查询到order表的信息
Order order= bookingOrderMapper.selectFullOrderByBookingOrderId(bookingOrder.getOrderId());
//更幸order表的enableToDispatch where order.orderId=bookingOrder.orderId;
bookingOrderMapper.updateBookingOrdersStatus(order.getOrderId());
}
else{
break;
}
}
}
当用户最早收货时间-当前时间<30分钟时,把订单设置为可派单,并把isUseFul设置为0(逻辑删除),并获得oderId ,根据orderId更改order表的是否可派单改为可派单 因为是预约单订单表是通过“用户最早可收获时间排序”,所以当前面的订单不满足if里面的条件的话,后面的也肯定不满足,故使用break; 若满足的话,将其从队列里“删除(不删数据,逻辑删除)”
update `order` set `order`.enableToDispatch = 1 and `order`.isUseFul= 0 where `order`.orderId=#{orderId}
这样的话自动派单模块就可以把该订单加入派单逻辑
===============================================================================================
还没测试,不一定能跑,天天加班不一定有时间写博客 先甩上来再说。
================================================================================================
刚开始做预约单的时候,准备用户下一个预约单,就用一个Timer去管理,这样会有大量的Timer,影响性能,网上查了很多管理Timer的方法,基本上都是https://www.cnblogs.com/lujiango/p/9378669.html类似于这个文章,查了好久个不同的博客都是一模一样,这里写的最后一个方法,看了一会也不清楚,预约单又急着上线,暂时先用了我的方法,以后看懂了会继续做优化