diff --git a/OCH/mogo-och-bus-passenger/build.gradle b/OCH/mogo-och-bus-passenger/build.gradle index 156c99fb64..e2c91a3905 100644 --- a/OCH/mogo-och-bus-passenger/build.gradle +++ b/OCH/mogo-och-bus-passenger/build.gradle @@ -75,6 +75,7 @@ dependencies { implementation rootProject.ext.dependencies.amapnavi3dmap implementation project(":OCH:mogo-och-common-module") compileOnly project(":libraries:mogo-map") + compileOnly project(':libraries:mogo-adas') } diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassegerDriverStatusCallback.java b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassegerDriverStatusCallback.java new file mode 100644 index 0000000000..06885b74ab --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassegerDriverStatusCallback.java @@ -0,0 +1,10 @@ +package com.mogo.och.bus.passenger.callback; + +/** + * @author: wangmingjun + * @date: 2021/10/22 + */ +public interface IBusPassegerDriverStatusCallback { + void changeOperationStatus(boolean changeStatus); + void updatePlateNumber(String plateNumber); +} diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java new file mode 100644 index 0000000000..4dbf53010c --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java @@ -0,0 +1,20 @@ +package com.mogo.och.bus.passenger.callback; + +/** + * Created on 2022/3/31 + * + * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) + */ +public interface IBusPassengerADASStatusCallback { + // 自动驾驶触发的已到达目的地:暂未用到 + void onAutopilotArriveEnd(); + + // 自动驾驶可用状态 + void onAutopilotEnable(); + + // 自动驾驶不可用状态 + void onAutopilotDisable(); + + // 自动驾驶运行中 + void onAutopilotRunning(); +} diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java new file mode 100644 index 0000000000..786264650f --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java @@ -0,0 +1,16 @@ +package com.mogo.och.bus.passenger.callback; + +import com.amap.api.maps.model.LatLng; + +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * Created on 2022/3/31 + */ +public interface IBusPassengerAutopilotPlanningCallback { + void routeResult(List models,int haveArrivedIndex); + void routePlanningToNextStationChanged(long meters, long timeInSecond); + void updateTotalDistance(); +} diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerMapViewCallback.java b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerMapViewCallback.java new file mode 100644 index 0000000000..25f7d3bbec --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerMapViewCallback.java @@ -0,0 +1,9 @@ +package com.mogo.och.bus.passenger.callback; + +/** + * @author: wangmingjun + * @date: 2022/3/10 + */ +public interface IBusPassengerMapViewCallback { + void onCameraChange(float bearing); +} diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java new file mode 100644 index 0000000000..4c3905d2d9 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java @@ -0,0 +1,16 @@ +package com.mogo.och.bus.passenger.callback; + +import com.mogo.och.bus.passenger.bean.response.BusPassengerStation; + +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2022/4/6 + */ +public interface IBusPassengerRouteLineInfoCallback { + void updateLineInfo(String lineName, String lineDurTime); + void updateStationsInfo(List stations, int currentStationIndex, boolean isArrived); + void showNoTaskView(); + void hideNoTaskView(); +} diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt new file mode 100644 index 0000000000..ad61e2ae7d --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt @@ -0,0 +1,458 @@ +package com.mogo.och.bus.passenger.model + +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import android.os.Handler +import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager +import com.mogo.cloud.commons.utils.CoordinateUtils +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.debug.DebugConfig +import com.mogo.commons.module.intent.IMogoIntentListener +import com.mogo.commons.module.intent.IntentManager +import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager +import com.mogo.eagle.core.network.utils.GsonUtil +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.bean.response.BusPassengerOperationStatusResponse +import com.mogo.och.bus.passenger.bean.response.BusPassengerRoutesResponse +import com.mogo.och.bus.passenger.bean.response.BusPassengerRoutesResult +import com.mogo.och.bus.passenger.bean.response.BusPassengerStation +import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback +import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback +import com.mogo.och.bus.passenger.callback.IBusPassengerAutopilotPlanningCallback +import com.mogo.och.bus.passenger.callback.IBusPassengerRouteLineInfoCallback +import com.mogo.och.bus.passenger.constant.BusPassengerConst +import com.mogo.och.bus.passenger.net.BusPassengerModelLoopManager +import com.mogo.och.bus.passenger.net.BusPassengerServiceManager +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager.startLoopAbnormalFactors +import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager.stopLoopAbnormalFactors +import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil +import mogo.telematics.pad.MessagePad +import mogo_msg.MogoReportMsg +import system_master.SystemStatusInfo + +/** + * Created on 2022/3/31 + */ +@SuppressLint("StaticFieldLeak") +object BusPassengerModel { + + init { + AbsMogoApplication.getApp().also { this.mContext = it } + initListeners() + // TODO: 2022/3/31 + queryDriverOperationStatus() + startOrStopOrderLoop(true) + } + + private val TAG = "BusPassengerModel" + private const val MSG_QUERY_BUS_P_STATION = 1001 + + private val mRoutePoints: MutableList = ArrayList() + + private var mContext: Context? = null + private var mADASStatusCallback //Model->Presenter:自动驾驶状态相关 + : IBusPassengerADASStatusCallback? = null + private var mAutopilotPlanningCallback //Model->Presenter:自动驾驶线路规划 + : IBusPassengerAutopilotPlanningCallback? = null + private var mDriverStatusCallback //司机登录状态 + : IBusPassegerDriverStatusCallback? = null + private var mRouteLineInfoCallback // bus路线信息更新 + : IBusPassengerRouteLineInfoCallback? = null + private val mLocation: MogoLocation? = null + private var routesResult: BusPassengerRoutesResult? = null + var mStations: MutableList = ArrayList() + private var mNextStationIndex = 0 // 要到达站的index + private val mTwoStationsRouts: MutableList = ArrayList() + private var mPreRouteIndex = 0 + private var mWipePreIndex = 0 + private val handler = Handler(Handler.Callback { msg -> + if (msg.what == MSG_QUERY_BUS_P_STATION) { + queryDriverOperationStatus() + return@Callback true + } + false + }) + + fun setDriverStatusCallback(callback: IBusPassegerDriverStatusCallback?) { + mDriverStatusCallback = callback + } + + fun setRouteLineInfoCallback(callback: IBusPassengerRouteLineInfoCallback?) { + mRouteLineInfoCallback = callback + } + + private fun queryDriverOperationDelay() { + handler.sendEmptyMessageDelayed(MSG_QUERY_BUS_P_STATION, BusPassengerConst.QUERY_BUS_P_STATION_DELAY) + } + + /** + * 查询车辆登录状态、车牌、司机手机号、司机sn + */ + private fun queryDriverOperationStatus() { + BusPassengerServiceManager.queryDriverOperationStatus( + mContext!!, object : OchCommonServiceCallback { + override fun onSuccess(data: BusPassengerOperationStatusResponse?) { + if (data?.data == null) return + mDriverStatusCallback?.let { + it.changeOperationStatus(data.data.driverStatus == 1) + it.updatePlateNumber(data.data.plateNumber) + } + } + + override fun onError() { + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort(mContext!!.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(mContext!!.getString(R.string.request_error_tip)) + } + queryDriverOperationDelay() + } + + override fun onFail(code: Int, msg: String) { + //延迟3s再次查询 + queryDriverOperationDelay() + } + }) + } + + fun queryDriverSiteByCoordinate() { + BusPassengerServiceManager.queryDriverSiteByCoordinate( + mContext!!, object : OchCommonServiceCallback { + override fun onSuccess(data: BusPassengerRoutesResponse?) { + if (data == null || data.result == null || data.result.sites == null) { + routesResult = null + mNextStationIndex = 0 + startOrStopCalculateRouteInfo(false) + if (mRouteLineInfoCallback != null) { + mRouteLineInfoCallback!!.showNoTaskView() + } + return + } + if (routesResult != null && routesResult == data.result) { + return + } + routesResult = data.result + updatePassengerRouteInfo(data.result) + } + + override fun onError() {} + override fun onFail(code: Int, msg: String) { + if (code == 1003) { + routesResult = null + startOrStopCalculateRouteInfo(false) + queryDriverOperationDelay() + return + } + d(SceneConstant.M_BUS_P + TAG, "queryDriverSiteByCoordinate = %s", msg) + } + }) + } + + private fun updatePassengerRouteInfo(result: BusPassengerRoutesResult) { + if (mRouteLineInfoCallback != null) { + mRouteLineInfoCallback!!.updateLineInfo(result.name, result.runningDur) + mRouteLineInfoCallback!!.hideNoTaskView() + if (result.sites != null) { + val stations = result.sites + mStations.clear() + mStations.addAll(stations) + for (i in stations.indices) { + val station = stations[i] + if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && station.isLeaving && i + 1 < stations.size) { + mRouteLineInfoCallback!!.updateStationsInfo(stations, i + 1, false) + if (mNextStationIndex != i + 1) { + mTwoStationsRouts.clear() + startRemainRouteInfo() + } + mNextStationIndex = i + 1 + return + } else if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !station.isLeaving) { + if (i == 0) { + startOrStopRouteAndWipe(false) + } + mPreRouteIndex = 0 + startOrStopCalculateRouteInfo(false) + mRouteLineInfoCallback!!.updateStationsInfo(stations, i, true) + return + } + } + } + } + } + + fun release() { + releaseListeners() + startOrStopCalculateRouteInfo(false) + startOrStopOrderLoop(false) + } + + fun setMoGoAutopilotPlanningListener(moGoAutopilotPlanningCallback: IBusPassengerAutopilotPlanningCallback?) { + mAutopilotPlanningCallback = moGoAutopilotPlanningCallback + } + + fun setADASStatusCallback(callback: IBusPassengerADASStatusCallback?) { + mADASStatusCallback = callback + } + + private fun initListeners() { + + // 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口 + CallerAutoPilotStatusListenerManager.addListener(TAG, mGoAutopilotStatusListener) + IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + + //2021.11.1 自动驾驶路线规划接口 + CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener) + startLoopAbnormalFactors(mContext!!) + } + + private fun releaseListeners() { + MogoAiCloudSocketManager.getInstance(mContext) + .unregisterLifecycleListener(10010) + CallerAutoPilotStatusListenerManager.removeListener(mGoAutopilotStatusListener) + CallerPlanningRottingListenerManager.removeListener(moGoAutopilotPlanningListener) + stopLoopAbnormalFactors() + } + + //监听网络变化,避免启动机器时无网导致无法更新订单信息 + private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent -> + d(SceneConstant.M_BUS_P + TAG, "onIntentReceived = %s", intentStr) + if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) { + if (NetworkUtils.isConnected(mContext)) { + queryDriverOperationStatus() + } + } + } + + @Volatile + private var mPreAutoStatus = -1 + private val mGoAutopilotStatusListener: IMoGoAutopilotStatusListener = object : IMoGoAutopilotStatusListener { + override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) {} + override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) {} + private var arriveAtEnd = false //乘客app专用字段 + override fun onAutopilotStatusResponse(autopilotStatusInfo: AutopilotStatusInfo) { + if (autopilotStatusInfo == null) return + val state = autopilotStatusInfo.state + if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + //2022.7.20 自动驾驶更换成带档位的 +// if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + if (state != mPreAutoStatus) { + mTwoStationsRouts.clear() + } + // if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { + if (state != mPreAutoStatus) { + mTwoStationsRouts.clear() + } + // if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); + } else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) { + if (state != mPreAutoStatus) { + mTwoStationsRouts.clear() + } + } + mPreAutoStatus = state + } + + override fun onAutopilotSNRequest() {} + override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) { + if (FunctionBuildConfig.isDemoMode + && isPassenger(FunctionBuildConfig.appIdentityMode) + ) { + arriveAtEnd = true + } + + // TODO: 2022/3/31 + if (DebugConfig.isDebug()) { + // ToastUtils.showShort("到达目的地"); + } + if (mADASStatusCallback != null) { + mADASStatusCallback!!.onAutopilotArriveEnd() + } + } + + override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {} + } + private val moGoAutopilotPlanningListener: IMoGoPlanningRottingListener = object : IMoGoPlanningRottingListener { + override fun onAutopilotRotting(routeList: MessagePad.GlobalPathResp?) { + d( + SceneConstant.M_BUS_P + TAG, "onAutopilotRotting = " + + GsonUtil.jsonFromObject(routeList) + ) + val routePoints = routeList!!.wayPointsList + if (null != routePoints && routePoints.size > 0) { + updateRoutePoints(routePoints) + startToRouteAndWipe() + } + } + } + + fun updateRoutePoints(routePoints: List?) { + mRoutePoints.clear() + val latLngModels = CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjLocations(mContext, routePoints) + mRoutePoints.addAll(latLngModels) + calculateTwoStationsRoute() + } + + private fun calculateTwoStationsRoute() { + //找出前往站对应的轨迹点,拿出两站点的集合 + d(SceneConstant.M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size) + if (mRoutePoints.size > 0) { + if (mStations.size > 1) { //两个站点及以上要计算两个站点间的轨迹路线 + if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex - 1 >= 0) { + mTwoStationsRouts.clear() + val stationNext = mStations[mNextStationIndex] + val stationCur = mStations[mNextStationIndex - 1] + //当前站在轨迹中对应的点 + val currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( + 0, mRoutePoints, stationCur.gcjLon, stationCur.gcjLat + ) + //要前往的站在轨迹中对应的点 + val nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( + currentRouteIndex, mRoutePoints, stationNext.gcjLon, stationNext.gcjLat + ) + d( + SceneConstant.M_BUS_P + TAG, "轨迹排查==currentRouteIndex = " + currentRouteIndex + + ", nextRouteIndex = " + nextRouteIndex + ) + if (currentRouteIndex < nextRouteIndex) { //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 + mTwoStationsRouts.addAll(mRoutePoints.subList(currentRouteIndex, nextRouteIndex + 1)) + } + } + } + // else { //只有两个站点的时候整个路线就是两个站点之间的轨迹 +// mTwoStationsRouts.clear(); +// mTwoStationsRouts.addAll(mRoutePoints); +// } + if (mTwoStationsRouts.size > 0) { + val sumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(mTwoStationsRouts) + SharedPrefsMgr.getInstance(mContext!!).putInt(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS, sumLength.toInt()) + if (mAutopilotPlanningCallback != null) { + mAutopilotPlanningCallback!!.updateTotalDistance() + } + } + } + } + + fun dynamicCalculateRouteInfo() { + //计算当前位置和下一站的剩余点集合 + //计算剩余点总里程和时间 + if (mTwoStationsRouts.size == 0) { + calculateTwoStationsRoute() + } + if (mTwoStationsRouts.size > 0 && mLocation != null) { + val lastPointsMap = CoordinateCalculateRouteUtil + .getRemainPointListByCompareNew(mPreRouteIndex, mTwoStationsRouts, mLocation) + for (index in lastPointsMap.keys) { + mPreRouteIndex = index + break + } + for (lastPoints in lastPointsMap.values) { + d(SceneConstant.M_BUS_P + TAG, "轨迹排查==lastPoints.size() = " + lastPoints.size) + var lastSumLength = 0f + lastSumLength = if (lastPoints.size == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 + if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex >= 0) { + val stationNext = mStations[mNextStationIndex] + CoordinateUtils.calculateLineDistance( + stationNext.gcjLon, stationNext.gcjLat, + mLocation.longitude, mLocation.latitude + ) + } else { + CoordinateUtils.calculateLineDistance( + lastPoints[0].longitude, lastPoints[0].latitude, + mLocation.longitude, mLocation.latitude + ) + } + } else { + CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints) + } + val lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 //秒 + d(SceneConstant.M_BUS_P + TAG, "轨迹排查==lastSumLength = $lastSumLength") + if (mAutopilotPlanningCallback != null) { + mAutopilotPlanningCallback!!.routePlanningToNextStationChanged(lastSumLength.toLong(), lastTime.toLong()) + } + } + } + } + + fun startRemainRouteInfo() { + //开启实时计算剩余距离,剩余时间,预计时间 + startOrStopCalculateRouteInfo(true) + } + + fun startToRouteAndWipe() { + startOrStopRouteAndWipe(true) + } + + /** + * 实时轨迹擦除 + * @param isStart + */ + fun startOrStopRouteAndWipe(isStart: Boolean) { + if (isStart) { + BusPassengerModelLoopManager.getInstance().startOrStopRouteAndWipe() + } else { + mWipePreIndex = 0 + BusPassengerModelLoopManager.getInstance().stopOrStopRouteAndWipe() + } + } + + fun loopRouteAndWipe() { + if (mRoutePoints.size > 0 && mLocation != null) { + val haveArrivedIndex = CoordinateCalculateRouteUtil + .getArrivedPointIndexNew( + mWipePreIndex, + mRoutePoints, + mLocation + ) + mWipePreIndex = haveArrivedIndex + d(SceneConstant.M_BUS_P + TAG, "thread = " + Thread.currentThread().name + " haveArrivedIndex== " + haveArrivedIndex) + if (mAutopilotPlanningCallback != null) { + val routePoints = CoordinateCalculateRouteUtil + .coordinateConverterLocationToLatLng(mContext, mRoutePoints) + mAutopilotPlanningCallback!!.routeResult(routePoints, haveArrivedIndex) + } + } + } + + /** + * 开始轮询计算剩余里程和时间 + * @param isStart + */ + fun startOrStopCalculateRouteInfo(isStart: Boolean) { + d(SceneConstant.M_BUS_P + TAG, "startOrStopCalculateRouteInfo() $isStart") + if (isStart) { + BusPassengerModelLoopManager.getInstance().startCalculateRouteInfoLoop() + } else { + mTwoStationsRouts.clear() + BusPassengerModelLoopManager.getInstance().stopCalculateRouteInfLoop() + } + } + + /** + * + * @param start + */ + private fun startOrStopOrderLoop(start: Boolean) { + d(SceneConstant.M_BUS_P + TAG, "startOrStopOrderLoop() $start") + if (start) { + BusPassengerModelLoopManager.getInstance().startQueryDriverLineLoop() + } else { + BusPassengerModelLoopManager.getInstance().stopQueryDriverLineLoop() + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.java b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.java index f6b56f8951..cdf2967ff9 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.java +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.java @@ -1,6 +1,7 @@ package com.mogo.och.bus.passenger.net; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.bus.passenger.model.BusPassengerModel; import java.util.concurrent.TimeUnit; @@ -81,12 +82,12 @@ public class BusPassengerModelLoopManager { return; } CallerLogger.INSTANCE.i(M_BUS_P + TAG, "startQueryDriverLineLoop()"); -// mQueryLineDisposable = Observable.interval(LOOP_DELAY, -// LOOP_LINE_2S, TimeUnit.MILLISECONDS) -// .map((aLong -> aLong + 1)) -// .subscribeOn(Schedulers.io()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(aLong -> BusPassengerModel.getInstance().queryDriverSiteByCoordinate()); + mQueryLineDisposable = Observable.interval(LOOP_DELAY, + LOOP_LINE_2S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> BusPassengerModel.INSTANCE.queryDriverSiteByCoordinate()); } public void stopQueryDriverLineLoop() { @@ -140,7 +141,7 @@ public class BusPassengerModelLoopManager { @Override public void subscribe(ObservableEmitter emitter) throws Exception { if (emitter.isDisposed()) return; - //BusPassengerModel.getInstance().loopRouteAndWipe(); + BusPassengerModel.INSTANCE.loopRouteAndWipe(); emitter.onComplete(); } }); @@ -151,7 +152,7 @@ public class BusPassengerModelLoopManager { @Override public void subscribe(ObservableEmitter emitter) throws Exception { if (emitter.isDisposed()) return; - //BusPassengerModel.getInstance().dynamicCalculateRouteInfo(); + BusPassengerModel.INSTANCE.dynamicCalculateRouteInfo(); emitter.onComplete(); } }); diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt index e5efb5ab6d..ccca599d8f 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt @@ -4,9 +4,11 @@ import android.content.Context import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.getServerToken import com.mogo.och.bus.passenger.bean.response.BusPassengerRoutesResponse import com.mogo.cloud.passport.MoGoAiCloudClientConfig -import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.och.bus.passenger.bean.request.BusPassengerQueryLineRequest +import com.mogo.och.bus.passenger.bean.response.BusPassengerOperationStatusResponse +import com.mogo.och.common.module.biz.constant.OchCommonConst.Companion.getBaseUrl import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl import com.mogo.och.common.module.biz.network.interceptor.transformTry @@ -16,8 +18,6 @@ import com.mogo.och.common.module.biz.network.interceptor.transformTry */ object BusPassengerServiceManager { - private var mShuttleBusPassengerServiceApi = - MoGoRetrofitFactory.getInstance(getBaseUrl()).create(ShettlePassengerServiceApi::class.java) private var mBusPassengerServiceApi = MoGoRetrofitFactory.getInstance(getBaseUrl()).create(PassengerServiceApi::class.java) @@ -37,25 +37,16 @@ object BusPassengerServiceManager { fun queryDriverSiteByCoordinate( context: Context, callback: OchCommonServiceCallback? ) { - if (AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) { - mShuttleBusPassengerServiceApi.queryDriverSiteByCoordinate( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - BusPassengerQueryLineRequest( - driverAppSn - ) - ).transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverSiteByCoordinate")) - } else { - mBusPassengerServiceApi.queryDriverSiteByCoordinate( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - BusPassengerQueryLineRequest( - driverAppSn - ) - ).transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverSiteByCoordinate")) - } + + mBusPassengerServiceApi.queryDriverSiteByCoordinate( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusPassengerQueryLineRequest( + driverAppSn + ) + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverSiteByCoordinate")) + } /** @@ -68,22 +59,13 @@ object BusPassengerServiceManager { context: Context, callback: OchCommonServiceCallback? ) { - if (AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) { - mShuttleBusPassengerServiceApi.queryDriverOperationStatus( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - driverAppSn - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverOperationStatus")) - } else { - mBusPassengerServiceApi.queryDriverOperationStatus( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - driverAppSn - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverOperationStatus")) - } + mBusPassengerServiceApi.queryDriverOperationStatus( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + driverAppSn + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverOperationStatus")) + } } \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_fragment.xml b/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_fragment.xml index 00a7df812b..64200dc4ea 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_fragment.xml @@ -17,7 +17,7 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="@+id/mapBizView" + app:layout_constraintStart_toEndOf="@+id/mapBizView" android:layout_width="0dp" android:layout_height="match_parent"/> diff --git a/app/productFlavors/fOchBusPassenger.gradle b/app/productFlavors/fOchBusPassenger.gradle index 9ec1b1c7a7..57f8521764 100644 --- a/app/productFlavors/fOchBusPassenger.gradle +++ b/app/productFlavors/fOchBusPassenger.gradle @@ -18,7 +18,12 @@ project.android.productFlavors { // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0 buildConfigField 'int', 'CAR_MACHINE_TYPE', '2' //高德地图鉴权信息 - manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchBusPassenger",ACTIVITY_ROOT:true] + manifestPlaceholders = [ + AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, + CHANNEL_VALUE: "fOchBusPassenger", + ACTIVITY_ROOT:true, + SCREEN_ORIENTATION: "landscape" + ] // 是否需要实时上报坐标 buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'