[6.0.0] 前后端联调

This commit is contained in:
wangmingjun
2023-08-16 19:45:41 +08:00
parent a179455979
commit a1a500baba
12 changed files with 303 additions and 94 deletions

View File

@@ -0,0 +1,126 @@
package com.mogo.och.common.module.wigets;
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.LinearInterpolator
import android.widget.RelativeLayout
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.och.common.module.R
import kotlinx.android.synthetic.main.start_autopilot_animation_view.view.startAutopilotTip
import kotlinx.android.synthetic.main.start_autopilot_animation_view.view.startAutopilotTipImg
import java.util.concurrent.atomic.AtomicReference
class StartAutopilotAnimationView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : RelativeLayout(context, attrs, defStyleAttr){
companion object {
private const val ALL_CLOSE_TIMER = 5000L
private const val TAG = "V2XWarningView"
}
private val closeWarningTask: Runnable = Runnable {
showWarning(DirectionEnum.ALERT_WARNING_NON)
}
private val oldDirection = AtomicReference<DirectionEnum>()
init {
LayoutInflater.from(context).inflate(R.layout.start_autopilot_animation_view, this, true)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
}
fun show(direction: DirectionEnum, time: Long) {
showWarning(direction, time)
}
fun dismiss(direction: DirectionEnum) {
dismissWarning(direction)
}
/**
* 展示指定方位上的红框预警
* @param direction
* @see WarningDirectionEnum
*/
private fun showWarning(direction: DirectionEnum, time: Long = ALL_CLOSE_TIMER) {
startAutopilotTip.text = direction.desc
// 如果传入的不是关闭显示,则设置倒计时,定时关闭红框警示
if (oldDirection.get() == direction) {
removeCallbacks(closeWarningTask)
postDelayed(closeWarningTask, time)
return
}
if (direction != DirectionEnum.ALERT_WARNING_NON) {
oldDirection.set(direction)
removeCallbacks(closeWarningTask)
postDelayed(closeWarningTask, time)
}
post {
if (direction == DirectionEnum.ALERT_WARNING_TOP){
startAutopilotTipImg.visibility = View.VISIBLE
}
if (direction == DirectionEnum.ALERT_WARNING_NON) {
dismissWarning(DirectionEnum.ALERT_WARNING_TOP)
} else {
val alphaAnimation = AlphaAnimation(0f, 0.88f)
alphaAnimation.duration = 600
alphaAnimation.interpolator = LinearInterpolator()
alphaAnimation.repeatCount = Animation.INFINITE
alphaAnimation.repeatMode = Animation.REVERSE
startAnimation(alphaAnimation)
}
}
}
private fun dismissWarning(direction: DirectionEnum) {
if (direction == DirectionEnum.ALERT_WARNING_NON) {
return
}
removeCallbacks(closeWarningTask)
post {
when (direction) {
DirectionEnum.ALERT_WARNING_TOP -> {
startAutopilotTipImg.visibility = View.GONE
}
else -> {
CallerLogger.d("$M_HMI$TAG", "Not Support Direction")
}
}
clearAnimation()
this.oldDirection.set(null)
}
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
enum class DirectionEnum(
var direction: Int,
var desc: String,
) {
ALERT_WARNING_NON(
0,
"关闭红色边框预警"
),
ALERT_WARNING_TOP(
1,
"正上方"
),
}
}

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="270"
android:endColor="#00FF0606"
android:startColor="#2A6DE7"
android:type="linear"/>
</shape>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--上方闪烁且有文字-->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/startAutopilotTip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="开始自驾"
android:textSize="@dimen/dp_34"
android:textColor="@android:color/white"/>
<ImageView
android:id="@+id/startAutopilotTipImg"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_328"
android:background="@drawable/start_autopilot_animation_bkg_top"
android:visibility="gone"
tools:visibility="invisible" />
</FrameLayout>

View File

@@ -12,7 +12,7 @@ data class OrderDetail(
var orderStatus: Int,
var orderStartSite: Site?,
var orderEndSite: Site?,
var planningLines: Array<Long>,
var planningLines: Array<Long>, //返回的是接驾任务的id集合
var bookingUserPhone: String,
var passengerSize: Int,
var fullMinutes: Int, //到站后返回的总里程 /公里

View File

@@ -107,6 +107,10 @@ object TaxiModel {
private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null //当前任务和订单
/**
* 标定站点的任务, 在没有到站之前, 轮询接口是没有的.
* 到站后, 轮询的任务会显示到站站点为这个虚拟站点,任务状态为到站
*/
private var mUntruthTask: StartServiceRespBean.Result? = null // 前往出车点的伪任务, 后台并不算做真正的任务
private var mOrderContrails: MutableList<ContrailListRespBean.Result>? =

View File

@@ -49,15 +49,12 @@ import java.util.concurrent.TimeUnit
class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
private var mInAndWaitServiceDisposable: Disposable? = null //进行中、待服务订单列表轮询
private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null
private val TAG = "TaxiUnmannedViewModel"
@SuppressLint("StaticFieldLeak")
private var mContext : Context = AbsMogoApplication.getApp().applicationContext
init {
startOrStopOrderLoop(true)
}
override fun initUiState(): UnmannedState {
return UnmannedState(TaskAndOrderUiState.INIT)
}
@@ -65,6 +62,10 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
override fun handleIntent(intent: IUiIntent) {
when(intent) {
is UnmannedIntent.StartTaskOrOrderLooper -> { //开始轮询
startOrStopOrderLoop(true)
}
is UnmannedIntent.StartOrPauseReceivingOrder -> {//开始、暂停接单
updateCarStatus()
}
@@ -124,9 +125,12 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
override fun onSuccess(data: BaseData?) {
TaxiModel.loginService!!.queryLoginStatusByNet()
//需要将虚拟任务停掉, 虚拟任务会再开始接单后获取新的
d(TAG, "set mUntruthSiteTask null")
updateUntruthTaskUI(null)
updateUntruthTask(null)
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null
&& mCurrentTaskAndOrder!!.startSite != null){
VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦")
}else{
VoiceNotice.showNotice("暂停接单啦")
@@ -157,10 +161,19 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
if (data == null || data.code != 0) return
TaxiModel.loginService!!.queryLoginStatusByNet()
VoiceNotice.showNotice("开始接单啦")
//虚拟任务要开启到站围栏
if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.endSite == null){
updateUntruthTask(data.data)
d(TAG, "data.data="+GsonUtil.jsonFromObject(data.data))
if (mCurrentTaskAndOrder == null) return
if (mCurrentTaskAndOrder!!.endSite != null){
if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.CompleteTask.code
&& mCurrentTaskAndOrder!!.order != null){ //有任务, 状态为3, 且有订单
return
}else if (mCurrentTaskAndOrder!!.currentStatus < TaskStatusEnum.CompleteTask.code){
//有任务, 并且未执行完成
return
}
}
updateUntruthTaskUI(data.data)
updateUntruthTask(data.data)
}
override fun onFail(code: Int, msg: String?) {
@@ -216,6 +229,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
private fun updateTaskAndOrderUi() {
d(TAG, "queryCurrentTaskOnce = updateTaskAndOrderUi")
sendUiState {
copy(
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder,
@@ -224,8 +239,18 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
}
private fun updateNoTaskAndOrderUi() {
private fun updateUntruthTaskUI(untruthTask: StartServiceRespBean.Result?) {
d(TAG, "queryCurrentTaskOnce = updateTaskAndOrderUi")
sendUiState {
copy(
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder,
untruthTask)
)
}
}
private fun updateNoTaskAndOrderUi() {
sendUiState {
copy(
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null,
@@ -234,7 +259,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
}
private fun startOrStopOrderLoop(start: Boolean) {
fun startOrStopOrderLoop(start: Boolean) {
d(SceneConstant.M_TAXI + TAG, "startOrStopOrderLoop() $start")
if (start) {
startInAndWaitCurrentTaskLoop()
@@ -253,9 +278,10 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
val result = data.data
d(TAG, "queryCurrentTaskOnce = result = ," + GsonUtil.jsonFromObject(result))
d(TAG, "queryCurrentTaskOnce = result = " + GsonUtil.jsonFromObject(result))
d(TAG, "queryCurrentTaskOnce = mCurrentTaskAndOrder = " + GsonUtil.jsonFromObject(mCurrentTaskAndOrder))
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.equals(result)) return
if (result!!.endSite == null && mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order!= null) {
//本地根据订单 orderNo 去查询下(乘客取消订单)
@@ -263,29 +289,32 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
return
}
if (result.endSite == null && result.order == null){
mCurrentTaskAndOrder = null
updateNoTaskAndOrderUi()
TaxiModel.updateCurrentTaskAndOrder(null)
//订单或者伪任务更新, 都去刷新下界面
if (mCurrentTaskAndOrder == null || !mCurrentTaskAndOrder!!.equals(result)){
if (result.endSite == null && result.order == null){
mCurrentTaskAndOrder = null
updateNoTaskAndOrderUi()
TaxiModel.updateCurrentTaskAndOrder(null)
}
if (result.currentStatus == TaskStatusEnum.CompleteTask.code){
startPrepareTask(result.endSite!!.siteId)
}
mCurrentTaskAndOrder = result
//根据lineId集合去查轨迹集合
if (result.order != null && result.taskType == TaskTypeEnum.ToOrderStartTask.code){
queryOrderPickUpConertrail(result.order!!.planningLines)
}
TaxiModel.updateCurrentTaskAndOrder(result)
TaxiModel.updateStation()
updateTaskAndOrderUi()
}
if (result.currentStatus == TaskStatusEnum.CompleteTask.code
&& result.endSite != null){
startPrepareTask(result.endSite!!.siteId)
}
mCurrentTaskAndOrder = result
//根据lineId集合去查轨迹集合
if (result.order != null){
queryOrderContrails(result.order!!.planningLines)
}
TaxiModel.updateCurrentTaskAndOrder(result)
TaxiModel.updateStation()
updateTaskAndOrderUi()
}
override fun onFail(code: Int, msg: String?) {
@@ -296,10 +325,10 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
/**
* 查询接驾/送驾任务轨迹集合
* 查询送驾任务轨迹集合
* 注: 运营单刚来的时候, 有可能还在运行一个演练任务, 要先跑完演练任务才跑运营单
*/
private fun queryOrderContrails(planningLines: Array<Long>?) {
private fun queryOrderPickUpConertrail(planningLines: Array<Long>?) {
if (planningLines == null) return
contrailList(mContext,planningLines,
object : OchCommonServiceCallback<ContrailListRespBean>{
@@ -326,18 +355,20 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
if (data != null && data.code != 0) return
if (data!!.orderStatus == TaxiOrderStatusEnum.Cancel.code){
VoiceNotice.showNotice("乘客已经取消")
mCurrentTaskAndOrder?.order?.orderStatus = TaxiOrderStatusEnum.Cancel.code
updateTaskAndOrderUi()
// mCurrentTaskAndOrder?.order?.orderStatus = TaxiOrderStatusEnum.Cancel.code
mCurrentTaskAndOrder = null
updateTaskAndOrderUi()
return
}
if (data.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code){//到站
mCurrentTaskAndOrder?.order?.fullMileage = data.mileage
mCurrentTaskAndOrder?.order?.fullMinutes = data.duration
updateTaskAndOrderUi()
updateOrderMileAndDur(data.mileage,data.duration)
return
}
if (data.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.code){//到站
if (data.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.code){//完成
//获取新的任务
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){
startPrepareTask(mCurrentTaskAndOrder!!.endSite!!.siteId)
}
mCurrentTaskAndOrder = null
updateNoTaskAndOrderUi()
return
@@ -351,7 +382,18 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
})
}
fun startPrepareTask(siteId: Long) {
private fun updateOrderMileAndDur(mileage: Float, duration: Int) {
d(TAG, "queryCurrentTaskOnce = updateTaskAndOrderUi")
sendUiState {
copy(
taskAndOrderUiState = TaskAndOrderUiState.UPDATEORDERMILEANDDUR(mileage,
duration)
)
}
}
private fun startPrepareTask(siteId: Long) {
UiThreadHandler.postDelayed({
CarServiceManager.prepareTask(
mContext,
@@ -361,7 +403,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data))
if (data == null || data.code != 0) return
//去下载轨迹, 下发给工控机下载
queryOrderContrails(Array(1) { data.lineId })
queryOrderPickUpConertrail(Array(1) { data.lineId })
}
override fun onFail(code: Int, msg: String?) {

View File

@@ -107,6 +107,8 @@ class TaxiBeingTaskFragment : BaseFragment(),
@RequiresApi(Build.VERSION_CODES.N)
private fun initData() {
mViewModel.sendUiIntent(UnmannedIntent.StartTaskOrOrderLooper)
//监听返回的数据状态
lifecycleScope.launchWhenStarted {
mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {taskAndOrderUiState ->
@@ -130,14 +132,37 @@ class TaxiBeingTaskFragment : BaseFragment(),
if (taskAndOrderUiState.untruthTask != null){
updateUntruthTask(taskAndOrderUiState.untruthTask)
}else{
updateReserveOrderChanged(taskAndOrderUiState.taskAndOrder)
updateCurrentOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
}
}
is TaskAndOrderUiState.UPDATEORDERMILEANDDUR -> {
updateOrderTotalMilAndDur(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)
}
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)
@@ -214,8 +239,8 @@ class TaxiBeingTaskFragment : BaseFragment(),
return
}
if (taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code &&
taskAndOrder.startSite == null){
if (taskAndOrder.currentStatus == TaskStatusEnum.CompleteTask.code
&& taskAndOrder.order == null && taskAndOrder.endSite == null){
isHaveBeingOrder(false)
return
}
@@ -285,11 +310,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
TaxiOrderStatusEnum.ArriveAtEnd.code -> { //到达目的地
taskStatus.text = resources.getString(R.string.task_start_end_site)
val strHtml2 =
("<font color=\"#CAD6FF\">里程 </font>" + "<font color=\"#FFFFFF\"> ${order.fullMileage} </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<font color=\"#FFFFFF\"> ${order.fullMinutes} </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
updateOrderBottomBtn(
getString(R.string.module_och_taxi_order_server_end),
Color.parseColor("#FFFFFF"),
@@ -818,6 +838,11 @@ class TaxiBeingTaskFragment : BaseFragment(),
taskClickBtn.isClickable = isClickable
}
override fun onDestroy() {
mViewModel.startOrStopOrderLoop(false)
super.onDestroy()
}
/**
* END
*/

View File

@@ -10,7 +10,6 @@ import android.view.ViewGroup
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.fragment.app.FragmentTransaction
import androidx.lifecycle.ViewModelProvider
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.eagle.core.data.temp.EventLogout
@@ -21,11 +20,10 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.provider.LoginService
import com.mogo.och.taxi.R
import com.mogo.och.taxi.base.BaseTaxiTabFragment
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.model.TaxiModel
import com.mogo.och.taxi.model.TaxiUnmannedViewModel
import com.mogo.och.taxi.network.LoginBusImpl
import com.mogo.och.taxi.presenter.TaxiPresenter
import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
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
@@ -43,7 +41,6 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
private var serverOrdersFragmentWR: WeakReference<TaxiServerOrdersFragment>? = null
private var personalDialogFragment: WeakReference<TaxiPersonalDialogFragment>? = null
private var loginService: LoginService? = null
private lateinit var mViewModel : TaxiUnmannedViewModel
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
@@ -54,11 +51,6 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(TaxiUnmannedViewModel::class.java)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -115,7 +107,13 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
override fun onChangeOperationStatus() {
super.onChangeOperationStatus()
mViewModel.sendUiIntent(UnmannedIntent.StartOrPauseReceivingOrder)
if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return
serverOrdersFragmentWR!!.get()!!.onChangeOperationStatus()
}
fun updateReserveOrderChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?){
if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return
serverOrdersFragmentWR!!.get()!!.updateOrderChanged(taskAndOrder)
}
fun switchVRFlatMode(isVRMode: Boolean) {

View File

@@ -7,16 +7,11 @@ import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
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.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
@@ -28,7 +23,6 @@ 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
/**
* @author: wangmingjun
@@ -36,11 +30,9 @@ import kotlinx.coroutines.flow.map
*/
class TaxiReserveOrderFragment : BaseFragment() {
private val mData: MutableList<QueryCurrentTaskRespBean.Result> = ArrayList()
private lateinit var mViewModel : TaxiUnmannedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(TaxiUnmannedViewModel::class.java)
}
override fun getLayoutId(): Int {
@@ -51,33 +43,10 @@ class TaxiReserveOrderFragment : BaseFragment() {
return "TaxiReserveOrderFragment"
}
override fun onAttach(context: Context) {
super.onAttach(context)
}
override fun initViews() {
initData()
}
private fun initData() {
//监听返回的数据状态
lifecycleScope.launchWhenStarted {
mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {state ->
CallerLogger.d(TAG, "uiStateFlow: $state")
when(state){
is TaskAndOrderUiState.INIT -> {
}
is TaskAndOrderUiState.TASKANDORDER -> {
updateOrderChanged(state.taskAndOrder)
}
}
}
}
}
private fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
if (model == null) return
if (model.order == null || model.taskType != TaskTypeEnum.ToOrderStartTask.code){
showNoOrderView()

View File

@@ -18,6 +18,7 @@ import com.mogo.commons.mvp.BaseFragment
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.taxi.R
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import kotlinx.android.synthetic.main.taxi_server_orders_panel.module_och_taxi_tab
import kotlinx.android.synthetic.main.taxi_server_orders_panel.module_och_taxi_view_pager
import me.jessyan.autosize.utils.AutoSizeUtils
@@ -163,6 +164,16 @@ class TaxiServerOrdersFragment : BaseFragment(){
beingTaskFragment!!.updateDistanceAndTime(meters, timeInSecond)
}
fun onChangeOperationStatus(){
if (null == beingTaskFragment) return
beingTaskFragment!!.onChangeOperationStatus()
}
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?){
if (null == reserveOrdersFragment) return
reserveOrdersFragment!!.updateOrderChanged(model)
}
companion object {
const val TAG = "TaxiServerOrdersFragment"
fun newInstance(): TaxiServerOrdersFragment {

View File

@@ -11,6 +11,8 @@ sealed class UnmannedIntent: IUiIntent{
//开始接单 、 暂停接单
object StartOrPauseReceivingOrder : UnmannedIntent()
object StartTaskOrOrderLooper : UnmannedIntent()
//取消订单
class CancelOrder(type: Int, reason: String) : UnmannedIntent()

View File

@@ -10,4 +10,6 @@ data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiStat
sealed class TaskAndOrderUiState {
object INIT : TaskAndOrderUiState()
data class TASKANDORDER(val taskAndOrder: QueryCurrentTaskRespBean.Result?, val untruthTask: StartServiceRespBean.Result?) : TaskAndOrderUiState()//演练任务、接驾、送驾任务
data class UPDATEORDERMILEANDDUR(val mileage: Float, val duration: Int): TaskAndOrderUiState()
}