[Taxi无人化] refactor: 抽取task相关;

This commit is contained in:
aibingbing
2023-08-23 14:08:29 +08:00
parent a563256bef
commit f6e88fae83
9 changed files with 384 additions and 369 deletions

View File

@@ -1,5 +1,7 @@
package com.mogo.och.taxi.bean
import android.text.Spanned
import androidx.core.text.HtmlCompat
import com.mogo.eagle.core.data.BaseData
/**
@@ -44,8 +46,10 @@ data class OrderDetail(
}
}
data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double,
var wgs84Lon: Double, var wgs84Lat: Double) {
data class Site(
var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double,
var wgs84Lon: Double, var wgs84Lat: Double
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
@@ -69,6 +73,16 @@ data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() {
var startSite: Site?, var endSite: Site?,
var order: OrderDetail?
) {
companion object {
@JvmStatic
fun getCurrentTaskTotalAndDurationHtml(mileage: Float, duration: Int): Spanned {
val strHtml =
("<font color=\"#CAD6FF\">全程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
return HtmlCompat.fromHtml(strHtml, HtmlCompat.FROM_HTML_MODE_LEGACY)
}
}
// servingStatus = 0 //暂停接单 = 1 //开始接单
//taskType = 1 //虚拟任务 = 2 //接驾任务 = 3 //送驾任务
//currentStatus 0空闲 1:获取任务 2:开始任务 3:到达目的地
@@ -95,8 +109,8 @@ data class StartTaskReqBean(var sn: String, var lineId: Long)
data class ArriveSiteReqBean(var sn: String, var siteId: Long)
data class PrepareTaskReqBean(var sn: String, var siteId: Long)
data class PrepareTaskRespBean(var data: Result?): BaseData(){ //taskType 1:虚拟任务 2:接驾任务3:送驾任务
data class Result(
data class PrepareTaskRespBean(var data: Result?) : BaseData() { //taskType 1:虚拟任务 2:接驾任务3:送驾任务
data class Result(
var lineId: Long, var cityCode: Int, var taskType: Int,
var startSite: Site, var endSite: Site
)
@@ -106,18 +120,18 @@ data class JumpPassengerCheckReqBean(var sn: String, var orderNo: String)
data class CancelOrderReqBean(var sn: String, var orderNo: String, var cancelType: Int)
data class OrderCompletedReqBean(var sn: String, var orderNo: String)
data class QueryCarOrderByNoReqBean(var sn: String, var orderNo: String)
data class QueryCarOrderByNoRespBean(var data: Result): BaseData(){
data class QueryCarOrderByNoRespBean(var data: Result) : BaseData() {
data class Result(
var sn: String, var orderNo: String, var orderStatus: Int,
var bookingUserPhone: String, var businessType: String,
var mileage: Float,var duration: Float,var passengerSize: Int
var mileage: Float, var duration: Float, var passengerSize: Int
)
}
data class ContrailListRespBean(var data: MutableList<Result>?) //轨迹路线集合
: BaseData() {
data class Result(
var lineId: Long,var lineName: String, var csvFileUrl: String, var csvFileMd5: String,
var lineId: Long, var lineName: String, 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

@@ -1,12 +1,10 @@
package com.mogo.och.taxi.ui.base
import android.os.Build
import android.os.Bundle
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import androidx.fragment.app.FragmentTransaction
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.commons.module.status.MogoStatusManager
@@ -21,7 +19,7 @@ import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.model.TaxiModel
import com.mogo.och.taxi.network.LoginBusImpl
import com.mogo.och.taxi.ui.TaxiPersonalDialogFragment
import com.mogo.och.taxi.ui.TaxiServerOrdersFragment
import com.mogo.och.taxi.ui.TaxiTaskTabFragment
import com.mogo.och.taxi.utils.TPRouteDataTestUtils
import kotlinx.android.synthetic.main.taxi_base_fragment.module_mogo_och_operation_status
import kotlinx.android.synthetic.main.taxi_base_fragment.taxi_driver_role_tv
@@ -48,7 +46,7 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
}
}
private var servedOrdersFragment: WeakReference<TaxiServerOrdersFragment>? = null
private var taskTabFragment: WeakReference<TaxiTaskTabFragment>? = null
private var personalDialogFragment: WeakReference<TaxiPersonalDialogFragment>? = null
private var loginService: LoginService? = null
@@ -126,10 +124,10 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
}
private fun initFragment() {
servedOrdersFragment = WeakReference(TaxiServerOrdersFragment.newInstance())
taskTabFragment = WeakReference(TaxiTaskTabFragment.newInstance())
val transaction: FragmentTransaction = childFragmentManager.beginTransaction()
//默认显示OCHTaxiServerOrdersFragment
servedOrdersFragment?.get()?.let {
taskTabFragment?.get()?.let {
transaction.add(R.id.fragment_container, it).show(
it
)
@@ -143,14 +141,13 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
override fun onChangeOperationStatus() {
super.onChangeOperationStatus()
if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return
servedOrdersFragment!!.get()!!.onChangeOperationStatus()
if (null == taskTabFragment || taskTabFragment!!.get() == null) return
taskTabFragment!!.get()!!.onOperationStatusChanged()
}
@RequiresApi(Build.VERSION_CODES.N)
fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return
servedOrdersFragment!!.get()!!.updateOrderChanged(taskAndOrder)
fun updateNextTaskFragment(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
if (null == taskTabFragment || taskTabFragment!!.get() == null) return
taskTabFragment!!.get()!!.updateOrderChanged(taskAndOrder)
}
fun switchVRFlatMode(isVRMode: Boolean) {
@@ -211,8 +208,8 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
fun onNaviToEnd(isAmap: Boolean, isShow: Boolean) {
if (isAmap) {
if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return
servedOrdersFragment!!.get()!!.onNaviToEndAMap(isShow)
if (null == taskTabFragment || taskTabFragment!!.get() == null) return
taskTabFragment!!.get()!!.onNaviToEndAMap(isShow)
} else if (isShow) { //使用routing数据
showRoutingToStationFragment(true)
} else {
@@ -247,8 +244,8 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
}
fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) {
if (null == servedOrdersFragment || servedOrdersFragment!!.get() == null) return
servedOrdersFragment!!.get()!!.onCurrentOrderDistToEndChanged(meters, timeInSecond)
if (null == taskTabFragment || taskTabFragment!!.get() == null) return
taskTabFragment!!.get()!!.onCurrentOrderDistToEndChanged(meters, timeInSecond)
}
private fun testRouteInfoUpload() {

View File

@@ -8,7 +8,6 @@ import android.widget.LinearLayout
import com.mogo.eagle.core.network.utils.GsonUtil
import com.mogo.och.taxi.R
import com.mogo.och.taxi.model.TaxiModel
import kotlinx.android.synthetic.main.taxi_debug_order.view.orderDebugContainer
import kotlinx.android.synthetic.main.taxi_debug_order.view.orderInfo
import kotlinx.android.synthetic.main.taxi_debug_order.view.orderToStartLines
import kotlinx.android.synthetic.main.taxi_debug_order.view.taskEndSite
@@ -22,14 +21,14 @@ import kotlinx.android.synthetic.main.taxi_debug_order.view.test_bar_current_sto
import kotlinx.android.synthetic.main.taxi_debug_order.view.test_bar_current_traj_md5
import kotlinx.android.synthetic.main.taxi_debug_order.view.test_bar_current_traj_md5_dpqp
class OrderDebugView @JvmOverloads constructor(
class DebugView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
defStyleRes: Int = 0
) : LinearLayout(context, attrs, defStyleAttr, defStyleRes) {
companion object {
const val TAG = "OrderDebugView"
const val TAG = "DebugView"
}
init {

View File

@@ -1,7 +1,6 @@
package com.mogo.och.taxi.ui
import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Build
@@ -9,6 +8,7 @@ import android.os.Bundle
import android.text.Html
import android.view.View
import androidx.annotation.RequiresApi
import androidx.core.text.HtmlCompat
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.amap.api.navi.model.NaviLatLng
@@ -16,8 +16,6 @@ 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
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverlayManager
import com.mogo.eagle.core.network.utils.GsonUtil
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
@@ -25,14 +23,10 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_
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
import com.mogo.map.overlay.point.Point
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
import com.mogo.och.common.module.map.ICommonNaviChangedCallback
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.NumberFormatUtil
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
@@ -45,26 +39,26 @@ 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.base.TaxiFragment
import com.mogo.och.taxi.ui.task.TaxiCurrentTaskViewModel
import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState
import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
import com.mogo.och.taxi.utils.MapMakerManager
import kotlinx.android.synthetic.main.task_fragment_current.cancelOrder
import kotlinx.android.synthetic.main.task_fragment_current.endPoint
import kotlinx.android.synthetic.main.task_fragment_current.endStationName
import kotlinx.android.synthetic.main.task_fragment_current.mBeingOrderLayout
import kotlinx.android.synthetic.main.task_fragment_current.naviToEnd
import kotlinx.android.synthetic.main.task_fragment_current.naviToStart
import kotlinx.android.synthetic.main.task_fragment_current.noTaskData
import kotlinx.android.synthetic.main.task_fragment_current.orderPhoneAndNum
import kotlinx.android.synthetic.main.task_fragment_current.startPoint
import kotlinx.android.synthetic.main.task_fragment_current.startStationName
import kotlinx.android.synthetic.main.task_fragment_current.taskClickBtn
import kotlinx.android.synthetic.main.task_fragment_current.taskOtherInfo
import kotlinx.android.synthetic.main.task_fragment_current.taskStatus
import kotlinx.android.synthetic.main.task_fragment_current.taskTypeTv
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.endPoint
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.startPoint
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
@@ -74,155 +68,141 @@ import kotlin.math.roundToInt
* @author: wangmingjun
* @date: 2023/7/24
*/
class TaxiBeingTaskFragment : BaseFragment(),
class TaxiCurrentTaskFragment : BaseFragment(),
View.OnClickListener, ICommonNaviChangedCallback {
private lateinit var mViewModel : TaxiUnmannedViewModel
private lateinit var mViewModel: TaxiCurrentTaskViewModel
private var mCurrentTaskWithOrder: QueryCurrentTaskRespBean.Result? = null
@Volatile
private var mTtsLessThan200Tip = 0 //离终点200米提示播报
private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null
private var mCurrentUntruthTask: StartServiceRespBean.Result? = null
// 开始接单后 需要将车开到最近的一个站点就位,然后才能开启 无人化 流程
private var mDriveToNearestStationTask: StartServiceRespBean.Result? = null
companion object {
const val TAG = "TaxiBeingTaskFragment"
@SuppressLint("StaticFieldLeak")
private var mActivity: Activity? = null
@SuppressLint("StaticFieldLeak")
const val TAG = "TaxiCurrentTaskFragment"
private var mTaxiFragment: TaxiFragment? = null
fun newInstance(
activity: Activity?,
taxiFragment: TaxiFragment?
): TaxiBeingTaskFragment {
mActivity = activity
fun newInstance(taxiFragment: TaxiFragment?): TaxiCurrentTaskFragment {
mTaxiFragment = taxiFragment
val args = Bundle()
val fragment = TaxiBeingTaskFragment()
val fragment = TaxiCurrentTaskFragment()
fragment.arguments = args
return fragment
}
}
override fun getLayoutId(): Int {
return R.layout.unmanned_being_order
return R.layout.task_fragment_current
}
override fun getTagName(): String {
return "TaxiBeingTaskFragment"
return "TaxiCurrentTaskFragment"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
d("viewModel ==", "TaxiBeingTaskFragment onCreate")
mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory())[TaxiUnmannedViewModel::class.java]
mViewModel = ViewModelProvider(
this,
ViewModelProvider.NewInstanceFactory()
)[TaxiCurrentTaskViewModel::class.java]
}
@RequiresApi(Build.VERSION_CODES.N)
override fun initViews() {
initNaviView()
isHaveBeingOrder(false)
initOnClickListener()
//任意模式下调试信息都打开
initOrderTestBar()
initData()
initContainerView(false)
initTaskDebugViewListener()
initViewModelObserver()
}
@RequiresApi(Build.VERSION_CODES.N)
private fun initData() {
/**
* 是否有正在进行的订单进行UI显示
*
* @param being
*/
private fun initContainerView(hasCurrentTask: Boolean) {
d(
M_TAXI + TAG,
"hasCurrentTask = $hasCurrentTask"
)
try {
if (hasCurrentTask) {
noTaskData.visibility = View.GONE
mBeingOrderLayout.visibility = View.VISIBLE
} else {
noTaskData.visibility = View.VISIBLE
noOrderDataTv.text = "暂无进行中订单"
mBeingOrderLayout.visibility = View.GONE
}
} catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况
TaxiModel.clearCurrentOCHOrder()
}
}
private fun initOnClickListener() {
naviToStart.setOnClickListener(this)
naviToEnd.setOnClickListener(this)
cancelOrder.setOnClickListener(this)
taskStatus.setOnClickListener(this)
taskClickBtn.setOnClickListener(this)
}
private fun initTaskDebugViewListener() {
taskStatus.setOnLongClickListener {
mTaxiFragment?.clickOrderDebugView()
false
}
}
private fun initViewModelObserver() {
mViewModel.sendUiIntent(UnmannedIntent.StartTaskOrOrderLooper)
//监听返回的数据状态
lifecycleScope.launchWhenStarted {
mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {taskAndOrderUiState ->
d(TAG,"uiStateFlow-taskAndOrderUiState: $taskAndOrderUiState")
when(taskAndOrderUiState){
is TaskAndOrderUiState.INIT -> {
mViewModel.uiStateFlow.map { it.taskAndOrderUiState }.collect { taskAndOrderUiState ->
d(TAG, "uiStateFlow-initViewModelObserver: $taskAndOrderUiState")
when (taskAndOrderUiState) {
is TaskAndOrderUiState.INIT -> {
}
is TaskAndOrderUiState.TASKANDORDER -> {
mDriveToNearestStationTask = taskAndOrderUiState.untruthTask
mCurrentTaskWithOrder = taskAndOrderUiState.taskAndOrder
if ((taskAndOrderUiState.untruthTask == null
&& mCurrentTaskWithOrder != null
&& mCurrentTaskWithOrder!!.endSite == null)
|| mCurrentTaskWithOrder == null
) {
initContainerView(false)
removeAllMapMarker()
return@collect
}
is TaskAndOrderUiState.TASKANDORDER -> {
mCurrentUntruthTask = taskAndOrderUiState.untruthTask
mCurrentTaskAndOrder = taskAndOrderUiState.taskAndOrder
if ((taskAndOrderUiState.untruthTask == null && mCurrentTaskAndOrder != null
&& mCurrentTaskAndOrder!!.endSite == null) || mCurrentTaskAndOrder == null){
isHaveBeingOrder(false)
removeAllMapMarker()
return@collect
}
if (taskAndOrderUiState.untruthTask != null){
updateUntruthTask(taskAndOrderUiState.untruthTask)
}else{
updateReserveOrderChanged(taskAndOrderUiState.taskAndOrder)
updateCurrentTaskAndOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
}
}
is TaskAndOrderUiState.UPDATEORDERMILEANDDUR -> {
updateOrderTotalMilAndDur(taskAndOrderUiState.mileage,taskAndOrderUiState.duration)
if (taskAndOrderUiState.untruthTask != null) {
updateDriveToNearestStationTaskView(taskAndOrderUiState.untruthTask)
} else {
updateNextTaskFragment(taskAndOrderUiState.taskAndOrder)
updateCurrentTaskAndOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
}
}
is TaskAndOrderUiState.UPDATEORDERMILEANDDUR -> {
taskOtherInfo.text =
QueryCurrentTaskRespBean.Result.getCurrentTaskTotalAndDurationHtml(
taskAndOrderUiState.mileage,
taskAndOrderUiState.duration
)
}
}
}
}
}
@RequiresApi(Build.VERSION_CODES.N)
private fun updateOrderTotalMilAndDur(mileage: Float, duration: Int) {
val strHtml2 =
("<font color=\"#CAD6FF\">全程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
}
@RequiresApi(Build.VERSION_CODES.N)
private fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
mTaxiFragment?.let {
it.updateReserveOrderChanged(taskAndOrder)
}
}
fun onChangeOperationStatus(){
mViewModel.sendUiIntent(UnmannedIntent.StartOrPauseReceivingOrder)
}
private fun updateUntruthTask(untruthTask: StartServiceRespBean.Result?) {
if (untruthTask == null) return
isHaveBeingOrder(true)
updateUntruthTaskView()
updateUntruthTaskUIData(untruthTask.siteName)
updateUntruthTaskOtherInfo()
}
private fun updateUntruthTaskOtherInfo() {
if (mCurrentUntruthTask != null){
startNaviToStation(false, mCurrentUntruthTask!!.gcjLat,
mCurrentUntruthTask!!.gcjLon)
}
}
private fun updateUntruthTaskUIData(siteName: String) {
taskStatus.text = resources.getString(R.string.task_start_to_virtual_site)
startStationName.text = resources.getString(R.string.task_current_loc)
endStationName.text = siteName
setPointBlueGreen()
}
private fun setPointBlueGreen(){
startPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big)
endPoint.setImageResource(R.drawable.taxi_driver_circle_green_big)
}
private fun setPointGreenBlue(){
startPoint.setImageResource(R.drawable.taxi_driver_circle_green_big)
endPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big)
}
private fun updateUntruthTaskView() {
taskStatus.visibility = View.VISIBLE
private fun updateDriveToNearestStationTaskView(driveToNearestStationTask: StartServiceRespBean.Result?) {
if (driveToNearestStationTask == null) return
initContainerView(true)
// DriverToNearestStationTask 更新
taskStatus.visibility = View.VISIBLE
taskTypeTv.visibility = View.GONE
cancelOrder.visibility = View.GONE
orderPhoneAndNum.visibility = View.GONE
@@ -231,37 +211,63 @@ class TaxiBeingTaskFragment : BaseFragment(),
taskClickBtn.visibility = View.GONE
naviToStart.visibility = View.GONE
naviToEnd.visibility = View.VISIBLE
taskOtherInfo.visibility = View.VISIBLE
taskOtherInfo.visibility = View.VISIBLE
// 更新任务状态,起点,终点
taskStatus.text = resources.getString(R.string.task_start_to_virtual_site)
startStationName.text = resources.getString(R.string.task_current_loc)
endStationName.text = driveToNearestStationTask.siteName
updateStartAndEndStationPointByStatus(true)
// 使用高德获取导航数据
if (mDriveToNearestStationTask != null) {
startNaviToStation(
false, mDriveToNearestStationTask!!.gcjLat,
mDriveToNearestStationTask!!.gcjLon
)
}
}
private fun initOnClickListener() {
cancelOrder.setOnClickListener(this)
taskStatus.setOnClickListener(this)
taskClickBtn.setOnClickListener(this)
private fun updateStartAndEndStationPointByStatus(isGoingToStation: Boolean) {
if (isGoingToStation) {// 即将到达的站点
startPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big)
endPoint.setImageResource(R.drawable.taxi_driver_circle_green_big)
} else {// 到达站点 或 已经经过的站点
startPoint.setImageResource(R.drawable.taxi_driver_circle_green_big)
endPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big)
}
}
private fun initNaviView() {
naviToStart.setOnClickListener(this)
naviToEnd.setOnClickListener(this)
private fun updateNextTaskFragment(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
mTaxiFragment?.let {
it.updateNextTaskFragment(taskAndOrder)
}
}
private fun updateRemainDistanceAndTime(isVoicePlay: Boolean){
fun onOperationStatusChanged() {
mViewModel.sendUiIntent(UnmannedIntent.StartOrPauseReceivingOrder)
}
private fun updateRemainDistanceAndTime(isVoicePlay: Boolean) {
//根据任务状态计算剩余历程和时间
if (mCurrentTaskAndOrder == null) return
if (mCurrentTaskAndOrder!!.endSite != null
&& mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code){
startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.endSite!!.gcjLat,
mCurrentTaskAndOrder!!.endSite!!.gcjLon)
if (mCurrentTaskWithOrder == null) return
if (mCurrentTaskWithOrder!!.endSite != null
&& mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code
) {
startNaviToStation(
isVoicePlay, mCurrentTaskWithOrder!!.endSite!!.gcjLat,
mCurrentTaskWithOrder!!.endSite!!.gcjLon
)
return
}
if (mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code){ //演练任务和送驾任务
startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.startSite!!.gcjLat,
mCurrentTaskAndOrder!!.startSite!!.gcjLon)
if (mCurrentTaskWithOrder!!.startSite != null
&& mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.GetTask.code
) { //演练任务和送驾任务
startNaviToStation(
isVoicePlay, mCurrentTaskWithOrder!!.startSite!!.gcjLat,
mCurrentTaskWithOrder!!.startSite!!.gcjLon
)
}
}
@@ -273,13 +279,14 @@ class TaxiBeingTaskFragment : BaseFragment(),
fun updateCurrentTaskAndOrderStatusChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
if (taskAndOrder == null) return
if ((taskAndOrder.endSite == null || taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code)
&& taskAndOrder.order == null){
isHaveBeingOrder(false)
&& taskAndOrder.order == null
) {
initContainerView(false)
removeAllMapMarker()
return
}
isHaveBeingOrder(true)
initContainerView(true)
/**
* 根据任务类型判断任务显示,
* 虚拟单, 显示在进行中 前往上车点
@@ -292,30 +299,33 @@ class TaxiBeingTaskFragment : BaseFragment(),
val endSite = taskAndOrder.endSite //进行的任务
val currentStatus = taskAndOrder.currentStatus // 任务的状态
updateUIShowStatus(taskType,currentStatus,order)
updateUIShowStatus(taskType, currentStatus, order)
when (taskType) {
TaskTypeEnum.VirtualTask.code -> {// 演练任务
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code){
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) {
updateOrderUI(order)
return
}
if (startSite == null || endSite == null) return
taskStatus.text = resources.getString(R.string.task_start_end_site)
taskTypeTv.background = resources.getDrawable(R.drawable.task_unreal_type_btn_bg,null)
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
setPointBlueGreen()
updateStartAndEndStationPointByStatus(true)
}
TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务
TaskTypeEnum.ToOrderEndTask.code, TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务
if (order == null) return
updateOrderUI(order)
}
TaskTypeEnum.None.code -> {
if (order != null){
if (order != null) {
updateOrderUI(order)
}
}
@@ -327,22 +337,23 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
private fun updateMapMarkers() {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.endSite != null ) {
when(mCurrentTaskAndOrder!!.currentStatus){
if (mCurrentTaskWithOrder != null && mCurrentTaskWithOrder!!.startSite != null
&& mCurrentTaskWithOrder!!.endSite != null
) {
when (mCurrentTaskWithOrder!!.currentStatus) {
TaskStatusEnum.GetTask.code -> {
setOrRemoveMapMaker(
true,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
mCurrentTaskWithOrder!!.startSite!!.wgs84Lat,
mCurrentTaskWithOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
mCurrentTaskWithOrder!!.endSite!!.wgs84Lat,
mCurrentTaskWithOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
@@ -351,15 +362,15 @@ class TaxiBeingTaskFragment : BaseFragment(),
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
mCurrentTaskWithOrder!!.startSite!!.wgs84Lat,
mCurrentTaskWithOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
mCurrentTaskWithOrder!!.endSite!!.wgs84Lat,
mCurrentTaskWithOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
@@ -368,47 +379,48 @@ class TaxiBeingTaskFragment : BaseFragment(),
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
mCurrentTaskWithOrder!!.startSite!!.wgs84Lat,
mCurrentTaskWithOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
false,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
mCurrentTaskWithOrder!!.endSite!!.wgs84Lat,
mCurrentTaskWithOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
}
}else{
d(M_TAXI + TAG,"CurrentTaskAndOrder == "+GsonUtil.jsonFromObject(mCurrentTaskAndOrder))
} else {
d(
M_TAXI + TAG,
"CurrentTaskAndOrder == " + GsonUtil.jsonFromObject(mCurrentTaskWithOrder)
)
}
}
@RequiresApi(Build.VERSION_CODES.N)
private fun updateOrderUI(order: OrderDetail) {
taskTypeTv.text = resources.getString(R.string.task_order)
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null)
orderPhoneAndNum.text = Html.fromHtml("<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#6473B2\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",Html.FROM_HTML_MODE_LEGACY)
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg, null)
orderPhoneAndNum.text = Html.fromHtml(
"<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#6473B2\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",
Html.FROM_HTML_MODE_LEGACY
)
startStationName.text = order.orderStartSite?.siteName
endStationName.text = order.orderEndSite?.siteName
when(order.orderStatus){
when (order.orderStatus) {
TaxiOrderStatusEnum.None.code -> { //无
isHaveBeingOrder(false)
initContainerView(false)
}
TaxiOrderStatusEnum.ArriveAtEnd.code -> { //到达目的地
taskStatus.text = resources.getString(R.string.task_start_end_site)
setPointBlueGreen()
updateStartAndEndStationPointByStatus(true)
updateOrderBottomBtn(
getString(R.string.module_och_taxi_order_server_end),
Color.parseColor("#FFFFFF"),
@@ -420,7 +432,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
TaxiOrderStatusEnum.OnTheWayToEnd.code -> { //送驾中
taskStatus.text = resources.getString(R.string.task_start_end_site)
setPointBlueGreen()
updateStartAndEndStationPointByStatus(true)
updateOrderBottomBtn(
getString(R.string.module_och_taxi_order_close),
Color.parseColor("#FFFFFF"),
@@ -429,26 +441,25 @@ class TaxiBeingTaskFragment : BaseFragment(),
)
}
TaxiOrderStatusEnum.UserArriveAtStart.code,TaxiOrderStatusEnum.ArriveAtStart.code -> {
TaxiOrderStatusEnum.UserArriveAtStart.code, TaxiOrderStatusEnum.ArriveAtStart.code -> {
//乘客到达上车点,验证成功 ; 到达乘客上车点
setPointGreenBlue()
updateStartAndEndStationPointByStatus(false)
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
)
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()
hideNavi()
}
TaxiOrderStatusEnum.OnTheWayToStart.code -> { //前往上车地点
taskStatus.text = resources.getString(R.string.task_start_start_site)
setPointGreenBlue()
updateStartAndEndStationPointByStatus(false)
updateOrderBottomBtn(
getString(R.string.module_och_taxi_order_server_start),
Color.parseColor("#4DFFFFFF"),
@@ -456,7 +467,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
false
)
}
}
}
@@ -484,16 +494,17 @@ class TaxiBeingTaskFragment : BaseFragment(),
DateTimeUtil.MM_dd_HH_mm
) + "</big></font>")
}
taskOtherInfo.text = Html.fromHtml(strHtml13,Html.FROM_HTML_MODE_LEGACY)
taskOtherInfo.text = Html.fromHtml(strHtml13, Html.FROM_HTML_MODE_LEGACY)
}
private fun updateUIShowStatus(taskType: Int, currentStatus: Int, order: OrderDetail?) {
when (taskType) {
TaskTypeEnum.None.code ->{
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code){
TaskTypeEnum.None.code -> {
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) {
handleOrderView(order)
}
}
TaskTypeEnum.VirtualTask.code -> { //演练任务
cancelOrder.visibility = View.GONE
orderPhoneAndNum.visibility = View.GONE
@@ -501,10 +512,13 @@ class TaxiBeingTaskFragment : BaseFragment(),
// currentStatus 0空闲 1:获取任务 2:开始任务 3:到达目的地
naviToStart.visibility = View.GONE
taskTypeTv.visibility = View.VISIBLE
naviToEnd.visibility = if (currentStatus >= TaskStatusEnum.StartTask.code) View.VISIBLE else View.GONE
taskOtherInfo.visibility = if (currentStatus == TaskStatusEnum.GetTask.code) View.GONE else View.VISIBLE
naviToEnd.visibility =
if (currentStatus >= TaskStatusEnum.StartTask.code) View.VISIBLE else View.GONE
taskOtherInfo.visibility =
if (currentStatus == TaskStatusEnum.GetTask.code) View.GONE else View.VISIBLE
}
TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 运营单(接驾任务、送驾任务)
TaskTypeEnum.ToOrderEndTask.code, TaskTypeEnum.ToOrderStartTask.code -> {// 运营单(接驾任务、送驾任务)
if (order == null) return
handleOrderView(order)
}
@@ -520,10 +534,12 @@ class TaxiBeingTaskFragment : BaseFragment(),
// orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点,
// 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消
naviToStart.visibility = if (order.orderStatus
== TaxiOrderStatusEnum.OnTheWayToStart.code) View.VISIBLE else View.GONE
== TaxiOrderStatusEnum.OnTheWayToStart.code
) View.VISIBLE else View.GONE
naviToEnd.visibility = if (order.orderStatus
== TaxiOrderStatusEnum.OnTheWayToEnd.code) View.VISIBLE else View.GONE
== TaxiOrderStatusEnum.OnTheWayToEnd.code
) View.VISIBLE else View.GONE
taskOtherInfo.visibility = View.VISIBLE
}
@@ -535,6 +551,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
mTaxiFragment?.showAmapNaviToStationFragment(false)
mTaxiFragment?.showRoutingToStationFragment(false)
requireParentFragment()
}
private fun startNaviToStation(isVoicePlay: Boolean, stationLat: Double, stationLng: Double) {
@@ -557,11 +574,10 @@ class TaxiBeingTaskFragment : BaseFragment(),
* @param meters m
* @param timeInSecond
*/
@RequiresApi(Build.VERSION_CODES.N)
fun updateDistanceAndTime(meters: Long, timeInSecond: Long) {
// CallerLogger.INSTANCE.d(M_TAXI + TAG,"meters = "+meters+"timeInSecond ="+timeInSecond);
if (mCurrentTaskAndOrder == null) return
if (mCurrentTaskAndOrder!!.endSite == null && mCurrentUntruthTask == null) return
if (mCurrentTaskWithOrder == null) return
if (mCurrentTaskWithOrder!!.endSite == null && mDriveToNearestStationTask == null) return
var dis = "0"
var disUnit = "公里"
@@ -579,13 +595,12 @@ class TaxiBeingTaskFragment : BaseFragment(),
("<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>")
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
taskOtherInfo.text = HtmlCompat.fromHtml(strHtml2, HtmlCompat.FROM_HTML_MODE_LEGACY)
}
private fun speekVoice200mTipsOnce() {
mTtsLessThan200Tip = 1
showNotice(resources.getString(R.string.module_och_taxi_order_arrive_end_200m_tip))
}
// private fun speekVoice200mTipsOnce() {
// showNotice(resources.getString(R.string.module_och_taxi_order_arrive_end_200m_tip))
// }
override fun onDestroyView() {
super.onDestroyView()
@@ -593,13 +608,13 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
private fun startOrEndService() {
if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.order == null) return
val order = mCurrentTaskAndOrder!!.order
if (mCurrentTaskWithOrder == null || mCurrentTaskWithOrder!!.order == null) return
val order = mCurrentTaskWithOrder!!.order
if (TaxiOrderStatusEnum.ArriveAtStart.code == order!!.orderStatus) { //到达乘客上车点,司机可跳过乘客屏认证
mViewModel.sendUiIntent(UnmannedIntent.JumpPassengerCheckDone)
} else if (TaxiOrderStatusEnum.UserArriveAtStart.code == order.orderStatus){
} else if (TaxiOrderStatusEnum.UserArriveAtStart.code == order.orderStatus) {
mViewModel.sendUiIntent(UnmannedIntent.StartTask)
}else if (TaxiOrderStatusEnum.ArriveAtEnd.code == order.orderStatus) { //点击了完成服务,结束订单并更新订单信息
} else if (TaxiOrderStatusEnum.ArriveAtEnd.code == order.orderStatus) { //点击了完成服务,结束订单并更新订单信息
mViewModel.sendUiIntent(UnmannedIntent.JourneyCompleted)
} else if (TaxiOrderStatusEnum.OnTheWayToEnd.code == order.orderStatus) { //前往目的地过程中可提前结束行程
//自驾中提示,接管后才能结束
@@ -633,42 +648,20 @@ class TaxiBeingTaskFragment : BaseFragment(),
closeOrderDialog.show()
}
/**
* 是否有正在进行的订单进行UI显示
*
* @param being
*/
private fun isHaveBeingOrder(being: Boolean) {
d(
M_TAXI + TAG,
"isHaveBeingOrder = $being"
)
try {
if (being) {
noTaskData.visibility = View.GONE
mBeingOrderLayout.visibility = View.VISIBLE
} else {
noTaskData.visibility = View.VISIBLE
noOrderDataTv.text = "暂无进行中订单"
mBeingOrderLayout.visibility = View.GONE
}
} catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况
TaxiModel.clearCurrentOCHOrder()
}
}
override fun onClick(v: View) {
if (v.id == taskClickBtn.id) {
d(M_TAXI + TAG, taskStatus.text.toString())
startOrEndService()
} else if (v.id == cancelOrder.id) {
if (mCurrentTaskAndOrder!!.order != null){
TaxiOrderCancelDialog(mActivity,mCurrentTaskAndOrder!!.order!!.orderStatus
) {
mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(it))
if (mCurrentTaskWithOrder!!.order != null) {
activity?.also {
TaxiOrderCancelDialog(
it, mCurrentTaskWithOrder!!.order!!.orderStatus
) {
mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(it))
}.show()
}
.show()
}
} else if (v.id == naviToStart.id || v.id == naviToEnd.id) {
showNaviToEndStationFragment(true)
@@ -684,15 +677,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
mTaxiFragment?.startNaviToEndStation(isShow)
}
/**
* 订单流转debug START
*/
private fun initOrderTestBar() {
taskStatus.setOnLongClickListener {
mTaxiFragment?.clickOrderDebugView()
false
}
}
@RequiresApi(Build.VERSION_CODES.N)
override fun onCurrentNaviDistAndTimeChanged(meters: Int, timeInSecond: Long) {
@@ -712,15 +696,15 @@ class TaxiBeingTaskFragment : BaseFragment(),
updateRemainDistanceAndTime(false)
}, 2000)
UiThreadHandler.postDelayed({
if (mCurrentTaskAndOrder != null &&
mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code
if (mCurrentTaskWithOrder != null &&
mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.GetTask.code
) {
if (naviToStart.visibility == View.GONE) {
naviToStart.visibility = View.VISIBLE
}
}
if (mCurrentTaskAndOrder != null &&
mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code
if (mCurrentTaskWithOrder != null &&
mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code
) {
if (naviToEnd.visibility == View.GONE) {
naviToEnd.visibility = View.VISIBLE
@@ -730,15 +714,15 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
fun onNaviToEndAmap(isShow: Boolean) {
if (mCurrentTaskAndOrder == null) return
if (mCurrentTaskWithOrder == null) return
mTaxiFragment?.showAmapNaviToStationFragment(
if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
if (mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
isShow else true
)
updateRemainDistanceAndTime(
if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
if (mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
isShow else true
)
}
@@ -749,12 +733,14 @@ class TaxiBeingTaskFragment : BaseFragment(),
* @param uuid
* @param station
*/
private fun setOrRemoveMapMaker(isAdd: Boolean, uuid: String,
lat: Double, lon: Double, resourceId: Int) {
private fun setOrRemoveMapMaker(
isAdd: Boolean, uuid: String,
lat: Double, lon: Double, resourceId: Int
) {
if (isAdd) {
MapMakerManager.addMapMaker(TYPE_MARKER_TAXI_ORDER,uuid,lat, lon, resourceId)
MapMakerManager.addMapMaker(TYPE_MARKER_TAXI_ORDER, uuid, lat, lon, resourceId)
} else {
MapMakerManager.removeMapMaker(uuid,lat,lon)
MapMakerManager.removeMapMaker(uuid, lat, lon)
}
}
@@ -762,7 +748,12 @@ class TaxiBeingTaskFragment : BaseFragment(),
MapMakerManager.removeAllMapMarkerByOwner(TYPE_MARKER_TAXI_ORDER)
}
private fun updateOrderBottomBtn(txt: String?, txtColorId: Int, bgColorId: Int, isClickable: Boolean) {
private fun updateOrderBottomBtn(
txt: String?,
txtColorId: Int,
bgColorId: Int,
isClickable: Boolean
) {
taskClickBtn.text = txt
taskClickBtn.setTextColor(txtColorId)
val background =

View File

@@ -1,4 +1,4 @@
package com.mogo.och.taxi.model
package com.mogo.och.taxi.ui.task
import android.annotation.SuppressLint
import android.content.Context
@@ -31,6 +31,7 @@ import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxtServingStatusManager
import com.mogo.och.taxi.constant.TaxtServingStatusManager.isOpeningOrderStatus
import com.mogo.och.taxi.model.TaxiModel
import com.mogo.och.taxi.network.CarServiceManager
import com.mogo.och.taxi.network.CarServiceManager.cancelOrder
import com.mogo.och.taxi.network.CarServiceManager.contrailList
@@ -48,7 +49,7 @@ import java.util.concurrent.TimeUnit
* @author: wangmingjun
* @date: 2023/7/26
*/
class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
private var mInAndWaitServiceDisposable: Disposable? = null //进行中、待服务订单列表轮询
@@ -83,7 +84,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
is UnmannedIntent.CloseOrderByDriver -> {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){
val site = mCurrentTaskAndOrder!!.order!!.orderEndSite
TaxiModel.arriveSite(site!!.siteId,true)
TaxiModel.arriveSite(site!!.siteId, true)
}
}
@@ -237,7 +238,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
sendUiState {
copy(
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder,
TaxiModel.getCurUntruthTask())
TaxiModel.getCurUntruthTask()
)
)
}
}
@@ -257,7 +259,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
sendUiState {
copy(
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null,
TaxiModel.getCurUntruthTask())
TaxiModel.getCurUntruthTask()
)
)
}
}
@@ -339,7 +342,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
if (result.currentStatus <= TaskStatusEnum.StartTask.code){//任务执行中, 去加载下轨迹
d(TAG, "queryCurrentTaskOnce1 = by lineId query Contrail" )
TaxiModel.queryTaskContrail(Array(1) {result.lineId})
TaxiModel.queryTaskContrail(Array(1) { result.lineId })
}
if (result.taskType <= TaskTypeEnum.ToOrderStartTask.code
@@ -447,7 +450,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
+ ", isOpeningOrderStatus = ${isOpeningOrderStatus()}")
if (data?.data == null || data.code != 0) return
//去下载轨迹, 下发给工控机下载
TaxiModel.queryTaskContrail(Array(1) {data.data!!.lineId})
TaxiModel.queryTaskContrail(Array(1) { data.data!!.lineId })
}
override fun onFail(code: Int, msg: String?) {

View File

@@ -4,33 +4,31 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Build
import android.os.Bundle
import android.text.Html
import android.view.View
import androidx.annotation.RequiresApi
import androidx.core.text.HtmlCompat
import com.mogo.commons.mvp.BaseFragment
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.ui.base.TaxiFragment
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.taskTypeTv
import kotlinx.android.synthetic.main.task_fragment_current.endStationName
import kotlinx.android.synthetic.main.task_fragment_current.mBeingOrderLayout
import kotlinx.android.synthetic.main.task_fragment_current.naviToEnd
import kotlinx.android.synthetic.main.task_fragment_current.naviToStart
import kotlinx.android.synthetic.main.task_fragment_current.noTaskData
import kotlinx.android.synthetic.main.task_fragment_current.orderPhoneAndNum
import kotlinx.android.synthetic.main.task_fragment_current.startStationName
import kotlinx.android.synthetic.main.task_fragment_current.taskClickBtn
import kotlinx.android.synthetic.main.task_fragment_current.taskOtherInfo
import kotlinx.android.synthetic.main.task_fragment_current.taskTypeTv
/**
* @author: wangmingjun
* @date: 2023/7/24
*/
class TaxiReserveOrderFragment : BaseFragment() {
class TaxiNextTaskFragment : BaseFragment() {
private val mData: MutableList<QueryCurrentTaskRespBean.Result> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
@@ -38,34 +36,32 @@ class TaxiReserveOrderFragment : BaseFragment() {
}
override fun getLayoutId(): Int {
return R.layout.unmanned_being_order
return R.layout.task_fragment_current
}
override fun getTagName(): String {
return "TaxiReserveOrderFragment"
return "TaxiNextTaskFragment"
}
override fun initViews() {
showNoOrderView()
}
@RequiresApi(Build.VERSION_CODES.N)
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
if (model?.order == null) {
showNoOrderView()
return
}
if (model.taskType == TaskTypeEnum.VirtualTask.code){
if (model.taskType == TaskTypeEnum.VirtualTask.code) {
val order = model.order
updateOrderUI(order!!)
}else{
} else {
showNoOrderView()
}
}
@RequiresApi(Build.VERSION_CODES.N)
@SuppressLint("SetTextI18n")
private fun updateOrderUI(order: OrderDetail) {
showOrderView()
@@ -73,9 +69,12 @@ class TaxiReserveOrderFragment : BaseFragment() {
naviToStart.visibility = View.GONE
naviToEnd.visibility = View.GONE
orderPhoneAndNum.text = Html.fromHtml("<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#6473B2\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",Html.FROM_HTML_MODE_LEGACY)
orderPhoneAndNum.text = HtmlCompat.fromHtml(
"<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#6473B2\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",
HtmlCompat.FROM_HTML_MODE_LEGACY
)
order.orderStartSite?.let {
@@ -86,7 +85,7 @@ class TaxiReserveOrderFragment : BaseFragment() {
}
taskTypeTv.text = resources.getString(R.string.task_order)
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null)
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg, null)
updateOrderBottomBtn(
getString(R.string.waiting_server),
@@ -96,7 +95,12 @@ class TaxiReserveOrderFragment : BaseFragment() {
)
}
private fun updateOrderBottomBtn(txt: String?, txtColorId: Int, bgColorId: Int, isClickable: Boolean) {
private fun updateOrderBottomBtn(
txt: String?,
txtColorId: Int,
bgColorId: Int,
isClickable: Boolean
) {
taskClickBtn.text = txt
taskClickBtn.setTextColor(txtColorId)
val background =
@@ -117,18 +121,19 @@ class TaxiReserveOrderFragment : BaseFragment() {
companion object {
const val TAG = "TaxiReserveOrderFragment"
const val TAG = "TaxiNextTaskFragment"
@SuppressLint("StaticFieldLeak")
private var mTaxiFragment: TaxiFragment? = null
@SuppressLint("StaticFieldLeak")
private var mActivity: Activity? = null
fun newInstance(
activity: Activity?,
): TaxiReserveOrderFragment {
): TaxiNextTaskFragment {
mActivity = activity
val args = Bundle()
val fragment = TaxiReserveOrderFragment()
val fragment = TaxiNextTaskFragment()
fragment.arguments = args
return fragment
}

View File

@@ -3,12 +3,10 @@ package com.mogo.och.taxi.ui
import android.annotation.SuppressLint
import android.graphics.Color
import android.graphics.Typeface
import android.os.Build
import android.os.Bundle
import android.util.TypedValue
import android.view.View
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
@@ -27,18 +25,36 @@ import me.jessyan.autosize.utils.AutoSizeUtils
/**
* @author: wangmingjun
* @date: 2023/7/25
* @desc: 司机端任务fragment 容器展示了进行中待服务的任务信息
* 任务可以理解为对应的是一个自动驾驶任务
* 任务类型演练任务 / 接驾任务 / 送驾任务
* 订单是面向C端小程序的一个概念用户下单后产生的是一个订单后端会将一个订单分解成 接驾任务和送驾任务 并派发到
* 车端来执行
* 任务和订单的对应1.如果是一个演练任务是后端自动生成的没有和C端订单挂钩
* 2.如果是一个接驾任务 送驾任务是和一个实际的C端订单对应的
*/
class TaxiServerOrdersFragment : BaseFragment(){
class TaxiTaskTabFragment : BaseFragment() {
companion object {
const val TAG = "TaxiTaskTabFragment"
fun newInstance(): TaxiTaskTabFragment {
val args = Bundle()
val fragment = TaxiTaskTabFragment()
fragment.arguments = args
return fragment
}
}
private val mTabTitles = arrayOf("进行中", "待服务")
private val fragments: MutableList<Fragment> = ArrayList()
private var beingTaskFragment: TaxiBeingTaskFragment? = null
private var reserveOrdersFragment: TaxiReserveOrderFragment? = null
private val mFragments: MutableList<Fragment> = ArrayList()
private var currentTaskFragment: TaxiCurrentTaskFragment? = null
private var nextTaskFragment: TaxiNextTaskFragment? = null
override fun getLayoutId(): Int {
return R.layout.taxi_server_orders_panel
}
override fun getTagName(): String {
return "TaxiServerOrdersFragment"
return "TaxiTaskTabFragment"
}
override fun initViews() {
@@ -54,24 +70,25 @@ class TaxiServerOrdersFragment : BaseFragment(){
tabView.text = mTabTitles[i]
tabView.height = AutoSizeUtils.dp2px(context, 120f)
tab.customView = tabView
if (0 == i) {
module_och_taxi_tab.addTab(tab, true)
changeTabLayoutTabUI(tab, true)
beingTaskFragment = TaxiBeingTaskFragment.newInstance(
activity,
currentTaskFragment = TaxiCurrentTaskFragment.newInstance(
parentFragment as TaxiFragment?
)
fragments.add(beingTaskFragment!!)
mFragments.add(currentTaskFragment!!)
} else if (1 == i) {
module_och_taxi_tab.addTab(tab)
changeTabLayoutTabUI(tab, false)
reserveOrdersFragment = TaxiReserveOrderFragment.newInstance(
nextTaskFragment = TaxiNextTaskFragment.newInstance(
activity
)
fragments.add(reserveOrdersFragment!!)
mFragments.add(nextTaskFragment!!)
}
}
d(SceneConstant.M_TAXI + TAG, "activity=$activity")
module_och_taxi_tab.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
module_och_taxi_view_pager.currentItem = tab.position
@@ -138,11 +155,11 @@ class TaxiServerOrdersFragment : BaseFragment(){
SceneConstant.M_TAXI + TAG,
"getItem=$position"
)
return fragments[position]
return mFragments[position]
}
override fun getCount(): Int {
return fragments.size
return mFragments.size
}
override fun getPageTitle(position: Int): CharSequence {
@@ -155,33 +172,22 @@ class TaxiServerOrdersFragment : BaseFragment(){
}
fun onNaviToEndAMap(isShow: Boolean) {
if (null == beingTaskFragment) return
beingTaskFragment!!.onNaviToEndAmap(isShow)
if (null == currentTaskFragment) return
currentTaskFragment!!.onNaviToEndAmap(isShow)
}
fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) {
if (null == beingTaskFragment) return
beingTaskFragment!!.updateDistanceAndTime(meters, timeInSecond)
if (null == currentTaskFragment) return
currentTaskFragment!!.updateDistanceAndTime(meters, timeInSecond)
}
fun onChangeOperationStatus(){
if (null == beingTaskFragment) return
beingTaskFragment!!.onChangeOperationStatus()
fun onOperationStatusChanged() {
if (null == currentTaskFragment) return
currentTaskFragment!!.onOperationStatusChanged()
}
@RequiresApi(Build.VERSION_CODES.N)
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?){
if (null == reserveOrdersFragment) return
reserveOrdersFragment!!.updateOrderChanged(model)
}
companion object {
const val TAG = "TaxiServerOrdersFragment"
fun newInstance(): TaxiServerOrdersFragment {
val args = Bundle()
val fragment = TaxiServerOrdersFragment()
fragment.arguments = args
return fragment
}
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
if (null == nextTaskFragment) return
nextTaskFragment!!.updateOrderChanged(model)
}
}

View File

@@ -15,7 +15,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.mogo.och.taxi.ui.debug.OrderDebugView
<com.mogo.och.taxi.ui.debug.DebugView
android:id="@+id/orderDebugView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"