[taxi/bus 2.5.1] 调整订单轮询开始时机修复NPE

This commit is contained in:
wangmingjun
2022-01-25 14:26:21 +08:00
parent fab30ebaaa
commit 53e96dcb27
2 changed files with 243 additions and 233 deletions

View File

@@ -133,11 +133,15 @@ public class MogoOCHTaxiModelNew {
}
if (NetworkUtils.isConnected(mContext)) {
startOrStopOrderLoop(mOCHCarStatus == 1);
// startOrStopOrderLoop(mOCHCarStatus == 1);
queryCarStatus();
}
}
public void startOrStopOrderLoop(){
startOrStopOrderLoop(mOCHCarStatus == 1);
}
public void release() {
startOrStopOrderLoop(false);
releaseListeners();
@@ -275,70 +279,70 @@ public class MogoOCHTaxiModelNew {
public void queryInAndWaitOrders() {
OCHTaxiServiceManagerNew.getInstance().queryOrdersInAndWaitService(mContext,
new OCHTaxiServiceCallback<OrdersInServiceQueryRespBean>() {
@Override
public void onSuccess(OrdersInServiceQueryRespBean data) {
if (data == null || data.data == null) {
return;
}
//1. 处理进行中订单
mInServiceList = data.data.servicing;
if (data.data.servicing != null && !data.data.servicing.isEmpty()) {
// 1.1. 当存在进行中单时对本地currentOrder进行更新
if (mCurrentOCHOrder == null) {
//1.1.1. 当本地无currentOrder已经完成or取消则更新currentOrder并通知ui更新
updateNativeCurrentOrder(data.data.servicing.get(0));
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder);
@Override
public void onSuccess(OrdersInServiceQueryRespBean data) {
if (data == null || data.data == null) {
return;
}
} else {
//1.1.2. 当本地有currentOrder
//orderId不一致时通过currentOrder.orderId查询订单状态并通知ui更新
//orderId一致且orderStatus不一致时则更新currentOrder并通知ui更新
if (mCurrentOCHOrder.orderId != data.data.servicing.get(0).orderId) {
queryCurOrderStatus();
} else if (mCurrentOCHOrder.orderStatus != data.data.servicing.get(0).orderStatus) {
updateNativeCurrentOrder(data.data.servicing.get(0));
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder);
//1. 处理进行中订单
mInServiceList = data.data.servicing;
if (data.data.servicing != null && !data.data.servicing.isEmpty()) {
// 1.1. 当存在进行中单时对本地currentOrder进行更新
if (mCurrentOCHOrder == null) {
//1.1.1. 当本地无currentOrder已经完成or取消则更新currentOrder并通知ui更新
updateNativeCurrentOrder(data.data.servicing.get(0));
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder);
}
} else {
//1.1.2. 当本地有currentOrder
//orderId不一致时通过currentOrder.orderId查询订单状态并通知ui更新
//orderId一致且orderStatus不一致时则更新currentOrder并通知ui更新
if (mCurrentOCHOrder.orderId != data.data.servicing.get(0).orderId) {
queryCurOrderStatus();
} else if (mCurrentOCHOrder.orderStatus != data.data.servicing.get(0).orderStatus) {
updateNativeCurrentOrder(data.data.servicing.get(0));
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder);
}
}
}
} else {
// 1.2. 当无进行中订单时如果本地也无则跳过如果本地仍存在currentOrder查询此单完成or取消并通知ui更新
if (mCurrentOCHOrder != null) {
queryCurOrderStatus();
}
}
//2. 处理待服务订单列表
if (data.data.waitService != null && !data.data.waitService.isEmpty()) {
//2.1. 当存在待服务订单列表:跟本地待服务列表比较
if (mWaitServiceList.isEmpty()
|| (mWaitServiceList.size() != data.data.waitService.size())
|| !OrderUtil.haveSameOrders(mWaitServiceList, data.data.waitService)) {
// 2.1.1. 当本地无待服务单或数量和内容不一致更新本地待服务列表并通知ui更新
mWaitServiceList = data.data.waitService;
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onOrdersWaitServiceChanged(mWaitServiceList);
}
}
} else {
//2.2. 当无待服务单时如果本地也无则跳过如果本地有则清除并通知ui更新
if (!mWaitServiceList.isEmpty()) {
mWaitServiceList.clear();
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onOrdersWaitServiceChanged(mWaitServiceList);
}
}
}
}
} else {
// 1.2. 当无进行中订单时如果本地也无则跳过如果本地仍存在currentOrder查询此单完成or取消并通知ui更新
if (mCurrentOCHOrder != null) {
queryCurOrderStatus();
}
}
//2. 处理待服务订单列表
if (data.data.waitService != null && !data.data.waitService.isEmpty()) {
//2.1. 当存在待服务订单列表:跟本地待服务列表比较
if (mWaitServiceList.isEmpty()
|| (mWaitServiceList.size() != data.data.waitService.size())
|| !OrderUtil.haveSameOrders(mWaitServiceList, data.data.waitService)) {
// 2.1.1. 当本地无待服务单或数量和内容不一致更新本地待服务列表并通知ui更新
mWaitServiceList = data.data.waitService;
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onOrdersWaitServiceChanged(mWaitServiceList);
}
}
} else {
//2.2. 当无待服务单时如果本地也无则跳过如果本地有则清除并通知ui更新
if (!mWaitServiceList.isEmpty()) {
mWaitServiceList.clear();
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onOrdersWaitServiceChanged(mWaitServiceList);
}
}
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
}
});
}
});
}
//仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder
@@ -349,29 +353,29 @@ public class MogoOCHTaxiModelNew {
final long orderId = mCurrentOCHOrder.orderId;
OCHTaxiServiceManagerNew.getInstance().queryOrderById(mContext, orderId,
new OCHTaxiServiceCallback<OrderQueryRespBean>() {
@Override
public void onSuccess(OrderQueryRespBean data) {
if (data != null && data.data != null
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == data.data.orderId) {
if (data.data.orderStatus == OrderStatusEnum.Cancel.getCode()
|| data.data.orderStatus == OrderStatusEnum.JourneyCompleted.getCode()
|| data.data.orderStatus == OrderStatusEnum.None.getCode()) {
clearCurrentOCHOrder();
cancelAutopilot();
} else {
updateNativeCurrentOrder(data.data);
@Override
public void onSuccess(OrderQueryRespBean data) {
if (data != null && data.data != null
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == data.data.orderId) {
if (data.data.orderStatus == OrderStatusEnum.Cancel.getCode()
|| data.data.orderStatus == OrderStatusEnum.JourneyCompleted.getCode()
|| data.data.orderStatus == OrderStatusEnum.None.getCode()) {
clearCurrentOCHOrder();
cancelAutopilot();
} else {
updateNativeCurrentOrder(data.data);
}
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(data.data);
}
}
}
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(data.data);
@Override
public void onFail(int code, String msg) {
}
}
}
@Override
public void onFail(int code, String msg) {
}
});
});
}
//更新当前订单状态
@@ -382,29 +386,29 @@ public class MogoOCHTaxiModelNew {
final long orderId = mCurrentOCHOrder.orderId;
OCHTaxiServiceManagerNew.getInstance().updateOrderStatus(mContext, orderId,
orderStatus.getCode(), new OCHTaxiServiceCallback<BaseData>() {
@Override
public void onSuccess(BaseData data) {
if (null != data && 0 == data.code
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) {
mCurrentOCHOrder.orderStatus = orderStatus.getCode();
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder);
@Override
public void onSuccess(BaseData data) {
if (null != data && 0 == data.code
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) {
mCurrentOCHOrder.orderStatus = orderStatus.getCode();
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder);
}
}
}
}
}
@Override
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
TipToast.shortTip("网络异常,请稍后重试");
}
}
@Override
public void onError() {
if (!NetworkUtils.isConnected(mContext)) {
TipToast.shortTip("网络异常,请稍后重试");
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
// TipToast.shortTip(code + "," + msg);
}
});
}
});
}
// 取消当前订单
@@ -416,23 +420,23 @@ public class MogoOCHTaxiModelNew {
final long orderId = mCurrentOCHOrder.orderId;
OCHTaxiServiceManagerNew.getInstance().cancelOrder(mContext, orderId, reasonType, reason,
new OCHTaxiServiceCallback<BaseData>() {
@Override
public void onSuccess(BaseData data) {
if (null != data && 0 == data.code
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderCancelDone();
@Override
public void onSuccess(BaseData data) {
if (null != data && 0 == data.code
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderCancelDone();
}
clearCurrentOCHOrder();
cancelAutopilot();
}
}
clearCurrentOCHOrder();
cancelAutopilot();
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
// TipToast.shortTip(code + "," + msg);
}
});
}
});
}
// 取消待服务中订单
@@ -463,96 +467,96 @@ public class MogoOCHTaxiModelNew {
final long orderId = mCurrentOCHOrder.orderId;
OCHTaxiServiceManagerNew.getInstance().queryOrderRouteInfo(mContext, orderId,
new OCHTaxiServiceCallback<OrderQueryRouteInfoRespBean>() {
@Override
public void onSuccess(OrderQueryRouteInfoRespBean data) {
if (null != data && 0 == data.code
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderRouteInfoGot(data.data);
@Override
public void onSuccess(OrderQueryRouteInfoRespBean data) {
if (null != data && 0 == data.code
&& mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onCurrentOrderRouteInfoGot(data.data);
}
}
}
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
// TipToast.shortTip(code + "," + msg);
}
});
}
});
}
// 获取全部订单列表
public void queryOrdersList(int page, int size) {
OCHTaxiServiceManagerNew.getInstance().queryOrdersList(mContext, page, size,
new OCHTaxiServiceCallback<OrdersListQueryRespBean>() {
@Override
public void onSuccess(OrdersListQueryRespBean data) {
if (null != data && 0 == data.code) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onOrdersListPageRefresh(data.data.orders);
@Override
public void onSuccess(OrdersListQueryRespBean data) {
if (null != data && 0 == data.code) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onOrdersListPageRefresh(data.data.orders);
}
}
}
}
}
@Override
public void onFail(int code, String msg) {
TipToast.shortTip("请求异常,请稍后重试");
}
});
@Override
public void onFail(int code, String msg) {
TipToast.shortTip("请求异常,请稍后重试");
}
});
}
/**
* 查询新到预约单
*
* 注只有在本地缓存mNewBookingOrder为null时执行完抢单or司机关闭改单才更新新到待抢单
*/
*/
public void queryNewBookingOrder() {
OCHTaxiServiceManagerNew.getInstance().queryNewBookingOrder(mContext,
new OCHTaxiServiceCallback<OrdersNewBookingQueryRespBean>() {
@Override
public void onSuccess(OrdersNewBookingQueryRespBean data) {
if (data != null && data.code == 0
&& data.data != null && data.data.orders.size() > 0) {
// 本地无新到单且本次新到单id与上次收到的新单id不同时显示本次新到单
if (mNewBookingOrder == null ) {
for (Long orderId : data.data.orders) {
if (mPrevOrderId != orderId.longValue()) {
queryNewBookingContent(orderId.longValue());
break;
@Override
public void onSuccess(OrdersNewBookingQueryRespBean data) {
if (data != null && data.code == 0
&& data.data != null && data.data.orders.size() > 0) {
// 本地无新到单且本次新到单id与上次收到的新单id不同时显示本次新到单
if (mNewBookingOrder == null ) {
for (Long orderId : data.data.orders) {
if (mPrevOrderId != orderId.longValue()) {
queryNewBookingContent(orderId.longValue());
break;
}
}
}
}
}
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
}
});
}
});
}
// 仅限于获取到新待抢单且需要展示时查询该单信息queryOrderById接口可以查询属于该车的单、未派的单
private void queryNewBookingContent(final long orderId) {
OCHTaxiServiceManagerNew.getInstance().queryOrderById(mContext, orderId,
new OCHTaxiServiceCallback<OrderQueryRespBean>() {
@Override
public void onSuccess(OrderQueryRespBean data) {
if (data != null && data.code == 0
&& data.data != null && data.data.orderId == orderId
&& data.data.orderType == OrderTypeEnum.Reserved.getType()) {
mNewBookingOrder = data.data;
mPrevOrderId = data.data.orderId;
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onNewBookingOrderGot(mNewBookingOrder);
@Override
public void onSuccess(OrderQueryRespBean data) {
if (data != null && data.code == 0
&& data.data != null && data.data.orderId == orderId
&& data.data.orderType == OrderTypeEnum.Reserved.getType()) {
mNewBookingOrder = data.data;
mPrevOrderId = data.data.orderId;
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onNewBookingOrderGot(mNewBookingOrder);
}
}
}
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
}
});
}
});
}
// 执行抢单动作
@@ -566,22 +570,22 @@ public class MogoOCHTaxiModelNew {
final long orderId = mNewBookingOrder.orderId;
OCHTaxiServiceManagerNew.getInstance().grabOrder(mContext, orderId,
new OCHTaxiServiceCallback<OrderGrabRespBean>() {
@Override
public void onSuccess(OrderGrabRespBean data) {
if (data != null && data.code == 0
&& mNewBookingOrder != null && mNewBookingOrder.orderId == orderId) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onGrabOrderExecuteDone();
OCHTaxiModelLoopManager.getInstance().startGrabResultLoop();
@Override
public void onSuccess(OrderGrabRespBean data) {
if (data != null && data.code == 0
&& mNewBookingOrder != null && mNewBookingOrder.orderId == orderId) {
if (mOrderStatusCallback != null) {
mOrderStatusCallback.onGrabOrderExecuteDone();
OCHTaxiModelLoopManager.getInstance().startGrabResultLoop();
}
}
}
}
}
@Override
public void onFail(int code, String msg) {
TipToast.shortTip("请求异常,请稍后重试");
}
});
@Override
public void onFail(int code, String msg) {
TipToast.shortTip("请求异常,请稍后重试");
}
});
}
// 查询抢单结果
@@ -596,77 +600,77 @@ public class MogoOCHTaxiModelNew {
final long orderId = mNewBookingOrder.orderId;
OCHTaxiServiceManagerNew.getInstance().queryOrderGrabStatus(mContext, orderId,
new OCHTaxiServiceCallback<OrderGrabStatusQueryRespBean>() {
@Override
public void onSuccess(OrderGrabStatusQueryRespBean data) {
//OCHTaxiModelLoopManager.getInstance().stopGrabResultLoop();
if (data != null && data.code == 0
&& mNewBookingOrder != null && mNewBookingOrder.orderId == orderId) {
if (data.data.grabStatus == 0) {
return; //抢单中,不处理继续轮询结果
}
if (mOrderStatusCallback != null) {
if (data.data.grabStatus == 1) {
mOrderStatusCallback.onGrabOrderSuccess(mNewBookingOrder);
} else if (data.data.grabStatus == 2) {
mOrderStatusCallback.onGrabOrderFailed(mNewBookingOrder);
@Override
public void onSuccess(OrderGrabStatusQueryRespBean data) {
//OCHTaxiModelLoopManager.getInstance().stopGrabResultLoop();
if (data != null && data.code == 0
&& mNewBookingOrder != null && mNewBookingOrder.orderId == orderId) {
if (data.data.grabStatus == 0) {
return; //抢单中,不处理继续轮询结果
}
if (mOrderStatusCallback != null) {
if (data.data.grabStatus == 1) {
mOrderStatusCallback.onGrabOrderSuccess(mNewBookingOrder);
} else if (data.data.grabStatus == 2) {
mOrderStatusCallback.onGrabOrderFailed(mNewBookingOrder);
} else {
// TODO: 2021/9/22 需根据具体内容给予提示,如订单已取消
mOrderStatusCallback.onGrabOrderFailed(mNewBookingOrder);
}
}
} else {
// TODO: 2021/9/22 需根据具体内容给予提示,如订单已取消
mOrderStatusCallback.onGrabOrderFailed(mNewBookingOrder);
if (mOrderStatusCallback != null) {
// TODO: 2021/9/22 如果用户已取消单抢单失败时暂返回nullUI当前直接恢复原页面内容后续优化
mOrderStatusCallback.onGrabOrderFailed(null);
}
}
OCHTaxiModelLoopManager.getInstance().stopGrabResultLoop();
cancelNewBookingOrder();
}
} else {
if (mOrderStatusCallback != null) {
// TODO: 2021/9/22 如果用户已取消单抢单失败时暂返回nullUI当前直接恢复原页面内容后续优化
mOrderStatusCallback.onGrabOrderFailed(null);
@Override
public void onFail(int code, String msg) {
}
}
OCHTaxiModelLoopManager.getInstance().stopGrabResultLoop();
cancelNewBookingOrder();
}
@Override
public void onFail(int code, String msg) {
}
});
});
}
// 车机端上传心跳数据(只在出车状态时上传)
public void runCarHeartbeat() {
OCHTaxiServiceManagerNew.getInstance().runCarHeartbeat(mContext, mLongitude, mLatitude,
new OCHTaxiServiceCallback<BaseData>() {
@Override
public void onSuccess(BaseData data) {
@Override
public void onSuccess(BaseData data) {
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
}
});
}
});
}
// 查询司机服务数据
public void queryDriverServiceData() {
OCHTaxiServiceManagerNew.getInstance().queryDriverServiceData(mContext,
new OCHTaxiServiceCallback<DriverServiceDataRespBean>() {
@Override
public void onSuccess(DriverServiceDataRespBean data) {
if (data != null && data.code == 0
&& data.data != null && data.data.immediate != null) {
if (mCarStatusCallback != null) {
mCarStatusCallback.onServiceDataUpdate(
data.data.immediate.timeDuration, data.data.immediate.orderNum);
@Override
public void onSuccess(DriverServiceDataRespBean data) {
if (data != null && data.code == 0
&& data.data != null && data.data.immediate != null) {
if (mCarStatusCallback != null) {
mCarStatusCallback.onServiceDataUpdate(
data.data.immediate.timeDuration, data.data.immediate.orderNum);
}
}
}
}
}
@Override
public void onFail(int code, String msg) {
@Override
public void onFail(int code, String msg) {
}
});
}
});
}
// 取消当前新到预约单
@@ -724,7 +728,7 @@ public class MogoOCHTaxiModelNew {
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE
== Integer.parseInt(DebugConfig.getAutoPilotStatus())) {
// TODO: 2021/11/28 工控机存在刚开始状态为0但是可以开启变为2工控机解决前不显示此toast
// TODO: 2021/11/28 工控机存在刚开始状态为0但是可以开启变为2工控机解决前不显示此toast
// TipToast.shortTip("自动驾驶状态为不可用!");
}

View File

@@ -126,6 +126,12 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem
}
}
@Override
public void onResume() {
super.onResume();
MogoOCHTaxiModelNew.getInstance().startOrStopOrderLoop();
}
private void initNaviView(View view) {
mNaviIcon = view.findViewById(R.id.module_och_taxi_navi_iv);
mNaviIcon.setOnClickListener(this);