diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/CarHeartbeatReqBean.java b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/CarHeartbeatReqBean.java deleted file mode 100644 index 31f3d8910e..0000000000 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/CarHeartbeatReqBean.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mogo.och.taxi.bean; - -import com.mogo.och.taxi.constant.TaxiUnmannedConst; - -import java.util.UUID; - -/** - * Created on 2021/9/16 - * - * 上传车机心跳信息请求数据 - */ -public class CarHeartbeatReqBean { - public String sn; - public double lon; //经度 - public double lat; //纬度 - public String msgId; //心跳信息唯一标识 - public int interval; //上报间隔,单位秒,非必传,默认60秒 - - public CarHeartbeatReqBean(String sn, double lon, double lat) { - this.sn = sn; - this.lon = lon; - this.lat = lat; - this.msgId = UUID.randomUUID().toString(); - this.interval = (int) (TaxiUnmannedConst.LOOP_PERIOD_60S / 1000); - } -} diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/DriverServiceDataRespBean.java b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/DriverServiceDataRespBean.java deleted file mode 100644 index 15d47effd0..0000000000 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/DriverServiceDataRespBean.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogo.och.taxi.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * Created on 2021/9/17 - * - * 司机运营数据返回数据结构 - */ -public class DriverServiceDataRespBean extends BaseData { - public Result data; - - public static class Result { - public long timeDuration; //当日在线时长,单位秒 - public long orderNum; //当日完成订单数 - } -} diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt index 23fcdeb90d..ac322c4697 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/bean/UnmannedTaskBean.kt @@ -11,7 +11,10 @@ data class OrderDetail(var orderNo: String, var orderStatus: Int, var orderStartSite: Site?, var orderEndSite: Site?, - var planningLines: Array) { + var planningLines: Array, + var phone: String, + var passengerNum: Int + ) { override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -54,8 +57,13 @@ data class Site(var siteId: Int,var siteName: String,var gcjLat: Double, var gcj data class QueryCurrentTaskRespBean(var data: Result?) :BaseData(){ - data class Result(var sn: String,var lineId: Int,var serviceStatus: Int,var currentStatus: Int, - var taskType: Int,var endSite: Site,var order: OrderDetail){ + data class Result(var sn: String, var lineId: Int, var servingStatus: Int, + var currentStatus: Int, var taskType: Int, + var startSite: Site, var endSite: Site, + var order: OrderDetail?){ + // servingStatus = 0 //暂停接单 = 1 //开始接单 + //taskType = 1 //虚拟任务 = 2 //接驾任务 = 3 //送驾任务 + //currentStatus 0:空闲 1:获取任务 2:开始任务 3:到达目的地 override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -63,9 +71,10 @@ data class QueryCurrentTaskRespBean(var data: Result?) other as Result if (lineId != other.lineId) return false - if (serviceStatus != other.serviceStatus) return false + if (servingStatus != other.servingStatus) return false if (currentStatus != other.currentStatus) return false if (taskType != other.taskType) return false + if (startSite != other.startSite) return false if (endSite != other.endSite) return false if (order != other.order) return false @@ -82,4 +91,16 @@ data class PrepareTaskRespBean(var lineId: Int,var cityCode: Int,var taskType: I var startSite: Site, var endSite: Site) //taskType 1:虚拟任务 2:接驾任务3:送驾任务 :BaseData() +data class JumpPassengerCheckReqBean(var sn: String,var orderNo: String) +data class CancelOrderReqBean(var sn: String,var orderNo: String) +data class OrderCompletedReqBean(var sn: String,var orderNo: String) +data class ContrailListReqBean(var sn: MutableList) + +data class ContrailListRespBean(var data: MutableList) //轨迹路线集合 + :BaseData(){ + data class Result(var lineId: Int, var csvFileUrl: String, var csvFileMd5: String, + var txtFileUrl: String, var txtFileMd5: String, var contrailSaveTime: Long, + var csvFileUrlDPQP: String, var csvFileMd5DPQP: String, var txtFileUrlDPQP: String, + var txtFileMd5DPQP: String, var contrailSaveTimeDPQP: Long) +} diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/constant/TaskStatusEnum.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/constant/TaskStatusEnum.kt new file mode 100644 index 0000000000..68194bc3ea --- /dev/null +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/constant/TaskStatusEnum.kt @@ -0,0 +1,23 @@ +package com.mogo.och.taxi.constant +/** + * Created on 2023/8/7 + * 0:空闲 1:获取任务 2:开始任务 3:到达目的地 + */ +enum class TaskStatusEnum(val code: Int) { + None(0), + GetTask( 1), + StartTask( 2), + CompleteTask( 3); + + companion object { + @JvmStatic + fun valueOf(code: Int): TaskStatusEnum? { + for (value in values()) { + if (value.code == code) { + return value + } + } + return None + } + } +} \ No newline at end of file diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/constant/TaskTypeEnum.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/constant/TaskTypeEnum.kt new file mode 100644 index 0000000000..2261f90c2c --- /dev/null +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/constant/TaskTypeEnum.kt @@ -0,0 +1,23 @@ +package com.mogo.och.taxi.constant +/** + * Created on 2023/8/7 + * taskType = 1 虚拟任务, = 2 接驾任务(演练), = 3 //送驾任务(运营) + */ +enum class TaskTypeEnum(val code: Int) { + None(0), + VirtualTask( 1), + ExerciseTask( 2), + OrderTask( 3); + + companion object { + @JvmStatic + fun valueOf(code: Int): TaskTypeEnum? { + for (value in values()) { + if (value.code == code) { + return value + } + } + return None + } + } +} \ No newline at end of file diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiModel.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiModel.kt index 907fc24635..ab8cc8e443 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiModel.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiModel.kt @@ -350,7 +350,6 @@ object TaxiModel { loginService!!.queryLoginStatusByNet() //虚拟任务要开启到站围栏 updateVirtualTask(data.data) - // TODO: 可以轮询当前任务去获取到这个任务站点, 显示界面 } override fun onFail(code: Int, msg: String?) { @@ -380,7 +379,7 @@ object TaxiModel { // 获取当前订单状态 fun getCurOrderStatus(): TaxiOrderStatusEnum? { if (mCurrentTaskAndOrder == null) TaxiOrderStatusEnum.None - val order: OrderDetail = mCurrentTaskAndOrder!!.order + val order: OrderDetail = mCurrentTaskAndOrder!!.order!! return valueOf(order.orderStatus) } @@ -398,7 +397,7 @@ object TaxiModel { val currentOrder = mCurrentTaskAndOrder!!.order - if (currentOrder.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code) { + if (currentOrder!!.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code) { if (FunctionBuildConfig.isDemoMode) { // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true @@ -408,7 +407,7 @@ object TaxiModel { } updateAutopilotControlParameters() } - if (currentOrder.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code) { + if (currentOrder!!.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code) { if (FunctionBuildConfig.isDemoMode) { d(SceneConstant.M_TAXI + TAG, "setIPCDemoMode:false") setIPCDemoMode(false) diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt index 48734a3619..def5ac7d22 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt @@ -1,9 +1,15 @@ package com.mogo.och.taxi.model +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.data.BaseData +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.taxi.base.BaseViewModel import com.mogo.och.taxi.base.IUiIntent +import com.mogo.och.taxi.bean.PrepareTaskRespBean import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean +import com.mogo.och.taxi.network.CarServiceManager import com.mogo.och.taxi.ui.unmanned.OrderUiState +import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState import com.mogo.och.taxi.ui.unmanned.TaskUiState import com.mogo.och.taxi.ui.unmanned.UnmannedIntent import com.mogo.och.taxi.ui.unmanned.UnmannedState @@ -17,66 +23,34 @@ object TaxiUnmannedViewModel : BaseViewModel(){ private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null override fun initUiState(): UnmannedState { - return UnmannedState(TaskUiState.INIT, OrderUiState.INIT) + return UnmannedState(TaskAndOrderUiState.INIT) } override fun handleIntent(intent: IUiIntent) { when(intent) { -// UnmannedIntent.GetCurrentTask -> { -// TaxiServiceManager.changeOrderServing("",true, -// object : OchCommonServiceCallback { -// override fun onSuccess(data: BaseData?) { -// sendUiState { -// copy( -// taskUiState = TaskUiState.SUCCESS(data) -// ) -// } -// } -// -// override fun onFail(code: Int, msg: String?) { -// TODO("Not yet implemented") -// } -// -// }) -// } + is UnmannedIntent.GetNextTask -> { - + getNextTask() } - is UnmannedIntent.GetReceivingOrderState -> { - + is UnmannedIntent.StartTask -> { // + startTask() } - is UnmannedIntent.GetVirtualStation -> { - + is UnmannedIntent.ArrivedOrderStartStation -> {//围栏触发 + arrivedSite() } - is UnmannedIntent.GetOrder -> { - + is UnmannedIntent.JumpPassengerCheckDone -> { //手动点击跳过乘客验证 + jumpPassengerCheckDone() } - is UnmannedIntent.StartTask -> { - - + is UnmannedIntent.ArrivedOrderEndStation -> {// 自动驾驶触发 + arrivedSite() } - is UnmannedIntent.ArrivedOrderStartStation -> { - - - } - - is UnmannedIntent.JumpPassengerCheckDone -> { - - - } - - is UnmannedIntent.ArrivedOrderEndStation -> { - - } - - is UnmannedIntent.JourneyCompleted -> { - - + is UnmannedIntent.JourneyCompleted -> { //点击服务完成 + journeyCompleted() } is UnmannedIntent.CloseOrderByDriver -> { @@ -85,7 +59,95 @@ object TaxiUnmannedViewModel : BaseViewModel(){ } } + private fun getNextTask() { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){ + CarServiceManager.prepareTask(AbsMogoApplication.getApp().applicationContext, + mCurrentTaskAndOrder!!.endSite.siteId, object : OchCommonServiceCallback{ + override fun onSuccess(data: PrepareTaskRespBean?) { + TODO("Not yet implemented") + } + + override fun onFail(code: Int, msg: String?) { + TODO("Not yet implemented") + } + + }) + } + } + + private fun arrivedSite() { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){ + CarServiceManager.arriveSite(AbsMogoApplication.getApp().applicationContext, + mCurrentTaskAndOrder!!.endSite.siteId, + object : OchCommonServiceCallback{ + override fun onSuccess(data: BaseData?) { + TODO("Not yet implemented") + } + + override fun onFail(code: Int, msg: String?) { + TODO("Not yet implemented") + } + + }) + } + } + + private fun startTask() { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){ + CarServiceManager.startTask(AbsMogoApplication.getApp().applicationContext, + mCurrentTaskAndOrder!!.lineId, object : OchCommonServiceCallback{ + override fun onSuccess(data: BaseData?) { + TODO("Not yet implemented") + } + + override fun onFail(code: Int, msg: String?) { + TODO("Not yet implemented") + } + + }) + } + } + + private fun journeyCompleted() { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){ + CarServiceManager.orderCompleted(AbsMogoApplication.getApp().applicationContext, + mCurrentTaskAndOrder!!.order!!.orderNo,object : OchCommonServiceCallback{ + override fun onSuccess(data: BaseData?) { + TODO("Not yet implemented") + } + + override fun onFail(code: Int, msg: String?) { + TODO("Not yet implemented") + } + }) + } + } + + private fun jumpPassengerCheckDone() { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){ + CarServiceManager.jumpPassengerCheck(AbsMogoApplication.getApp().applicationContext, + mCurrentTaskAndOrder!!.order!!.orderNo,object : OchCommonServiceCallback{ + override fun onSuccess(data: BaseData?) { + TODO("Not yet implemented") + } + + override fun onFail(code: Int, msg: String?) { + TODO("Not yet implemented") + } + }) + } + } + fun updateCurrentTaskAndOrder(currentTaskAndOrder: QueryCurrentTaskRespBean.Result?){ mCurrentTaskAndOrder = currentTaskAndOrder + updateTaskAndOrderUi() + } + + private fun updateTaskAndOrderUi() { + sendUiState { + copy( + taskAndOrderUiState = TaskAndOrderUiState.SUCCESS(mCurrentTaskAndOrder) + ) + } } } \ No newline at end of file diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/CarServiceManager.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/CarServiceManager.kt index e2e5eb51c5..4720e5f310 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/CarServiceManager.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/CarServiceManager.kt @@ -15,7 +15,6 @@ import com.mogo.och.taxi.bean.* */ object CarServiceManager { - private var mOCHTaxiServiceApi: UnmannedTaskServiceApi = MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create( UnmannedTaskServiceApi::class.java @@ -29,9 +28,8 @@ object CarServiceManager { context: Context,gcjLat: Double,gcjLon: Double, callback: OchCommonServiceCallback? ){ - mOCHTaxiServiceApi.startService(MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - StartServiceReqBean(MoGoAiCloudClientConfig.getInstance().sn,gcjLat, gcjLon) + mOCHTaxiServiceApi.startService( + data = StartServiceReqBean(MoGoAiCloudClientConfig.getInstance().sn,gcjLat, gcjLon) ).transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "startService")) } @@ -41,9 +39,8 @@ object CarServiceManager { */ @JvmStatic fun endService(context: Context,callback: OchCommonServiceCallback?){ - mOCHTaxiServiceApi.endService(MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - MoGoAiCloudClientConfig.getInstance().sn) + mOCHTaxiServiceApi.endService( + sn = MoGoAiCloudClientConfig.getInstance().sn) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "endService")) } @@ -53,9 +50,8 @@ object CarServiceManager { */ @JvmStatic fun queryCurrentTask(context: Context,callback: OchCommonServiceCallback?){ - mOCHTaxiServiceApi.queryCurrentTask(MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - MoGoAiCloudClientConfig.getInstance().sn) + mOCHTaxiServiceApi.queryCurrentTask( + sn = MoGoAiCloudClientConfig.getInstance().sn) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "queryCurrentTask")) } @@ -68,9 +64,8 @@ object CarServiceManager { context: Context,lineId: Int, callback: OchCommonServiceCallback? ){ - mOCHTaxiServiceApi.startTask(MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - StartTaskReqBean(MoGoAiCloudClientConfig.getInstance().sn,lineId) + mOCHTaxiServiceApi.startTask( + data = StartTaskReqBean(MoGoAiCloudClientConfig.getInstance().sn,lineId) ).transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "startTask")) } @@ -83,9 +78,8 @@ object CarServiceManager { context: Context,siteId: Int, callback: OchCommonServiceCallback? ){ - mOCHTaxiServiceApi.arriveSite(MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - ArriveSiteReqBean(MoGoAiCloudClientConfig.getInstance().sn,siteId) + mOCHTaxiServiceApi.arriveSite( + data = ArriveSiteReqBean(MoGoAiCloudClientConfig.getInstance().sn,siteId) ).transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "arriveSite")) } @@ -98,10 +92,65 @@ object CarServiceManager { context: Context,siteId: Int, callback: OchCommonServiceCallback? ){ - mOCHTaxiServiceApi.prepareTask(MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - PrepareTaskReqBean(MoGoAiCloudClientConfig.getInstance().sn,siteId) + mOCHTaxiServiceApi.prepareTask( + data = PrepareTaskReqBean(MoGoAiCloudClientConfig.getInstance().sn,siteId) ).transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "prepareTask")) } + + /** + * 司机端手动跳过乘客验证 + */ + @JvmStatic + fun jumpPassengerCheck( + context: Context,orderNo: String, + callback: OchCommonServiceCallback? + ){ + mOCHTaxiServiceApi.jumpPassengerCheck( + data = JumpPassengerCheckReqBean(MoGoAiCloudClientConfig.getInstance().sn,orderNo) + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "jumpPassengerCheck")) + } + + /** + * 服务完成 + */ + @JvmStatic + fun orderCompleted( + context: Context,orderNo: String, + callback: OchCommonServiceCallback? + ){ + mOCHTaxiServiceApi.orderCompleted( + data = OrderCompletedReqBean(MoGoAiCloudClientConfig.getInstance().sn,orderNo) + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "orderCompleted")) + } + + /** + * 取消订单 + */ + @JvmStatic + fun cancelOrder( + context: Context,orderNo: String, + callback: OchCommonServiceCallback? + ){ + mOCHTaxiServiceApi.cancelOrder( + data = CancelOrderReqBean(MoGoAiCloudClientConfig.getInstance().sn,orderNo) + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "cancelOrder")) + } + + /** + * 取消订单 + */ + @JvmStatic + fun contrailList( + context: Context,linIds: MutableList, + callback: OchCommonServiceCallback? + ){ + mOCHTaxiServiceApi.contrailList( + data = ContrailListReqBean(linIds) + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "contrailList")) + } } \ No newline at end of file diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/UnmannedTaskServiceApi.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/UnmannedTaskServiceApi.kt index 49262b8c79..e80a72d0c9 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/UnmannedTaskServiceApi.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/network/UnmannedTaskServiceApi.kt @@ -1,7 +1,13 @@ package com.mogo.och.taxi.network +import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.BaseData import com.mogo.och.taxi.bean.ArriveSiteReqBean +import com.mogo.och.taxi.bean.CancelOrderReqBean +import com.mogo.och.taxi.bean.ContrailListReqBean +import com.mogo.och.taxi.bean.ContrailListRespBean +import com.mogo.och.taxi.bean.JumpPassengerCheckReqBean +import com.mogo.och.taxi.bean.OrderCompletedReqBean import com.mogo.och.taxi.bean.PrepareTaskReqBean import com.mogo.och.taxi.bean.PrepareTaskRespBean import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean @@ -30,8 +36,8 @@ interface UnmannedTaskServiceApi { @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-taxi-cabin/api/flow/v1/startService") fun startService( - @Header("appId") appId: String?, - @Header("ticket") ticket: String?, + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, @Body data: StartServiceReqBean? ): Observable @@ -41,7 +47,9 @@ interface UnmannedTaskServiceApi { @Headers("Content-type:application/json;charset=UTF-8") @GET("/och-taxi-cabin/api/flow/v1/endService") fun endService( - @Header("appId") appId: String?, @Header("ticket") ticket: String?, @Query("sn") sn: String? + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, + @Query("sn") sn: String? ): Observable /** @@ -49,7 +57,9 @@ interface UnmannedTaskServiceApi { */ @Headers("Content-type:application/json;charset=UTF-8") @GET("/och-taxi-cabin/api/flow/v1/queryCurrentTask") - fun queryCurrentTask(@Header("appId") appId: String?, @Header("ticket") ticket: String?, @Query("sn") sn: String? + fun queryCurrentTask(@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, + @Query("sn") sn: String? ):Observable /** @@ -58,8 +68,8 @@ interface UnmannedTaskServiceApi { @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-taxi-cabin/api/flow/v1/startTask") fun startTask( - @Header("appId") appId: String?, - @Header("ticket") ticket: String?, + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, @Body data: StartTaskReqBean? ): Observable @@ -69,8 +79,8 @@ interface UnmannedTaskServiceApi { @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-taxi-cabin/api/flow/v1/arriveSite") fun arriveSite( - @Header("appId") appId: String?, - @Header("ticket") ticket: String?, + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, @Body data: ArriveSiteReqBean? ): Observable @@ -80,21 +90,53 @@ interface UnmannedTaskServiceApi { @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-taxi-cabin/api/flow/v1/prepareTask") fun prepareTask( - @Header("appId") appId: String?, - @Header("ticket") ticket: String?, + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, @Body data: PrepareTaskReqBean? ): Observable -// -// //服务完成 -// /och-taxi-cabin/api/flow/v1/orderCompleted -// -// //取消订单 -// /och-taxi-cabin/api/flow/v1/cancelOrder -// -// //批量查询轨迹 -// /och-taxi-cabin/api/business/v1/contrail -// -// //司机手动点击跳过乘客验证 -// /och-taxi-cabin/api/flow/v1/ready/passenger + /** + * 服务完成 + */ + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/och-taxi-cabin/api/flow/v1/orderCompleted") + fun orderCompleted( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, + @Body data: OrderCompletedReqBean? + ): Observable + + + /** + * 取消订单 + */ + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/och-taxi-cabin/api/flow/v1/cancelOrder") + fun cancelOrder( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, + @Body data: CancelOrderReqBean? + ): Observable + + /** + * 批量查询轨迹 + */ + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/och-taxi-cabin/api/business/v1/contrail") + fun contrailList( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, + @Body data: ContrailListReqBean? + ): Observable + + /** + * 司机手动点击跳过乘客验证 + */ + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/och-taxi-cabin/api/flow/v1/ready/passenger") + fun jumpPassengerCheck( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, + @Body data: JumpPassengerCheckReqBean? + ): Observable } \ No newline at end of file diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt index 86d96ca597..ee566b97e3 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt @@ -8,12 +8,11 @@ import android.os.Build import android.os.Bundle import android.text.Html import android.view.View -import android.widget.TextView import androidx.annotation.RequiresApi -import androidx.constraintlayout.widget.ConstraintLayout import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import com.amap.api.navi.model.NaviLatLng +import com.elegant.utils.DateTimeUtils import com.mogo.commons.mvp.BaseFragment import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.getState @@ -22,7 +21,6 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIC import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverlayManager 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.util.DateTimeUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.overlay.core.Level @@ -35,23 +33,31 @@ import com.mogo.och.common.module.utils.OCHThreadPoolManager import com.mogo.och.common.module.voice.VoiceNotice.showNotice import com.mogo.och.common.module.wigets.OCHCommitDialog import com.mogo.och.taxi.R +import com.mogo.och.taxi.bean.OrderDetail import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean -import com.mogo.och.taxi.constant.TaxiUnmannedConst +import com.mogo.och.taxi.constant.TaskTypeEnum import com.mogo.och.taxi.constant.TaxiOrderStatusEnum -import com.mogo.och.taxi.constant.TaxiOrderStatusEnum.Companion.valueOf +import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_END_MAP_MAKER +import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_START_MAP_MAKER +import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TYPE_MARKER_TAXI_ORDER import com.mogo.och.taxi.model.TaxiModel import com.mogo.och.taxi.model.TaxiUnmannedViewModel -import com.mogo.och.taxi.ui.unmanned.TaskUiState +import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState import com.mogo.och.taxi.ui.unmanned.UnmannedIntent +import kotlinx.android.synthetic.main.taxi_no_data_common_view.noOrderDataTv import kotlinx.android.synthetic.main.unmanned_being_order.cancelOrder import kotlinx.android.synthetic.main.unmanned_being_order.endStationName +import kotlinx.android.synthetic.main.unmanned_being_order.mBeingOrderLayout import kotlinx.android.synthetic.main.unmanned_being_order.naviToEnd import kotlinx.android.synthetic.main.unmanned_being_order.naviToStart +import kotlinx.android.synthetic.main.unmanned_being_order.noTaskData import kotlinx.android.synthetic.main.unmanned_being_order.orderPhoneAndNum +import kotlinx.android.synthetic.main.unmanned_being_order.startStationName import kotlinx.android.synthetic.main.unmanned_being_order.taskClickBtn import kotlinx.android.synthetic.main.unmanned_being_order.taskOtherInfo import kotlinx.android.synthetic.main.unmanned_being_order.taskStatus +import kotlinx.android.synthetic.main.unmanned_being_order.taskTypeTv import kotlinx.coroutines.flow.map import java.util.Calendar import kotlin.math.ceil @@ -64,20 +70,12 @@ import kotlin.math.roundToInt class TaxiBeingTaskFragment : BaseFragment(), View.OnClickListener, ICommonNaviChangedCallback { - private var mOrderNo: String? = null private val mViewModel by viewModels() @Volatile private var mTtsLessThan200Tip = 0 //离终点200米提示播报 - private var mCurrentOrder: QueryCurrentTaskRespBean.Result? = null - private var isFirstStartAutopilotDone = true - private var mBeingOrderLayout: ConstraintLayout? = null - private var mPassengerInfoLayout: ConstraintLayout? = null - private var mNoDatasTv: TextView? = null - private var mNoDataView: ConstraintLayout? = null + private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null - @Volatile - private var saveOrderState = -1 override fun getLayoutId(): Int { return R.layout.unmanned_being_order } @@ -103,35 +101,17 @@ class TaxiBeingTaskFragment : BaseFragment(), private fun initData() { - lifecycleScope.launchWhenStarted { - mViewModel.uiIntentFlow.collect { state -> - d(TAG,"uiIntentFlow: $state") - when(state){ - is UnmannedIntent.GetNextTask -> { - } - - is UnmannedIntent.GetVirtualStation -> { - - } - - else -> {} - } - } - - } - //监听返回的数据状态 lifecycleScope.launchWhenStarted { - mViewModel.uiStateFlow.map {it.taskUiState}.collect {state -> + mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {state -> d(TAG,"uiStateFlow: $state") when(state){ - is TaskUiState.INIT -> { + is TaskAndOrderUiState.INIT -> { } - is TaskUiState.SUCCESS -> { - // TODO: 页面刷新 - // updateCurrentOrderStatusChanged(state.models) + is TaskAndOrderUiState.SUCCESS -> { + updateCurrentOrderStatusChanged(state.model) } } } @@ -149,135 +129,286 @@ class TaxiBeingTaskFragment : BaseFragment(), } /** - * 初始化订单信息 + * 任务和订单信息 */ - @SuppressLint("SetTextI18n") - @RequiresApi(api = Build.VERSION_CODES.P) - fun updateCurrentOrderStatusChanged(order: QueryCurrentTaskRespBean.Result?) { - try { - if (order == null) return - if (order.order.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.code) { - mCurrentOrder = null - isHaveBeingOrder(false) - taskOtherInfo.text = "距离 - - 公里,用时 - - 分" - return + @SuppressLint("SetTextI18n", "UseCompatLoadingForDrawables") + fun updateCurrentOrderStatusChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) { + if (taskAndOrder == null) return + /** + * 根据任务类型判断任务显示, + * 虚拟单, 显示在进行中 前往上车点 + * 演练单,显示演练单, 同时有订单显示在待服务中 + * 当前任务是接驾任务,显示订单状态+运营单 订单显示在进行中, 任务不再显示 + */ + val taskType = taskAndOrder.taskType // 任务类型 + val order = taskAndOrder.order // 订单 + val startSite = taskAndOrder.startSite //进行的任务 + val endSite = taskAndOrder.endSite //进行的任务 + val currentStatus = taskAndOrder.currentStatus // 任务的状态 + + updateUIShowStatus(taskType,currentStatus,order) + + when (taskType) { + TaskTypeEnum.VirtualTask.code -> { //虚拟单 + taskStatus.text = resources.getString(R.string.task_start_to_virtual_site) + startStationName.text = resources.getString(R.string.task_current_loc) + endStationName.text = endSite.siteName + TODO("剩余历程和时间导航去更新taskOtherInfo") } - mOrderNo = order.order.orderNo - onOrderStatusChanged(order) - if (TaxiOrderStatusEnum.ArriveAtEnd.code == order.order.orderStatus) { - d(SceneConstant.M_TAXI + TAG, "已经达到终点") - taskStatus.setText(R.string.module_och_taxi_arrive_at_end_station2) + TaskTypeEnum.ExerciseTask.code -> {// 演练单 + taskStatus.text = resources.getString(R.string.task_start_end_site) + taskTypeTv.background = resources.getDrawable(R.drawable.task_unreal_type_btn_bg,null) + taskTypeTv.text = resources.getString(R.string.task_exercise) + startStationName.text = startSite.siteName + endStationName.text = endSite.siteName + TODO("剩余历程和时间导航去更新taskOtherInfo") + } + TaskTypeEnum.OrderTask.code -> {// 运营单 + if (order == null) return + taskTypeTv.text = resources.getString(R.string.task_order) + taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null) + orderPhoneAndNum.text = "${order.phone} | ${order.passengerNum}" + startStationName.text = order.orderStartSite?.siteName + endStationName.text = order.orderEndSite?.siteName + updateOrderUI(order) + TODO("剩余历程和时间导航去更新taskOtherInfo") + } + } + } + + private fun updateOrderUI(order: OrderDetail) { + + when(order.orderStatus){ + + TaxiOrderStatusEnum.None.code -> { //无 + TODO("显示无订单页面") + } + + TaxiOrderStatusEnum.Cancel.code -> { //取消 + updateOrderBottomBtn( + taskClickBtn.text.toString(), + Color.parseColor("#4DFFFFFF"), + Color.parseColor("#4D1D5EF3"), + false + ) + taskTypeTv.background = resources.getDrawable(R.drawable.task_cancel_type_btn_bg,null) + taskTypeTv.text = resources.getString(R.string.passenger_cancel_order) + + order.orderStartSite?.let { + setOrRemoveMapMaker( + false, + TAXI_START_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.star_marker + ) + } + order.orderEndSite?.let { + setOrRemoveMapMaker( + false, + TAXI_END_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.end_marker + ) + } + + clearSmallMapRouteLine() + } + TaxiOrderStatusEnum.JourneyCompleted.code -> { //服务完成 + taskStatus.text = resources.getString(R.string.task_start_end_site) updateOrderBottomBtn( getString(R.string.module_och_taxi_order_server_end), Color.parseColor("#FFFFFF"), Color.parseColor("#FF1D5EF3"), true ) - taskStatus.text = "送乘客至" -// endStationName.text = order.endSiteAddr - } else if (TaxiOrderStatusEnum.OnTheWayToEnd.code == order.order.orderStatus) { - d(SceneConstant.M_TAXI + TAG, "已经去往终点") - taskStatus.setText(R.string.module_och_taxi_on_the_way_2_end_station) + } + TaxiOrderStatusEnum.ArriveAtEnd.code -> { //到达目的地 + taskStatus.text = resources.getString(R.string.task_start_end_site) + updateOrderBottomBtn( + getString(R.string.module_och_taxi_order_server_end), + Color.parseColor("#FFFFFF"), + Color.parseColor("#FF1D5EF3"), + true + ) + + order.orderStartSite?.let { + setOrRemoveMapMaker( + false, + TAXI_START_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.star_marker + ) + } + order.orderEndSite?.let { + setOrRemoveMapMaker( + false, + TAXI_END_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.end_marker + ) + } + clearSmallMapRouteLine() + } + TaxiOrderStatusEnum.OnTheWayToEnd.code -> { //送驾中 + taskStatus.text = resources.getString(R.string.task_start_end_site) updateOrderBottomBtn( getString(R.string.module_och_taxi_order_close), Color.parseColor("#FFFFFF"), Color.parseColor("#FF1D5EF3"), true ) - taskStatus.text= "送乘客至" -// endStationName.text = order.endSiteAddr - } else if (TaxiOrderStatusEnum.UserArriveAtStart.code == order.order.orderStatus - || TaxiOrderStatusEnum.ArriveAtStart.code == order.order.orderStatus - ) { - val currentCale = DateTimeUtils.getCurrentDateTime() -// val currentHM = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.HH_mm) - val currentDay = - DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.yyyy_MM_dd) - taskStatus.text = "送乘客至" -// endStationName.text = order.endSiteAddr - currentCale.add(Calendar.MINUTE, 10) - val strHtml13: String = if (currentDay == DateTimeUtil.formatCalendarToString( - currentCale, - DateTimeUtil.yyyy_MM_dd - ) - ) { - ("免费等待至 " - + "" + DateTimeUtil.formatCalendarToString( - currentCale, - DateTimeUtil.HH_mm - ) + "") - } else { - ("免费等待至" - + "" + DateTimeUtil.formatCalendarToString( - currentCale, - DateTimeUtil.MM_dd_HH_mm - ) + "") - } - taskOtherInfo.text = Html.fromHtml(strHtml13,Html.FROM_HTML_MODE_LEGACY) - if (TaxiOrderStatusEnum.ArriveAtStart.code == order.order.orderStatus) { - d(SceneConstant.M_TAXI + TAG, "车辆已经达到起点") - mPassengerInfoLayout!!.visibility = View.VISIBLE -// orderPhoneAndNum.text = order.passengerPhone + " | "+ order.passengerNum + "人" - taskStatus.setText(R.string.module_och_taxi_waiting) - updateOrderBottomBtn( - getString(R.string.module_och_taxi_order_server_start_wait_check), - Color.parseColor("#FFFFFF"), - Color.parseColor("#FF1D5EF3"), - true - ) - } else if (TaxiOrderStatusEnum.UserArriveAtStart.code == order.order.orderStatus) { - d(SceneConstant.M_TAXI + TAG, "乘客已上车验证成功") - mPassengerInfoLayout!!.visibility = View.GONE - taskStatus.setText(R.string.module_och_taxi_user_check_success) - updateOrderBottomBtn( - getString(R.string.module_och_taxi_order_server_start), - Color.parseColor("#FFFFFF"), - Color.parseColor("#FF1D5EF3"), - true + order.orderStartSite?.let { + setOrRemoveMapMaker( + false, + TAXI_START_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.star_marker + ) + } + order.orderEndSite?.let { + setOrRemoveMapMaker( + true, + TAXI_END_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.end_marker ) } - } else if (TaxiModel.checkCurrentOrder()) { - d(SceneConstant.M_TAXI + TAG, "前往乘客上车地点") -// orderPhoneAndNum.text = order.passengerPhone + " | "+ order.passengerNum + "人" + } + TaxiOrderStatusEnum.UserArriveAtStart.code,TaxiOrderStatusEnum.ArriveAtStart.code -> { + //乘客到达上车点,验证成功 ; 到达乘客上车点 - taskStatus.setText(R.string.module_och_taxi_new_order) + taskStatus.text = resources.getString(R.string.arrived_start_site) + updateOrderBottomBtn( + if (order.orderStatus == TaxiOrderStatusEnum.UserArriveAtStart.code) + getString(R.string.module_och_taxi_order_server_start) + else getString(R.string.module_och_taxi_order_server_start_wait_check), + Color.parseColor("#FFFFFF"), + Color.parseColor("#FF1D5EF3"), + true + ) + + updateOtherInfo() + + order.orderStartSite?.let { + setOrRemoveMapMaker( + true, + TAXI_START_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.star_marker + ) + } + order.orderEndSite?.let { + setOrRemoveMapMaker( + true, + TAXI_END_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.end_marker + ) + } + } + + TaxiOrderStatusEnum.OnTheWayToStart.code -> { //前往上车地点 + taskStatus.text = resources.getString(R.string.task_start_start_site) updateOrderBottomBtn( getString(R.string.module_och_taxi_order_server_start), Color.parseColor("#4DFFFFFF"), Color.parseColor("#4D1D5EF3"), false ) - - val currentCale = DateTimeUtils.getCurrentDateTime() -// val startCale = DateTimeUtil.formatLongToCalendar(order.bookingTime) - val startCale = null - val currentDay = - DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.yyyy_MM_dd) - val startDay = - DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.yyyy_MM_dd) - val strHtml1: String = if (currentDay == startDay) { - ("乘客将于
" - + "" + DateTimeUtil.formatCalendarToString( - startCale, - DateTimeUtil.HH_mm - ) + "" - + " 用车") - } else { - ("乘客将于
" - + "" + DateTimeUtil.formatCalendarToString( - startCale, - DateTimeUtil.MM_dd_HH_mm - ) + "" - + " 用车") + order.orderStartSite?.let { + setOrRemoveMapMaker( + true, + TAXI_START_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.star_marker + ) + } + order.orderEndSite?.let { + setOrRemoveMapMaker( + true, + TAXI_END_MAP_MAKER, + it.gcjLat, + it.gcjLon, + R.raw.end_marker + ) } - taskOtherInfo.text = Html.fromHtml(strHtml1,Html.FROM_HTML_MODE_LEGACY) } - } catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况 - TaxiModel.clearCurrentOCHOrder() + } } + + private fun updateOtherInfo() { + val currentCale = DateTimeUtils.getCurrentDateTime() + val currentDay = + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.yyyy_MM_dd) + + currentCale.add(Calendar.MINUTE, 10) + val strHtml13: String = if (currentDay == DateTimeUtil.formatCalendarToString( + currentCale, + DateTimeUtil.yyyy_MM_dd + ) + ) { + ("免费等待至 " + + "" + DateTimeUtil.formatCalendarToString( + currentCale, + DateTimeUtil.HH_mm + ) + "") + } else { + ("免费等待至" + + "" + DateTimeUtil.formatCalendarToString( + currentCale, + DateTimeUtil.MM_dd_HH_mm + ) + "") + } + taskOtherInfo.text = strHtml13 + } + + private fun updateUIShowStatus(taskType: Int, currentStatus: Int, order: OrderDetail?) { + if (order == null) return + when (taskType) { + TaskTypeEnum.VirtualTask.code,TaskTypeEnum.ExerciseTask.code -> { //虚拟单、演练单 + taskStatus.visibility = View.VISIBLE + taskTypeTv.visibility = View.VISIBLE + orderPhoneAndNum.visibility = View.GONE + startStationName.visibility = View.VISIBLE + endStationName.visibility = View.VISIBLE + taskClickBtn.visibility = View.GONE +// currentStatus 0:空闲 1:获取任务 2:开始任务 3:到达目的地 + naviToStart.visibility = View.GONE + naviToEnd.visibility = if (currentStatus == 2) View.VISIBLE else View.GONE + taskOtherInfo.visibility = if (currentStatus == 0) View.GONE else View.VISIBLE + } + TaskTypeEnum.OrderTask.code -> {// 运营单 + taskStatus.visibility = View.VISIBLE + taskTypeTv.visibility = View.VISIBLE + orderPhoneAndNum.visibility = View.VISIBLE + startStationName.visibility = View.VISIBLE + endStationName.visibility = View.VISIBLE + taskClickBtn.visibility = View.VISIBLE +// orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点, +// 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消 + naviToStart.visibility = if (order.orderStatus + == TaxiOrderStatusEnum.OnTheWayToStart.code) View.VISIBLE else View.GONE + + naviToEnd.visibility = if (order.orderStatus + == TaxiOrderStatusEnum.OnTheWayToEnd.code) View.VISIBLE else View.GONE + + taskOtherInfo.visibility = View.VISIBLE + } + } + } + private fun startNaviToStation(isVoicePlay: Boolean, stationLat: Double, stationLng: Double) { AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi() val mCurLatitude = getChassisLocationGCJ02().latitude @@ -309,6 +440,7 @@ class TaxiBeingTaskFragment : BaseFragment(), @RequiresApi(Build.VERSION_CODES.N) fun updateDistanceAndTime(meters: Long, timeInSecond: Long) { // CallerLogger.INSTANCE.d(M_TAXI + TAG,"meters = "+meters+"timeInSecond ="+timeInSecond); + if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.order == null) return var dis = "0" var disUnit = "公里" if (meters > 0) { @@ -324,33 +456,6 @@ class TaxiBeingTaskFragment : BaseFragment(), val strHtml2 = ("里程 " + "" + dis + "" + " " + disUnit + "" + ",剩余 " + "" + min + "" + " 分钟") - try { - if (mCurrentOrder != null && mCurrentOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code) { //前往上车点 - taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY) - if (naviToStart.visibility == View.GONE) { - naviToStart.visibility = View.VISIBLE - } - } else if (mCurrentOrder != null && mCurrentOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code) { //前往终点 时间单位是分钟 - if (naviToEnd.visibility == View.GONE) { - naviToEnd.visibility = View.VISIBLE - } - if (mTtsLessThan200Tip < 1 && meters <= 250 && meters > 150) { - speekVoice200mTipsOnce() - } - taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY) - if (isFirstStartAutopilotDone) { - showNotice( - String.format( - resources - .getString(R.string.module_och_taxi_order_server_start_auto_tip), - dis, disUnit, min - ) - ) - isFirstStartAutopilotDone = false - } - } - } catch (_: NullPointerException) { - } } private fun speekVoice200mTipsOnce() { @@ -383,12 +488,13 @@ class TaxiBeingTaskFragment : BaseFragment(), } private fun startOrEndService() { - if (mCurrentOrder == null) return - if (TaxiOrderStatusEnum.ArriveAtStart.code == mCurrentOrder!!.order.orderStatus) { //到达乘客上车点,司机可跳过乘客屏认证 + if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.order == null) return + val order = mCurrentTaskAndOrder!!.order + if (TaxiOrderStatusEnum.ArriveAtStart.code == order!!.orderStatus) { //到达乘客上车点,司机可跳过乘客屏认证 mViewModel.sendUiIntent(UnmannedIntent.JumpPassengerCheckDone) - } else if (TaxiOrderStatusEnum.ArriveAtEnd.code == mCurrentOrder!!.order.orderStatus) { //点击了完成服务,结束订单并更新订单信息 + } else if (TaxiOrderStatusEnum.ArriveAtEnd.code == order.orderStatus) { //点击了完成服务,结束订单并更新订单信息 mViewModel.sendUiIntent(UnmannedIntent.JourneyCompleted) - } else if (TaxiOrderStatusEnum.OnTheWayToEnd.code == mCurrentOrder!!.order.orderStatus) { //前往目的地过程中可提前结束行程 + } else if (TaxiOrderStatusEnum.OnTheWayToEnd.code == order.orderStatus) { //前往目的地过程中可提前结束行程 //自驾中提示,接管后才能结束 if (getState() == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING @@ -420,168 +526,12 @@ class TaxiBeingTaskFragment : BaseFragment(), closeOrderDialog.show() } - private fun onOrderStatusChanged(order: QueryCurrentTaskRespBean.Result) { - val status = order.order.orderStatus - d( - SceneConstant.M_TAXI + TAG, - "status==$status" - ) - mCurrentOrder = order - mActivity!!.runOnUiThread { - if (status == TaxiOrderStatusEnum.None.code || status == TaxiOrderStatusEnum.Cancel.code || status == TaxiOrderStatusEnum.JourneyCompleted.code) { - isHaveBeingOrder(false) - mCurrentOrder = null - clearOrderTag() - } else { - isHaveBeingOrder(true) - } - if (status != saveOrderState) { - val ochStatus = - valueOf(status) - when (ochStatus) { - TaxiOrderStatusEnum.OnTheWayToStart -> { - cancelOrder.visibility = View.VISIBLE - showNotice( - mActivity!!.getString( - R.string.module_och_taxi_new_order - ) - ) - mTtsLessThan200Tip = 0 - isFirstStartAutopilotDone = true - val orderStartStationLat = order.order.orderStartSite!!.gcjLat - val orderStartStationLng = order.order.orderStartSite!!.gcjLon - startNaviToStation(false, orderStartStationLat, orderStartStationLng) -// setOrRemoveMapMaker( -// true, -// TaxiUnmannedConst.TAXI_START_MAP_MAKER, -// order.order.orderStartSite, -// R.raw.star_marker -// ) -// setOrRemoveMapMaker( -// true, -// TaxiUnmannedConst.TAXI_END_MAP_MAKER, -// order.endSitePoint, -// R.raw.end_marker -// ) - } - - TaxiOrderStatusEnum.Cancel -> { - mCurrentOrder = null - mTtsLessThan200Tip = 0 - isFirstStartAutopilotDone = true - cancelOrder.visibility = View.VISIBLE - //VoiceNotice.showNotice(mActivity.getString(R.string.module_och_taxi_order_cancel)); - showOrHideNavi() -// setOrRemoveMapMaker( -// false, -// TaxiUnmannedConst.TAXI_START_MAP_MAKER, -// order.startSitePoint, -// R.raw.star_marker -// ) -// setOrRemoveMapMaker( -// false, -// TaxiUnmannedConst.TAXI_END_MAP_MAKER, -// order.endSitePoint, -// R.raw.end_marker -// ) - clearSmallMapRouteLine() - } - - TaxiOrderStatusEnum.ArriveAtStart, TaxiOrderStatusEnum.UserArriveAtStart -> { - mTtsLessThan200Tip = 0 - isFirstStartAutopilotDone = true - cancelOrder.visibility = View.VISIBLE - if (TaxiOrderStatusEnum.UserArriveAtStart.code == ochStatus.code) { - showNotice( - mActivity!!.getString( - R.string.module_och_taxi_order_status_ph_text_check_success - ) - ) - } else { - showNotice( - mActivity!!.getString( - R.string.module_och_taxi_order_status_ph_text - ) - ) - } - showOrHideNavi() -// setOrRemoveMapMaker( -// true, -// TaxiUnmannedConst.TAXI_START_MAP_MAKER, -// order.startSitePoint, -// R.raw.star_marker -// ) -// setOrRemoveMapMaker( -// true, -// TaxiUnmannedConst.TAXI_END_MAP_MAKER, -// order.endSitePoint, -// R.raw.end_marker -// ) - } - - TaxiOrderStatusEnum.OnTheWayToEnd -> { - // showNotice("欢迎使用蘑菇智行"); - cancelOrder.visibility = View.VISIBLE - - if (mTaxiFragment != null) { - showNaviToEndStationFragment(false) - } -// setOrRemoveMapMaker( -// false, -// TaxiUnmannedConst.TAXI_START_MAP_MAKER, -// order.startSitePoint, -// R.raw.star_marker -// ) -// setOrRemoveMapMaker( -// true, -// TaxiUnmannedConst.TAXI_END_MAP_MAKER, -// order.endSitePoint, -// R.raw.end_marker -// ) - } - - TaxiOrderStatusEnum.ArriveAtEnd -> { - mTtsLessThan200Tip = 0 - cancelOrder.visibility = View.GONE - showNotice( - mActivity!!.getString( - R.string.module_och_taxi_order_auto_arrive_end_tip - ) - ) - showOrHideNavi() -// setOrRemoveMapMaker( -// false, -// TaxiUnmannedConst.TAXI_START_MAP_MAKER, -// order.startSitePoint, -// R.raw.star_marker -// ) -// setOrRemoveMapMaker( -// false, -// TaxiUnmannedConst.TAXI_END_MAP_MAKER, -// order.endSitePoint, -// R.raw.end_marker -// ) - clearSmallMapRouteLine() - } - - TaxiOrderStatusEnum.JourneyCompleted -> { - mCurrentOrder = null - mTtsLessThan200Tip = 0 - isFirstStartAutopilotDone = true - cancelOrder.visibility = View.GONE - showNotice("感谢您使用蘑菇智行,再见~") - showOrHideNavi() - } - - else -> {} - } - } - saveOrderState = status - } - } +// showNotice( +// mActivity!!.getString( +// R.string.module_och_taxi_new_order +// ) private fun clearOrderTag() { - saveOrderState = -1 taskOtherInfo.text = "距离 - - 公里,用时 - - 分" } @@ -597,14 +547,14 @@ class TaxiBeingTaskFragment : BaseFragment(), ) try { if (being) { - mNoDataView!!.visibility = View.GONE - mBeingOrderLayout!!.visibility = View.VISIBLE + noTaskData.visibility = View.GONE + mBeingOrderLayout.visibility = View.VISIBLE mTaxiFragment!!.changeOperationViewVisible(View.GONE) clearSmallMapRouteLine() } else { - mNoDataView!!.visibility = View.VISIBLE - mNoDatasTv!!.text = "暂无进行中订单" - mBeingOrderLayout!!.visibility = View.GONE + noTaskData.visibility = View.VISIBLE + noOrderDataTv.text = "暂无进行中订单" + mBeingOrderLayout.visibility = View.GONE mTaxiFragment!!.changeOperationViewVisible(View.VISIBLE) } } catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况 @@ -617,7 +567,10 @@ class TaxiBeingTaskFragment : BaseFragment(), d(SceneConstant.M_TAXI + TAG, taskStatus.text.toString()) startOrEndService() } else if (v.id == cancelOrder.id) { - TaxiOrderCancelDialog(mTaxiFragment, mActivity, mOrderNo, saveOrderState).show() + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){ + TaxiOrderCancelDialog(mTaxiFragment, mActivity, + mCurrentTaskAndOrder!!.order!!.orderNo,mCurrentTaskAndOrder!!.order!!.orderStatus).show() + } } else if (v.id == naviToStart.id) { if (mTaxiFragment != null) { showNaviToStartStationFragment() @@ -633,14 +586,14 @@ class TaxiBeingTaskFragment : BaseFragment(), * 显示/隐藏 前往乘客上车点的导航 **/ private fun showNaviToStartStationFragment() { - if (mCurrentOrder != null && - mCurrentOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code - ) { +// if (mCurrentTaskAndOrder != null && +// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code +// ) { // val orderStartStationLat = mCurrentOrder!!.startSiteGcjPoint[1] // val orderStartStationLng = mCurrentOrder!!.startSiteGcjPoint[0] // mTaxiFragment!!.showAmapNaviToStationFragment(true) // startNaviToStation(true, orderStartStationLat, orderStartStationLng) - } +// } } /** @@ -654,7 +607,7 @@ class TaxiBeingTaskFragment : BaseFragment(), fun onCurrentOrderCancelDone() { //去除起终点 - if (mCurrentOrder != null) { + if (mCurrentTaskAndOrder != null) { // setOrRemoveMapMaker( // false, // TaxiUnmannedConst.TAXI_START_MAP_MAKER, @@ -694,11 +647,11 @@ class TaxiBeingTaskFragment : BaseFragment(), @RequiresApi(Build.VERSION_CODES.N) override fun onCurrentNaviDistAndTimeChanged(meters: Int, timeInSecond: Long) { updateDistanceAndTime(meters.toLong(), timeInSecond) - if (mCurrentOrder != null - && mCurrentOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code - ) { - mTaxiFragment!!.reportToEndDisAndTime(meters, timeInSecond) - } +// if (mCurrentTaskAndOrder != null +// && mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code +// ) { +// mTaxiFragment!!.reportToEndDisAndTime(meters, timeInSecond) +// } } override fun reInitNaviAmap(isPlay: Boolean, isRestart: Boolean) { @@ -710,31 +663,31 @@ class TaxiBeingTaskFragment : BaseFragment(), mTaxiFragment!!.showAmapNaviToStationFragment(false) return } - UiThreadHandler.postDelayed({ - if (mCurrentOrder != null && - mCurrentOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code - ) { +// UiThreadHandler.postDelayed({ +// if (mCurrentTaskAndOrder != null && +// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code +// ) { // val orderStartStationLat = mCurrentOrder!!.startSiteGcjPoint[1] // val orderStartStationLng = mCurrentOrder!!.startSiteGcjPoint[0] // startNaviToStation(false, orderStartStationLat, orderStartStationLng) - } - }, 2000) - UiThreadHandler.postDelayed({ - if (mCurrentOrder != null && - mCurrentOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code - ) { - if (naviToStart.visibility == View.GONE) { - naviToStart.visibility = View.VISIBLE - } - } - if (mCurrentOrder != null && - mCurrentOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code - ) { - if (naviToEnd.visibility == View.GONE) { - naviToEnd.visibility = View.VISIBLE - } - } - }, 3000) +// } +// }, 2000) +// UiThreadHandler.postDelayed({ +// if (mCurrentTaskAndOrder != null && +// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code +// ) { +// if (naviToStart.visibility == View.GONE) { +// naviToStart.visibility = View.VISIBLE +// } +// } +// if (mCurrentTaskAndOrder != null && +// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code +// ) { +// if (naviToEnd.visibility == View.GONE) { +// naviToEnd.visibility = View.VISIBLE +// } +// } +// }, 3000) } fun onNaviToEndAmap(isShow: Boolean) { @@ -754,68 +707,68 @@ class TaxiBeingTaskFragment : BaseFragment(), * @param uuid * @param station */ -// private fun setOrRemoveMapMaker( -// isAdd: Boolean, -// uuid: String, -// station: List, -// resourceId: Int -// ) { -// if (isAdd) { -// //开启线程执行起终点marker设置 -// val setMapMarkerRunnable = Runnable { -// d( -// SceneConstant.M_TAXI + "setMapMaker= " + Thread.currentThread() -// .name, -// uuid + "=latitude=" + station[1] + ",longitude=" + station[0] -// ) -// val builder = -// Point.Options.Builder( -// TaxiUnmannedConst.TYPE_MARKER_TAXI_ORDER, -// Level.MAP_MARKER -// ) -// .setId(uuid) -// .anchor(0.5f, 0.5f) -// .set3DMode(true) -// .isUseGps(true) -// .controlAngle(true) -// .icon3DRes(resourceId) -// .latitude(station[1]) -// .longitude(station[0]) -// val mapUIController = -// getMapUIController() -// if (mapUIController != null) { -// val centerLine = -// mapUIController.getCenterLineInfo( -// station[0], station[1], -1f -// ) -// if (null != centerLine) { // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 -// val angle = centerLine.angle -// if (angle != null) { -// builder.rotate(angle.toFloat()) -// } -// } -// } -// val overlayManager = -// getOverlayManager() -// overlayManager?.showOrUpdatePoint(builder.build()) -// } -// OCHThreadPoolManager.getsInstance().execute(setMapMarkerRunnable) -// } else { -// //开启线程移除起终点marker设置 -// val removeMapMarkerRunnable = Runnable { -// d( -// SceneConstant.M_TAXI + "RemoveMapMaker=" + Thread.currentThread() -// .name, -// uuid + "=latitude=" + station[1] + ",longitude=" + station[0] -// ) -// // Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMarkerManager(AbsMogoApplication.getApp())).removeMarkers(uuid); -// val overlayManager = -// getOverlayManager() -// overlayManager?.removePoint(uuid) -// } -// OCHThreadPoolManager.getsInstance().execute(removeMapMarkerRunnable) -// } -// } + private fun setOrRemoveMapMaker( + isAdd: Boolean, + uuid: String, + lat: Double, + lon: Double, + resourceId: Int + ) { + if (isAdd) { + //开启线程执行起终点marker设置 + val setMapMarkerRunnable = Runnable { + d( + SceneConstant.M_TAXI + "setMapMaker= " + Thread.currentThread() + .name, + "$uuid=latitude=$lat,longitude=$lon" + ) + val builder = + Point.Options.Builder( + TYPE_MARKER_TAXI_ORDER, + Level.MAP_MARKER + ) + .setId(uuid) + .anchor(0.5f, 0.5f) + .set3DMode(true) + .isUseGps(true) + .controlAngle(true) + .icon3DRes(resourceId) + .latitude(lat) + .longitude(lon) + val mapUIController = + getMapUIController() + if (mapUIController != null) { + val centerLine = + mapUIController.getCenterLineInfo( + lon, lat, -1f + ) + if (null != centerLine) { // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 + val angle = centerLine.angle + if (angle != null) { + builder.rotate(angle.toFloat()) + } + } + } + val overlayManager = + getOverlayManager() + overlayManager?.showOrUpdatePoint(builder.build()) + } + OCHThreadPoolManager.getsInstance().execute(setMapMarkerRunnable) + } else { + //开启线程移除起终点marker设置 + val removeMapMarkerRunnable = Runnable { + d( + SceneConstant.M_TAXI + "RemoveMapMaker=" + Thread.currentThread() + .name, + "$uuid=latitude=$lat,longitude=$lon" + ) + val overlayManager = + getOverlayManager() + overlayManager?.removePoint(uuid) + } + OCHThreadPoolManager.getsInstance().execute(removeMapMarkerRunnable) + } + } fun updateOrderBottomBtnUI() { mViewModel.sendUiIntent(UnmannedIntent.StartTask) diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt index 7fdb570a9f..330543f6d5 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt @@ -167,14 +167,6 @@ public class TaxiFragment : BaseTaxiTabFragment(), onAutopilotStatusChanged(status) } - @RequiresApi(api = Build.VERSION_CODES.P) - fun updateCurrentOrderStatusChanged(order: QueryCurrentTaskRespBean.Result?) { - if (serverOrdersFragmentWR != null && serverOrdersFragmentWR!!.get() != null) { - serverOrdersFragmentWR!!.get()!!.updateCurrentOrderStatusChanged(order) - } - updateTaxiTestBarInfo() //更新调试bar中信息 - } - fun onNaviToEnd(isAmap: Boolean, isShow: Boolean) { if (isAmap) { if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt index 046419b5f9..2b6cefe7f5 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt @@ -3,6 +3,8 @@ package com.mogo.och.taxi.ui import android.annotation.SuppressLint import android.app.Activity import android.content.Context +import android.graphics.Color +import android.graphics.drawable.GradientDrawable import android.os.Bundle import android.view.View import androidx.fragment.app.viewModels @@ -10,9 +12,22 @@ import androidx.lifecycle.lifecycleScope import com.mogo.commons.mvp.BaseFragment import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.och.taxi.R +import com.mogo.och.taxi.bean.OrderDetail import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean +import com.mogo.och.taxi.constant.TaskTypeEnum import com.mogo.och.taxi.model.TaxiUnmannedViewModel -import com.mogo.och.taxi.ui.unmanned.OrderUiState +import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState +import kotlinx.android.synthetic.main.unmanned_being_order.endStationName +import kotlinx.android.synthetic.main.unmanned_being_order.mBeingOrderLayout +import kotlinx.android.synthetic.main.unmanned_being_order.naviToEnd +import kotlinx.android.synthetic.main.unmanned_being_order.naviToStart +import kotlinx.android.synthetic.main.unmanned_being_order.noTaskData +import kotlinx.android.synthetic.main.unmanned_being_order.orderPhoneAndNum +import kotlinx.android.synthetic.main.unmanned_being_order.startStationName +import kotlinx.android.synthetic.main.unmanned_being_order.taskClickBtn +import kotlinx.android.synthetic.main.unmanned_being_order.taskOtherInfo +import kotlinx.android.synthetic.main.unmanned_being_order.taskStatus +import kotlinx.android.synthetic.main.unmanned_being_order.taskTypeTv import kotlinx.coroutines.flow.map /** @@ -43,21 +58,78 @@ class TaxiReserveOrderFragment : BaseFragment() { private fun initData() { //监听返回的数据状态 lifecycleScope.launchWhenStarted { - mViewModel.uiStateFlow.map {it.orderUiState}.collect {state -> + mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {state -> CallerLogger.d(TAG, "uiStateFlow: $state") when(state){ - is OrderUiState.INIT -> { + is TaskAndOrderUiState.INIT -> { } - is OrderUiState.SUCCESS -> { - // TODO: 页面刷新 + is TaskAndOrderUiState.SUCCESS -> { + updateOrderChanged(state.model) } } } } } + private fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) { + if (model == null) return + if (model.order == null || model.taskType != TaskTypeEnum.ExerciseTask.code){ + showNoOrderView() + return + } + val order = model.order + updateOrderUI(order!!) + } + + @SuppressLint("SetTextI18n") + private fun updateOrderUI(order: OrderDetail) { + showOrderView() + taskOtherInfo.visibility = View.GONE + naviToStart.visibility = View.GONE + naviToEnd.visibility = View.GONE + + orderPhoneAndNum.text = "${order.phone} | ${order.passengerNum}" + + order.orderStartSite?.let { + startStationName.text = it.siteName + } + order.orderEndSite?.let { + endStationName.text = it.siteName + } + + taskStatus.text = resources.getString(R.string.waiting_server) + taskTypeTv.text = resources.getString(R.string.task_order) + taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null) + + updateOrderBottomBtn( + getString(R.string.waiting_server), + Color.parseColor("#4DFFFFFF"), + Color.parseColor("#4D1D5EF3"), + false + ) + } + + private fun updateOrderBottomBtn(txt: String?, txtColorId: Int, bgColorId: Int, isClickable: Boolean) { + taskClickBtn.text = txt + taskClickBtn.setTextColor(txtColorId) + val background = + taskClickBtn.background as GradientDrawable //GradientDrawable是Drawable的子类 + background.setColor(bgColorId) + taskClickBtn.isClickable = isClickable + } + + private fun showNoOrderView() { + noTaskData.visibility = View.VISIBLE + mBeingOrderLayout.visibility = View.GONE + } + + private fun showOrderView() { + noTaskData.visibility = View.GONE + mBeingOrderLayout.visibility = View.VISIBLE + } + companion object { const val TAG = "TaxiReserveOrderFragment" diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt index e54aad2e35..11565309ac 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt @@ -153,14 +153,6 @@ class TaxiServerOrdersFragment : BaseFragment(){ } } - @RequiresApi(api = Build.VERSION_CODES.P) - fun updateCurrentOrderStatusChanged(order: QueryCurrentTaskRespBean.Result?) { - if (beingTaskFragment != null) { - module_och_taxi_tab.getTabAt(0)?.select() - beingTaskFragment!!.updateCurrentOrderStatusChanged(order) - } - } - fun onNaviToEndAMap(isShow: Boolean) { if (null == beingTaskFragment) return beingTaskFragment!!.onNaviToEndAmap(isShow) diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt index eaa9cf4f1a..a26af6d25e 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt @@ -2,20 +2,22 @@ package com.mogo.och.taxi.ui.unmanned import com.mogo.och.taxi.base.IUiState import com.mogo.och.taxi.bean.OrderDetail +import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean import com.mogo.och.taxi.bean.Site -/** - * @author: wangmingjun - * @date: 2023/7/26 - */ -data class UnmannedState(val taskUiState: TaskUiState,val orderUiState: OrderUiState): IUiState - -sealed class TaskUiState{ +sealed class TaskUiState { object INIT : TaskUiState() data class SUCCESS(val models: List) : TaskUiState() } -sealed class OrderUiState{ +sealed class OrderUiState { object INIT : OrderUiState() data class SUCCESS(val models: List) : OrderUiState() } + +sealed class TaskAndOrderUiState { + object INIT : TaskAndOrderUiState() + data class SUCCESS(val model: QueryCurrentTaskRespBean.Result?) : TaskAndOrderUiState() +} + +data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiState diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/drawable/task_cancel_type_btn_bg.xml b/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/drawable/task_cancel_type_btn_bg.xml new file mode 100644 index 0000000000..cdd1e5d427 --- /dev/null +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/drawable/task_cancel_type_btn_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/taxi_no_data_common_view.xml b/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/taxi_no_data_common_view.xml index 9ccbe981ef..908b36193b 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/taxi_no_data_common_view.xml +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/taxi_no_data_common_view.xml @@ -15,7 +15,7 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> + + + app:layout_constraintBottom_toTopOf="@+id/taskClickBtn" /> 自动驾驶状态中,不可结束路线 + 前往出车点 + 前往送驾 + 前往接驾 + 当前位置 + 运营单 + 演练单 + 等待乘客 + 乘客已取消 + + 待服务 + \ No newline at end of file