[6.0.0] opt

This commit is contained in:
wangmingjun
2023-08-07 20:46:56 +08:00
committed by zhongchao
parent afa0551c04
commit 8ef304771f
18 changed files with 814 additions and 600 deletions

View File

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

View File

@@ -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; //当日完成订单数
}
}

View File

@@ -11,7 +11,10 @@ data class OrderDetail(var orderNo: String,
var orderStatus: Int,
var orderStartSite: Site?,
var orderEndSite: Site?,
var planningLines: Array<Int>) {
var planningLines: Array<Int>,
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<Int>)
data class ContrailListRespBean(var data: MutableList<Result>) //轨迹路线集合
: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)
}

View File

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

View File

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

View File

@@ -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, "setIPCDemoModefalse")
setIPCDemoMode(false)

View File

@@ -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<UnmannedState, UnmannedIntent>(){
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<BaseData> {
// 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<UnmannedState, UnmannedIntent>(){
}
}
private fun getNextTask() {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){
CarServiceManager.prepareTask(AbsMogoApplication.getApp().applicationContext,
mCurrentTaskAndOrder!!.endSite.siteId, object : OchCommonServiceCallback<PrepareTaskRespBean>{
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<BaseData>{
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<BaseData>{
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<BaseData>{
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<BaseData>{
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)
)
}
}
}

View File

@@ -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<StartServiceRespBean>?
){
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<BaseData>?){
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<QueryCurrentTaskRespBean>?){
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<BaseData>?
){
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<BaseData>?
){
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<PrepareTaskRespBean>?
){
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<BaseData>?
){
mOCHTaxiServiceApi.jumpPassengerCheck(
data = JumpPassengerCheckReqBean(MoGoAiCloudClientConfig.getInstance().sn,orderNo)
).transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "jumpPassengerCheck"))
}
/**
* 服务完成
*/
@JvmStatic
fun orderCompleted(
context: Context,orderNo: String,
callback: OchCommonServiceCallback<BaseData>?
){
mOCHTaxiServiceApi.orderCompleted(
data = OrderCompletedReqBean(MoGoAiCloudClientConfig.getInstance().sn,orderNo)
).transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "orderCompleted"))
}
/**
* 取消订单
*/
@JvmStatic
fun cancelOrder(
context: Context,orderNo: String,
callback: OchCommonServiceCallback<BaseData>?
){
mOCHTaxiServiceApi.cancelOrder(
data = CancelOrderReqBean(MoGoAiCloudClientConfig.getInstance().sn,orderNo)
).transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "cancelOrder"))
}
/**
* 取消订单
*/
@JvmStatic
fun contrailList(
context: Context,linIds: MutableList<Int>,
callback: OchCommonServiceCallback<ContrailListRespBean>?
){
mOCHTaxiServiceApi.contrailList(
data = ContrailListReqBean(linIds)
).transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "contrailList"))
}
}

View File

@@ -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<StartServiceRespBean>
@@ -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<BaseData>
/**
@@ -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<QueryCurrentTaskRespBean>
/**
@@ -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<BaseData>
@@ -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<BaseData>
@@ -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<PrepareTaskRespBean>
//
// //服务完成
// /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<BaseData>
/**
* 取消订单
*/
@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<BaseData>
/**
* 批量查询轨迹
*/
@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<ContrailListRespBean>
/**
* 司机手动点击跳过乘客验证
*/
@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<BaseData>
}

View File

