From a07432405475c739b5d0d3f72f7094d18564135a Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 21 Sep 2022 19:14:35 +0800 Subject: [PATCH] =?UTF-8?q?[2.11.0/1.6.0]=20bus=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/BusPassengerModelLoopManager.java | 12 +- .../com/mogo/och/bus/constant/BusConst.kt | 4 + .../com/mogo/och/bus/model/BusOrderModel.java | 150 +++++++++--------- .../mogo/och/bus/net/BusServiceManager.java | 8 +- .../com/mogo/och/bus/net/IBusApiService.java | 6 +- .../bus/presenter/BusModelLoopManager.java | 24 +++ 6 files changed, 114 insertions(+), 90 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java index c37b463947..c0d1db411d 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java @@ -36,7 +36,7 @@ public class BusPassengerModelLoopManager { return SingletonHolder.INSTANCE; } - private Disposable mHeartbeatDisposable; //心跳轮询 + private Disposable mQueryLineDisposable; //心跳轮询 private CompositeDisposable mRouteWipeDisposable; private CompositeDisposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 @@ -78,11 +78,11 @@ public class BusPassengerModelLoopManager { } public void startQueryDriverLineLoop() { - if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) { + if (mQueryLineDisposable != null && !mQueryLineDisposable.isDisposed()) { return; } CallerLogger.INSTANCE.i(M_BUS_P + TAG, "startQueryDriverLineLoop()"); - mHeartbeatDisposable = Observable.interval(LOOP_DELAY, + mQueryLineDisposable = Observable.interval(LOOP_DELAY, LOOP_LINE_2S, TimeUnit.MILLISECONDS) .map((aLong -> aLong + 1)) .subscribeOn(Schedulers.io()) @@ -91,10 +91,10 @@ public class BusPassengerModelLoopManager { } public void stopQueryDriverLineLoop() { - if (mHeartbeatDisposable != null) { + if (mQueryLineDisposable != null) { CallerLogger.INSTANCE.i(M_BUS_P + TAG, "stopQueryDriverLineLoop()"); - mHeartbeatDisposable.dispose(); - mHeartbeatDisposable = null; + mQueryLineDisposable.dispose(); + mQueryLineDisposable = null; } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt index bd1c823a13..867aa2df61 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt @@ -75,5 +75,9 @@ class BusConst { //围栏到站 暂定10米 const val ARRIVE_AT_END_STATION_DISTANCE = 10 + + // 轮询 + const val LOOP_PASSENGER_2S = 2 * 1000L + const val LOOP_PASSENGER_1S = 1 * 1000L } } \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index 31aa80465e..30203d9076 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -340,6 +340,7 @@ public class BusOrderModel { mBusOrdersDisposable.dispose(); } startOrStopOrderLoop(false); + startOrStopQueryPassengerWriteOff(false); MogoApisHandler.getInstance() .getApis() .getStatusManagerApi() @@ -507,9 +508,9 @@ public class BusOrderModel { public void abortTask() { CallerLogger.INSTANCE.d( M_BUS + TAG, "结束当前路线abortTask"); BusServiceManager.getInstance().abortTask(mContext, currentLineId - , new IBusServiceCallback() { + , new IBusServiceCallback() { @Override - public void onSuccess(BusRoutesResponse o) { + public void onSuccess(BaseData o) { CallerLogger.INSTANCE.d(M_BUS + TAG, "abortTask success: " + o); isGoingToNextStation = false; if (o.code == 0){ // 重置成功 @@ -525,37 +526,6 @@ public class BusOrderModel { } - /** - * 离站上报 - */ - public void leaveStation(boolean isRestart){ - CallerLogger.INSTANCE.d(M_BUS + TAG,"leaveStation-backgroundCurrentStationIndex = "+backgroundCurrentStationIndex); - BusServiceManager.getInstance().leaveStation(mContext, - stationList.get(backgroundCurrentStationIndex).getSeq(), - stationList.get(backgroundCurrentStationIndex).getSiteId(), - currentLineId, - new IBusServiceCallback() { - @Override - public void onSuccess(BusRoutesResponse o) { - if ( o.getResult() == null || o.getResult().getSites() == null || o.getResult().getSites().isEmpty() ) { - return; - } - isArrivedStation = false; - CallerLogger.INSTANCE.d( M_BUS + TAG, "自动驾驶开启开往下一站====" ); - //需要更改当前站和下一站的状态 然后渲染 - leaveStationSuccess(o.getResult(),isRestart); - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - }else{ - ToastUtils.showShort("离站上报失败:"+failMsg); - } - } - }); - } - /** * 离站上报成功后渲染站点 * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, @@ -569,9 +539,7 @@ public class BusOrderModel { paramIndexes = {0}, clientPkFileName = "sn" ) - private void leaveStationSuccess(BusRoutesResult result, boolean isRestart) { - - updateBusStatus(result); + private void leaveStationSuccess(boolean isRestart) { //开启自动驾驶 2.10.0: 如果自动驾驶状态下开启, 非自动驾驶状态下不开启,需手动点击自动驾驶按钮开启 if (isRestart || CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() @@ -630,6 +598,21 @@ public class BusOrderModel { } } + /** + * 到站查询核销乘客 + */ + public void queryPassengerWriteOff(){ + //todo 查询接口拿到核销乘客波播报 + } + + private void startOrStopQueryPassengerWriteOff(boolean isStart){ + if (isStart){ + BusModelLoopManager.getInstance().startQueryPassengerWriteOffLoop(); + }else { + BusModelLoopManager.getInstance().stopQueryPassengerWriteOffLoop(); + } + } + /** * 到站后重置站点状态 */ @@ -654,17 +637,46 @@ public class BusOrderModel { CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation success"); if (!isRestart){ arrivedBusStationSuccess(); + //todo 开始轮询到站核销的乘客 + startOrStopQueryPassengerWriteOff(true); } } @Override public void onFail(String failMsg) { -// if (!NetworkUtils.isConnected(mContext)) { -// ToastUtils.showShort("网络异常,请稍后重试"); -// }else { -// ToastUtils.showShort("离站上报失败:"+failMsg); -// } + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort("网络异常,请稍后重试"); + } + } + }); + } + /** + * 离站上报 + */ + public void leaveStation(boolean isRestart){ + CallerLogger.INSTANCE.d(M_BUS + TAG,"leaveStation-backgroundCurrentStationIndex = "+backgroundCurrentStationIndex); + BusServiceManager.getInstance().leaveStation(mContext, + stationList.get(backgroundCurrentStationIndex).getSeq(), + stationList.get(backgroundCurrentStationIndex).getSiteId(), + currentLineId, + new IBusServiceCallback() { + @Override + public void onSuccess(BaseData o) { + isArrivedStation = false; + CallerLogger.INSTANCE.d( M_BUS + TAG, "自动驾驶开启开往下一站====" ); + //需要更改当前站和下一站的状态 然后渲染 + leaveStationSuccess(isRestart); + queryBusRoutes(); + startOrStopQueryPassengerWriteOff(false); + } + @Override + public void onFail(String failMsg) { + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort("网络异常,请稍后重试"); + }else{ + ToastUtils.showShort("离站上报失败:"+failMsg); + } } }); } @@ -801,7 +813,7 @@ public class BusOrderModel { /** * 开启自动驾驶到下一站 */ - public void autoDriveToNextStation( boolean isRestart ) { + public void autoDriveToNextStation(boolean isRestart) { if ( backgroundCurrentStationIndex >= stationList.size() - 1 ) { // 当前站是最后一站,结束当前行程 travelOver(); @@ -880,25 +892,6 @@ public class BusOrderModel { } } - /** - * 根据订单状态、获取下一站靠站的的站点 - * - * @return -1 当前已是最后一个站点 - */ - private int getNextStopStation() { - if ( backgroundCurrentStationIndex >= stationList.size() - 1 ) { - return -1; - } - int nextStationIndex = backgroundCurrentStationIndex + 1; - for ( ; nextStationIndex < stationList.size() - 1; nextStationIndex++ ) { - if ( stationList.get( nextStationIndex ).getIfStop() == 1 ) { - break; - } - break; - } - return nextStationIndex; - } - /** * 延时查询站点信心 */ @@ -911,7 +904,7 @@ public class BusOrderModel { */ public void restartAutopilot() { CallerLogger.INSTANCE.d( M_BUS + TAG, "重启自动驾驶===" + isGoingToNextStation ); - autoDriveToNextStation( true ); + autoDriveToNextStation(true); } /** @@ -981,7 +974,7 @@ public class BusOrderModel { CallerLogger.INSTANCE.d( M_BUS + TAG, "单程结束====" ); CallerAutoPilotManager.INSTANCE.cancelAutoPilot(); AIAssist.getInstance( mContext ).speakTTSVoice( "感谢您体验'蘑菇车联'无人驾驶小巴车,请您携带好随身物品,我们下次再见" ); -// leaveStation(true,true); + endTask(); } @@ -991,14 +984,15 @@ public class BusOrderModel { private void endTask() { CallerLogger.INSTANCE.d( M_BUS + TAG, "任务正常走完endTask()"); BusServiceManager.getInstance().endTask(mContext, currentLineId - , new IBusServiceCallback() { + , new IBusServiceCallback() { @Override - public void onSuccess(BusRoutesResponse o) { + public void onSuccess(BaseData o) { CallerLogger.INSTANCE.d(M_BUS + TAG, "endTask success: " + o); - if (o.code == 0){ // 重新获取任务 + if (o.code == 0){ isGoingToNextStation = false; backgroundCurrentStationIndex = 0; - queryBusRoutes(); + queryBusRoutes();// 重新获取任务 + startOrStopQueryPassengerWriteOff(false); } } @@ -1035,16 +1029,18 @@ public class BusOrderModel { CallerLogger.INSTANCE.d( M_BUS + TAG, "到站====currentStationIndex=" + backgroundCurrentStationIndex); isGoingToNextStation = false; - queryStationLeaveAwayPassengers(); - UiThreadHandler.postDelayed(new Runnable() {// 先查询下车乘客,再上报到站,便于后台筛查下车订单 - @Override - public void run() { - if (!hadQueryLeaveAwayPassager){ - arriveSiteStation(false); - } - hadQueryLeaveAwayPassager = false; - } - },1500); + arriveSiteStation(false); + +// queryStationLeaveAwayPassengers();// 2.11.0不再播报乘客下车 +// UiThreadHandler.postDelayed(new Runnable() {// 先查询下车乘客,再上报到站,便于后台筛查下车订单 +// @Override +// public void run() { +// if (!hadQueryLeaveAwayPassager){ +// arriveSiteStation(false); +// } +// hadQueryLeaveAwayPassager = false; +// } +// },1500); } public boolean isGoingToNextStation() { diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java index 5fbd7f23b2..edcfe36f6f 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java @@ -83,12 +83,12 @@ public class BusServiceManager { } /** - * 结束当前任务 + * 中断当前任务 * @param context * @param taskId * @param callback */ - public void abortTask(Context context, int taskId, IBusServiceCallback callback){ + public void abortTask(Context context, int taskId, IBusServiceCallback callback){ mService.abortTask(MoGoAiCloudClientConfig.getInstance().getServiceAppId() ,MoGoAiCloudClientConfig.getInstance().getToken() ,new BusCloseTaskRequest(taskId)) @@ -102,7 +102,7 @@ public class BusServiceManager { * @param taskId * @param callback */ - public void endTask(Context context, int taskId, IBusServiceCallback callback){ + public void endTask(Context context, int taskId, IBusServiceCallback callback){ mService.endTask(MoGoAiCloudClientConfig.getInstance().getServiceAppId() ,MoGoAiCloudClientConfig.getInstance().getToken() ,new BusCloseTaskRequest(taskId)) @@ -117,7 +117,7 @@ public class BusServiceManager { * @param siteId * @param callback */ - public void leaveStation(Context context, int seq, int siteId,int taskId, IBusServiceCallback callback){ + public void leaveStation(Context context, int seq, int siteId,int taskId, IBusServiceCallback callback){ mService.leaveStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId() ,MoGoAiCloudClientConfig.getInstance().getToken() ,new BusUpdateSiteStatusRequest(taskId,siteId,seq)) diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java index 799fbd2088..a2fdb90796 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java @@ -62,7 +62,7 @@ public interface IBusApiService { // @POST("/autopilot-car-hailing/car/v2/driver/bus/driving/away") @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/leave") // @POST("/mock/268/autopilot-car-hailing/bus/api/driving/away") - Observable leaveStation(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusUpdateSiteStatusRequest request); + Observable leaveStation(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusUpdateSiteStatusRequest request); /** * 到站 更新到站信息 @@ -165,7 +165,7 @@ public interface IBusApiService { */ @Headers( {"Content-type:application/json;charset=UTF-8"} ) @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/abortTask") - Observable abortTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); + Observable abortTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); /** * 任务正常跑完结束 @@ -176,6 +176,6 @@ public interface IBusApiService { */ @Headers( {"Content-type:application/json;charset=UTF-8"} ) @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/endTask") - Observable endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); + Observable endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java index b431946ae0..676aab6775 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java @@ -1,6 +1,8 @@ package com.mogo.och.bus.presenter; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; +import static com.mogo.och.bus.constant.BusConst.LOOP_DELAY; +import static com.mogo.och.bus.constant.BusConst.LOOP_PASSENGER_2S; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.bus.constant.BusConst; @@ -31,6 +33,28 @@ public class BusModelLoopManager { } private Disposable mHeartbeatDisposable; //心跳轮询 + private Disposable mQueryPassengerDisposable; //查询核销乘客 + + public void startQueryPassengerWriteOffLoop() { + if (mQueryPassengerDisposable != null && !mQueryPassengerDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_BUS + TAG, "startQueryPassengerWriteOffLoop()"); + mQueryPassengerDisposable = Observable.interval(LOOP_DELAY, + LOOP_PASSENGER_2S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> BusOrderModel.getInstance().queryPassengerWriteOff()); + } + + public void stopQueryPassengerWriteOffLoop() { + if (mQueryPassengerDisposable != null) { + CallerLogger.INSTANCE.i(M_BUS + TAG, "stopQueryPassengerWriteOffLoop()"); + mQueryPassengerDisposable.dispose(); + mQueryPassengerDisposable = null; + } + } public void startHeartbeatLoop() { if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) {