[2.11.0/1.6.0] bus司机端接口调整

This commit is contained in:
wangmingjun
2022-09-21 19:14:35 +08:00
parent 99763d236d
commit a074324054
6 changed files with 114 additions and 90 deletions

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -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<BusRoutesResponse>() {
, new IBusServiceCallback<BaseData>() {
@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<BusRoutesResponse>() {
@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<BaseData>() {
@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<BusRoutesResponse>() {
, new IBusServiceCallback<BaseData>() {
@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() {

View File

@@ -83,12 +83,12 @@ public class BusServiceManager {
}
/**
* 结束当前任务
* 中断当前任务
* @param context
* @param taskId
* @param callback
*/
public void abortTask(Context context, int taskId, IBusServiceCallback<BusRoutesResponse> callback){
public void abortTask(Context context, int taskId, IBusServiceCallback<BaseData> 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<BusRoutesResponse> callback){
public void endTask(Context context, int taskId, IBusServiceCallback<BaseData> 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<BusRoutesResponse> callback){
public void leaveStation(Context context, int seq, int siteId,int taskId, IBusServiceCallback<BaseData> callback){
mService.leaveStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId()
,MoGoAiCloudClientConfig.getInstance().getToken()
,new BusUpdateSiteStatusRequest(taskId,siteId,seq))

View File

@@ -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<BusRoutesResponse> leaveStation(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusUpdateSiteStatusRequest request);
Observable<BaseData> 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<BusRoutesResponse> abortTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data);
Observable<BaseData> 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<BusRoutesResponse> endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data);
Observable<BaseData> endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data);
}

View File

@@ -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()) {