@@ -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<TaxiUnmannedViewModel>()
@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
)
) {
("<font color=\"#CAD6FF\">免费等待至 </font>"
+ "<b><font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(
currentCale,
DateTimeUtil.HH_mm
) + "</big></b></font>")
} else {
("<font color=\"#CAD6FF\">免费等待至</font>"
+ "<font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(
currentCale,
DateTimeUtil.MM_dd_HH_mm
) + "</big></font>")
}
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) {
("<font color=\"#CAD6FF\">乘客将于</font><br>"
+ "<b><font color=\"#FFFFFF\"><big><big>" + DateTimeUtil.formatCalendarToString(
startCale,
DateTimeUtil.HH_mm
) + "</big></big></font></b>"
+ "<font color=\"#CAD6FF\"> 用车</font>")
} else {
("<font color=\"#CAD6FF\">乘客将于</font><br>"
+ "<b><font color=\"#FFFFFF\"><big><big>" + DateTimeUtil.formatCalendarToString(
startCale,
DateTimeUtil.MM_dd_HH_mm
) + "</big></big></font></b>"
+ "<font color=\"#CAD6FF\"> 用车</font>")
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
)
) {
("<font color=\"#CAD6FF\">免费等待至 </font>"
+ "<b><font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(
currentCale,
DateTimeUtil.HH_mm
) + "</big></b></font>")
} else {
("<font color=\"#CAD6FF\">免费等待至</font>"
+ "<font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(
currentCale,
DateTimeUtil.MM_dd_HH_mm
) + "</big></font>")
}
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 =
("<font color=\"#CAD6FF\">里程 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> " + disUnit + "</font>"
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<b><font color=\"#FFFFFF\">" + min + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>")
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<Double>,
// 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)

View File

@@ -167,14 +167,6 @@ public class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
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

View File

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

View File

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

View File

@@ -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<Site>) : TaskUiState()
}
sealed class OrderUiState{
sealed class OrderUiState {
object INIT : OrderUiState()
data class SUCCESS(val models: List<OrderDetail>) : OrderUiState()
}
sealed class TaskAndOrderUiState {
object INIT : TaskAndOrderUiState()
data class SUCCESS(val model: QueryCurrentTaskRespBean.Result?) : TaskAndOrderUiState()
}
data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiState

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="@dimen/dp_8"/>
<solid android:color="#3BC593"/>
</shape>

View File

@@ -15,7 +15,7 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<TextView
android:id="@+id/no_order_data_tv"
android:id="@+id/noOrderDataTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#91A1EA"

View File

@@ -5,10 +5,16 @@
android:layout_width="@dimen/module_och_taxi_panel_width"
android:layout_height="match_parent"
android:background="@drawable/taxi_order_viewpager_bg"
android:orientation="vertical"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/mBeingOrderLayout"
android:layout_width="@dimen/module_och_taxi_panel_width"
android:layout_height="match_parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskStatus"
android:layout_width="wrap_content"
@@ -22,7 +28,7 @@
android:text="前往接驾"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskType"
android:id="@+id/taskTypeTv"
android:layout_width="@dimen/dp_92"
android:layout_height="@dimen/dp_38"
app:layout_constraintStart_toEndOf="@+id/taskStatus"
@@ -161,9 +167,12 @@
android:id="@+id/taskOtherInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_68"
android:layout_marginBottom="@dimen/dp_40"
android:textSize="@dimen/dp_30"
android:textColor="@color/station_tag_color"
android:text="距离--公里, 用时间--分钟"
app:layout_constraintLeft_toLeftOf="@+id/taskStatus"
app:layout_constraintTop_toBottomOf="@+id/endStationName"/>
app:layout_constraintBottom_toTopOf="@+id/taskClickBtn" />
<androidx.appcompat.widget.AppCompatTextView
@@ -179,7 +188,7 @@
<include
android:id="@+id/being_no_data_view"
android:id="@+id/noTaskData"
layout="@layout/taxi_no_data_common_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@@ -48,5 +48,16 @@
<string name="taxi_switch_line_btn_warning1">自动驾驶状态中,不可结束路线</string>
<string name="task_start_to_virtual_site">前往出车点</string>
<string name="task_start_end_site">前往送驾</string>
<string name="task_start_start_site">前往接驾</string>
<string name="task_current_loc">当前位置</string>
<string name="task_order">运营单</string>
<string name="task_exercise">演练单</string>
<string name="arrived_start_site">等待乘客</string>
<string name="passenger_cancel_order">乘客已取消</string>
<string name="waiting_server">待服务</string>
<!-- endregion -->
</resources>