[6.0.0] opt
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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; //当日完成订单数
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"))
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user